glut.pp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. {
  2. $Id$
  3. Translation of the GLUT 3.7 headers for Free Pascal, Linux version
  4. Copyright (C) 1999-2000 Sebastian Guenther, [email protected]
  5. Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998.
  6. This program is freely distributable without licensing fees and is
  7. provided without guarantee or warrantee expressed or implied. This
  8. program is -not- in the public domain.
  9. }
  10. unit GLUT;
  11. {$MODE delphi}
  12. interface
  13. uses GL;
  14. function InitGLUTFromLibrary(const libname: PChar): Boolean;
  15. // determines automatically which library to use:
  16. function InitGLUT: Boolean;
  17. var
  18. GLUTInitialized: Boolean;
  19. { Set the following value to True if you want to have a list of all
  20. unresolved GLUT functions dumped to the console }
  21. GLUTDumpUnresolvedFunctions: Boolean;
  22. { GLUT API revision history:
  23. GLUT_API_VERSION is updated to reflect incompatible GLUT
  24. API changes (interface changes, semantic changes, deletions,
  25. or additions).
  26. GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
  27. GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
  28. extension. Supports new input devices like tablet, dial and button
  29. box, and Spaceball. Easy to query OpenGL extensions.
  30. GLUT_API_VERSION=3 glutMenuStatus added.
  31. GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
  32. glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
  33. video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
  34. glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
  35. glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!). }
  36. const
  37. GLUT_API_VERSION = 4;
  38. // Display mode bit masks
  39. GLUT_RGB = 0;
  40. GLUT_RGBA = GLUT_RGB;
  41. GLUT_INDEX = 1;
  42. GLUT_SINGLE = 0;
  43. GLUT_DOUBLE = 2;
  44. GLUT_ACCUM = 4;
  45. GLUT_ALPHA = 8;
  46. GLUT_DEPTH = 16;
  47. GLUT_STENCIL = 32;
  48. GLUT_MULTISAMPLE = 128;
  49. GLUT_STEREO = 256;
  50. GLUT_LUMINANCE = 512;
  51. // Mouse buttons
  52. GLUT_LEFT_BUTTON = 0;
  53. GLUT_MIDDLE_BUTTON = 1;
  54. GLUT_RIGHT_BUTTON = 2;
  55. // Mouse button state
  56. GLUT_DOWN = 0;
  57. GLUT_UP = 1;
  58. // function keys
  59. GLUT_KEY_F1 = 1;
  60. GLUT_KEY_F2 = 2;
  61. GLUT_KEY_F3 = 3;
  62. GLUT_KEY_F4 = 4;
  63. GLUT_KEY_F5 = 5;
  64. GLUT_KEY_F6 = 6;
  65. GLUT_KEY_F7 = 7;
  66. GLUT_KEY_F8 = 8;
  67. GLUT_KEY_F9 = 9;
  68. GLUT_KEY_F10 = 10;
  69. GLUT_KEY_F11 = 11;
  70. GLUT_KEY_F12 = 12;
  71. // directional keys
  72. GLUT_KEY_LEFT = 100;
  73. GLUT_KEY_UP = 101;
  74. GLUT_KEY_RIGHT = 102;
  75. GLUT_KEY_DOWN = 103;
  76. GLUT_KEY_PAGE_UP = 104;
  77. GLUT_KEY_PAGE_DOWN = 105;
  78. GLUT_KEY_HOME = 106;
  79. GLUT_KEY_END = 107;
  80. GLUT_KEY_INSERT = 108;
  81. // Enter / exit state
  82. GLUT_LEFT = 0;
  83. GLUT_ENTERED = 1;
  84. // Menu usage state
  85. GLUT_MENU_NOT_IN_USE = 0;
  86. GLUT_MENU_IN_USE = 1;
  87. // Visibility state
  88. GLUT_NOT_VISIBLE = 0;
  89. GLUT_VISIBLE = 1;
  90. // Window status state
  91. GLUT_HIDDEN = 0;
  92. GLUT_FULLY_RETAINED = 1;
  93. GLUT_PARTIALLY_RETAINED = 2;
  94. GLUT_FULLY_COVERED = 3;
  95. // Color index component selection values
  96. GLUT_RED = 0;
  97. GLUT_GREEN = 1;
  98. GLUT_BLUE = 2;
  99. // Layers for use
  100. GLUT_NORMAL = 0;
  101. GLUT_OVERLAY = 1;
  102. // glutGet parameters
  103. GLUT_WINDOW_X = 100;
  104. GLUT_WINDOW_Y = 101;
  105. GLUT_WINDOW_WIDTH = 102;
  106. GLUT_WINDOW_HEIGHT = 103;
  107. GLUT_WINDOW_BUFFER_SIZE = 104;
  108. GLUT_WINDOW_STENCIL_SIZE = 105;
  109. GLUT_WINDOW_DEPTH_SIZE = 106;
  110. GLUT_WINDOW_RED_SIZE = 107;
  111. GLUT_WINDOW_GREEN_SIZE = 108;
  112. GLUT_WINDOW_BLUE_SIZE = 109;
  113. GLUT_WINDOW_ALPHA_SIZE = 110;
  114. GLUT_WINDOW_ACCUM_RED_SIZE = 111;
  115. GLUT_WINDOW_ACCUM_GREEN_SIZE = 112;
  116. GLUT_WINDOW_ACCUM_BLUE_SIZE = 113;
  117. GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114;
  118. GLUT_WINDOW_DOUBLEBUFFER = 115;
  119. GLUT_WINDOW_RGBA = 116;
  120. GLUT_WINDOW_PARENT = 117;
  121. GLUT_WINDOW_NUM_CHILDREN = 118;
  122. GLUT_WINDOW_COLORMAP_SIZE = 119;
  123. GLUT_WINDOW_NUM_SAMPLES = 120;
  124. GLUT_WINDOW_STEREO = 121;
  125. GLUT_WINDOW_CURSOR = 122;
  126. GLUT_SCREEN_WIDTH = 200;
  127. GLUT_SCREEN_HEIGHT = 201;
  128. GLUT_SCREEN_WIDTH_MM = 202;
  129. GLUT_SCREEN_HEIGHT_MM = 203;
  130. GLUT_MENU_NUM_ITEMS = 300;
  131. GLUT_DISPLAY_MODE_POSSIBLE = 400;
  132. GLUT_INIT_WINDOW_X = 500;
  133. GLUT_INIT_WINDOW_Y = 501;
  134. GLUT_INIT_WINDOW_WIDTH = 502;
  135. GLUT_INIT_WINDOW_HEIGHT = 503;
  136. GLUT_INIT_DISPLAY_MODE = 504;
  137. GLUT_ELAPSED_TIME = 700;
  138. GLUT_WINDOW_FORMAT_ID = 123;
  139. // glutDeviceGet parameters
  140. GLUT_HAS_KEYBOARD = 600;
  141. GLUT_HAS_MOUSE = 601;
  142. GLUT_HAS_SPACEBALL = 602;
  143. GLUT_HAS_DIAL_AND_BUTTON_BOX = 603;
  144. GLUT_HAS_TABLET = 604;
  145. GLUT_NUM_MOUSE_BUTTONS = 605;
  146. GLUT_NUM_SPACEBALL_BUTTONS = 606;
  147. GLUT_NUM_BUTTON_BOX_BUTTONS = 607;
  148. GLUT_NUM_DIALS = 608;
  149. GLUT_NUM_TABLET_BUTTONS = 609;
  150. GLUT_DEVICE_IGNORE_KEY_REPEAT = 610;
  151. GLUT_DEVICE_KEY_REPEAT = 611;
  152. GLUT_HAS_JOYSTICK = 612;
  153. GLUT_OWNS_JOYSTICK = 613;
  154. GLUT_JOYSTICK_BUTTONS = 614;
  155. GLUT_JOYSTICK_AXES = 615;
  156. GLUT_JOYSTICK_POLL_RATE = 616;
  157. // glutLayerGet parameters
  158. GLUT_OVERLAY_POSSIBLE = 800;
  159. GLUT_LAYER_IN_USE = 801;
  160. GLUT_HAS_OVERLAY = 802;
  161. GLUT_TRANSPARENT_INDEX = 803;
  162. GLUT_NORMAL_DAMAGED = 804;
  163. GLUT_OVERLAY_DAMAGED = 805;
  164. // glutVideoResizeGet parameters
  165. GLUT_VIDEO_RESIZE_POSSIBLE = 900;
  166. GLUT_VIDEO_RESIZE_IN_USE = 901;
  167. GLUT_VIDEO_RESIZE_X_DELTA = 902;
  168. GLUT_VIDEO_RESIZE_Y_DELTA = 903;
  169. GLUT_VIDEO_RESIZE_WIDTH_DELTA = 904;
  170. GLUT_VIDEO_RESIZE_HEIGHT_DELTA= 905;
  171. GLUT_VIDEO_RESIZE_X = 906;
  172. GLUT_VIDEO_RESIZE_Y = 907;
  173. GLUT_VIDEO_RESIZE_WIDTH = 908;
  174. GLUT_VIDEO_RESIZE_HEIGHT = 909;
  175. // glutGetModifiers return mask
  176. GLUT_ACTIVE_SHIFT = 1;
  177. GLUT_ACTIVE_CTRL = 2;
  178. GLUT_ACTIVE_ALT = 4;
  179. // glutSetCursor parameters
  180. // Basic arrows
  181. GLUT_CURSOR_RIGHT_ARROW = 0;
  182. GLUT_CURSOR_LEFT_ARROW = 1;
  183. // Symbolic cursor shapes
  184. GLUT_CURSOR_INFO = 2;
  185. GLUT_CURSOR_DESTROY = 3;
  186. GLUT_CURSOR_HELP = 4;
  187. GLUT_CURSOR_CYCLE = 5;
  188. GLUT_CURSOR_SPRAY = 6;
  189. GLUT_CURSOR_WAIT = 7;
  190. GLUT_CURSOR_TEXT = 8;
  191. GLUT_CURSOR_CROSSHAIR = 9;
  192. // Directional cursors
  193. GLUT_CURSOR_UP_DOWN = 10;
  194. GLUT_CURSOR_LEFT_RIGHT = 11;
  195. // Sizing cursors
  196. GLUT_CURSOR_TOP_SIDE = 12;
  197. GLUT_CURSOR_BOTTOM_SIDE = 13;
  198. GLUT_CURSOR_LEFT_SIDE = 14;
  199. GLUT_CURSOR_RIGHT_SIDE = 15;
  200. GLUT_CURSOR_TOP_LEFT_CORNER = 16;
  201. GLUT_CURSOR_TOP_RIGHT_CORNER = 17;
  202. GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 18;
  203. GLUT_CURSOR_BOTTOM_LEFT_CORNER = 19;
  204. // Inherit from parent window
  205. GLUT_CURSOR_INHERIT = 100;
  206. // Blank cursor
  207. GLUT_CURSOR_NONE = 101;
  208. // Fullscreen crosshair (if available)
  209. GLUT_CURSOR_FULL_CROSSHAIR = 102;
  210. type
  211. // GLUT menu sub-API
  212. TGlutCreateMenuFunc = procedure(arg: Int); cdecl;
  213. // GLUT window callback sub-API
  214. TGlutDisplayFunc = procedure; cdecl;
  215. TGlutReshapeFunc = procedure(width, height: Int); cdecl;
  216. TGlutKeyboardFunc = procedure(key: Char; x, y: Int); cdecl;
  217. TGlutMouseFunc = procedure(button, state, x, y: Int); cdecl;
  218. TGlutMotionFunc = procedure(x, y: Int); cdecl;
  219. TGlutPassiveMotionFunc = procedure(x, y: Int); cdecl;
  220. TGlutEntryFunc = procedure(x, y: Int); cdecl;
  221. TGlutVisibilityFunc = procedure(state: Int); cdecl;
  222. TGlutIdleFunc = procedure; cdecl;
  223. TGlutTimerFunc = procedure(value: Int); cdecl;
  224. TGlutMenuStateFunc = procedure(state: Int); cdecl;
  225. TGlutSpecialFunc = procedure(key, x, y: Int); cdecl;
  226. TGlutSpaceballMotionFunc = procedure(x, y, z: Int); cdecl;
  227. TGlutSpaceballRotateFunc = procedure(x, y, z: Int); cdecl;
  228. TGlutSpaceballButtonFunc = procedure(button, state: Int); cdecl;
  229. TGlutButtonBoxFunc = procedure(button, state: Int); cdecl;
  230. TGlutDialsFunc = procedure(dial, value: Int); cdecl;
  231. TGlutTabletMotionFunc = procedure(x, y: Int); cdecl;
  232. TGlutTabletButtonFunc = procedure(button, state, x, y: Int); cdecl;
  233. TGlutMenuStatusFunc = procedure(status, x, y: Int); cdecl;
  234. TGlutOverlayDisplayFunc = procedure; cdecl;
  235. TGlutWindowStatusFunc = procedure(state: Int); cdecl;
  236. TGlutKeyboardUpFunc = procedure(key: Char; x, y: Int); cdecl;
  237. TGlutSpecialUpFunc = procedure(key, x, y: Int); cdecl;
  238. TGlutJoystickFunc = procedure(buttonMask: UnsignedInt; x, y, z: Int); cdecl;
  239. const
  240. // GLUT device control sub-API
  241. // glutSetKeyRepeat modes.
  242. GLUT_KEY_REPEAT_OFF = 0;
  243. GLUT_KEY_REPEAT_ON = 1;
  244. GLUT_KEY_REPEAT_DEFAULT = 2;
  245. // Joystick button masks
  246. GLUT_JOYSTICK_BUTTON_A = 1;
  247. GLUT_JOYSTICK_BUTTON_B = 2;
  248. GLUT_JOYSTICK_BUTTON_C = 4;
  249. GLUT_JOYSTICK_BUTTON_D = 8;
  250. // GLUT game mode sub-API
  251. // glutGameModeGet
  252. GLUT_GAME_MODE_ACTIVE = 0;
  253. GLUT_GAME_MODE_POSSIBLE = 1;
  254. GLUT_GAME_MODE_WIDTH = 2;
  255. GLUT_GAME_MODE_HEIGHT = 3;
  256. GLUT_GAME_MODE_PIXEL_DEPTH = 4;
  257. GLUT_GAME_MODE_REFRESH_RATE = 5;
  258. GLUT_GAME_MODE_DISPLAY_CHANGED= 6;
  259. var
  260. { The following stuff does not exist in the Win32 version: }
  261. (* commented out because cvars don't work in Delphi mode...
  262. // Stroke font opaque addresses (use constants instead in source code).
  263. var
  264. glutStrokeRoman, glutStrokeMonoRoman: Pointer; cvar; external;
  265. // Stroke font constants (use these in GLUT program).
  266. const
  267. GLUT_STROKE_ROMAN = @glutStrokeRoman;
  268. GLUT_STROKE_MONO_ROMAN = @glutStrokeMonoRoman;
  269. // Bitmap font opaque addresses (use constants instead in source code).
  270. var
  271. glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
  272. glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
  273. glutBitmapHelvetica18: Pointer; cdecl; external;
  274. // Bitmap font constants (use these in GLUT program).
  275. const
  276. GLUT_BITMAP_9_BY_15 = @glutBitmap9By15;
  277. GLUT_BITMAP_8_BY_13 = @glutBitmap8By13;
  278. GLUT_BITMAP_TIMES_ROMAN_10 = @glutBitmapTimesRoman10;
  279. GLUT_BITMAP_TIMES_ROMAN_24 = @glutBitmapTimesRoman24;
  280. GLUT_BITMAP_HELVETICA_10 = @glutBitmapHelvetica10;
  281. GLUT_BITMAP_HELVETICA_12 = @glutBitmapHelvetica12;
  282. GLUT_BITMAP_HELVETICA_18 = @glutBitmapHelvetica18;*)
  283. // GLUT initialization sub-API
  284. glutInit: procedure(argcp: PInt; argv: PPChar); cdecl;
  285. glutInitDisplayMode: procedure(mode: UnsignedInt); cdecl;
  286. glutInitDisplayString: procedure(const AString: PChar); cdecl;
  287. glutInitWindowPosition: procedure(x, y: Int); cdecl;
  288. glutInitWindowSize: procedure(width, height: Int); cdecl;
  289. glutMainLoop: procedure; cdecl;
  290. // GLUT window sub-API
  291. glutCreateWindow: function(const title: PChar): Int; cdecl;
  292. glutCreateSubWindow: function(win, x, y, width, height: Int): Int; cdecl;
  293. glutDestroyWindow: procedure(win: Int); cdecl;
  294. glutPostRedisplay: procedure; cdecl;
  295. glutPostWindowRedisplay: procedure(win: Int); cdecl;
  296. glutSwapBuffers: procedure; cdecl;
  297. glutGetWindow: function: Int; cdecl;
  298. glutSetWindow: procedure(win: Int); cdecl;
  299. glutSetWindowTitle: procedure(const title: PChar); cdecl;
  300. glutSetIconTitle: procedure(title: PChar); cdecl;
  301. glutPositionWindow: procedure(x, y: Int); cdecl;
  302. glutReshapeWindow: procedure(width, height: Int); cdecl;
  303. glutPopWindow: procedure; cdecl;
  304. glutPushWindow: procedure; cdecl;
  305. glutIconifyWindow: procedure; cdecl;
  306. glutShowWindow: procedure; cdecl;
  307. glutHideWindow: procedure; cdecl;
  308. glutFullScreen: procedure; cdecl;
  309. glutSetCursor: procedure(cursor: Int); cdecl;
  310. glutWarpPointer: procedure(x, y: Int); cdecl;
  311. // GLUT overlay sub-API
  312. glutEstablishOverlay: procedure; cdecl;
  313. glutRemoveOverlay: procedure; cdecl;
  314. glutUseLayer: procedure(layer: GLenum); cdecl;
  315. glutPostOverlayRedisplay: procedure; cdecl;
  316. glutPostWindowOverlayRedisplay: procedure(win: Int); cdecl;
  317. glutShowOverlay: procedure; cdecl;
  318. glutHideOverlay: procedure; cdecl;
  319. // GLUT menu sub-API
  320. glutCreateMenu: function(func: TGlutCreateMenuFunc): Int; cdecl;
  321. glutDestroyMenu: procedure(menu: Int); cdecl;
  322. glutGetMenu: function: Int; cdecl;
  323. glutSetMenu: procedure(menu: Int); cdecl;
  324. glutAddMenuEntry: procedure(const ALabel: PChar; value: Int); cdecl;
  325. glutAddSubMenu: procedure(const ALabel: PChar; submenu: Int); cdecl;
  326. glutChangeToMenuEntry: procedure(item: Int; const ALabel: PChar; value: Int); cdecl;
  327. glutChangeToSubMenu: procedure(item: Int; const ALabel: PChar; submenu: Int); cdecl;
  328. glutRemoveMenuItem: procedure(item: Int); cdecl;
  329. glutAttachMenu: procedure(button: Int); cdecl;
  330. glutDetachMenu: procedure(button: Int); cdecl;
  331. // GLUT window callback sub-API
  332. glutDisplayFunc: procedure(func: TGlutDisplayFunc); cdecl;
  333. glutReshapeFunc: procedure(func: TGlutReshapeFunc); cdecl;
  334. glutKeyboardFunc: procedure(func: TGlutKeyboardFunc); cdecl;
  335. glutMouseFunc: procedure(func: TGlutMouseFunc); cdecl;
  336. glutMotionFunc: procedure(func: TGlutMotionFunc); cdecl;
  337. glutPassiveMotionFunc: procedure(func: TGlutPassiveMotionFunc); cdecl;
  338. glutEntryFunc: procedure(func: TGlutEntryFunc); cdecl;
  339. glutIdleFunc: procedure(func: TGlutIdleFunc); cdecl;
  340. glutTimerFunc: procedure(millis: UnsignedInt; func: TGlutTimerFunc; value: Int); cdecl;
  341. glutMenuStateFunc: procedure(func: TGlutMenuStateFunc); cdecl;
  342. glutSpecialFunc: procedure(func: TGlutSpecialFunc); cdecl;
  343. glutSpaceballMotionFunc: procedure(func: TGlutSpaceballMotionFunc); cdecl;
  344. glutSpaceballRotateFunc: procedure(func: TGlutSpaceballRotateFunc); cdecl;
  345. glutSpaceballButtonFunc: procedure(func: TGlutSpaceballButtonFunc); cdecl;
  346. glutButtonBoxFunc: procedure(func: TGlutButtonBoxFunc); cdecl;
  347. glutDialsFunc: procedure(func: TGlutDialsFunc); cdecl;
  348. glutTabletMotionFunc: procedure(func: TGlutTabletMotionFunc); cdecl;
  349. glutTabletButtonFunc: procedure(func: TGlutTabletButtonFunc); cdecl;
  350. glutMenuStatusFunc: procedure(func: TGlutMenuStatusFunc); cdecl;
  351. glutOverlayDisplayFunc: procedure(func: TGlutOverlayDisplayFunc); cdecl;
  352. glutWindowStatusFunc: procedure(func: TGlutWindowStatusFunc); cdecl;
  353. glutKeyboardUpFunc: procedure(func: TGlutKeyboardUpFunc); cdecl;
  354. glutSpecialUpFunc: procedure(func: TGlutSpecialUpFunc); cdecl;
  355. glutJoystickFunc: procedure(func: TGlutJoystickFunc; pollinterval: Int); cdecl;
  356. // GLUT color index sub-API
  357. glutSetColor: procedure(index: Int; red, green, blue: GLfloat); cdecl;
  358. glutGetColor: function(ndx, component: Int): GLfloat; cdecl;
  359. glutCopyColormap: procedure(win: Int); cdecl;
  360. // GLUT state retrieval sub-API
  361. glutGet: function(AType: GLEnum): Int; cdecl;
  362. glutDeviceGet: function(AType: GLEnum): Int; cdecl;
  363. glutExtensionSupported: function(const name: PChar): Int; cdecl;
  364. glutGetModifiers: function: Int; cdecl;
  365. glutLayerGet: function(AType: GLEnum): Int; cdecl;
  366. // GLUT font sub-API
  367. glutBitmapCharacter: procedure(font: Pointer; character: Int); cdecl;
  368. glutBitmapWidth: function(font: Pointer; character: Int): Int; cdecl;
  369. glutStrokeCharacter: procedure(font: Pointer; character: Int); cdecl;
  370. glutStrokeWidth: function(font: Pointer; character: Int): Int; cdecl;
  371. glutBitmapLength: function(font: Pointer; const AString: PChar): Int; cdecl;
  372. glutStrokeLength: function(font: Pointer; const AString: PChar): Int; cdecl;
  373. // GLUT pre-built models sub-API
  374. glutWireSphere: procedure(radius: GLdouble; slices, stacks: GLint); cdecl;
  375. glutSolidSphere: procedure(radius: GLdouble; slices, stacks: GLint); cdecl;
  376. glutWireCone: procedure(base: GLdouble; height: GLdouble; slices, stacks: GLint); cdecl;
  377. glutSolidCone: procedure(base: GLdouble; height: GLdouble; slices, stacks: GLint); cdecl;
  378. glutWireCube: procedure(size: GLdouble); cdecl;
  379. glutSolidCube: procedure(size: GLdouble); cdecl;
  380. glutWireTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); cdecl;
  381. glutSolidTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); cdecl;
  382. glutWireDodecahedron: procedure; cdecl;
  383. glutSolidDodecahedron: procedure; cdecl;
  384. glutWireTeapot: procedure(size: GLdouble); cdecl;
  385. glutSolidTeapot: procedure(size: GLdouble); cdecl;
  386. glutWireOctahedron: procedure; cdecl;
  387. glutSolidOctahedron: procedure; cdecl;
  388. glutWireTetrahedron: procedure; cdecl;
  389. glutSolidTetrahedron: procedure; cdecl;
  390. glutWireIcosahedron: procedure; cdecl;
  391. glutSolidIcosahedron: procedure; cdecl;
  392. // GLUT video resize sub-API
  393. glutVideoResizeGet: function(param: GLenum): Int; cdecl;
  394. glutSetupVideoResizing: procedure; cdecl;
  395. glutStopVideoResizing: procedure; cdecl;
  396. glutVideoResize: procedure(x, y, width, height: Int); cdecl;
  397. glutVideoPan: procedure(x, y, width, height: Int); cdecl;
  398. // GLUT debugging sub-API
  399. glutReportErrors: procedure; cdecl;
  400. // GLUT device control sub-API
  401. glutIgnoreKeyRepeat: procedure(ignore: Int); cdecl;
  402. glutSetKeyRepeat: procedure(repeatMode: Int); cdecl;
  403. glutForceJoystickFunc: procedure; cdecl;
  404. // GLUT game mode sub-API
  405. glutGameModeString: procedure(const AString: PChar); cdecl;
  406. glutEnterGameMode: function: Integer; cdecl;
  407. glutLeaveGameMode: procedure; cdecl;
  408. glutGameModeGet: function(mode: GLEnum): Int; cdecl;
  409. implementation
  410. {$LINKLIB Xmu}
  411. function dlopen(const AFile: PChar; mode: LongInt): Pointer; external 'dl';
  412. function dlclose(handle: Pointer): LongInt; external 'dl';
  413. function dlsym(handle: Pointer; const name: PChar): Pointer; external 'dl';
  414. function LoadLibrary(const name: PChar): Pointer;
  415. begin
  416. Result := dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY});
  417. end;
  418. procedure FreeLibrary(handle: Pointer);
  419. begin
  420. dlclose(handle);
  421. end;
  422. function GetProc(handle: Pointer; const name: PChar): Pointer;
  423. begin
  424. Result := dlsym(handle, name);
  425. if not Assigned(Result) and GLUTDumpUnresolvedFunctions then
  426. WriteLn('Unresolved: ', name);
  427. end;
  428. var
  429. libGLUT: Pointer;
  430. function InitGLUTFromLibrary(const libname: PChar): Boolean;
  431. begin
  432. Result := False;
  433. libGLUT := LoadLibrary(libname);
  434. if not Assigned(libGLUT) then
  435. exit;
  436. glutInit := GetProc(libglut, 'glutInit');
  437. glutInitDisplayMode := GetProc(libglut, 'glutInitDisplayMode');
  438. glutInitDisplayString := GetProc(libglut, 'glutInitDisplayString');
  439. glutInitWindowPosition := GetProc(libglut, 'glutInitWindowPosition');
  440. glutInitWindowSize := GetProc(libglut, 'glutInitWindowSize');
  441. glutMainLoop := GetProc(libglut, 'glutMainLoop');
  442. glutCreateWindow := GetProc(libglut, 'glutCreateWindow');
  443. glutCreateSubWindow := GetProc(libglut, 'glutCreateSubWindow');
  444. glutDestroyWindow := GetProc(libglut, 'glutDestroyWindow');
  445. glutPostRedisplay := GetProc(libglut, 'glutPostRedisplay');
  446. glutPostWindowRedisplay := GetProc(libglut, 'glutPostWindowRedisplay');
  447. glutSwapBuffers := GetProc(libglut, 'glutSwapBuffers');
  448. glutGetWindow := GetProc(libglut, 'glutGetWindow');
  449. glutSetWindow := GetProc(libglut, 'glutSetWindow');
  450. glutSetWindowTitle := GetProc(libglut, 'glutSetWindowTitle');
  451. glutSetIconTitle := GetProc(libglut, 'glutSetIconTitle');
  452. glutPositionWindow := GetProc(libglut, 'glutPositionWindow');
  453. glutReshapeWindow := GetProc(libglut, 'glutReshapeWindow');
  454. glutPopWindow := GetProc(libglut, 'glutPopWindow');
  455. glutPushWindow := GetProc(libglut, 'glutPushWindow');
  456. glutIconifyWindow := GetProc(libglut, 'glutIconifyWindow');
  457. glutShowWindow := GetProc(libglut, 'glutShowWindow');
  458. glutHideWindow := GetProc(libglut, 'glutHideWindow');
  459. glutFullScreen := GetProc(libglut, 'glutFullScreen');
  460. glutSetCursor := GetProc(libglut, 'glutSetCursor');
  461. glutWarpPointer := GetProc(libglut, 'glutWarpPointer');
  462. glutEstablishOverlay := GetProc(libglut, 'glutEstablishOverlay');
  463. glutRemoveOverlay := GetProc(libglut, 'glutRemoveOverlay');
  464. glutUseLayer := GetProc(libglut, 'glutUseLayer');
  465. glutPostOverlayRedisplay := GetProc(libglut, 'glutPostOverlayRedisplay');
  466. glutPostWindowOverlayRedisplay := GetProc(libglut, 'glutPostWindowOverlayRedisplay');
  467. glutShowOverlay := GetProc(libglut, 'glutShowOverlay');
  468. glutHideOverlay := GetProc(libglut, 'glutHideOverlay');
  469. glutCreateMenu := GetProc(libglut, 'glutCreateMenu');
  470. glutDestroyMenu := GetProc(libglut, 'glutDestroyMenu');
  471. glutGetMenu := GetProc(libglut, 'glutGetMenu');
  472. glutSetMenu := GetProc(libglut, 'glutSetMenu');
  473. glutAddMenuEntry := GetProc(libglut, 'glutAddMenuEntry');
  474. glutAddSubMenu := GetProc(libglut, 'glutAddSubMenu');
  475. glutChangeToMenuEntry := GetProc(libglut, 'glutChangeToMenuEntry');
  476. glutChangeToSubMenu := GetProc(libglut, 'glutChangeToSubMenu');
  477. glutRemoveMenuItem := GetProc(libglut, 'glutRemoveMenuItem');
  478. glutAttachMenu := GetProc(libglut, 'glutAttachMenu');
  479. glutDetachMenu := GetProc(libglut, 'glutDetachMenu');
  480. glutDisplayFunc := GetProc(libglut, 'glutDisplayFunc');
  481. glutReshapeFunc := GetProc(libglut, 'glutReshapeFunc');
  482. glutKeyboardFunc := GetProc(libglut, 'glutKeyboardFunc');
  483. glutMouseFunc := GetProc(libglut, 'glutMouseFunc');
  484. glutMotionFunc := GetProc(libglut, 'glutMotionFunc');
  485. glutPassiveMotionFunc := GetProc(libglut, 'glutPassiveMotionFunc');
  486. glutEntryFunc := GetProc(libglut, 'glutEntryFunc');
  487. glutIdleFunc := GetProc(libglut, 'glutIdleFunc');
  488. glutTimerFunc := GetProc(libglut, 'glutTimerFunc');
  489. glutMenuStateFunc := GetProc(libglut, 'glutMenuStateFunc');
  490. glutSpecialFunc := GetProc(libglut, 'glutSpecialFunc');
  491. glutSpaceballMotionFunc := GetProc(libglut, 'glutSpaceballMotionFunc');
  492. glutSpaceballRotateFunc := GetProc(libglut, 'glutSpaceballRotateFunc');
  493. glutSpaceballButtonFunc := GetProc(libglut, 'glutSpaceballButtonFunc');
  494. glutButtonBoxFunc := GetProc(libglut, 'glutButtonBoxFunc');
  495. glutDialsFunc := GetProc(libglut, 'glutDialsFunc');
  496. glutTabletMotionFunc := GetProc(libglut, 'glutTabletMotionFunc');
  497. glutTabletButtonFunc := GetProc(libglut, 'glutTabletButtonFunc');
  498. glutMenuStatusFunc := GetProc(libglut, 'glutMenuStatusFunc');
  499. glutOverlayDisplayFunc := GetProc(libglut, 'glutOverlayDisplayFunc');
  500. glutWindowStatusFunc := GetProc(libglut, 'glutWindowStatusFunc');
  501. glutKeyboardUpFunc := GetProc(libglut, 'glutKeyboardUpFunc');
  502. glutSpecialUpFunc := GetProc(libglut, 'glutSpecialUpFunc');
  503. glutJoystickFunc := GetProc(libglut, 'glutJoystickFunc');
  504. glutSetColor := GetProc(libglut, 'glutSetColor');
  505. glutGetColor := GetProc(libglut, 'glutGetColor');
  506. glutCopyColormap := GetProc(libglut, 'glutCopyColormap');
  507. glutGet := GetProc(libglut, 'glutGet');
  508. glutDeviceGet := GetProc(libglut, 'glutDeviceGet');
  509. glutExtensionSupported := GetProc(libglut, 'glutExtensionSupported');
  510. glutGetModifiers := GetProc(libglut, 'glutGetModifiers');
  511. glutLayerGet := GetProc(libglut, 'glutLayerGet');
  512. glutBitmapCharacter := GetProc(libglut, 'glutBitmapCharacter');
  513. glutBitmapWidth := GetProc(libglut, 'glutBitmapWidth');
  514. glutStrokeCharacter := GetProc(libglut, 'glutStrokeCharacter');
  515. glutStrokeWidth := GetProc(libglut, 'glutStrokeWidth');
  516. glutBitmapLength := GetProc(libglut, 'glutBitmapLength');
  517. glutStrokeLength := GetProc(libglut, 'glutStrokeLength');
  518. glutWireSphere := GetProc(libglut, 'glutWireSphere');
  519. glutSolidSphere := GetProc(libglut, 'glutSolidSphere');
  520. glutWireCone := GetProc(libglut, 'glutWireCone');
  521. glutSolidCone := GetProc(libglut, 'glutSolidCone');
  522. glutWireCube := GetProc(libglut, 'glutWireCube');
  523. glutSolidCube := GetProc(libglut, 'glutSolidCube');
  524. glutWireTorus := GetProc(libglut, 'glutWireTorus');
  525. glutSolidTorus := GetProc(libglut, 'glutSolidTorus');
  526. glutWireDodecahedron := GetProc(libglut, 'glutWireDodecahedron');
  527. glutSolidDodecahedron := GetProc(libglut, 'glutSolidDodecahedron');
  528. glutWireTeapot := GetProc(libglut, 'glutWireTeapot');
  529. glutSolidTeapot := GetProc(libglut, 'glutSolidTeapot');
  530. glutWireOctahedron := GetProc(libglut, 'glutWireOctahedron');
  531. glutSolidOctahedron := GetProc(libglut, 'glutSolidOctahedron');
  532. glutWireTetrahedron := GetProc(libglut, 'glutWireTetrahedron');
  533. glutSolidTetrahedron := GetProc(libglut, 'glutSolidTetrahedron');
  534. glutWireIcosahedron := GetProc(libglut, 'glutWireIcosahedron');
  535. glutSolidIcosahedron := GetProc(libglut, 'glutSolidIcosahedron');
  536. glutVideoResizeGet := GetProc(libglut, 'glutVideoResizeGet');
  537. glutSetupVideoResizing := GetProc(libglut, 'glutSetupVideoResizing');
  538. glutStopVideoResizing := GetProc(libglut, 'glutStopVideoResizing');
  539. glutVideoResize := GetProc(libglut, 'glutVideoResize');
  540. glutVideoPan := GetProc(libglut, 'glutVideoPan');
  541. glutReportErrors := GetProc(libglut, 'glutReportErrors');
  542. glutIgnoreKeyRepeat := GetProc(libglut, 'glutIgnoreKeyRepeat');
  543. glutSetKeyRepeat := GetProc(libglut, 'glutSetKeyRepeat');
  544. glutForceJoystickFunc := GetProc(libglut, 'glutForceJoystickFunc');
  545. glutGameModeString := GetProc(libglut, 'glutGameModeString');
  546. glutEnterGameMode := GetProc(libglut, 'glutEnterGameMode');
  547. glutLeaveGameMode := GetProc(libglut, 'glutLeaveGameMode');
  548. glutGameModeGet := GetProc(libglut, 'glutGameModeGet');
  549. GLUTInitialized := True;
  550. Result := True;
  551. end;
  552. function InitGLUT: Boolean;
  553. begin
  554. Result := InitGLUTFromLibrary('libglut.so') or InitGLUTFromLibrary('libglut.so.3');
  555. end;
  556. finalization
  557. if Assigned(libGLUT) then
  558. FreeLibrary(libGLUT);
  559. end.
  560. {
  561. $Log$
  562. Revision 1.2 2000-07-13 11:33:29 michael
  563. + removed logs
  564. }