glut.pp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. {$MODE delphi}
  2. unit GLUT;
  3. interface
  4. {$MACRO ON}
  5. {$IFDEF Win32}
  6. {$DEFINE glut_dll := }
  7. {$DEFINE gldecl := stdcall;}
  8. {$DEFINE extdecl := stdcall;}
  9. uses windows, GL;
  10. {$ELSE}
  11. {$MESSAGE Unsupported platform.}
  12. {$ENDIF}
  13. function InitGLUTFromLibrary(libname: PChar): Boolean;
  14. // determines automatically which library to use:
  15. function InitGLUT: Boolean;
  16. var
  17. GLUTDumpUnresolvedFunctions,
  18. GLUTInitialized: Boolean;
  19. const
  20. // Display mode bit masks
  21. GLUT_RGB = 0;
  22. GLUT_RGBA = GLUT_RGB;
  23. GLUT_INDEX = 1;
  24. GLUT_SINGLE = 0;
  25. GLUT_DOUBLE = 2;
  26. GLUT_ACCUM = 4;
  27. GLUT_ALPHA = 8;
  28. GLUT_DEPTH = 16;
  29. GLUT_STENCIL = 32;
  30. GLUT_MULTISAMPLE = 128;
  31. GLUT_STEREO = 256;
  32. GLUT_LUMINANCE = 512;
  33. // Mouse buttons
  34. GLUT_LEFT_BUTTON = 0;
  35. GLUT_MIDDLE_BUTTON = 1;
  36. GLUT_RIGHT_BUTTON = 2;
  37. // Mouse button state
  38. GLUT_DOWN = 0;
  39. GLUT_UP = 1;
  40. // Keys ###
  41. // Enter / exit state
  42. GLUT_LEFT = 0;
  43. GLUT_ENTERED = 1;
  44. // Menu usage state
  45. GLUT_MENU_NOT_IN_USE = 0;
  46. GLUT_MENU_IN_USE = 1;
  47. // Visibility state
  48. GLUT_NOT_VISIBLE = 0;
  49. GLUT_VISIBLE = 1;
  50. // Window status state
  51. GLUT_HIDDEN = 0;
  52. GLUT_FULLY_RETAINED = 1;
  53. GLUT_PARTIALLY_RETAINED = 2;
  54. GLUT_FULLY_COVERED = 3;
  55. // Color index component selection values
  56. GLUT_RED = 0;
  57. GLUT_GREEN = 1;
  58. GLUT_BLUE = 2;
  59. // Layers for use
  60. GLUT_NORMAL = 0;
  61. GLUT_OVERLAY = 1;
  62. // Bitmap stuff###
  63. // glutGet parameters
  64. GLUT_WINDOW_X = 100;
  65. GLUT_WINDOW_Y = 101;
  66. GLUT_WINDOW_WIDTH = 102;
  67. GLUT_WINDOW_HEIGHT = 103;
  68. GLUT_WINDOW_BUFFER_SIZE = 104;
  69. GLUT_WINDOW_STENCIL_SIZE = 105;
  70. GLUT_WINDOW_DEPTH_SIZE = 106;
  71. GLUT_WINDOW_RED_SIZE = 107;
  72. GLUT_WINDOW_GREEN_SIZE = 108;
  73. GLUT_WINDOW_BLUE_SIZE = 109;
  74. GLUT_WINDOW_ALPHA_SIZE = 110;
  75. GLUT_WINDOW_ACCUM_RED_SIZE = 111;
  76. GLUT_WINDOW_ACCUM_GREEN_SIZE = 112;
  77. GLUT_WINDOW_ACCUM_BLUE_SIZE = 113;
  78. GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114;
  79. GLUT_WINDOW_DOUBLEBUFFER = 115;
  80. GLUT_WINDOW_RGBA = 116;
  81. GLUT_WINDOW_PARENT = 117;
  82. GLUT_WINDOW_NUM_CHILDREN = 118;
  83. GLUT_WINDOW_COLORMAP_SIZE = 119;
  84. GLUT_WINDOW_NUM_SAMPLES = 120;
  85. GLUT_WINDOW_STEREO = 121;
  86. GLUT_WINDOW_CURSOR = 122;
  87. GLUT_SCREEN_WIDTH = 200;
  88. GLUT_SCREEN_HEIGHT = 201;
  89. GLUT_SCREEN_WIDTH_MM = 202;
  90. GLUT_SCREEN_HEIGHT_MM = 203;
  91. GLUT_MENU_NUM_ITEMS = 300;
  92. GLUT_DISPLAY_MODE_POSSIBLE = 400;
  93. GLUT_INIT_WINDOW_X = 500;
  94. GLUT_INIT_WINDOW_Y = 501;
  95. GLUT_INIT_WINDOW_WIDTH = 502;
  96. GLUT_INIT_WINDOW_HEIGHT = 503;
  97. GLUT_INIT_DISPLAY_MODE = 504;
  98. GLUT_ELAPSED_TIME = 700;
  99. GLUT_WINDOW_FORMAT_ID = 123;
  100. // glutDeviceGet parameters
  101. GLUT_HAS_KEYBOARD = 600;
  102. GLUT_HAS_MOUSE = 601;
  103. GLUT_HAS_SPACEBALL = 602;
  104. GLUT_HAS_DIAL_AND_BUTTON_BOX = 603;
  105. GLUT_HAS_TABLET = 604;
  106. GLUT_NUM_MOUSE_BUTTONS = 605;
  107. GLUT_NUM_SPACEBALL_BUTTONS = 606;
  108. GLUT_NUM_BUTTON_BOX_BUTTONS = 607;
  109. GLUT_NUM_DIALS = 608;
  110. GLUT_NUM_TABLET_BUTTONS = 609;
  111. GLUT_DEVICE_IGNORE_KEY_REPEAT = 610;
  112. GLUT_DEVICE_KEY_REPEAT = 611;
  113. GLUT_HAS_JOYSTICK = 612;
  114. GLUT_OWNS_JOYSTICK = 613;
  115. GLUT_JOYSTICK_BUTTONS = 614;
  116. GLUT_JOYSTICK_AXES = 615;
  117. GLUT_JOYSTICK_POLL_RATE = 616;
  118. // glutLayerGet parameters
  119. GLUT_OVERLAY_POSSIBLE = 800;
  120. GLUT_LAYER_IN_USE = 801;
  121. GLUT_HAS_OVERLAY = 802;
  122. GLUT_TRANSPARENT_INDEX = 803;
  123. GLUT_NORMAL_DAMAGED = 804;
  124. GLUT_OVERLAY_DAMAGED = 805;
  125. // glutVideoResizeGet parameters
  126. GLUT_VIDEO_RESIZE_POSSIBLE = 900;
  127. GLUT_VIDEO_RESIZE_IN_USE = 901;
  128. GLUT_VIDEO_RESIZE_X_DELTA = 902;
  129. GLUT_VIDEO_RESIZE_Y_DELTA = 903;
  130. GLUT_VIDEO_RESIZE_WIDTH_DELTA = 904;
  131. GLUT_VIDEO_RESIZE_HEIGHT_DELTA= 905;
  132. GLUT_VIDEO_RESIZE_X = 906;
  133. GLUT_VIDEO_RESIZE_Y = 907;
  134. GLUT_VIDEO_RESIZE_WIDTH = 908;
  135. GLUT_VIDEO_RESIZE_HEIGHT = 909;
  136. // glutGetModifiers return mask
  137. GLUT_ACTIVE_SHIFT = 1;
  138. GLUT_ACTIVE_CTRL = 2;
  139. GLUT_ACTIVE_ALT = 4;
  140. // Cursor stuff ###
  141. // GLUT window callback sub-API
  142. type
  143. TGlutDisplayFunc = procedure; extdecl
  144. TGlutReshapeFunc = procedure(width, height: Integer); extdecl
  145. TGlutTimerFunc = procedure(value: Integer); extdecl
  146. TGlutKeyboardFunc = procedure(key: char;x,y:Integer); extdecl
  147. TGlutIdleFunc = procedure; extdecl
  148. TGlutVisibilityFunc = procedure(state:Integer); extdecl
  149. // GLUT game mode sub-API
  150. {$ifdef GLUT_GAME}
  151. // glutGameModeGet
  152. const
  153. GLUT_GAME_MODE_ACTIVE = 0;
  154. GLUT_GAME_MODE_POSSIBLE = 1;
  155. GLUT_GAME_MODE_WIDTH = 2;
  156. GLUT_GAME_MODE_HEIGHT = 3;
  157. GLUT_GAME_MODE_PIXEL_DEPTH = 4;
  158. GLUT_GAME_MODE_REFRESH_RATE = 5;
  159. GLUT_GAME_MODE_DISPLAY_CHANGED= 6;
  160. {$endif GLUT_GAME}
  161. var
  162. // GLUT initialization sub-API
  163. glutInit: procedure(argcp: PInteger; argv: PPChar); glut_dll
  164. glutInitDisplayMode: procedure(mode: LongWord); glut_dll
  165. glutInitDisplayString: procedure(AString: PChar); glut_dll
  166. glutInitWindowPosition: procedure(x, y: Integer); glut_dll
  167. glutInitWindowSize: procedure(width, height: Integer); glut_dll
  168. glutMainLoop: procedure; glut_dll
  169. // GLUT window sub-API
  170. glutCreateWindow: function(title: PChar): Integer; glut_dll
  171. glutCreateSubWindow: function(win, x, y, width, height: Integer): Integer; glut_dll
  172. glutDestroyWindow: procedure(win: Integer); glut_dll
  173. glutPostRedisplay: procedure; glut_dll
  174. glutPostWindowRedisplay: procedure(win: Integer); glut_dll
  175. glutSwapBuffers: procedure; glut_dll
  176. glutGetWindow: function: Integer; glut_dll
  177. glutSetWindow: procedure(win: Integer); glut_dll
  178. glutSetWindowTitle: procedure(title: PChar); glut_dll
  179. glutSetIconTitle: procedure(title: PChar); glut_dll
  180. glutPositionWindow: procedure(x, y: Integer); glut_dll
  181. glutReshapeWindow: procedure(width, height: Integer); glut_dll
  182. glutPopWindow: procedure; glut_dll
  183. glutPushWindow: procedure; glut_dll
  184. glutIconifyWindow: procedure; glut_dll
  185. glutShowWindow: procedure; glut_dll
  186. glutHideWindow: procedure; glut_dll
  187. glutFullScreen: procedure; glut_dll
  188. glutSetCursor: procedure(cursor: Integer); glut_dll
  189. glutWarpPointer: procedure(x, y: Integer); glut_dll
  190. //overlays ###
  191. //menus ###
  192. // GLUT window callback sub-API
  193. glutDisplayFunc: procedure(func: TGlutDisplayFunc); glut_dll
  194. glutReshapeFunc: procedure(func: TGlutReshapeFunc); glut_dll
  195. glutTimerFunc: procedure(millis: LongWord; func: TGlutTimerFunc; value: longint); glut_dll
  196. glutKeyboardFunc : procedure(func: TGlutKeyboardFunc); glut_dll
  197. glutIdleFunc : procedure(func: TGlutIdleFunc); glut_dll
  198. glutVisibilityFunc : procedure(func: TGlutVisibilityFunc); glut_dll
  199. // GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK * func)(void));
  200. // GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK * func)(int width, int height));
  201. // GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK * func)(unsigned char key, int x, int y));
  202. // GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK * func)(int button, int state, int x, int y));
  203. // GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  204. // GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  205. // GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK * func)(int state));
  206. // GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK * func)(int state));
  207. // GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK * func)(void));
  208. // GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK * func)(int value), int value);
  209. // GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK * func)(int state));
  210. // GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK * func)(int key, int x, int y));
  211. // GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK * func)(int x, int y, int z));
  212. // GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK * func)(int x, int y, int z));
  213. // GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK * func)(int button, int state));
  214. // GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK * func)(int button, int state));
  215. // GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK * func)(int dial, int value));
  216. // GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  217. // GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK * func)(int button, int state, int x, int y));
  218. // GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK * func)(int status, int x, int y));
  219. // GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK * func)(void));
  220. // GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK * func)(int state));
  221. // GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK * func)(unsigned char key, int x, int y));
  222. // GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK * func)(int key, int x, int y));
  223. // GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK * func)(unsigned int buttonMask, int x, int y, int z), int pollInterval)
  224. // GLUT color index sub-API
  225. glutSetColor: procedure(index: Integer; red, green, blue: Single); glut_dll
  226. glutGetColor: function(ndx, component: Integer): Single; glut_dll
  227. glutCopyColormap: procedure(win: Integer); glut_dll
  228. // GLUT state retrieval sub-API
  229. glutGet: function(AType: GLEnum): Integer; glut_dll
  230. glutDeviceGet: function(AType: GLEnum): Integer; glut_dll
  231. glutExtensionSupported: function(name: PChar): Integer; glut_dll
  232. glutGetModifiers: function: Integer; glut_dll
  233. glutLayerGet: function(AType: GLEnum): Integer; glut_dll
  234. // fonts ###
  235. // pre-built models ###
  236. // video resize ###
  237. // debugging ###
  238. // device control ###
  239. // GLUT game mode sub-API
  240. {$ifdef GLUT_GAME}
  241. glutGameModeString: procedure(AString: PChar); glut_dll
  242. glutEnterGameMode: function: Integer; glut_dll
  243. glutLeaveGameMode: procedure; glut_dll
  244. glutGameModeGet: function(mode: GLEnum): Integer; glut_dll
  245. {$endif GLUT_GAME}
  246. implementation
  247. type
  248. HInstance = LongWord;
  249. var
  250. libGLUT: HInstance;
  251. function GetProc(handle: HInstance; name: PChar): Pointer;
  252. begin
  253. Result := GetProcAddress(handle, name);
  254. if (Result = nil) and GLUTDumpUnresolvedFunctions then
  255. WriteLn('Unresolved: ', name);
  256. end;
  257. function InitGLUTFromLibrary(libname: PChar): Boolean;
  258. begin
  259. Result := False;
  260. libGLUT := LoadLibrary(libname);
  261. if libGLUT = 0 then exit;
  262. // GLUT initialization sub-API
  263. glutInit := GetProc(libGLUT, 'glutInit');
  264. glutInitDisplayMode := GetProc(libGLUT, 'glutInitDisplayMode');
  265. glutInitDisplayString := GetProc(libGLUT, 'glutInitDisplayString');
  266. glutInitWindowPosition := GetProc(libGLUT, 'glutInitWindowPosition');
  267. glutInitWindowSize := GetProc(libGLUT, 'glutInitWindowSize');
  268. glutMainLoop := GetProc(libGLUT, 'glutMainLoop');
  269. // GLUT window sub-API
  270. glutCreateWindow := GetProc(libGLUT, 'glutCreateWindow');
  271. glutCreateSubWindow := GetProc(libGLUT, 'glutCreateSubWindow');
  272. glutDestroyWindow := GetProc(libGLUT, 'glutDestroyWindow');
  273. glutPostRedisplay := GetProc(libGLUT, 'glutPostRedisplay');
  274. glutPostWindowRedisplay := GetProc(libGLUT, 'glutPostWindowRedisplay');
  275. glutSwapBuffers := GetProc(libGLUT, 'glutSwapBuffers');
  276. glutGetWindow := GetProc(libGLUT, 'glutGetWindow');
  277. glutSetWindow := GetProc(libGLUT, 'glutSetWindow');
  278. glutSetWindowTitle := GetProc(libGLUT, 'glutSetWindowTitle');
  279. glutSetIconTitle := GetProc(libGLUT, 'glutSetIconTitle');
  280. glutPositionWindow := GetProc(libGLUT, 'glutPositionWindow');
  281. glutReshapeWindow := GetProc(libGLUT, 'glutReshapeWindow');
  282. glutPopWindow := GetProc(libGLUT, 'glutPopWindow');
  283. glutPushWindow := GetProc(libGLUT, 'glutPushWindow');
  284. glutIconifyWindow := GetProc(libGLUT, 'glutIconifyWindow');
  285. glutShowWindow := GetProc(libGLUT, 'glutShowWindow');
  286. glutHideWindow := GetProc(libGLUT, 'glutHideWindow');
  287. glutFullScreen := GetProc(libGLUT, 'glutFullScreen');
  288. glutSetCursor := GetProc(libGLUT, 'glutSetCursor');
  289. glutWarpPointer := GetProc(libGLUT, 'glutWarpPointer');
  290. //overlays ###
  291. //menus ###
  292. // GLUT window callback sub-API
  293. glutDisplayFunc := GetProc(libGLUT, 'glutDisplayFunc');
  294. glutReshapeFunc := GetProc(libGLUT, 'glutReshapeFunc');
  295. glutTimerFunc := GetProc(libGLUT, 'glutTimerFunc');
  296. glutKeyboardFunc := GetProc(libGLUT, 'glutKeyboardFunc');
  297. glutIdleFunc := GetProc(libGLUT, 'glutIdleFunc');
  298. glutVisibilityFunc := GetProc(libGLUT, 'glutVisibilityFunc');
  299. // GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK * func)(void));
  300. // GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK * func)(int width, int height));
  301. // GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK * func)(unsigned char key, int x, int y));
  302. // GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK * func)(int button, int state, int x, int y));
  303. // GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  304. // GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  305. // GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK * func)(int state));
  306. // GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK * func)(int state));
  307. // GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK * func)(void));
  308. // GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK * func)(int value), int value);
  309. // GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK * func)(int state));
  310. // GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK * func)(int key, int x, int y));
  311. // GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK * func)(int x, int y, int z));
  312. // GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK * func)(int x, int y, int z));
  313. // GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK * func)(int button, int state));
  314. // GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK * func)(int button, int state));
  315. // GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK * func)(int dial, int value));
  316. // GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK * func)(int x, int y));
  317. // GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK * func)(int button, int state, int x, int y));
  318. // GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK * func)(int status, int x, int y));
  319. // GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK * func)(void));
  320. // GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK * func)(int state));
  321. // GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK * func)(unsigned char key, int x, int y));
  322. // GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK * func)(int key, int x, int y));
  323. // GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK * func)(unsigned int buttonMask, int x, int y, int z), int pollInterval)
  324. // GLUT color index sub-API
  325. glutSetColor := GetProc(libGLUT, 'glutSetColor');
  326. glutGetColor := GetProc(libGLUT, 'glutGetColor');
  327. glutCopyColormap := GetProc(libGLUT, 'glutCopyColormap');
  328. // GLUT state retrieval sub-API
  329. glutGet := GetProc(libGLUT, 'glutGet');
  330. glutDeviceGet := GetProc(libGLUT, 'glutDeviceGet');
  331. glutExtensionSupported := GetProc(libGLUT, 'glutExtensionSupported');
  332. glutGetModifiers := GetProc(libGLUT, 'glutGetModifiers');
  333. glutLayerGet := GetProc(libGLUT, 'glutLayerGet');
  334. // fonts ###
  335. // pre-built models ###
  336. // video resize ###
  337. // debugging ###
  338. // device control ###
  339. // GLUT game mode sub-API
  340. {$ifdef GLUT_GAME}
  341. glutGameModeString := GetProc(libGLUT, 'glutGameModeString');
  342. glutEnterGameMode := GetProc(libGLUT, 'glutEnterGameMode');
  343. glutLeaveGameMode := GetProc(libGLUT, 'glutLeaveGameMode');
  344. glutGameModeGet := GetProc(libGLUT, 'glutGameModeGet');
  345. {$endif GLUT_GAME}
  346. GLUTInitialized := True;
  347. Result := True;
  348. end;
  349. function InitGLUT: Boolean;
  350. begin
  351. Result := InitGLUTFromLibrary('glut32.dll');
  352. end;
  353. initialization
  354. InitGLUT;
  355. finalization
  356. if libGLUT <> 0 then FreeLibrary(libGLUT);
  357. end.
  358. {
  359. $Log$
  360. Revision 1.3 2000-10-01 22:17:59 peter
  361. * new bounce demo
  362. Revision 1.1.2.2 2000/10/01 22:12:28 peter
  363. * new demo
  364. }