glut.pp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. {
  2. $Id$
  3. Adaption of the delphi3d.net OpenGL units to FreePascal
  4. Sebastian Guenther ([email protected]) in 2002
  5. These units are free to use
  6. }
  7. {$MACRO ON}
  8. {$MODE Delphi}
  9. {$IFDEF Win32}
  10. {$DEFINE extdecl := stdcall}
  11. {$ELSE}
  12. {$DEFINE extdecl := cdecl}
  13. {$ENDIF}
  14. unit Glut;
  15. // Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. */
  16. (* This program is freely distributable without licensing fees and is
  17. provided without guarantee or warrantee expressed or implied. This
  18. program is -not- in the public domain. *)
  19. {******************************************************************************}
  20. { Converted to Delphi by Tom Nuydens ([email protected]) }
  21. { Contributions by Igor Karpov ([email protected]) }
  22. { For the latest updates, visit Delphi3D: http://www.delphi3d.net }
  23. {******************************************************************************}
  24. interface
  25. uses
  26. SysUtils,
  27. {$IFDEF Win32}
  28. Windows,
  29. {$ELSE}
  30. DLLFuncs,
  31. {$ENDIF}
  32. GL;
  33. type
  34. PInteger = ^Integer;
  35. PPChar = ^PChar;
  36. TGlutVoidCallback = procedure; cdecl;
  37. TGlut1IntCallback = procedure(value: Integer); cdecl;
  38. TGlut2IntCallback = procedure(v1, v2: Integer); cdecl;
  39. TGlut3IntCallback = procedure(v1, v2, v3: Integer); cdecl;
  40. TGlut4IntCallback = procedure(v1, v2, v3, v4: Integer); cdecl;
  41. TGlut1Char2IntCallback = procedure(c: Byte; v1, v2: Integer); cdecl;
  42. const
  43. GLUT_API_VERSION = 3;
  44. GLUT_XLIB_IMPLEMENTATION = 12;
  45. // Display mode bit masks.
  46. GLUT_RGB = 0;
  47. GLUT_RGBA = GLUT_RGB;
  48. GLUT_INDEX = 1;
  49. GLUT_SINGLE = 0;
  50. GLUT_DOUBLE = 2;
  51. GLUT_ACCUM = 4;
  52. GLUT_ALPHA = 8;
  53. GLUT_DEPTH = 16;
  54. GLUT_STENCIL = 32;
  55. GLUT_MULTISAMPLE = 128;
  56. GLUT_STEREO = 256;
  57. GLUT_LUMINANCE = 512;
  58. // Mouse buttons.
  59. GLUT_LEFT_BUTTON = 0;
  60. GLUT_MIDDLE_BUTTON = 1;
  61. GLUT_RIGHT_BUTTON = 2;
  62. // Mouse button state.
  63. GLUT_DOWN = 0;
  64. GLUT_UP = 1;
  65. // function keys
  66. GLUT_KEY_F1 = 1;
  67. GLUT_KEY_F2 = 2;
  68. GLUT_KEY_F3 = 3;
  69. GLUT_KEY_F4 = 4;
  70. GLUT_KEY_F5 = 5;
  71. GLUT_KEY_F6 = 6;
  72. GLUT_KEY_F7 = 7;
  73. GLUT_KEY_F8 = 8;
  74. GLUT_KEY_F9 = 9;
  75. GLUT_KEY_F10 = 10;
  76. GLUT_KEY_F11 = 11;
  77. GLUT_KEY_F12 = 12;
  78. // directional keys
  79. GLUT_KEY_LEFT = 100;
  80. GLUT_KEY_UP = 101;
  81. GLUT_KEY_RIGHT = 102;
  82. GLUT_KEY_DOWN = 103;
  83. GLUT_KEY_PAGE_UP = 104;
  84. GLUT_KEY_PAGE_DOWN = 105;
  85. GLUT_KEY_HOME = 106;
  86. GLUT_KEY_END = 107;
  87. GLUT_KEY_INSERT = 108;
  88. // Entry/exit state.
  89. GLUT_LEFT = 0;
  90. GLUT_ENTERED = 1;
  91. // Menu usage state.
  92. GLUT_MENU_NOT_IN_USE = 0;
  93. GLUT_MENU_IN_USE = 1;
  94. // Visibility state.
  95. GLUT_NOT_VISIBLE = 0;
  96. GLUT_VISIBLE = 1;
  97. // Window status state.
  98. GLUT_HIDDEN = 0;
  99. GLUT_FULLY_RETAINED = 1;
  100. GLUT_PARTIALLY_RETAINED = 2;
  101. GLUT_FULLY_COVERED = 3;
  102. // Color index component selection values.
  103. GLUT_RED = 0;
  104. GLUT_GREEN = 1;
  105. GLUT_BLUE = 2;
  106. // Layers for use.
  107. GLUT_NORMAL = 0;
  108. GLUT_OVERLAY = 1;
  109. // Stroke font constants (use these in GLUT program).
  110. GLUT_STROKE_ROMAN = Pointer(0);
  111. GLUT_STROKE_MONO_ROMAN = Pointer(1);
  112. // Bitmap font constants (use these in GLUT program).
  113. GLUT_BITMAP_9_BY_15 = Pointer(2);
  114. GLUT_BITMAP_8_BY_13 = Pointer(3);
  115. GLUT_BITMAP_TIMES_ROMAN_10 = Pointer(4);
  116. GLUT_BITMAP_TIMES_ROMAN_24 = Pointer(5);
  117. GLUT_BITMAP_HELVETICA_10 = Pointer(6);
  118. GLUT_BITMAP_HELVETICA_12 = Pointer(7);
  119. GLUT_BITMAP_HELVETICA_18 = Pointer(8);
  120. // glutGet parameters.
  121. GLUT_WINDOW_X = 100;
  122. GLUT_WINDOW_Y = 101;
  123. GLUT_WINDOW_WIDTH = 102;
  124. GLUT_WINDOW_HEIGHT = 103;
  125. GLUT_WINDOW_BUFFER_SIZE = 104;
  126. GLUT_WINDOW_STENCIL_SIZE = 105;
  127. GLUT_WINDOW_DEPTH_SIZE = 106;
  128. GLUT_WINDOW_RED_SIZE = 107;
  129. GLUT_WINDOW_GREEN_SIZE = 108;
  130. GLUT_WINDOW_BLUE_SIZE = 109;
  131. GLUT_WINDOW_ALPHA_SIZE = 110;
  132. GLUT_WINDOW_ACCUM_RED_SIZE = 111;
  133. GLUT_WINDOW_ACCUM_GREEN_SIZE = 112;
  134. GLUT_WINDOW_ACCUM_BLUE_SIZE = 113;
  135. GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114;
  136. GLUT_WINDOW_DOUBLEBUFFER = 115;
  137. GLUT_WINDOW_RGBA = 116;
  138. GLUT_WINDOW_PARENT = 117;
  139. GLUT_WINDOW_NUM_CHILDREN = 118;
  140. GLUT_WINDOW_COLORMAP_SIZE = 119;
  141. GLUT_WINDOW_NUM_SAMPLES = 120;
  142. GLUT_WINDOW_STEREO = 121;
  143. GLUT_WINDOW_CURSOR = 122;
  144. GLUT_SCREEN_WIDTH = 200;
  145. GLUT_SCREEN_HEIGHT = 201;
  146. GLUT_SCREEN_WIDTH_MM = 202;
  147. GLUT_SCREEN_HEIGHT_MM = 203;
  148. GLUT_MENU_NUM_ITEMS = 300;
  149. GLUT_DISPLAY_MODE_POSSIBLE = 400;
  150. GLUT_INIT_WINDOW_X = 500;
  151. GLUT_INIT_WINDOW_Y = 501;
  152. GLUT_INIT_WINDOW_WIDTH = 502;
  153. GLUT_INIT_WINDOW_HEIGHT = 503;
  154. GLUT_INIT_DISPLAY_MODE = 504;
  155. GLUT_ELAPSED_TIME = 700;
  156. // glutDeviceGet parameters.
  157. GLUT_HAS_KEYBOARD = 600;
  158. GLUT_HAS_MOUSE = 601;
  159. GLUT_HAS_SPACEBALL = 602;
  160. GLUT_HAS_DIAL_AND_BUTTON_BOX = 603;
  161. GLUT_HAS_TABLET = 604;
  162. GLUT_NUM_MOUSE_BUTTONS = 605;
  163. GLUT_NUM_SPACEBALL_BUTTONS = 606;
  164. GLUT_NUM_BUTTON_BOX_BUTTONS = 607;
  165. GLUT_NUM_DIALS = 608;
  166. GLUT_NUM_TABLET_BUTTONS = 609;
  167. // glutLayerGet parameters.
  168. GLUT_OVERLAY_POSSIBLE = 800;
  169. GLUT_LAYER_IN_USE = 801;
  170. GLUT_HAS_OVERLAY = 802;
  171. GLUT_TRANSPARENT_INDEX = 803;
  172. GLUT_NORMAL_DAMAGED = 804;
  173. GLUT_OVERLAY_DAMAGED = 805;
  174. // glutVideoResizeGet parameters.
  175. GLUT_VIDEO_RESIZE_POSSIBLE = 900;
  176. GLUT_VIDEO_RESIZE_IN_USE = 901;
  177. GLUT_VIDEO_RESIZE_X_DELTA = 902;
  178. GLUT_VIDEO_RESIZE_Y_DELTA = 903;
  179. GLUT_VIDEO_RESIZE_WIDTH_DELTA = 904;
  180. GLUT_VIDEO_RESIZE_HEIGHT_DELTA = 905;
  181. GLUT_VIDEO_RESIZE_X = 906;
  182. GLUT_VIDEO_RESIZE_Y = 907;
  183. GLUT_VIDEO_RESIZE_WIDTH = 908;
  184. GLUT_VIDEO_RESIZE_HEIGHT = 909;
  185. // glutGetModifiers return mask.
  186. GLUT_ACTIVE_SHIFT = 1;
  187. GLUT_ACTIVE_CTRL = 2;
  188. GLUT_ACTIVE_ALT = 4;
  189. // glutSetCursor parameters.
  190. // Basic arrows.
  191. GLUT_CURSOR_RIGHT_ARROW = 0;
  192. GLUT_CURSOR_LEFT_ARROW = 1;
  193. // Symbolic cursor shapes.
  194. GLUT_CURSOR_INFO = 2;
  195. GLUT_CURSOR_DESTROY = 3;
  196. GLUT_CURSOR_HELP = 4;
  197. GLUT_CURSOR_CYCLE = 5;
  198. GLUT_CURSOR_SPRAY = 6;
  199. GLUT_CURSOR_WAIT = 7;
  200. GLUT_CURSOR_TEXT = 8;
  201. GLUT_CURSOR_CROSSHAIR = 9;
  202. // Directional cursors.
  203. GLUT_CURSOR_UP_DOWN = 10;
  204. GLUT_CURSOR_LEFT_RIGHT = 11;
  205. // Sizing cursors.
  206. GLUT_CURSOR_TOP_SIDE = 12;
  207. GLUT_CURSOR_BOTTOM_SIDE = 13;
  208. GLUT_CURSOR_LEFT_SIDE = 14;
  209. GLUT_CURSOR_RIGHT_SIDE = 15;
  210. GLUT_CURSOR_TOP_LEFT_CORNER = 16;
  211. GLUT_CURSOR_TOP_RIGHT_CORNER = 17;
  212. GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 18;
  213. GLUT_CURSOR_BOTTOM_LEFT_CORNER = 19;
  214. // Inherit from parent window.
  215. GLUT_CURSOR_INHERIT = 100;
  216. // Blank cursor.
  217. GLUT_CURSOR_NONE = 101;
  218. // Fullscreen crosshair (if available).
  219. GLUT_CURSOR_FULL_CROSSHAIR = 102;
  220. // GLUT game mode sub-API.
  221. // glutGameModeGet.
  222. GLUT_GAME_MODE_ACTIVE = 0;
  223. GLUT_GAME_MODE_POSSIBLE = 1;
  224. GLUT_GAME_MODE_WIDTH = 2;
  225. GLUT_GAME_MODE_HEIGHT = 3;
  226. GLUT_GAME_MODE_PIXEL_DEPTH = 4;
  227. GLUT_GAME_MODE_REFRESH_RATE = 5;
  228. GLUT_GAME_MODE_DISPLAY_CHANGED = 6;
  229. var
  230. // GLUT initialization sub-API.
  231. glutInit: procedure(argcp: PInteger; argv: PPChar); extdecl;
  232. glutInitDisplayMode: procedure(mode: Word); extdecl;
  233. glutInitDisplayString: procedure(const str: PChar); extdecl;
  234. glutInitWindowPosition: procedure(x, y: Integer); extdecl;
  235. glutInitWindowSize: procedure(width, height: Integer); extdecl;
  236. glutMainLoop: procedure; extdecl;
  237. // GLUT window sub-API.
  238. glutCreateWindow: function(const title: PChar): Integer; extdecl;
  239. glutCreateSubWindow: function(win, x, y, width, height: Integer): Integer; extdecl;
  240. glutDestroyWindow: procedure(win: Integer); extdecl;
  241. glutPostRedisplay: procedure; extdecl;
  242. glutPostWindowRedisplay: procedure(win: Integer); extdecl;
  243. glutSwapBuffers: procedure; extdecl;
  244. glutGetWindow: function: Integer; extdecl;
  245. glutSetWindow: procedure(win: Integer); extdecl;
  246. glutSetWindowTitle: procedure(const title: PChar); extdecl;
  247. glutSetIconTitle: procedure(const title: PChar); extdecl;
  248. glutPositionWindow: procedure(x, y: Integer); extdecl;
  249. glutReshapeWindow: procedure(width, height: Integer); extdecl;
  250. glutPopWindow: procedure; extdecl;
  251. glutPushWindow: procedure; extdecl;
  252. glutIconifyWindow: procedure; extdecl;
  253. glutShowWindow: procedure; extdecl;
  254. glutHideWindow: procedure; extdecl;
  255. glutFullScreen: procedure; extdecl;
  256. glutSetCursor: procedure(cursor: Integer); extdecl;
  257. glutWarpPointer: procedure(x, y: Integer); extdecl;
  258. // GLUT overlay sub-API.
  259. glutEstablishOverlay: procedure; extdecl;
  260. glutRemoveOverlay: procedure; extdecl;
  261. glutUseLayer: procedure(layer: GLenum); extdecl;
  262. glutPostOverlayRedisplay: procedure; extdecl;
  263. glutPostWindowOverlayRedisplay: procedure(win: Integer); extdecl;
  264. glutShowOverlay: procedure; extdecl;
  265. glutHideOverlay: procedure; extdecl;
  266. // GLUT menu sub-API.
  267. glutCreateMenu: function(callback: TGlut1IntCallback): Integer; extdecl;
  268. glutDestroyMenu: procedure(menu: Integer); extdecl;
  269. glutGetMenu: function: Integer; extdecl;
  270. glutSetMenu: procedure(menu: Integer); extdecl;
  271. glutAddMenuEntry: procedure(const caption: PChar; value: Integer); extdecl;
  272. glutAddSubMenu: procedure(const caption: PChar; submenu: Integer); extdecl;
  273. glutChangeToMenuEntry: procedure(item: Integer; const caption: PChar; value: Integer); extdecl;
  274. glutChangeToSubMenu: procedure(item: Integer; const caption: PChar; submenu: Integer); extdecl;
  275. glutRemoveMenuItem: procedure(item: Integer); extdecl;
  276. glutAttachMenu: procedure(button: Integer); extdecl;
  277. glutDetachMenu: procedure(button: Integer); extdecl;
  278. // GLUTsub-API.
  279. glutDisplayFunc: procedure(f: TGlutVoidCallback); extdecl;
  280. glutReshapeFunc: procedure(f: TGlut2IntCallback); extdecl;
  281. glutKeyboardFunc: procedure(f: TGlut1Char2IntCallback); extdecl;
  282. glutMouseFunc: procedure(f: TGlut4IntCallback); extdecl;
  283. glutMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  284. glutPassiveMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  285. glutEntryFunc: procedure(f: TGlut1IntCallback); extdecl;
  286. glutVisibilityFunc: procedure(f: TGlut1IntCallback); extdecl;
  287. glutIdleFunc: procedure(f: TGlutVoidCallback); extdecl;
  288. glutTimerFunc: procedure(millis: Word; f: TGlut1IntCallback; value: Integer); extdecl;
  289. glutMenuStateFunc: procedure(f: TGlut1IntCallback); extdecl;
  290. glutSpecialFunc: procedure(f: TGlut3IntCallback); extdecl;
  291. glutSpaceballMotionFunc: procedure(f: TGlut3IntCallback); extdecl;
  292. glutSpaceballRotateFunc: procedure(f: TGlut3IntCallback); extdecl;
  293. glutSpaceballButtonFunc: procedure(f: TGlut2IntCallback); extdecl;
  294. glutButtonBoxFunc: procedure(f: TGlut2IntCallback); extdecl;
  295. glutDialsFunc: procedure(f: TGlut2IntCallback); extdecl;
  296. glutTabletMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  297. glutTabletButtonFunc: procedure(f: TGlut4IntCallback); extdecl;
  298. glutMenuStatusFunc: procedure(f: TGlut3IntCallback); extdecl;
  299. glutOverlayDisplayFunc: procedure(f:TGlutVoidCallback); extdecl;
  300. glutWindowStatusFunc: procedure(f: TGlut1IntCallback); extdecl;
  301. // GLUT color index sub-API.
  302. glutSetColor: procedure(cell: Integer; red, green, blue: GLfloat); extdecl;
  303. glutGetColor: function(ndx, component: Integer): GLfloat; extdecl;
  304. glutCopyColormap: procedure(win: Integer); extdecl;
  305. // GLUT state retrieval sub-API.
  306. glutGet: function(t: GLenum): Integer; extdecl;
  307. glutDeviceGet: function(t: GLenum): Integer; extdecl;
  308. // GLUT extension support sub-API
  309. glutExtensionSupported: function(const name: PChar): Integer; extdecl;
  310. glutGetModifiers: function: Integer; extdecl;
  311. glutLayerGet: function(t: GLenum): Integer; extdecl;
  312. // GLUT font sub-API
  313. glutBitmapCharacter: procedure(font : pointer; character: Integer); extdecl;
  314. glutBitmapWidth: function(font : pointer; character: Integer): Integer; extdecl;
  315. glutStrokeCharacter: procedure(font : pointer; character: Integer); extdecl;
  316. glutStrokeWidth: function(font : pointer; character: Integer): Integer; extdecl;
  317. glutBitmapLength: function(font: pointer; const str: PChar): Integer; extdecl;
  318. glutStrokeLength: function(font: pointer; const str: PChar): Integer; extdecl;
  319. // GLUT pre-built models sub-API
  320. glutWireSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  321. glutSolidSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  322. glutWireCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  323. glutSolidCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  324. glutWireCube: procedure(size: GLdouble); extdecl;
  325. glutSolidCube: procedure(size: GLdouble); extdecl;
  326. glutWireTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  327. glutSolidTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  328. glutWireDodecahedron: procedure; extdecl;
  329. glutSolidDodecahedron: procedure; extdecl;
  330. glutWireTeapot: procedure(size: GLdouble); extdecl;
  331. glutSolidTeapot: procedure(size: GLdouble); extdecl;
  332. glutWireOctahedron: procedure; extdecl;
  333. glutSolidOctahedron: procedure; extdecl;
  334. glutWireTetrahedron: procedure; extdecl;
  335. glutSolidTetrahedron: procedure; extdecl;
  336. glutWireIcosahedron: procedure; extdecl;
  337. glutSolidIcosahedron: procedure; extdecl;
  338. // GLUT video resize sub-API.
  339. glutVideoResizeGet: function(param: GLenum): Integer; extdecl;
  340. glutSetupVideoResizing: procedure; extdecl;
  341. glutStopVideoResizing: procedure; extdecl;
  342. glutVideoResize: procedure(x, y, width, height: Integer); extdecl;
  343. glutVideoPan: procedure(x, y, width, height: Integer); extdecl;
  344. // GLUT debugging sub-API.
  345. glutReportErrors: procedure; extdecl;
  346. var
  347. //example glutGameModeString('1280x1024:32@75');
  348. glutGameModeString : procedure (const AString : PChar); extdecl;
  349. glutEnterGameMode : function : integer; extdecl;
  350. glutLeaveGameMode : procedure; extdecl;
  351. glutGameModeGet : function (mode : GLenum) : integer; extdecl;
  352. procedure LoadGlut(const dll: String);
  353. procedure FreeGlut;
  354. implementation
  355. var
  356. hDLL: THandle;
  357. procedure FreeGlut;
  358. begin
  359. FreeLibrary(hDLL);
  360. @glutInit := nil;
  361. @glutInitDisplayMode := nil;
  362. @glutInitDisplayString := nil;
  363. @glutInitWindowPosition := nil;
  364. @glutInitWindowSize := nil;
  365. @glutMainLoop := nil;
  366. @glutCreateWindow := nil;
  367. @glutCreateSubWindow := nil;
  368. @glutDestroyWindow := nil;
  369. @glutPostRedisplay := nil;
  370. @glutPostWindowRedisplay := nil;
  371. @glutSwapBuffers := nil;
  372. @glutGetWindow := nil;
  373. @glutSetWindow := nil;
  374. @glutSetWindowTitle := nil;
  375. @glutSetIconTitle := nil;
  376. @glutPositionWindow := nil;
  377. @glutReshapeWindow := nil;
  378. @glutPopWindow := nil;
  379. @glutPushWindow := nil;
  380. @glutIconifyWindow := nil;
  381. @glutShowWindow := nil;
  382. @glutHideWindow := nil;
  383. @glutFullScreen := nil;
  384. @glutSetCursor := nil;
  385. @glutWarpPointer := nil;
  386. @glutEstablishOverlay := nil;
  387. @glutRemoveOverlay := nil;
  388. @glutUseLayer := nil;
  389. @glutPostOverlayRedisplay := nil;
  390. @glutPostWindowOverlayRedisplay := nil;
  391. @glutShowOverlay := nil;
  392. @glutHideOverlay := nil;
  393. @glutCreateMenu := nil;
  394. @glutDestroyMenu := nil;
  395. @glutGetMenu := nil;
  396. @glutSetMenu := nil;
  397. @glutAddMenuEntry := nil;
  398. @glutAddSubMenu := nil;
  399. @glutChangeToMenuEntry := nil;
  400. @glutChangeToSubMenu := nil;
  401. @glutRemoveMenuItem := nil;
  402. @glutAttachMenu := nil;
  403. @glutDetachMenu := nil;
  404. @glutDisplayFunc := nil;
  405. @glutReshapeFunc := nil;
  406. @glutKeyboardFunc := nil;
  407. @glutMouseFunc := nil;
  408. @glutMotionFunc := nil;
  409. @glutPassiveMotionFunc := nil;
  410. @glutEntryFunc := nil;
  411. @glutVisibilityFunc := nil;
  412. @glutIdleFunc := nil;
  413. @glutTimerFunc := nil;
  414. @glutMenuStateFunc := nil;
  415. @glutSpecialFunc := nil;
  416. @glutSpaceballMotionFunc := nil;
  417. @glutSpaceballRotateFunc := nil;
  418. @glutSpaceballButtonFunc := nil;
  419. @glutButtonBoxFunc := nil;
  420. @glutDialsFunc := nil;
  421. @glutTabletMotionFunc := nil;
  422. @glutTabletButtonFunc := nil;
  423. @glutMenuStatusFunc := nil;
  424. @glutOverlayDisplayFunc := nil;
  425. @glutWindowStatusFunc := nil;
  426. @glutSetColor := nil;
  427. @glutGetColor := nil;
  428. @glutCopyColormap := nil;
  429. @glutGet := nil;
  430. @glutDeviceGet := nil;
  431. @glutExtensionSupported := nil;
  432. @glutGetModifiers := nil;
  433. @glutLayerGet := nil;
  434. @glutBitmapCharacter := nil;
  435. @glutBitmapWidth := nil;
  436. @glutStrokeCharacter := nil;
  437. @glutStrokeWidth := nil;
  438. @glutBitmapLength := nil;
  439. @glutStrokeLength := nil;
  440. @glutWireSphere := nil;
  441. @glutSolidSphere := nil;
  442. @glutWireCone := nil;
  443. @glutSolidCone := nil;
  444. @glutWireCube := nil;
  445. @glutSolidCube := nil;
  446. @glutWireTorus := nil;
  447. @glutSolidTorus := nil;
  448. @glutWireDodecahedron := nil;
  449. @glutSolidDodecahedron := nil;
  450. @glutWireTeapot := nil;
  451. @glutSolidTeapot := nil;
  452. @glutWireOctahedron := nil;
  453. @glutSolidOctahedron := nil;
  454. @glutWireTetrahedron := nil;
  455. @glutSolidTetrahedron := nil;
  456. @glutWireIcosahedron := nil;
  457. @glutSolidIcosahedron := nil;
  458. @glutVideoResizeGet := nil;
  459. @glutSetupVideoResizing := nil;
  460. @glutStopVideoResizing := nil;
  461. @glutVideoResize := nil;
  462. @glutVideoPan := nil;
  463. @glutReportErrors := nil;
  464. end;
  465. procedure LoadGlut(const dll: String);
  466. begin
  467. FreeGlut;
  468. hDLL := LoadLibrary(PChar(dll));
  469. if hDLL = 0 then raise Exception.Create('Could not load Glut from ' + dll);
  470. @glutInit := GetProcAddress(hDLL, 'glutInit');
  471. @glutInitDisplayMode := GetProcAddress(hDLL, 'glutInitDisplayMode');
  472. @glutInitDisplayString := GetProcAddress(hDLL, 'glutInitDisplayString');
  473. @glutInitWindowPosition := GetProcAddress(hDLL, 'glutInitWindowPosition');
  474. @glutInitWindowSize := GetProcAddress(hDLL, 'glutInitWindowSize');
  475. @glutMainLoop := GetProcAddress(hDLL, 'glutMainLoop');
  476. @glutCreateWindow := GetProcAddress(hDLL, 'glutCreateWindow');
  477. @glutCreateSubWindow := GetProcAddress(hDLL, 'glutCreateSubWindow');
  478. @glutDestroyWindow := GetProcAddress(hDLL, 'glutDestroyWindow');
  479. @glutPostRedisplay := GetProcAddress(hDLL, 'glutPostRedisplay');
  480. @glutPostWindowRedisplay := GetProcAddress(hDLL, 'glutPostWindowRedisplay');
  481. @glutSwapBuffers := GetProcAddress(hDLL, 'glutSwapBuffers');
  482. @glutGetWindow := GetProcAddress(hDLL, 'glutGetWindow');
  483. @glutSetWindow := GetProcAddress(hDLL, 'glutSetWindow');
  484. @glutSetWindowTitle := GetProcAddress(hDLL, 'glutSetWindowTitle');
  485. @glutSetIconTitle := GetProcAddress(hDLL, 'glutSetIconTitle');
  486. @glutPositionWindow := GetProcAddress(hDLL, 'glutPositionWindow');
  487. @glutReshapeWindow := GetProcAddress(hDLL, 'glutReshapeWindow');
  488. @glutPopWindow := GetProcAddress(hDLL, 'glutPopWindow');
  489. @glutPushWindow := GetProcAddress(hDLL, 'glutPushWindow');
  490. @glutIconifyWindow := GetProcAddress(hDLL, 'glutIconifyWindow');
  491. @glutShowWindow := GetProcAddress(hDLL, 'glutShowWindow');
  492. @glutHideWindow := GetProcAddress(hDLL, 'glutHideWindow');
  493. @glutFullScreen := GetProcAddress(hDLL, 'glutFullScreen');
  494. @glutSetCursor := GetProcAddress(hDLL, 'glutSetCursor');
  495. @glutWarpPointer := GetProcAddress(hDLL, 'glutWarpPointer');
  496. @glutEstablishOverlay := GetProcAddress(hDLL, 'glutEstablishOverlay');
  497. @glutRemoveOverlay := GetProcAddress(hDLL, 'glutRemoveOverlay');
  498. @glutUseLayer := GetProcAddress(hDLL, 'glutUseLayer');
  499. @glutPostOverlayRedisplay := GetProcAddress(hDLL, 'glutPostOverlayRedisplay');
  500. @glutPostWindowOverlayRedisplay := GetProcAddress(hDLL, 'glutPostWindowOverlayRedisplay');
  501. @glutShowOverlay := GetProcAddress(hDLL, 'glutShowOverlay');
  502. @glutHideOverlay := GetProcAddress(hDLL, 'glutHideOverlay');
  503. @glutCreateMenu := GetProcAddress(hDLL, 'glutCreateMenu');
  504. @glutDestroyMenu := GetProcAddress(hDLL, 'glutDestroyMenu');
  505. @glutGetMenu := GetProcAddress(hDLL, 'glutGetMenu');
  506. @glutSetMenu := GetProcAddress(hDLL, 'glutSetMenu');
  507. @glutAddMenuEntry := GetProcAddress(hDLL, 'glutAddMenuEntry');
  508. @glutAddSubMenu := GetProcAddress(hDLL, 'glutAddSubMenu');
  509. @glutChangeToMenuEntry := GetProcAddress(hDLL, 'glutChangeToMenuEntry');
  510. @glutChangeToSubMenu := GetProcAddress(hDLL, 'glutChangeToSubMenu');
  511. @glutRemoveMenuItem := GetProcAddress(hDLL, 'glutRemoveMenuItem');
  512. @glutAttachMenu := GetProcAddress(hDLL, 'glutAttachMenu');
  513. @glutDetachMenu := GetProcAddress(hDLL, 'glutDetachMenu');
  514. @glutDisplayFunc := GetProcAddress(hDLL, 'glutDisplayFunc');
  515. @glutReshapeFunc := GetProcAddress(hDLL, 'glutReshapeFunc');
  516. @glutKeyboardFunc := GetProcAddress(hDLL, 'glutKeyboardFunc');
  517. @glutMouseFunc := GetProcAddress(hDLL, 'glutMouseFunc');
  518. @glutMotionFunc := GetProcAddress(hDLL, 'glutMotionFunc');
  519. @glutPassiveMotionFunc := GetProcAddress(hDLL, 'glutPassiveMotionFunc');
  520. @glutEntryFunc := GetProcAddress(hDLL, 'glutEntryFunc');
  521. @glutVisibilityFunc := GetProcAddress(hDLL, 'glutVisibilityFunc');
  522. @glutIdleFunc := GetProcAddress(hDLL, 'glutIdleFunc');
  523. @glutTimerFunc := GetProcAddress(hDLL, 'glutTimerFunc');
  524. @glutMenuStateFunc := GetProcAddress(hDLL, 'glutMenuStateFunc');
  525. @glutSpecialFunc := GetProcAddress(hDLL, 'glutSpecialFunc');
  526. @glutSpaceballMotionFunc := GetProcAddress(hDLL, 'glutSpaceballMotionFunc');
  527. @glutSpaceballRotateFunc := GetProcAddress(hDLL, 'glutSpaceballRotateFunc');
  528. @glutSpaceballButtonFunc := GetProcAddress(hDLL, 'glutSpaceballButtonFunc');
  529. @glutButtonBoxFunc := GetProcAddress(hDLL, 'glutButtonBoxFunc');
  530. @glutDialsFunc := GetProcAddress(hDLL, 'glutDialsFunc');
  531. @glutTabletMotionFunc := GetProcAddress(hDLL, 'glutTabletMotionFunc');
  532. @glutTabletButtonFunc := GetProcAddress(hDLL, 'glutTabletButtonFunc');
  533. @glutMenuStatusFunc := GetProcAddress(hDLL, 'glutMenuStatusFunc');
  534. @glutOverlayDisplayFunc := GetProcAddress(hDLL, 'glutOverlayDisplayFunc');
  535. @glutWindowStatusFunc := GetProcAddress(hDLL, 'glutWindowStatusFunc');
  536. @glutSetColor := GetProcAddress(hDLL, 'glutSetColor');
  537. @glutGetColor := GetProcAddress(hDLL, 'glutGetColor');
  538. @glutCopyColormap := GetProcAddress(hDLL, 'glutCopyColormap');
  539. @glutGet := GetProcAddress(hDLL, 'glutGet');
  540. @glutDeviceGet := GetProcAddress(hDLL, 'glutDeviceGet');
  541. @glutExtensionSupported := GetProcAddress(hDLL, 'glutExtensionSupported');
  542. @glutGetModifiers := GetProcAddress(hDLL, 'glutGetModifiers');
  543. @glutLayerGet := GetProcAddress(hDLL, 'glutLayerGet');
  544. @glutBitmapCharacter := GetProcAddress(hDLL, 'glutBitmapCharacter');
  545. @glutBitmapWidth := GetProcAddress(hDLL, 'glutBitmapWidth');
  546. @glutStrokeCharacter := GetProcAddress(hDLL, 'glutStrokeCharacter');
  547. @glutStrokeWidth := GetProcAddress(hDLL, 'glutStrokeWidth');
  548. @glutBitmapLength := GetProcAddress(hDLL, 'glutBitmapLength');
  549. @glutStrokeLength := GetProcAddress(hDLL, 'glutStrokeLength');
  550. @glutWireSphere := GetProcAddress(hDLL, 'glutWireSphere');
  551. @glutSolidSphere := GetProcAddress(hDLL, 'glutSolidSphere');
  552. @glutWireCone := GetProcAddress(hDLL, 'glutWireCone');
  553. @glutSolidCone := GetProcAddress(hDLL, 'glutSolidCone');
  554. @glutWireCube := GetProcAddress(hDLL, 'glutWireCube');
  555. @glutSolidCube := GetProcAddress(hDLL, 'glutSolidCube');
  556. @glutWireTorus := GetProcAddress(hDLL, 'glutWireTorus');
  557. @glutSolidTorus := GetProcAddress(hDLL, 'glutSolidTorus');
  558. @glutWireDodecahedron := GetProcAddress(hDLL, 'glutWireDodecahedron');
  559. @glutSolidDodecahedron := GetProcAddress(hDLL, 'glutSolidDodecahedron');
  560. @glutWireTeapot := GetProcAddress(hDLL, 'glutWireTeapot');
  561. @glutSolidTeapot := GetProcAddress(hDLL, 'glutSolidTeapot');
  562. @glutWireOctahedron := GetProcAddress(hDLL, 'glutWireOctahedron');
  563. @glutSolidOctahedron := GetProcAddress(hDLL, 'glutSolidOctahedron');
  564. @glutWireTetrahedron := GetProcAddress(hDLL, 'glutWireTetrahedron');
  565. @glutSolidTetrahedron := GetProcAddress(hDLL, 'glutSolidTetrahedron');
  566. @glutWireIcosahedron := GetProcAddress(hDLL, 'glutWireIcosahedron');
  567. @glutSolidIcosahedron := GetProcAddress(hDLL, 'glutSolidIcosahedron');
  568. @glutVideoResizeGet := GetProcAddress(hDLL, 'glutVideoResizeGet');
  569. @glutSetupVideoResizing := GetProcAddress(hDLL, 'glutSetupVideoResizing');
  570. @glutStopVideoResizing := GetProcAddress(hDLL, 'glutStopVideoResizing');
  571. @glutVideoResize := GetProcAddress(hDLL, 'glutVideoResize');
  572. @glutVideoPan := GetProcAddress(hDLL, 'glutVideoPan');
  573. @glutReportErrors := GetProcAddress(hDLL, 'glutReportErrors');
  574. @glutGameModeString := GetProcAddress(hDLL, 'glutGameModeString');
  575. @glutEnterGameMode := GetProcAddress(hDLL, 'glutEnterGameMode');
  576. @glutLeaveGameMode := GetProcAddress(hDLL, 'glutLeaveGameMode');
  577. @glutGameModeGet := GetProcAddress(hDLL, 'glutGameModeGet');
  578. end;
  579. initialization
  580. try
  581. {$IFDEF Win32}
  582. LoadGlut('glut32.dll');
  583. {$ELSE}
  584. {$ifdef darwin}
  585. LoadGlut('/System/Library/Frameworks/GLUT.framework/GLUT');
  586. {$else}
  587. LoadGlut('libglut.so.3');
  588. {$endif}
  589. {$ENDIF}
  590. except
  591. writeln('Can''t load glut library');
  592. halt(1);
  593. end;
  594. finalization
  595. FreeGlut;
  596. end.
  597. {
  598. $Log:
  599. }