summaryrefslogtreecommitdiffstats
path: root/Smoke/GLUT
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2007-09-19 13:27:29 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2007-09-19 13:27:29 (GMT)
commit353c37683e2708a1e4c23adddb7d706354947c2d (patch)
tree653f8f4338eb2eba7405b60eb57ca4f5e8a118f4 /Smoke/GLUT
download2iv35-353c37683e2708a1e4c23adddb7d706354947c2d.zip
2iv35-353c37683e2708a1e4c23adddb7d706354947c2d.tar.gz
2iv35-353c37683e2708a1e4c23adddb7d706354947c2d.tar.bz2
Initial import of Smoke application
Diffstat (limited to 'Smoke/GLUT')
-rw-r--r--Smoke/GLUT/GL/glut.h716
-rw-r--r--Smoke/GLUT/README-win32.txt613
-rw-r--r--Smoke/GLUT/glut.def126
-rw-r--r--Smoke/GLUT/glut32.libbin0 -> 28728 bytes
4 files changed, 1455 insertions, 0 deletions
diff --git a/Smoke/GLUT/GL/glut.h b/Smoke/GLUT/GL/glut.h
new file mode 100644
index 0000000..aa7428f
--- /dev/null
+++ b/Smoke/GLUT/GL/glut.h
@@ -0,0 +1,716 @@
+#ifndef __glut_h__
+#define __glut_h__
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. */
+
+/* This program is freely distributable without licensing fees and is
+ provided without guarantee or warrantee expressed or implied. This
+ program is -not- in the public domain. */
+
+#if defined(_WIN32)
+
+/* GLUT 3.7 now tries to avoid including <windows.h>
+ to avoid name space pollution, but Win32's <GL/gl.h>
+ needs APIENTRY and WINGDIAPI defined properly. */
+# if 0
+ /* This would put tons of macros and crap in our clean name space. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# else
+ /* XXX This is from Win32's <windef.h> */
+# ifndef APIENTRY
+# define GLUT_APIENTRY_DEFINED
+# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__)
+# define APIENTRY __stdcall
+# else
+# define APIENTRY
+# endif
+# endif
+ /* XXX This is from Win32's <winnt.h> */
+# ifndef CALLBACK
+# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) || defined(__LCC__)
+# define CALLBACK __stdcall
+# else
+# define CALLBACK
+# endif
+# endif
+ /* XXX Hack for lcc compiler. It doesn't support __declspec(dllimport), just __stdcall. */
+# if defined( __LCC__ )
+# undef WINGDIAPI
+# define WINGDIAPI __stdcall
+# else
+ /* XXX This is from Win32's <wingdi.h> and <winnt.h> */
+# ifndef WINGDIAPI
+# define GLUT_WINGDIAPI_DEFINED
+# define WINGDIAPI __declspec(dllimport)
+# endif
+# endif
+ /* XXX This is from Win32's <ctype.h> */
+# ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+# define _WCHAR_T_DEFINED
+# endif
+# endif
+
+/* To disable automatic library usage for GLUT, define GLUT_NO_LIB_PRAGMA
+ in your compile preprocessor options. */
+# if !defined(GLUT_BUILDING_LIB) && !defined(GLUT_NO_LIB_PRAGMA)
+# pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
+/* To enable automatic SGI OpenGL for Windows library usage for GLUT,
+ define GLUT_USE_SGI_OPENGL in your compile preprocessor options. */
+# ifdef GLUT_USE_SGI_OPENGL
+# pragma comment (lib, "opengl.lib") /* link with SGI OpenGL for Windows lib */
+# pragma comment (lib, "glu.lib") /* link with SGI OpenGL Utility lib */
+# pragma comment (lib, "glut.lib") /* link with Win32 GLUT for SGI OpenGL lib */
+# else
+# pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
+# pragma comment (lib, "glu32.lib") /* link with Microsoft OpenGL Utility lib */
+# pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
+# endif
+# endif
+
+/* To disable supression of annoying warnings about floats being promoted
+ to doubles, define GLUT_NO_WARNING_DISABLE in your compile preprocessor
+ options. */
+# ifndef GLUT_NO_WARNING_DISABLE
+# pragma warning (disable:4244) /* Disable bogus VC++ 4.2 conversion warnings. */
+# pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
+# endif
+
+/* Win32 has an annoying issue where there are multiple C run-time
+ libraries (CRTs). If the executable is linked with a different CRT
+ from the GLUT DLL, the GLUT DLL will not share the same CRT static
+ data seen by the executable. In particular, atexit callbacks registered
+ in the executable will not be called if GLUT calls its (different)
+ exit routine). GLUT is typically built with the
+ "/MD" option (the CRT with multithreading DLL support), but the Visual
+ C++ linker default is "/ML" (the single threaded CRT).
+
+ One workaround to this issue is requiring users to always link with
+ the same CRT as GLUT is compiled with. That requires users supply a
+ non-standard option. GLUT 3.7 has its own built-in workaround where
+ the executable's "exit" function pointer is covertly passed to GLUT.
+ GLUT then calls the executable's exit function pointer to ensure that
+ any "atexit" calls registered by the application are called if GLUT
+ needs to exit.
+
+ Note that the __glut*WithExit routines should NEVER be called directly.
+ To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+
+/* XXX This is from Win32's <process.h> */
+# if !defined(_MSC_VER) && !defined(__cdecl)
+ /* Define __cdecl for non-Microsoft compilers. */
+# define __cdecl
+# define GLUT_DEFINED___CDECL
+# endif
+# ifndef _CRTIMP
+# ifdef _NTSDK
+ /* Definition compatible with NT SDK */
+# define _CRTIMP
+# else
+ /* Current definition */
+# ifdef _DLL
+# define _CRTIMP __declspec(dllimport)
+# else
+# define _CRTIMP
+# endif
+# endif
+# define GLUT_DEFINED__CRTIMP
+# endif
+
+/* GLUT API entry point declarations for Win32. */
+# ifdef GLUT_BUILDING_LIB
+# define GLUTAPI __declspec(dllexport)
+# else
+# ifdef _DLL
+# define GLUTAPI __declspec(dllimport)
+# else
+# define GLUTAPI extern
+# endif
+# endif
+
+/* GLUT callback calling convention for Win32. */
+# define GLUTCALLBACK __cdecl
+
+#endif /* _WIN32 */
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_WIN32)
+# ifndef GLUT_BUILDING_LIB
+extern _CRTIMP void __cdecl exit(int);
+# endif
+#else
+/* non-Win32 case. */
+/* Define APIENTRY and CALLBACK to nothing if we aren't on Win32. */
+# define APIENTRY
+# define GLUT_APIENTRY_DEFINED
+# define CALLBACK
+/* Define GLUTAPI and GLUTCALLBACK as below if we aren't on Win32. */
+# define GLUTAPI extern
+# define GLUTCALLBACK
+/* Prototype exit for the non-Win32 case (see above). */
+extern void exit(int);
+#endif
+
+/**
+ GLUT API revision history:
+
+ GLUT_API_VERSION is updated to reflect incompatible GLUT
+ API changes (interface changes, semantic changes, deletions,
+ or additions).
+
+ GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
+
+ GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
+ extension. Supports new input devices like tablet, dial and button
+ box, and Spaceball. Easy to query OpenGL extensions.
+
+ GLUT_API_VERSION=3 glutMenuStatus added.
+
+ GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
+ glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
+ video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
+ glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
+ glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
+**/
+#ifndef GLUT_API_VERSION /* allow this to be overriden */
+#define GLUT_API_VERSION 3
+#endif
+
+/**
+ GLUT implementation revision history:
+
+ GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
+ API revisions and implementation revisions (ie, bug fixes).
+
+ GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
+ GLUT Xlib-based implementation. 11/29/94
+
+ GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
+ GLUT Xlib-based implementation providing GLUT version 2
+ interfaces.
+
+ GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
+
+ GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
+
+ GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
+ and video resize. 1/3/97
+
+ GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
+
+ GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
+
+ GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
+
+ GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
+
+ GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
+
+ GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
+**/
+#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */
+#define GLUT_XLIB_IMPLEMENTATION 15
+#endif
+
+/* Display mode bit masks. */
+#define GLUT_RGB 0
+#define GLUT_RGBA GLUT_RGB
+#define GLUT_INDEX 1
+#define GLUT_SINGLE 0
+#define GLUT_DOUBLE 2
+#define GLUT_ACCUM 4
+#define GLUT_ALPHA 8
+#define GLUT_DEPTH 16
+#define GLUT_STENCIL 32
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_MULTISAMPLE 128
+#define GLUT_STEREO 256
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_LUMINANCE 512
+#endif
+
+/* Mouse buttons. */
+#define GLUT_LEFT_BUTTON 0
+#define GLUT_MIDDLE_BUTTON 1
+#define GLUT_RIGHT_BUTTON 2
+
+/* Mouse button state. */
+#define GLUT_DOWN 0
+#define GLUT_UP 1
+
+#if (GLUT_API_VERSION >= 2)
+/* function keys */
+#define GLUT_KEY_F1 1
+#define GLUT_KEY_F2 2
+#define GLUT_KEY_F3 3
+#define GLUT_KEY_F4 4
+#define GLUT_KEY_F5 5
+#define GLUT_KEY_F6 6
+#define GLUT_KEY_F7 7
+#define GLUT_KEY_F8 8
+#define GLUT_KEY_F9 9
+#define GLUT_KEY_F10 10
+#define GLUT_KEY_F11 11
+#define GLUT_KEY_F12 12
+/* directional keys */
+#define GLUT_KEY_LEFT 100
+#define GLUT_KEY_UP 101
+#define GLUT_KEY_RIGHT 102
+#define GLUT_KEY_DOWN 103
+#define GLUT_KEY_PAGE_UP 104
+#define GLUT_KEY_PAGE_DOWN 105
+#define GLUT_KEY_HOME 106
+#define GLUT_KEY_END 107
+#define GLUT_KEY_INSERT 108
+#endif
+
+/* Entry/exit state. */
+#define GLUT_LEFT 0
+#define GLUT_ENTERED 1
+
+/* Menu usage state. */
+#define GLUT_MENU_NOT_IN_USE 0
+#define GLUT_MENU_IN_USE 1
+
+/* Visibility state. */
+#define GLUT_NOT_VISIBLE 0
+#define GLUT_VISIBLE 1
+
+/* Window status state. */
+#define GLUT_HIDDEN 0
+#define GLUT_FULLY_RETAINED 1
+#define GLUT_PARTIALLY_RETAINED 2
+#define GLUT_FULLY_COVERED 3
+
+/* Color index component selection values. */
+#define GLUT_RED 0
+#define GLUT_GREEN 1
+#define GLUT_BLUE 2
+
+#if defined(_WIN32)
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN ((void*)0)
+#define GLUT_STROKE_MONO_ROMAN ((void*)1)
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15 ((void*)2)
+#define GLUT_BITMAP_8_BY_13 ((void*)3)
+#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4)
+#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10 ((void*)6)
+#define GLUT_BITMAP_HELVETICA_12 ((void*)7)
+#define GLUT_BITMAP_HELVETICA_18 ((void*)8)
+#endif
+#else
+/* Stroke font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutStrokeRoman;
+GLUTAPI void *glutStrokeMonoRoman;
+
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN (&glutStrokeRoman)
+#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
+
+/* Bitmap font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutBitmap9By15;
+GLUTAPI void *glutBitmap8By13;
+GLUTAPI void *glutBitmapTimesRoman10;
+GLUTAPI void *glutBitmapTimesRoman24;
+GLUTAPI void *glutBitmapHelvetica10;
+GLUTAPI void *glutBitmapHelvetica12;
+GLUTAPI void *glutBitmapHelvetica18;
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
+#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
+#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
+#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
+#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
+#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
+#endif
+#endif
+
+/* glutGet parameters. */
+#define GLUT_WINDOW_X ((GLenum) 100)
+#define GLUT_WINDOW_Y ((GLenum) 101)
+#define GLUT_WINDOW_WIDTH ((GLenum) 102)
+#define GLUT_WINDOW_HEIGHT ((GLenum) 103)
+#define GLUT_WINDOW_BUFFER_SIZE ((GLenum) 104)
+#define GLUT_WINDOW_STENCIL_SIZE ((GLenum) 105)
+#define GLUT_WINDOW_DEPTH_SIZE ((GLenum) 106)
+#define GLUT_WINDOW_RED_SIZE ((GLenum) 107)
+#define GLUT_WINDOW_GREEN_SIZE ((GLenum) 108)
+#define GLUT_WINDOW_BLUE_SIZE ((GLenum) 109)
+#define GLUT_WINDOW_ALPHA_SIZE ((GLenum) 110)
+#define GLUT_WINDOW_ACCUM_RED_SIZE ((GLenum) 111)
+#define GLUT_WINDOW_ACCUM_GREEN_SIZE ((GLenum) 112)
+#define GLUT_WINDOW_ACCUM_BLUE_SIZE ((GLenum) 113)
+#define GLUT_WINDOW_ACCUM_ALPHA_SIZE ((GLenum) 114)
+#define GLUT_WINDOW_DOUBLEBUFFER ((GLenum) 115)
+#define GLUT_WINDOW_RGBA ((GLenum) 116)
+#define GLUT_WINDOW_PARENT ((GLenum) 117)
+#define GLUT_WINDOW_NUM_CHILDREN ((GLenum) 118)
+#define GLUT_WINDOW_COLORMAP_SIZE ((GLenum) 119)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_WINDOW_NUM_SAMPLES ((GLenum) 120)
+#define GLUT_WINDOW_STEREO ((GLenum) 121)
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_WINDOW_CURSOR ((GLenum) 122)
+#endif
+#define GLUT_SCREEN_WIDTH ((GLenum) 200)
+#define GLUT_SCREEN_HEIGHT ((GLenum) 201)
+#define GLUT_SCREEN_WIDTH_MM ((GLenum) 202)
+#define GLUT_SCREEN_HEIGHT_MM ((GLenum) 203)
+#define GLUT_MENU_NUM_ITEMS ((GLenum) 300)
+#define GLUT_DISPLAY_MODE_POSSIBLE ((GLenum) 400)
+#define GLUT_INIT_WINDOW_X ((GLenum) 500)
+#define GLUT_INIT_WINDOW_Y ((GLenum) 501)
+#define GLUT_INIT_WINDOW_WIDTH ((GLenum) 502)
+#define GLUT_INIT_WINDOW_HEIGHT ((GLenum) 503)
+#define GLUT_INIT_DISPLAY_MODE ((GLenum) 504)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_ELAPSED_TIME ((GLenum) 700)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_WINDOW_FORMAT_ID ((GLenum) 123)
+#endif
+
+#if (GLUT_API_VERSION >= 2)
+/* glutDeviceGet parameters. */
+#define GLUT_HAS_KEYBOARD ((GLenum) 600)
+#define GLUT_HAS_MOUSE ((GLenum) 601)
+#define GLUT_HAS_SPACEBALL ((GLenum) 602)
+#define GLUT_HAS_DIAL_AND_BUTTON_BOX ((GLenum) 603)
+#define GLUT_HAS_TABLET ((GLenum) 604)
+#define GLUT_NUM_MOUSE_BUTTONS ((GLenum) 605)
+#define GLUT_NUM_SPACEBALL_BUTTONS ((GLenum) 606)
+#define GLUT_NUM_BUTTON_BOX_BUTTONS ((GLenum) 607)
+#define GLUT_NUM_DIALS ((GLenum) 608)
+#define GLUT_NUM_TABLET_BUTTONS ((GLenum) 609)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_DEVICE_IGNORE_KEY_REPEAT ((GLenum) 610)
+#define GLUT_DEVICE_KEY_REPEAT ((GLenum) 611)
+#define GLUT_HAS_JOYSTICK ((GLenum) 612)
+#define GLUT_OWNS_JOYSTICK ((GLenum) 613)
+#define GLUT_JOYSTICK_BUTTONS ((GLenum) 614)
+#define GLUT_JOYSTICK_AXES ((GLenum) 615)
+#define GLUT_JOYSTICK_POLL_RATE ((GLenum) 616)
+#endif
+
+#if (GLUT_API_VERSION >= 3)
+/* glutLayerGet parameters. */
+#define GLUT_OVERLAY_POSSIBLE ((GLenum) 800)
+#define GLUT_LAYER_IN_USE ((GLenum) 801)
+#define GLUT_HAS_OVERLAY ((GLenum) 802)
+#define GLUT_TRANSPARENT_INDEX ((GLenum) 803)
+#define GLUT_NORMAL_DAMAGED ((GLenum) 804)
+#define GLUT_OVERLAY_DAMAGED ((GLenum) 805)
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* glutVideoResizeGet parameters. */
+#define GLUT_VIDEO_RESIZE_POSSIBLE ((GLenum) 900)
+#define GLUT_VIDEO_RESIZE_IN_USE ((GLenum) 901)
+#define GLUT_VIDEO_RESIZE_X_DELTA ((GLenum) 902)
+#define GLUT_VIDEO_RESIZE_Y_DELTA ((GLenum) 903)
+#define GLUT_VIDEO_RESIZE_WIDTH_DELTA ((GLenum) 904)
+#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA ((GLenum) 905)
+#define GLUT_VIDEO_RESIZE_X ((GLenum) 906)
+#define GLUT_VIDEO_RESIZE_Y ((GLenum) 907)
+#define GLUT_VIDEO_RESIZE_WIDTH ((GLenum) 908)
+#define GLUT_VIDEO_RESIZE_HEIGHT ((GLenum) 909)
+#endif
+
+/* glutUseLayer parameters. */
+#define GLUT_NORMAL ((GLenum) 0)
+#define GLUT_OVERLAY ((GLenum) 1)
+
+/* glutGetModifiers return mask. */
+#define GLUT_ACTIVE_SHIFT 1
+#define GLUT_ACTIVE_CTRL 2
+#define GLUT_ACTIVE_ALT 4
+
+/* glutSetCursor parameters. */
+/* Basic arrows. */
+#define GLUT_CURSOR_RIGHT_ARROW 0
+#define GLUT_CURSOR_LEFT_ARROW 1
+/* Symbolic cursor shapes. */
+#define GLUT_CURSOR_INFO 2
+#define GLUT_CURSOR_DESTROY 3
+#define GLUT_CURSOR_HELP 4
+#define GLUT_CURSOR_CYCLE 5
+#define GLUT_CURSOR_SPRAY 6
+#define GLUT_CURSOR_WAIT 7
+#define GLUT_CURSOR_TEXT 8
+#define GLUT_CURSOR_CROSSHAIR 9
+/* Directional cursors. */
+#define GLUT_CURSOR_UP_DOWN 10
+#define GLUT_CURSOR_LEFT_RIGHT 11
+/* Sizing cursors. */
+#define GLUT_CURSOR_TOP_SIDE 12
+#define GLUT_CURSOR_BOTTOM_SIDE 13
+#define GLUT_CURSOR_LEFT_SIDE 14
+#define GLUT_CURSOR_RIGHT_SIDE 15
+#define GLUT_CURSOR_TOP_LEFT_CORNER 16
+#define GLUT_CURSOR_TOP_RIGHT_CORNER 17
+#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18
+#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19
+/* Inherit from parent window. */
+#define GLUT_CURSOR_INHERIT 100
+/* Blank cursor. */
+#define GLUT_CURSOR_NONE 101
+/* Fullscreen crosshair (if available). */
+#define GLUT_CURSOR_FULL_CROSSHAIR 102
+#endif
+
+/* GLUT initialization sub-API. */
+GLUTAPI void APIENTRY glutInit(int *argcp, char **argv);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
+#define glutInit glutInit_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutInitDisplayMode(unsigned int mode);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutInitDisplayString(const char *string);
+#endif
+GLUTAPI void APIENTRY glutInitWindowPosition(int x, int y);
+GLUTAPI void APIENTRY glutInitWindowSize(int width, int height);
+GLUTAPI void APIENTRY glutMainLoop(void);
+
+/* GLUT window sub-API. */
+GLUTAPI int APIENTRY glutCreateWindow(const char *title);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
+#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutDestroyWindow(int win);
+GLUTAPI void APIENTRY glutPostRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutSwapBuffers(void);
+GLUTAPI int APIENTRY glutGetWindow(void);
+GLUTAPI void APIENTRY glutSetWindow(int win);
+GLUTAPI void APIENTRY glutSetWindowTitle(const char *title);
+GLUTAPI void APIENTRY glutSetIconTitle(const char *title);
+GLUTAPI void APIENTRY glutPositionWindow(int x, int y);
+GLUTAPI void APIENTRY glutReshapeWindow(int width, int height);
+GLUTAPI void APIENTRY glutPopWindow(void);
+GLUTAPI void APIENTRY glutPushWindow(void);
+GLUTAPI void APIENTRY glutIconifyWindow(void);
+GLUTAPI void APIENTRY glutShowWindow(void);
+GLUTAPI void APIENTRY glutHideWindow(void);
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutFullScreen(void);
+GLUTAPI void APIENTRY glutSetCursor(int cursor);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWarpPointer(int x, int y);
+#endif
+
+/* GLUT overlay sub-API. */
+GLUTAPI void APIENTRY glutEstablishOverlay(void);
+GLUTAPI void APIENTRY glutRemoveOverlay(void);
+GLUTAPI void APIENTRY glutUseLayer(GLenum layer);
+GLUTAPI void APIENTRY glutPostOverlayRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowOverlayRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutShowOverlay(void);
+GLUTAPI void APIENTRY glutHideOverlay(void);
+#endif
+
+/* GLUT menu sub-API. */
+GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int));
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
+#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutDestroyMenu(int menu);
+GLUTAPI int APIENTRY glutGetMenu(void);
+GLUTAPI void APIENTRY glutSetMenu(int menu);
+GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value);
+GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu);
+GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
+GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
+GLUTAPI void APIENTRY glutRemoveMenuItem(int item);
+GLUTAPI void APIENTRY glutAttachMenu(int button);
+GLUTAPI void APIENTRY glutDetachMenu(int button);
+
+/* GLUT window callback sub-API. */
+GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
+GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value);
+GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state));
+#if (GLUT_API_VERSION >= 2)
+GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value));
+GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y));
+GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void));
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state));
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
+#endif
+#endif
+#endif
+
+/* GLUT color index sub-API. */
+GLUTAPI void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+GLUTAPI GLfloat APIENTRY glutGetColor(int ndx, int component);
+GLUTAPI void APIENTRY glutCopyColormap(int win);
+
+/* GLUT state retrieval sub-API. */
+GLUTAPI int APIENTRY glutGet(GLenum type);
+GLUTAPI int APIENTRY glutDeviceGet(GLenum type);
+#if (GLUT_API_VERSION >= 2)
+/* GLUT extension support sub-API */
+GLUTAPI int APIENTRY glutExtensionSupported(const char *name);
+#endif
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI int APIENTRY glutGetModifiers(void);
+GLUTAPI int APIENTRY glutLayerGet(GLenum type);
+#endif
+
+/* GLUT font sub-API */
+GLUTAPI void APIENTRY glutBitmapCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutBitmapWidth(void *font, int character);
+GLUTAPI void APIENTRY glutStrokeCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutStrokeWidth(void *font, int character);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
+GLUTAPI int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
+#endif
+
+/* GLUT pre-built models sub-API */
+GLUTAPI void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCube(GLdouble size);
+GLUTAPI void APIENTRY glutSolidCube(GLdouble size);
+GLUTAPI void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutWireDodecahedron(void);
+GLUTAPI void APIENTRY glutSolidDodecahedron(void);
+GLUTAPI void APIENTRY glutWireTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutSolidTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutWireOctahedron(void);
+GLUTAPI void APIENTRY glutSolidOctahedron(void);
+GLUTAPI void APIENTRY glutWireTetrahedron(void);
+GLUTAPI void APIENTRY glutSolidTetrahedron(void);
+GLUTAPI void APIENTRY glutWireIcosahedron(void);
+GLUTAPI void APIENTRY glutSolidIcosahedron(void);
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* GLUT video resize sub-API. */
+GLUTAPI int APIENTRY glutVideoResizeGet(GLenum param);
+GLUTAPI void APIENTRY glutSetupVideoResizing(void);
+GLUTAPI void APIENTRY glutStopVideoResizing(void);
+GLUTAPI void APIENTRY glutVideoResize(int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutVideoPan(int x, int y, int width, int height);
+
+/* GLUT debugging sub-API. */
+GLUTAPI void APIENTRY glutReportErrors(void);
+#endif
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+/* GLUT device control sub-API. */
+/* glutSetKeyRepeat modes. */
+#define GLUT_KEY_REPEAT_OFF 0
+#define GLUT_KEY_REPEAT_ON 1
+#define GLUT_KEY_REPEAT_DEFAULT 2
+
+/* Joystick button masks. */
+#define GLUT_JOYSTICK_BUTTON_A 1
+#define GLUT_JOYSTICK_BUTTON_B 2
+#define GLUT_JOYSTICK_BUTTON_C 4
+#define GLUT_JOYSTICK_BUTTON_D 8
+
+GLUTAPI void APIENTRY glutIgnoreKeyRepeat(int ignore);
+GLUTAPI void APIENTRY glutSetKeyRepeat(int repeatMode);
+GLUTAPI void APIENTRY glutForceJoystickFunc(void);
+
+/* GLUT game mode sub-API. */
+/* glutGameModeGet. */
+#define GLUT_GAME_MODE_ACTIVE ((GLenum) 0)
+#define GLUT_GAME_MODE_POSSIBLE ((GLenum) 1)
+#define GLUT_GAME_MODE_WIDTH ((GLenum) 2)
+#define GLUT_GAME_MODE_HEIGHT ((GLenum) 3)
+#define GLUT_GAME_MODE_PIXEL_DEPTH ((GLenum) 4)
+#define GLUT_GAME_MODE_REFRESH_RATE ((GLenum) 5)
+#define GLUT_GAME_MODE_DISPLAY_CHANGED ((GLenum) 6)
+
+GLUTAPI void APIENTRY glutGameModeString(const char *string);
+GLUTAPI int APIENTRY glutEnterGameMode(void);
+GLUTAPI void APIENTRY glutLeaveGameMode(void);
+GLUTAPI int APIENTRY glutGameModeGet(GLenum mode);
+#endif
+
+#ifdef __cplusplus
+}
+
+#endif
+
+#ifdef GLUT_APIENTRY_DEFINED
+# undef GLUT_APIENTRY_DEFINED
+# undef APIENTRY
+#endif
+
+#ifdef GLUT_WINGDIAPI_DEFINED
+# undef GLUT_WINGDIAPI_DEFINED
+# undef WINGDIAPI
+#endif
+
+#ifdef GLUT_DEFINED___CDECL
+# undef GLUT_DEFINED___CDECL
+# undef __cdecl
+#endif
+
+#ifdef GLUT_DEFINED__CRTIMP
+# undef GLUT_DEFINED__CRTIMP
+# undef _CRTIMP
+#endif
+
+#endif /* __glut_h__ */
diff --git a/Smoke/GLUT/README-win32.txt b/Smoke/GLUT/README-win32.txt
new file mode 100644
index 0000000..67c8d41
--- /dev/null
+++ b/Smoke/GLUT/README-win32.txt
@@ -0,0 +1,613 @@
+
+
+ GLUT for Win32 README
+ ---------------------
+
+
+VERSION/INFO:
+
+ This is GLUT for Win32 version 3.7.6 as of Nov 8th 2001.
+ See the COPYRIGHT section for distribution and copyright notices.
+ Send all bug reports and questions for this version of GLUT to
+ Nate Robins [nate@pobox.com].
+
+ For more information about GLUT for Win32, see the web page:
+ www.pobox.com/~nate/glut.html or subscribe to the GLUT for Win32
+ mailing list by sending e-mail to majordomo@perp.com with
+ "subscribe glut" in the body of the message.
+
+ For general information about GLUT, see the GLUT web page:
+ http://reality.sgi.com/opengl/glut3/glut3.html and be sure to
+ check the GLUT FAQ first for any questions that you may have:
+ http://reality.sgi.com/opengl/glut3/glut-faq.html
+
+
+COMPILING/INSTALLATION:
+
+ o Precompiled versions of the DLL and import library can be
+ found on the GLUT for Win32 web page mentioned above.
+
+ o Microsoft Developer Studio 6 workspace and project files have
+ been included in the source code distribution.
+
+ To build the glut dll:
+ First, open Microsoft Developer Studio.
+ Then, select File -> Open Workspace and find the glut.dsw file
+ in the file dialog and double-click on it.
+ Finally, select Build -> Build glut32.dll.
+ When the build is finished, it will copy:
+ glut32.dll to %WinDir%\System,
+ glut32.lib to $(MSDevDir)\..\..\VC98\lib, and
+ glut.h to $(MSDevDir)\..\..\VC98\include\GL.
+
+ Additional workspace files have been included in the progs, test
+ and lib directories to build the progs, tests and libs respectively.
+
+
+BORLAND NOTES:
+
+ From what I understand, Borland supplies a utility that
+ converts Microsoft Visual C++ .libs into Borland compatible
+ files. Therefore, the best method for Borland users is
+ probably to get the precompiled versions of the library and
+ convert the library. To create an import library for Borland
+ from the DLLs, use the following command (from a command prompt):
+ IMPLIB glut32.lib glut32.dll
+ If IMPLIB crashes when called this way, try
+ IMPLIB glut32.lib glut32.def
+ using the glut32.def file in this distribution.
+
+
+FORTRAN NOTES:
+
+ Bill Mitchell [william.mitchell@nist.gov] has put considerable
+ effort into getting GLUT to work with different compilers for
+ Fortran 90. He indicates that you should copy the f90glut.h
+ file to your $(MSDevDir)\..\..\VC98\include\GL directory.
+ Then, just build GLUT as usual. The Fortran 90 interface, f90gl,
+ can be obtained at http://math.nist.gov/f90gl and contains
+ installation instructions and usage examples.
+
+
+MISC NOTES:
+
+ o Overlay support is not implemented, nor are there any plans to
+ implement it in the near future.
+
+ o To customize the windows icon, you can use the resource name
+ GLUT_ICON. For example, create an icon named "glut.ico", and
+ create a file called glut.rc that contains the following:
+ GLUT_ICON ICON glut.ico
+ then compile the glut.rc file with the following:
+ rc /r glut
+ and link the resulting glut.res file into your executable
+ (just like you would an object file).
+ Alternatively, you can simply add the glut.rc file to your
+ project if you are using Microsoft Developer Studio.
+
+
+IMPLEMENTATION DEPENDENT DIFFERENCES:
+
+ There are a few differences between the Win32 version of GLUT
+ and the X11 version of GLUT. Those are outlined here. Note
+ that MOST of these differences are allowed by the GLUT
+ specification. Bugs and unsupported features are outlined in
+ the UNSUPPORTED/BUGS section.
+
+ o glutInit:
+ The following command line options have no meaning (and are
+ ignored) in GLUT for Win32:
+ -display, -indirect, -direct, -sync.
+
+ o glutInitWindowPosition, glutPositionWindow:
+ Win32 has two different coordinate systems for windows.
+ One is in terms of client space and the other is the whole
+ window space (including the decorations). If you
+ glutPositionWindow(0, 0), GLUT for Win32 will place the
+ window CLIENT area at 0, 0. This will cause the window
+ decorations (title bar and left edge) to be OFF-SCREEN, but
+ it gives the user the most flexibility in positioning.
+ HOWEVER, if the user specifies glutInitWindowPosition(0, 0),
+ the window is placed relative to window space at 0, 0.
+ This will cause the window to be opened in the upper left
+ corner with all the decorations showing. This behaviour is
+ acceptable under the current GLUT specification.
+
+ o glutSetIconTitle, glutSetWindowTitle:
+ There is no separation between Icon title and Window title
+ in Win32. Therefore, setting an icon title in Win32 has
+ no effect.
+
+ o glutSetCursor:
+ As indicated in the GLUT specification, cursors may be
+ different on different platforms. This is the case in GLUT
+ for Win32. For the most part, the cursors will match the
+ meaning, but not necessarily the shape. Notable exceptions
+ are the GLUT_CURSOR_INFO & GLUT_CURSOR_SPRAY which use the
+ crosshair cursor and the GLUT_CURSOR_CYCLE which uses the
+ 'no' or 'destroy' cursor in Win32.
+
+ o glutVisibilityFunc:
+ Win32 seems to be unable to determine if a window is fully
+ obscured. Therefore, the visibility of a GLUT window is
+ only reflected by its Iconic, Hidden or Shown state. That
+ is, even if a window is fully obscured, in GLUT for Win32,
+ it is still "visible".
+
+ o glutEntryFunc:
+ Window Focus is handled differently in Win32 and X.
+ Specifically, the "window manager" in Win32 uses a "click to
+ focus" policy. That is, in order for a window to receive
+ focus, a mouse button must be clicked in it. Likewise, in
+ order for a window to loose focus, a mouse button must be
+ clicked outside the window (or in another window).
+ Therefore, the Enter and Leave notification provided by GLUT
+ may behave differently in the Win32 and in X11 versions.
+ There is a viable workaround for this. A program called
+ "Tweak UI" is provided by Microsoft which can be used to
+ change the focus policy in Win32 to "focus follows mouse".
+ It is available from the Microsoft Web Pages:
+ http://www.microsoft.com/windows/software/PowerToy.htm
+
+ o glutCopyColormap:
+ GLUT for Win32 always copies the colormap. There is never
+ any sharing of colormaps. This is probably okay, since
+ Win32 merges the logical palette and the physical palette
+ anyway, so even if there are two windows with totally
+ different colors in their colormaps, Win32 will find a
+ (hopefully) good match between them.
+
+ o glutIdleFunc + menus:
+ The glut idle function will NOT be called when a menu is
+ active. This causes all animation to stop when a menu is
+ active (in general, this is probably okay). Timer
+ functions will still fire, however. If the timer callback
+ draws into the rendering context, the drawing will not show
+ up until after the menu has finished, though.
+
+
+UNSUPPORTED/BUGS:
+
+ o glutAttachMenu:
+ Win32 only likes to work with left and right mouse buttons.
+ Especially so with popup menus. Therefore, when attaching
+ the menu to the middle mouse button, the LEFT mouse button
+ must be used to select from the menu.
+
+ o glutSpaceball*, glutButtonBox*, glutTablet*, glutDials*:
+ None of the special input devices are supported at this
+ time.
+
+ o When resizing or moving a GLUT for Win32 window, no updating
+ is performed. This causes the window to leave "tracks" on
+ the screen when getting bigger or when previously obscured
+ parts are being revealed. I put in a bit of a kludgy
+ workaround for those that absolutely can't have the weird
+ lines. The reshape callback is called multiple times for
+ reshapes. Therefore, in the reshape callback, some drawing
+ can be done. It should probably be limited to a color buffer
+ clear.
+
+ o The video resizing capabilities of GLUT 3.3+ for X11 is
+ currently unimplemented (this is probably ok, since it
+ really isn't part of the spec until 4.0). I doubt that
+ this will ever be part of GLUT for Win32, since there is no
+ hardware to support it. A hack could simply change the
+ resolution of the desktop.
+
+
+CHANGES/FIXES:
+
+ (Nov 8, '01)
+ x Released 3.7.6
+
+ (Nov 8, '01)
+ x Changed fullscreen mode from TOPMOST back to simply TOP, since
+ (it turns out) many people use windows atop a GLUT window.
+
+ (Nov 8, '01)
+ x Added code to prevent CPU spiking when no idle function is
+ registered. Otherwise, if an idle function is registered, spike
+ CPU so that the idle function gets all the attention it needs and
+ if this is a problem on the program side, the user can stick a
+ sleep() in their idle function. I believe that this strikes the
+ best balance betweeen GLUT being fast, and also being "nice" to
+ other processes. Thanks to James Wright for reporting this bug.
+
+ (Nov 8, '01)
+ x Fixed bug in motion callback handler which wasn't setting the
+ current window, so multiple window apps (e.g., any GLUI app)
+ wouldn't get the callback correctly.
+
+ (Oct 4, '01)
+ x Fixed bug in glutEnterGameMode() that caused new windows to not
+ be in "fullscreen" mode, so they got window decorations.
+
+ (Oct 4, '01)
+ x Fixed bug in glutEnterGameMode() that caused new windows to not
+ be in "fullscreen" mode, so they got window decorations.
+
+ (Oct 3, '01)
+ x Fixed bug in getVisualInfoFromString(): visuals not reloaded on
+ display mode change. Reload visuals each time they are queried.
+ This fixes a problem with Win32 because the list of availabe Visuals
+ (Pixelformats) changes after a change in displaymode. The problem
+ occurs when switching to gamemode and back. Thanks to Michael
+ Wimmer for pointing this out & providing the fix.
+
+ (Oct 3, '01)
+ x Fixed bug in XGetVisualInfo(): pixelformats enumerated incorrectly.
+ Passing 0 as a pixelformat index to DescribePixelFormat gives
+ unpredictible results (e.g., this fails on the Voodoo opengl32.dll
+ and always reports 0 as the last available pixelformat index).
+ Thanks to Michael Wimmer for pointing this out & providing the fix.
+
+ (Oct 3, '01)
+ x Fixed bug in glXGetConfig(): pixelformats enumerated incorrectly. The
+ test was OpenGL support OR draw to window, but should be AND. Thanks
+ to Michael Wimmer for pointing this out & providing the fix.
+
+ (Sep 28, '01)
+ x Fixed glutChangeToSubMenu()/glutChangeToMenuEntry() bug where if you
+ went back and forth between a submenu and a plain entry, the submenu
+ wouldn't be updated properly.
+
+ (Sep 28, '01)
+ x glutSetIconTitle() is now a nop.
+
+ (Sep 28, '01)
+ x glutFullScreen() now sets the window as TOPMOST, therefore, the
+ window will always be on top (this essentially disables alt-tabbing).
+
+ (Sep 28, '01)
+ x The key repeat ignore flag is now honored correctly.
+
+ (Sep 28, '01)
+ x Key presses are now reported more accurately and fully, in
+ particular, modified up events (i.e., SHIFT-2) are now reported
+ correctly.
+
+ (Sep 28, '01)
+ x Subwindows nested arbitrarily deep get their keyboard callbacks
+ correctly now.
+
+ (Sep 28, '01)
+ x Major rewrite of the window procedure code to clean it up and make
+ way for other bug fixes.
+
+ (Sep 23, '01)
+ x Fixed noof example program to use RAND_MAX instead of assumed
+ max of 2147483647.0. (Now it looks _much_ better!)
+
+ (Sep 22, '01)
+ x Fixed sunlight example program. globe.raw data file was corrupt,
+ added a new one.
+
+ (Sep 22, '01)
+ x Fixed zcomposite example program to print message if overlay
+ support is not found (instead of crashing).
+
+ (Jan 22, '01)
+ x Fixed malloc(0) bug in Win32 version of XGetVisualInfo. Thanks
+ to Kekoa Proudfoot for bringing this to my attention.
+
+ (Dec 12, '00)
+ x Added data files for the advanced & advanced97 programs.
+
+ (Dec 12, '00)
+ x Added Developer Studio 6 project and workspace files for pretty
+ much everything (the stuff left out was usually unix specific).
+
+ (Dec 7, '00)
+ x Fixed several compilation problems & corrupt files. Thanks to
+ Alexander Stohr for bringing these to my attention and providing
+ detailed fixes.
+
+ (Dec 6, '00)
+ x Fixed compiler support for lcc. Thanks to Gordon for bringing
+ this to my attention and debugging fixes.
+
+ (Nov 8, '00)
+ x Fixed submenu problem (sometimes the menu callback was not
+ called for valid items). Thanks to Michael Keeley.
+
+ (Oct 16, '00)
+ x Corrected corrupt duck.iv file. Thanks to Jon Willeke for finding
+ this problem.
+
+ (Sept 27, '00)
+ x Fixed bug in processWorkList that could cause a hang. Thanks to
+ Bill Volz & Daniel Azuma.
+
+ (Sept 26, '00)
+ x Added mui DLL project file (thanks to DMWeldy@ugsolutions.com).
+
+ (Sept 9, '00)
+ x Fixed Delete key bug (crash when no keyboard callback was
+ registered, but a special key callback was). Thanks to
+ Kent Bowling (kent_bowling@hotmail.com) for finding this bug.
+
+ (May 18, '00)
+ x Fixed subwindow keyboard callbacks.
+
+ (May 22, '97)
+ o Menus don't work under Windows 95
+ x Fixed! Added a unique identifier to each menu item, and a
+ search function to grab a menu item given the unique identifier.
+
+ (May 21, '97)
+ o A few minor bug fixes here and there.
+ x Thanks to Bruce Silberman and Chris Vale for their help with
+ this. We now have a DLL!
+
+ (Apr 25, '97)
+ o DLL version of the library is coming (as soon as I figure out
+ how to do it -- if you know, let me know).
+ x Thanks to Bruce Silberman and Chris Vale for their help with
+ this. We now have a DLL!
+
+ (Apr 24, '97)
+ x Added returns to KEY_DOWN etc messages so that the F10 key
+ doesn't toggle the system menu anymore.
+
+ (Apr 7, '97)
+ o Palette is incorrect for modes other than TrueColor.
+ x Fixed this by forcing a default palette in modes that aren't
+ Truecolor in order to 'simulate' it. The applications
+ program shouldn't have to do this IMHO, but I guess we
+ can't argue with Microsoft (well, we can, but what good
+ will it do?).
+
+ (Apr 2, '97)
+ x Added glut.ide file for Borland users.
+
+ (Apr 2, '97)
+ x Fixed a bug in the WM_QUERYNEWPALETTE message. Wasn't
+ checking for a null colormap, then de-ref'd it. Oops.
+
+ (Mar 13, '97)
+ o glutTimerFunc:
+ Currently, GLUT for Win32 programs busy waits when there is
+ an outstanding timer event (i.e., there is no select()
+ call). I haven't found this to be a problem, but I plan to
+ fix it just because I can't bear the thought of a busy wait.
+ x Added a timer event and a wait in the main loop. This fixes
+ the CPU spike.
+
+ (Mar 11, '97)
+ x Fixed subwindow visibility. The visibility callback of
+ subwindows wasn't being called, now it is.
+
+ (Mar 11, '97)
+ o glutGetHDC, glutGetHWND:
+ In order to support additional dialog boxes, wgl fonts, and
+ a host of other Win32 dependent structures, two functions
+ have been added that operate on the current window in GLUT.
+ The first (glutGetHDC) returns a handle to the current
+ windows device context. The second (glutGetHWND) returns
+ handle to the current window.
+ x Took these out to preserve GLUT portability.
+
+ (Mar 11, '97)
+ x Fixed the glutWarpPointer() coordinates. Were relative to
+ the screen, now relative to window (client area) origin
+ (which is what they're supposed to be).
+
+ (Mar 11, '97)
+ o glutCreateMenu, glutIdleFunc:
+ Menu's are modal in Win32. That is, they don't allow any
+ messages to be processed while they are up. Therefore, if
+ an idle function exists, it will not be called while
+ processing a menu.
+ x Fixed! I've put in a timer function that fires every
+ millisecond while a menu is up. The timer function handles
+ idle and timer events only (which should be the only
+ functions that are firing when a menu is up anyway).
+
+ (Mar 7 '97)
+ x Fixed minor bugs tracked down by the example programs.
+
+ (Mar 6, '97)
+ x Merged 3.3 GLUT for X11 into 3.2 GLUT for Win32. New code
+ structure allows for EASY merging!
+
+ o In Win32, the parent gets the right to set the cursor of
+ any of its children. Therefore, a child windows cursor
+ will 'blink' between its cursor and its parent.
+ x Fixed this by checking whether the cursor is in a child
+ window or not.
+
+ (Feb 28 '97)
+ o On initial bringup apps are getting 2 display callbacks.
+ x Fixed by the Fev 28 re-write.
+
+ o Some multiple window (not subwindow) functionality is messed up.
+ See the sphere.exe program.
+ x Fixed by the Feb 28 re-write.
+
+ o GLUT for Win32 supports color index mode ONLY in a paletted
+ display mode (i.e., 256 or 16 color mode).
+ x Fixed this in the re-write. If you can get a color index
+ visual (pixel format) you can use color index mode.
+
+ (Feb 28 '97)
+ o Quite a few bugs (and incompatibilities) were being caused
+ by the structure that I used in the previous port of GLUT.
+ Therefore I decided that it would be best to "get back to
+ the roots". I re-implemented most of glut trying to stick
+ with the structure layed out by Mark. The result is a much
+ more stable version that passes ALL (!) (except overlay)
+ the tests provided by Mark. In addition, this new
+ structure will allow future enhancements by Mark to be
+ integrated much more quickly into the Win32 version. Also,
+ I'm now ordering the bugs in reverse, so that the most
+ recently fixed appear at the top of the list.
+
+ (9/8/96)
+ o Changed the glutGetModifiers code to produce an error if not
+ called in the core input callbacks.
+
+ (9/11/96)
+ o If the alt key is pressed with more than one other modifier key
+ it acts as if it is stuck -- it stays selected until pressed
+ and released again.
+ x Fixed.
+
+ (9/12/96)
+ o When a submenu is attached to a menu, sometimes a GPF occurs.
+ Fixed. Needed to set the submenu before referencing it's members.
+
+ o Kenny: Also, one little problem, I attached the menu to the
+ right-button, but when the left-button is pressed I detach
+ it to give the right-button new meaning; if I pop-up the menu and I
+ don't want to select anything, like most users, I click off of the
+ menu to make it disappear. When I do this, I get a GLUT error and
+ the program terminates because I am altering the menu attachment
+ from within the button press while the menu is active.
+ x Fixed. Needed to finish the menu when the user presses the button,
+ not just when a button is released.
+
+ o GLUT for Win32 emulates a middle mouse button by checking if
+ both mouse buttons are down. This causes a lot of problems with
+ the menu and other multiple mouse button things.
+ x Fixed. No more middle mouse button emulation. Perhaps it would
+ be a good idea to emulate the middle mouse button (if not present)
+ with a key?
+
+ (9/15/96)
+ o Added code to accept a user defined icon. If no icon is provided,
+ a default icon is loaded.
+
+ (9/19/96)
+ o Shane: Command line options seem to be screwed up. (9/13)
+ x Fixed. The geometry command line was broken, and so was the
+ gldebug command line.
+
+ o Fixed a bug in the default glut reshape. It was looking for the
+ parent of the current window and GPF'ing if there wasn't a parent.
+ Put in a check for a parent, and if none is there, use the
+ child.
+
+ o Idle function sucks up all processor cycles. (9/8/96)
+ x I don't know if this is avoidable. If you have a tight rendering
+ loop, it may be that the processor time is going to be sucked up
+ no matter what. You can add a sleep() to the end of your render
+ loop if you would like to yeild to other processes and you don't
+ care too much about the speed of your rendering loop. If you have
+ Hardware that supports OpenGL (like a 3Dpro card, or GLint card)
+ then this should be less of a problem, since it won't be rendering
+ in software. (9/11/96)
+
+ o If a window is fully obscured by another window, the visibility
+ callback is NOT called. As far as I can tell, this is a limitation
+ of the Win32 api, but a workaround is being searched for. (9/8/96)
+ x Limitation of the Win32 API
+
+ o Fixed the entry functions. They only work if the keyboard focus
+ changes. Therefore, in most Win32 systems, the mouse must be
+ pressed outside of the window to get a GLUT_LEFT message and
+ then pressed inside the window for a GLUT_ENTERED message.
+
+ o Alt modifier key doesn't work with keyboard callback. (9/8/96)
+ x Probably okay, because the glut spec says that these keys can
+ be intercepted by the system (which the alt key is...) (9/11/96)
+
+ (11/17/96)
+ o glutRemoveMenuItem() not working properly.
+ x Thanks to Gary (grc@maple.civeng.rutgers.edu) for the fix to
+ this one.
+
+ o Timer functions are messed up.
+ x Thanks to Joseph Galbraith for the fix to this one.
+
+ (12/9/96)
+ o One (minor) difference came up between the X version of glut
+ and the nt one which you should know about. It is not a new
+ problem, and it concerns co-ords returned to the pointer
+ callbacks. (glutMotionFunc, glutMouseFunc)
+ Under X, you get co-ords in the range 0 +/- 2^15, under NT
+ you get 0..2^16. This is only really a problem when moving
+ above or to the left of the window.
+ eg dragging one pixel ABOVE the window will give :-
+ under x11 : y = -1
+ under nt : y = 2^16 -1
+ x Put in fix provided by Shane Clauson.
+
+ (12/17/96)
+ o Idle functions not working properly for multiple windows.
+ x Fixed this by posting an idle message to every window in the
+ window list when idle.
+
+ (12/18/96)
+ o glutSetCursor() was misbehaving (lthomas@cco.caltech.edu).
+ x Win32 requires that the hCursor member of the window class
+ be set to NULL when the class is registered or whenever the
+ mouse is moved, the original cursor is replaced (go
+ figure!). Now sets the cursor whenever a WM_MOUSEMOVE message
+ is received, because the WM_SETCURSOR event resets the cursor
+ even when in the decoration area.
+
+ o Geometry is not being handled quite right. The numbers don't
+ take into account the window decorations. That is, if I say
+ make a window 100x100, then the WHOLE window (not just the
+ client area) is 100x100. Therefore, the client (opengl) area
+ is smaller than 100x100. (9/8/96)
+ x Fixed. Added code to subtract the decoration size on glutGet()
+ and add the decoration size on glutReshapeWindow().
+
+ o Multiple glutPostRedisplay() calls are NOT being combined.
+ To get round the "coalesce" problem on glutPostRedisplay,
+ the easiest solution is to roll-your-own coalesce by
+ keeping a global "dirty" flag in the app (eg replace all
+ calls to glutPostRedisplay with image_dirty=TRUE;), and to
+ handle image_dirty with a single glutPostRedisplay in the
+ idle callback when required. (erk - but increases
+ performance for my particular app (a rendering engine on
+ the end of a pipleine with a stream of graphics updates) by
+ a couple of orders of magnitude ! ) (9/8/96)
+ x Added code to coalesce redisplays. Every idle cycle, a
+ check is made to see which windows need redisplay, if they
+ need it, a redisplay is posted. The glutPostRedisplay()
+ call is just a stub that sets a flag.
+
+
+THANKS:
+
+ Special thanks to the following people for extensive testing,
+ suggestions, fixes and help:
+
+ Alexander Stohr
+ Shane Clauson
+ Kenny Hoff
+ Richard Readings
+ Paul McQuesten
+ Philip Winston
+ JaeWoo Ahn
+ Joseph Galbraith
+ Paula Higgins
+ Sam Fortin
+ Chris Vale
+ Bill Mitchell
+
+ and of course, the original author of GLUT:
+ Mark Kilgard.
+
+ and many others...
+
+
+COPYRIGHT:
+
+The OpenGL Utility Toolkit distribution for Win32 (Windows NT &
+Windows 95) contains source code modified from the original source
+code for GLUT version 3.3 which was developed by Mark J. Kilgard. The
+original source code for GLUT is Copyright 1997 by Mark J. Kilgard.
+GLUT for Win32 is Copyright 1997 by Nate Robins and is not in the
+public domain, but it is freely distributable without licensing fees.
+It is provided without guarantee or warrantee expressed or implied.
+It was ported with the permission of Mark J. Kilgard by Nate Robins.
+
+THIS SOURCE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+OpenGL (R) is a registered trademark of Silicon Graphics, Inc.
diff --git a/Smoke/GLUT/glut.def b/Smoke/GLUT/glut.def
new file mode 100644
index 0000000..94da6ab
--- /dev/null
+++ b/Smoke/GLUT/glut.def
@@ -0,0 +1,126 @@
+DESCRIPTION 'OpenGL Utility Toolkit for Win32'
+
+VERSION 3.7
+
+EXPORTS
+
+ glutAddMenuEntry
+ glutAddSubMenu
+ glutAttachMenu
+ glutBitmapCharacter
+ glutBitmapLength
+ glutBitmapWidth
+ glutButtonBoxFunc
+ glutChangeToMenuEntry
+ glutChangeToSubMenu
+ glutCopyColormap
+ glutCreateMenu
+ __glutCreateMenuWithExit
+ glutCreateSubWindow
+ glutCreateWindow
+ __glutCreateWindowWithExit
+ glutDestroyMenu
+ glutDestroyWindow
+ glutDetachMenu
+ glutDeviceGet
+ glutDialsFunc
+ glutDisplayFunc
+ glutEnterGameMode
+ glutEntryFunc
+ glutEstablishOverlay
+ glutExtensionSupported
+ glutForceJoystickFunc
+ glutFullScreen
+ glutGameModeGet
+ glutGameModeString
+ glutGet
+ glutGetColor
+ glutGetMenu
+ glutGetModifiers
+ glutGetWindow
+ glutHideOverlay
+ glutHideWindow
+ glutIconifyWindow
+ glutIdleFunc
+ glutIgnoreKeyRepeat
+ glutInit
+ __glutInitWithExit
+ glutInitDisplayMode
+ glutInitDisplayString
+ glutInitWindowPosition
+ glutInitWindowSize
+ glutJoystickFunc
+ glutKeyboardFunc
+ glutKeyboardUpFunc
+ glutLayerGet
+ glutLeaveGameMode
+ glutMainLoop
+ glutMenuStateFunc
+ glutMenuStatusFunc
+ glutMotionFunc
+ glutMouseFunc
+ glutOverlayDisplayFunc
+ glutPassiveMotionFunc
+ glutPopWindow
+ glutPositionWindow
+ glutPostOverlayRedisplay
+ glutPostRedisplay
+ glutPostWindowOverlayRedisplay
+ glutPostWindowRedisplay
+ glutPushWindow
+ glutRemoveMenuItem
+ glutRemoveOverlay
+ glutReportErrors
+ glutReshapeFunc
+ glutReshapeWindow
+ glutSetColor
+ glutSetCursor
+ glutSetIconTitle
+ glutSetKeyRepeat
+ glutSetMenu
+ glutSetWindow
+ glutSetWindowTitle
+ glutSetupVideoResizing
+ glutShowOverlay
+ glutShowWindow
+ glutSolidCone
+ glutSolidCube
+ glutSolidDodecahedron
+ glutSolidIcosahedron
+ glutSolidOctahedron
+ glutSolidSphere
+ glutSolidTeapot
+ glutSolidTetrahedron
+ glutSolidTorus
+ glutSpaceballButtonFunc
+ glutSpaceballMotionFunc
+ glutSpaceballRotateFunc
+ glutSpecialFunc
+ glutSpecialUpFunc
+ glutStopVideoResizing
+ glutStrokeCharacter
+ glutStrokeLength
+ glutStrokeWidth
+ glutSwapBuffers
+ glutTabletButtonFunc
+ glutTabletMotionFunc
+ glutTimerFunc
+ glutUseLayer
+ glutVideoPan
+ glutVideoResize
+ glutVideoResizeGet
+ glutVisibilityFunc
+ glutWarpPointer
+ glutWindowStatusFunc
+ glutWireCone
+ glutWireCube
+ glutWireDodecahedron
+ glutWireIcosahedron
+ glutWireOctahedron
+ glutWireSphere
+ glutWireTeapot
+ glutWireTetrahedron
+ glutWireTorus
+; __glutSetFCB
+; __glutGetFCB
+
diff --git a/Smoke/GLUT/glut32.lib b/Smoke/GLUT/glut32.lib
new file mode 100644
index 0000000..c25583d
--- /dev/null
+++ b/Smoke/GLUT/glut32.lib
Binary files differ