glut.pp 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102
  1. { Adaption of the delphi3d.net OpenGL units to FreePascal
  2. Sebastian Guenther ([email protected]) in 2002
  3. These units are free to use
  4. 19.6.07 : Added GLUT_EXCLUSIVE_FPUMODE to allow for
  5. unsafe glut-libs, that don't handle FPU-exceptions in
  6. a compatible way. Jan Bruns ([email protected])
  7. }
  8. {$MACRO ON}
  9. {$MODE Delphi}
  10. {$IFDEF Windows}
  11. {$DEFINE extdecl := stdcall}
  12. {$ELSE}
  13. {$DEFINE extdecl := cdecl}
  14. {$ENDIF}
  15. {$IFDEF CPU86}
  16. {$DEFINE GLUT_EXCLUSIVE_FPUMODE}
  17. {$DEFINE mode_inline := register} //inine or local-calling
  18. {$ENDIF}
  19. {$IFDEF MORPHOS}
  20. {$INLINE ON}
  21. {$DEFINE GLUT_UNIT}
  22. {$ENDIF}
  23. unit Glut;
  24. // Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. */
  25. (* This program is freely distributable without licensing fees and is
  26. provided without guarantee or warrantee expressed or implied. This
  27. program is -not- in the public domain. *)
  28. {******************************************************************************}
  29. { Converted to Delphi by Tom Nuydens ([email protected]) }
  30. { Contributions by Igor Karpov ([email protected]) }
  31. { For the latest updates, visit Delphi3D: http://www.delphi3d.net }
  32. {******************************************************************************}
  33. interface
  34. uses
  35. SysUtils,
  36. {$IFDEF Windows}
  37. Windows, dynlibs,
  38. {$ELSE}
  39. {$IFDEF MORPHOS}
  40. TinyGL,
  41. {$ELSE}
  42. dynlibs,
  43. {$ENDIF}
  44. {$ENDIF}
  45. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  46. math,
  47. {$ENDIF}
  48. GL;
  49. type
  50. PInteger = ^Integer;
  51. PPChar = ^PChar;
  52. TGlutVoidCallback = procedure; cdecl;
  53. TGlut1IntCallback = procedure(value: Integer); cdecl;
  54. TGlut2IntCallback = procedure(v1, v2: Integer); cdecl;
  55. TGlut3IntCallback = procedure(v1, v2, v3: Integer); cdecl;
  56. TGlut4IntCallback = procedure(v1, v2, v3, v4: Integer); cdecl;
  57. TGlut1Char2IntCallback = procedure(c: Byte; v1, v2: Integer); cdecl;
  58. TGlut1UInt3IntCallback = procedure(u: Cardinal; v1, v2, v3: Integer); cdecl;
  59. const
  60. GLUT_API_VERSION = 3;
  61. GLUT_XLIB_IMPLEMENTATION = 12;
  62. // Display mode bit masks.
  63. GLUT_RGB = 0;
  64. GLUT_RGBA = GLUT_RGB;
  65. GLUT_INDEX = 1;
  66. GLUT_SINGLE = 0;
  67. GLUT_DOUBLE = 2;
  68. GLUT_ACCUM = 4;
  69. GLUT_ALPHA = 8;
  70. GLUT_DEPTH = 16;
  71. GLUT_STENCIL = 32;
  72. GLUT_MULTISAMPLE = 128;
  73. GLUT_STEREO = 256;
  74. GLUT_LUMINANCE = 512;
  75. // Mouse buttons.
  76. GLUT_LEFT_BUTTON = 0;
  77. GLUT_MIDDLE_BUTTON = 1;
  78. GLUT_RIGHT_BUTTON = 2;
  79. // Mouse button state.
  80. GLUT_DOWN = 0;
  81. GLUT_UP = 1;
  82. // function keys
  83. GLUT_KEY_F1 = 1;
  84. GLUT_KEY_F2 = 2;
  85. GLUT_KEY_F3 = 3;
  86. GLUT_KEY_F4 = 4;
  87. GLUT_KEY_F5 = 5;
  88. GLUT_KEY_F6 = 6;
  89. GLUT_KEY_F7 = 7;
  90. GLUT_KEY_F8 = 8;
  91. GLUT_KEY_F9 = 9;
  92. GLUT_KEY_F10 = 10;
  93. GLUT_KEY_F11 = 11;
  94. GLUT_KEY_F12 = 12;
  95. // directional keys
  96. GLUT_KEY_LEFT = 100;
  97. GLUT_KEY_UP = 101;
  98. GLUT_KEY_RIGHT = 102;
  99. GLUT_KEY_DOWN = 103;
  100. GLUT_KEY_PAGE_UP = 104;
  101. GLUT_KEY_PAGE_DOWN = 105;
  102. GLUT_KEY_HOME = 106;
  103. GLUT_KEY_END = 107;
  104. GLUT_KEY_INSERT = 108;
  105. // Entry/exit state.
  106. GLUT_LEFT = 0;
  107. GLUT_ENTERED = 1;
  108. // Menu usage state.
  109. GLUT_MENU_NOT_IN_USE = 0;
  110. GLUT_MENU_IN_USE = 1;
  111. // Visibility state.
  112. GLUT_NOT_VISIBLE = 0;
  113. GLUT_VISIBLE = 1;
  114. // Window status state.
  115. GLUT_HIDDEN = 0;
  116. GLUT_FULLY_RETAINED = 1;
  117. GLUT_PARTIALLY_RETAINED = 2;
  118. GLUT_FULLY_COVERED = 3;
  119. // Color index component selection values.
  120. GLUT_RED = 0;
  121. GLUT_GREEN = 1;
  122. GLUT_BLUE = 2;
  123. // Layers for use.
  124. GLUT_NORMAL = 0;
  125. GLUT_OVERLAY = 1;
  126. {$ifdef Windows}
  127. // Stroke font constants (use these in GLUT program).
  128. GLUT_STROKE_ROMAN = Pointer(0);
  129. GLUT_STROKE_MONO_ROMAN = Pointer(1);
  130. // Bitmap font constants (use these in GLUT program).
  131. GLUT_BITMAP_9_BY_15 = Pointer(2);
  132. GLUT_BITMAP_8_BY_13 = Pointer(3);
  133. GLUT_BITMAP_TIMES_ROMAN_10 = Pointer(4);
  134. GLUT_BITMAP_TIMES_ROMAN_24 = Pointer(5);
  135. GLUT_BITMAP_HELVETICA_10 = Pointer(6);
  136. GLUT_BITMAP_HELVETICA_12 = Pointer(7);
  137. GLUT_BITMAP_HELVETICA_18 = Pointer(8);
  138. {$else Windows}
  139. var
  140. // Stroke font constants (use these in GLUT program).
  141. GLUT_STROKE_ROMAN : Pointer;
  142. GLUT_STROKE_MONO_ROMAN : Pointer;
  143. // Bitmap font constants (use these in GLUT program).
  144. GLUT_BITMAP_9_BY_15 : Pointer;
  145. GLUT_BITMAP_8_BY_13 : Pointer;
  146. GLUT_BITMAP_TIMES_ROMAN_10 : Pointer;
  147. GLUT_BITMAP_TIMES_ROMAN_24 : Pointer;
  148. GLUT_BITMAP_HELVETICA_10 : Pointer;
  149. GLUT_BITMAP_HELVETICA_12 : Pointer;
  150. GLUT_BITMAP_HELVETICA_18 : Pointer;
  151. const
  152. {$endif Windows}
  153. // glutGet parameters.
  154. GLUT_WINDOW_X = 100;
  155. GLUT_WINDOW_Y = 101;
  156. GLUT_WINDOW_WIDTH = 102;
  157. GLUT_WINDOW_HEIGHT = 103;
  158. GLUT_WINDOW_BUFFER_SIZE = 104;
  159. GLUT_WINDOW_STENCIL_SIZE = 105;
  160. GLUT_WINDOW_DEPTH_SIZE = 106;
  161. GLUT_WINDOW_RED_SIZE = 107;
  162. GLUT_WINDOW_GREEN_SIZE = 108;
  163. GLUT_WINDOW_BLUE_SIZE = 109;
  164. GLUT_WINDOW_ALPHA_SIZE = 110;
  165. GLUT_WINDOW_ACCUM_RED_SIZE = 111;
  166. GLUT_WINDOW_ACCUM_GREEN_SIZE = 112;
  167. GLUT_WINDOW_ACCUM_BLUE_SIZE = 113;
  168. GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114;
  169. GLUT_WINDOW_DOUBLEBUFFER = 115;
  170. GLUT_WINDOW_RGBA = 116;
  171. GLUT_WINDOW_PARENT = 117;
  172. GLUT_WINDOW_NUM_CHILDREN = 118;
  173. GLUT_WINDOW_COLORMAP_SIZE = 119;
  174. GLUT_WINDOW_NUM_SAMPLES = 120;
  175. GLUT_WINDOW_STEREO = 121;
  176. GLUT_WINDOW_CURSOR = 122;
  177. GLUT_SCREEN_WIDTH = 200;
  178. GLUT_SCREEN_HEIGHT = 201;
  179. GLUT_SCREEN_WIDTH_MM = 202;
  180. GLUT_SCREEN_HEIGHT_MM = 203;
  181. GLUT_MENU_NUM_ITEMS = 300;
  182. GLUT_DISPLAY_MODE_POSSIBLE = 400;
  183. GLUT_INIT_WINDOW_X = 500;
  184. GLUT_INIT_WINDOW_Y = 501;
  185. GLUT_INIT_WINDOW_WIDTH = 502;
  186. GLUT_INIT_WINDOW_HEIGHT = 503;
  187. GLUT_INIT_DISPLAY_MODE = 504;
  188. GLUT_ELAPSED_TIME = 700;
  189. GLUT_WINDOW_FORMAT_ID = 123;
  190. // glutDeviceGet parameters.
  191. GLUT_HAS_KEYBOARD = 600;
  192. GLUT_HAS_MOUSE = 601;
  193. GLUT_HAS_SPACEBALL = 602;
  194. GLUT_HAS_DIAL_AND_BUTTON_BOX = 603;
  195. GLUT_HAS_TABLET = 604;
  196. GLUT_NUM_MOUSE_BUTTONS = 605;
  197. GLUT_NUM_SPACEBALL_BUTTONS = 606;
  198. GLUT_NUM_BUTTON_BOX_BUTTONS = 607;
  199. GLUT_NUM_DIALS = 608;
  200. GLUT_NUM_TABLET_BUTTONS = 609;
  201. GLUT_DEVICE_IGNORE_KEY_REPEAT = 610;
  202. GLUT_DEVICE_KEY_REPEAT = 611;
  203. GLUT_HAS_JOYSTICK = 612;
  204. GLUT_OWNS_JOYSTICK = 613;
  205. GLUT_JOYSTICK_BUTTONS = 614;
  206. GLUT_JOYSTICK_AXES = 615;
  207. GLUT_JOYSTICK_POLL_RATE = 616;
  208. // glutLayerGet parameters.
  209. GLUT_OVERLAY_POSSIBLE = 800;
  210. GLUT_LAYER_IN_USE = 801;
  211. GLUT_HAS_OVERLAY = 802;
  212. GLUT_TRANSPARENT_INDEX = 803;
  213. GLUT_NORMAL_DAMAGED = 804;
  214. GLUT_OVERLAY_DAMAGED = 805;
  215. // glutVideoResizeGet parameters.
  216. GLUT_VIDEO_RESIZE_POSSIBLE = 900;
  217. GLUT_VIDEO_RESIZE_IN_USE = 901;
  218. GLUT_VIDEO_RESIZE_X_DELTA = 902;
  219. GLUT_VIDEO_RESIZE_Y_DELTA = 903;
  220. GLUT_VIDEO_RESIZE_WIDTH_DELTA = 904;
  221. GLUT_VIDEO_RESIZE_HEIGHT_DELTA = 905;
  222. GLUT_VIDEO_RESIZE_X = 906;
  223. GLUT_VIDEO_RESIZE_Y = 907;
  224. GLUT_VIDEO_RESIZE_WIDTH = 908;
  225. GLUT_VIDEO_RESIZE_HEIGHT = 909;
  226. // glutGetModifiers return mask.
  227. GLUT_ACTIVE_SHIFT = 1;
  228. GLUT_ACTIVE_CTRL = 2;
  229. GLUT_ACTIVE_ALT = 4;
  230. // glutSetCursor parameters.
  231. // Basic arrows.
  232. GLUT_CURSOR_RIGHT_ARROW = 0;
  233. GLUT_CURSOR_LEFT_ARROW = 1;
  234. // Symbolic cursor shapes.
  235. GLUT_CURSOR_INFO = 2;
  236. GLUT_CURSOR_DESTROY = 3;
  237. GLUT_CURSOR_HELP = 4;
  238. GLUT_CURSOR_CYCLE = 5;
  239. GLUT_CURSOR_SPRAY = 6;
  240. GLUT_CURSOR_WAIT = 7;
  241. GLUT_CURSOR_TEXT = 8;
  242. GLUT_CURSOR_CROSSHAIR = 9;
  243. // Directional cursors.
  244. GLUT_CURSOR_UP_DOWN = 10;
  245. GLUT_CURSOR_LEFT_RIGHT = 11;
  246. // Sizing cursors.
  247. GLUT_CURSOR_TOP_SIDE = 12;
  248. GLUT_CURSOR_BOTTOM_SIDE = 13;
  249. GLUT_CURSOR_LEFT_SIDE = 14;
  250. GLUT_CURSOR_RIGHT_SIDE = 15;
  251. GLUT_CURSOR_TOP_LEFT_CORNER = 16;
  252. GLUT_CURSOR_TOP_RIGHT_CORNER = 17;
  253. GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 18;
  254. GLUT_CURSOR_BOTTOM_LEFT_CORNER = 19;
  255. // Inherit from parent window.
  256. GLUT_CURSOR_INHERIT = 100;
  257. // Blank cursor.
  258. GLUT_CURSOR_NONE = 101;
  259. // Fullscreen crosshair (if available).
  260. GLUT_CURSOR_FULL_CROSSHAIR = 102;
  261. // GLUT device control sub-API.
  262. // glutSetKeyRepeat modes.
  263. GLUT_KEY_REPEAT_OFF = 0;
  264. GLUT_KEY_REPEAT_ON = 1;
  265. GLUT_KEY_REPEAT_DEFAULT = 2;
  266. // Joystick button masks.
  267. GLUT_JOYSTICK_BUTTON_A = 1;
  268. GLUT_JOYSTICK_BUTTON_B = 2;
  269. GLUT_JOYSTICK_BUTTON_C = 4;
  270. GLUT_JOYSTICK_BUTTON_D = 8;
  271. // GLUT game mode sub-API.
  272. // glutGameModeGet.
  273. GLUT_GAME_MODE_ACTIVE = 0;
  274. GLUT_GAME_MODE_POSSIBLE = 1;
  275. GLUT_GAME_MODE_WIDTH = 2;
  276. GLUT_GAME_MODE_HEIGHT = 3;
  277. GLUT_GAME_MODE_PIXEL_DEPTH = 4;
  278. GLUT_GAME_MODE_REFRESH_RATE = 5;
  279. GLUT_GAME_MODE_DISPLAY_CHANGED = 6;
  280. {$IFDEF MORPHOS}
  281. { MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
  282. { systems, so its headers are included here. }
  283. {$INCLUDE tinyglh.inc}
  284. {$ELSE MORPHOS}
  285. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  286. var
  287. OLD_glutInit:procedure(argcp: PInteger; argv: PPChar); extdecl;
  288. OLD_glutInitDisplayMode:procedure(mode: Word); extdecl;
  289. OLD_glutInitDisplayString:procedure(const str: PChar); extdecl;
  290. OLD_glutInitWindowPosition:procedure(x, y: Integer); extdecl;
  291. OLD_glutInitWindowSize:procedure(width, height: Integer); extdecl;
  292. OLD_glutMainLoop:procedure; extdecl;
  293. OLD_glutCreateWindow:function(const title: PChar): Integer; extdecl;
  294. OLD_glutCreateSubWindow:function(win, x, y, width, height: Integer): Integer; extdecl;
  295. OLD_glutDestroyWindow:procedure(win: Integer); extdecl;
  296. OLD_glutPostRedisplay:procedure; extdecl;
  297. OLD_glutPostWindowRedisplay:procedure(win: Integer); extdecl;
  298. OLD_glutSwapBuffers:procedure; extdecl;
  299. OLD_glutGetWindow:function: Integer; extdecl;
  300. OLD_glutSetWindow:procedure(win: Integer); extdecl;
  301. OLD_glutSetWindowTitle:procedure(const title: PChar); extdecl;
  302. OLD_glutSetIconTitle:procedure(const title: PChar); extdecl;
  303. OLD_glutPositionWindow:procedure(x, y: Integer); extdecl;
  304. OLD_glutReshapeWindow:procedure(width, height: Integer); extdecl;
  305. OLD_glutPopWindow:procedure; extdecl;
  306. OLD_glutPushWindow:procedure; extdecl;
  307. OLD_glutIconifyWindow:procedure; extdecl;
  308. OLD_glutShowWindow:procedure; extdecl;
  309. OLD_glutHideWindow:procedure; extdecl;
  310. OLD_glutFullScreen:procedure; extdecl;
  311. OLD_glutSetCursor:procedure(cursor: Integer); extdecl;
  312. OLD_glutWarpPointer:procedure(x, y: Integer); extdecl;
  313. OLD_glutEstablishOverlay:procedure; extdecl;
  314. OLD_glutRemoveOverlay:procedure; extdecl;
  315. OLD_glutUseLayer:procedure(layer: GLenum); extdecl;
  316. OLD_glutPostOverlayRedisplay:procedure; extdecl;
  317. OLD_glutPostWindowOverlayRedisplay:procedure(win: Integer); extdecl;
  318. OLD_glutShowOverlay:procedure; extdecl;
  319. OLD_glutHideOverlay:procedure; extdecl;
  320. OLD_glutCreateMenu:function(callback: TGlut1IntCallback): Integer; extdecl;
  321. OLD_glutDestroyMenu:procedure(menu: Integer); extdecl;
  322. OLD_glutGetMenu:function: Integer; extdecl;
  323. OLD_glutSetMenu:procedure(menu: Integer); extdecl;
  324. OLD_glutAddMenuEntry:procedure(const caption: PChar; value: Integer); extdecl;
  325. OLD_glutAddSubMenu:procedure(const caption: PChar; submenu: Integer); extdecl;
  326. OLD_glutChangeToMenuEntry:procedure(item: Integer; const caption: PChar; value: Integer); extdecl;
  327. OLD_glutChangeToSubMenu:procedure(item: Integer; const caption: PChar; submenu: Integer); extdecl;
  328. OLD_glutRemoveMenuItem:procedure(item: Integer); extdecl;
  329. OLD_glutAttachMenu:procedure(button: Integer); extdecl;
  330. OLD_glutDetachMenu:procedure(button: Integer); extdecl;
  331. OLD_glutDisplayFunc:procedure(f: TGlutVoidCallback); extdecl;
  332. OLD_glutReshapeFunc:procedure(f: TGlut2IntCallback); extdecl;
  333. OLD_glutKeyboardFunc:procedure(f: TGlut1Char2IntCallback); extdecl;
  334. OLD_glutMouseFunc:procedure(f: TGlut4IntCallback); extdecl;
  335. OLD_glutMotionFunc:procedure(f: TGlut2IntCallback); extdecl;
  336. OLD_glutPassiveMotionFunc:procedure(f: TGlut2IntCallback); extdecl;
  337. OLD_glutEntryFunc:procedure(f: TGlut1IntCallback); extdecl;
  338. OLD_glutVisibilityFunc:procedure(f: TGlut1IntCallback); extdecl;
  339. OLD_glutIdleFunc:procedure(f: TGlutVoidCallback); extdecl;
  340. OLD_glutTimerFunc:procedure(millis: Word; f: TGlut1IntCallback; value: Integer); extdecl;
  341. OLD_glutMenuStateFunc:procedure(f: TGlut1IntCallback); extdecl;
  342. OLD_glutSpecialFunc:procedure(f: TGlut3IntCallback); extdecl;
  343. OLD_glutSpaceballMotionFunc:procedure(f: TGlut3IntCallback); extdecl;
  344. OLD_glutSpaceballRotateFunc:procedure(f: TGlut3IntCallback); extdecl;
  345. OLD_glutSpaceballButtonFunc:procedure(f: TGlut2IntCallback); extdecl;
  346. OLD_glutButtonBoxFunc:procedure(f: TGlut2IntCallback); extdecl;
  347. OLD_glutDialsFunc:procedure(f: TGlut2IntCallback); extdecl;
  348. OLD_glutTabletMotionFunc:procedure(f: TGlut2IntCallback); extdecl;
  349. OLD_glutTabletButtonFunc:procedure(f: TGlut4IntCallback); extdecl;
  350. OLD_glutMenuStatusFunc:procedure(f: TGlut3IntCallback); extdecl;
  351. OLD_glutOverlayDisplayFunc:procedure(f:TGlutVoidCallback); extdecl;
  352. OLD_glutWindowStatusFunc:procedure(f: TGlut1IntCallback); extdecl;
  353. OLD_glutKeyboardUpFunc:procedure(f: TGlut1Char2IntCallback); extdecl;
  354. OLD_glutSpecialUpFunc:procedure(f: TGlut3IntCallback); extdecl;
  355. OLD_glutJoystickFunc:procedure(f: TGlut1UInt3IntCallback; pollInterval: Integer); extdecl;
  356. OLD_glutSetColor:procedure(cell: Integer; red, green, blue: GLfloat); extdecl;
  357. OLD_glutGetColor:function(ndx, component: Integer): GLfloat; extdecl;
  358. OLD_glutCopyColormap:procedure(win: Integer); extdecl;
  359. OLD_glutGet:function(t: GLenum): Integer; extdecl;
  360. OLD_glutDeviceGet:function(t: GLenum): Integer; extdecl;
  361. OLD_glutExtensionSupported:function(const name: PChar): Integer; extdecl;
  362. OLD_glutGetModifiers:function: Integer; extdecl;
  363. OLD_glutLayerGet:function(t: GLenum): Integer; extdecl;
  364. OLD_glutBitmapCharacter:procedure(font : pointer; character: Integer); extdecl;
  365. OLD_glutBitmapWidth:function(font : pointer; character: Integer): Integer; extdecl;
  366. OLD_glutStrokeCharacter:procedure(font : pointer; character: Integer); extdecl;
  367. OLD_glutStrokeWidth:function(font : pointer; character: Integer): Integer; extdecl;
  368. OLD_glutBitmapLength:function(font: pointer; const str: PChar): Integer; extdecl;
  369. OLD_glutStrokeLength:function(font: pointer; const str: PChar): Integer; extdecl;
  370. OLD_glutWireSphere:procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  371. OLD_glutSolidSphere:procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  372. OLD_glutWireCone:procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  373. OLD_glutSolidCone:procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  374. OLD_glutWireCube:procedure(size: GLdouble); extdecl;
  375. OLD_glutSolidCube:procedure(size: GLdouble); extdecl;
  376. OLD_glutWireTorus:procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  377. OLD_glutSolidTorus:procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  378. OLD_glutWireDodecahedron:procedure; extdecl;
  379. OLD_glutSolidDodecahedron:procedure; extdecl;
  380. OLD_glutWireTeapot:procedure(size: GLdouble); extdecl;
  381. OLD_glutSolidTeapot:procedure(size: GLdouble); extdecl;
  382. OLD_glutWireOctahedron:procedure; extdecl;
  383. OLD_glutSolidOctahedron:procedure; extdecl;
  384. OLD_glutWireTetrahedron:procedure; extdecl;
  385. OLD_glutSolidTetrahedron:procedure; extdecl;
  386. OLD_glutWireIcosahedron:procedure; extdecl;
  387. OLD_glutSolidIcosahedron:procedure; extdecl;
  388. OLD_glutVideoResizeGet:function(param: GLenum): Integer; extdecl;
  389. OLD_glutSetupVideoResizing:procedure; extdecl;
  390. OLD_glutStopVideoResizing:procedure; extdecl;
  391. OLD_glutVideoResize:procedure(x, y, width, height: Integer); extdecl;
  392. OLD_glutVideoPan:procedure(x, y, width, height: Integer); extdecl;
  393. OLD_glutReportErrors:procedure; extdecl;
  394. OLD_glutIgnoreKeyRepeat:procedure(ignore: Integer); extdecl;
  395. OLD_glutSetKeyRepeat:procedure(repeatMode: Integer); extdecl;
  396. OLD_glutForceJoystickFunc:procedure; extdecl;
  397. OLD_glutGameModeString:procedure(const AString : PChar); extdecl;
  398. OLD_glutEnterGameMode:function: integer; extdecl;
  399. OLD_glutLeaveGameMode:procedure; extdecl;
  400. OLD_glutGameModeGet:function(mode : GLenum): integer; extdecl;
  401. procedure glutInit(argcp: PInteger; argv: PPChar); mode_inline;
  402. procedure glutInitDisplayMode(mode: Word); mode_inline;
  403. procedure glutInitDisplayString(const str: PChar); mode_inline;
  404. procedure glutInitWindowPosition(x, y: Integer); mode_inline;
  405. procedure glutInitWindowSize(width, height: Integer); mode_inline;
  406. procedure glutMainLoop; mode_inline;
  407. function glutCreateWindow(const title: PChar): Integer; mode_inline;
  408. function glutCreateSubWindow(win, x, y, width, height: Integer): Integer; mode_inline;
  409. procedure glutDestroyWindow(win: Integer); mode_inline;
  410. procedure glutPostRedisplay; mode_inline;
  411. procedure glutPostWindowRedisplay(win: Integer); mode_inline;
  412. procedure glutSwapBuffers; mode_inline;
  413. function glutGetWindow: Integer; mode_inline;
  414. procedure glutSetWindow(win: Integer); mode_inline;
  415. procedure glutSetWindowTitle(const title: PChar); mode_inline;
  416. procedure glutSetIconTitle(const title: PChar); mode_inline;
  417. procedure glutPositionWindow(x, y: Integer); mode_inline;
  418. procedure glutReshapeWindow(width, height: Integer); mode_inline;
  419. procedure glutPopWindow; mode_inline;
  420. procedure glutPushWindow; mode_inline;
  421. procedure glutIconifyWindow; mode_inline;
  422. procedure glutShowWindow; mode_inline;
  423. procedure glutHideWindow; mode_inline;
  424. procedure glutFullScreen; mode_inline;
  425. procedure glutSetCursor(cursor: Integer); mode_inline;
  426. procedure glutWarpPointer(x, y: Integer); mode_inline;
  427. procedure glutEstablishOverlay; mode_inline;
  428. procedure glutRemoveOverlay; mode_inline;
  429. procedure glutUseLayer(layer: GLenum); mode_inline;
  430. procedure glutPostOverlayRedisplay; mode_inline;
  431. procedure glutPostWindowOverlayRedisplay(win: Integer); mode_inline;
  432. procedure glutShowOverlay; mode_inline;
  433. procedure glutHideOverlay; mode_inline;
  434. function glutCreateMenu(callback: TGlut1IntCallback): Integer; mode_inline;
  435. procedure glutDestroyMenu(menu: Integer); mode_inline;
  436. function glutGetMenu: Integer; mode_inline;
  437. procedure glutSetMenu(menu: Integer); mode_inline;
  438. procedure glutAddMenuEntry(const caption: PChar; value: Integer); mode_inline;
  439. procedure glutAddSubMenu(const caption: PChar; submenu: Integer); mode_inline;
  440. procedure glutChangeToMenuEntry(item: Integer; const caption: PChar; value: Integer); mode_inline;
  441. procedure glutChangeToSubMenu(item: Integer; const caption: PChar; submenu: Integer); mode_inline;
  442. procedure glutRemoveMenuItem(item: Integer); mode_inline;
  443. procedure glutAttachMenu(button: Integer); mode_inline;
  444. procedure glutDetachMenu(button: Integer); mode_inline;
  445. procedure glutDisplayFunc(f: TGlutVoidCallback); mode_inline;
  446. procedure glutReshapeFunc(f: TGlut2IntCallback); mode_inline;
  447. procedure glutKeyboardFunc(f: TGlut1Char2IntCallback); mode_inline;
  448. procedure glutMouseFunc(f: TGlut4IntCallback); mode_inline;
  449. procedure glutMotionFunc(f: TGlut2IntCallback); mode_inline;
  450. procedure glutPassiveMotionFunc(f: TGlut2IntCallback); mode_inline;
  451. procedure glutEntryFunc(f: TGlut1IntCallback); mode_inline;
  452. procedure glutVisibilityFunc(f: TGlut1IntCallback); mode_inline;
  453. procedure glutIdleFunc(f: TGlutVoidCallback); mode_inline;
  454. procedure glutTimerFunc(millis: Word; f: TGlut1IntCallback; value: Integer); mode_inline;
  455. procedure glutMenuStateFunc(f: TGlut1IntCallback); mode_inline;
  456. procedure glutSpecialFunc(f: TGlut3IntCallback); mode_inline;
  457. procedure glutSpaceballMotionFunc(f: TGlut3IntCallback); mode_inline;
  458. procedure glutSpaceballRotateFunc(f: TGlut3IntCallback); mode_inline;
  459. procedure glutSpaceballButtonFunc(f: TGlut2IntCallback); mode_inline;
  460. procedure glutButtonBoxFunc(f: TGlut2IntCallback); mode_inline;
  461. procedure glutDialsFunc(f: TGlut2IntCallback); mode_inline;
  462. procedure glutTabletMotionFunc(f: TGlut2IntCallback); mode_inline;
  463. procedure glutTabletButtonFunc(f: TGlut4IntCallback); mode_inline;
  464. procedure glutMenuStatusFunc(f: TGlut3IntCallback); mode_inline;
  465. procedure glutOverlayDisplayFunc(f:TGlutVoidCallback); mode_inline;
  466. procedure glutWindowStatusFunc(f: TGlut1IntCallback); mode_inline;
  467. procedure glutKeyboardUpFunc(f: TGlut1Char2IntCallback); mode_inline;
  468. procedure glutSpecialUpFunc(f: TGlut3IntCallback); mode_inline;
  469. procedure glutJoystickFunc(f: TGlut1UInt3IntCallback; pollInterval: Integer); mode_inline;
  470. procedure glutSetColor(cell: Integer; red, green, blue: GLfloat); mode_inline;
  471. function glutGetColor(ndx, component: Integer): GLfloat; mode_inline;
  472. procedure glutCopyColormap(win: Integer); mode_inline;
  473. function glutGet(t: GLenum): Integer; mode_inline;
  474. function glutDeviceGet(t: GLenum): Integer; mode_inline;
  475. function glutExtensionSupported(const name: PChar): Integer; mode_inline;
  476. function glutGetModifiers: Integer; mode_inline;
  477. function glutLayerGet(t: GLenum): Integer; mode_inline;
  478. procedure glutBitmapCharacter(font : pointer; character: Integer); mode_inline;
  479. function glutBitmapWidth(font : pointer; character: Integer): Integer; mode_inline;
  480. procedure glutStrokeCharacter(font : pointer; character: Integer); mode_inline;
  481. function glutStrokeWidth(font : pointer; character: Integer): Integer; mode_inline;
  482. function glutBitmapLength(font: pointer; const str: PChar): Integer; mode_inline;
  483. function glutStrokeLength(font: pointer; const str: PChar): Integer; mode_inline;
  484. procedure glutWireSphere(radius: GLdouble; slices, stacks: GLint); mode_inline;
  485. procedure glutSolidSphere(radius: GLdouble; slices, stacks: GLint); mode_inline;
  486. procedure glutWireCone(base, height: GLdouble; slices, stacks: GLint); mode_inline;
  487. procedure glutSolidCone(base, height: GLdouble; slices, stacks: GLint); mode_inline;
  488. procedure glutWireCube(size: GLdouble); mode_inline;
  489. procedure glutSolidCube(size: GLdouble); mode_inline;
  490. procedure glutWireTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint); mode_inline;
  491. procedure glutSolidTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint); mode_inline;
  492. procedure glutWireDodecahedron; mode_inline;
  493. procedure glutSolidDodecahedron; mode_inline;
  494. procedure glutWireTeapot(size: GLdouble); mode_inline;
  495. procedure glutSolidTeapot(size: GLdouble); mode_inline;
  496. procedure glutWireOctahedron; mode_inline;
  497. procedure glutSolidOctahedron; mode_inline;
  498. procedure glutWireTetrahedron; mode_inline;
  499. procedure glutSolidTetrahedron; mode_inline;
  500. procedure glutWireIcosahedron; mode_inline;
  501. procedure glutSolidIcosahedron; mode_inline;
  502. function glutVideoResizeGet(param: GLenum): Integer; mode_inline;
  503. procedure glutSetupVideoResizing; mode_inline;
  504. procedure glutStopVideoResizing; mode_inline;
  505. procedure glutVideoResize(x, y, width, height: Integer); mode_inline;
  506. procedure glutVideoPan(x, y, width, height: Integer); mode_inline;
  507. procedure glutReportErrors; mode_inline;
  508. procedure glutIgnoreKeyRepeat(ignore: Integer); mode_inline;
  509. procedure glutSetKeyRepeat(repeatMode: Integer); mode_inline;
  510. procedure glutForceJoystickFunc; mode_inline;
  511. procedure glutGameModeString(const AString : PChar); mode_inline;
  512. function glutEnterGameMode: integer; mode_inline;
  513. procedure glutLeaveGameMode; mode_inline;
  514. function glutGameModeGet(mode : GLenum): integer; mode_inline;
  515. {$ELSE GLUT_EXCLUSIVE_FPUMODE}
  516. var
  517. // GLUT initialization sub-API.
  518. glutInit: procedure(argcp: PInteger; argv: PPChar); extdecl;
  519. glutInitDisplayMode: procedure(mode: Word); extdecl;
  520. glutInitDisplayString: procedure(const str: PChar); extdecl;
  521. glutInitWindowPosition: procedure(x, y: Integer); extdecl;
  522. glutInitWindowSize: procedure(width, height: Integer); extdecl;
  523. glutMainLoop: procedure; extdecl;
  524. // GLUT window sub-API.
  525. glutCreateWindow: function(const title: PChar): Integer; extdecl;
  526. glutCreateSubWindow: function(win, x, y, width, height: Integer): Integer; extdecl;
  527. glutDestroyWindow: procedure(win: Integer); extdecl;
  528. glutPostRedisplay: procedure; extdecl;
  529. glutPostWindowRedisplay: procedure(win: Integer); extdecl;
  530. glutSwapBuffers: procedure; extdecl;
  531. glutGetWindow: function: Integer; extdecl;
  532. glutSetWindow: procedure(win: Integer); extdecl;
  533. glutSetWindowTitle: procedure(const title: PChar); extdecl;
  534. glutSetIconTitle: procedure(const title: PChar); extdecl;
  535. glutPositionWindow: procedure(x, y: Integer); extdecl;
  536. glutReshapeWindow: procedure(width, height: Integer); extdecl;
  537. glutPopWindow: procedure; extdecl;
  538. glutPushWindow: procedure; extdecl;
  539. glutIconifyWindow: procedure; extdecl;
  540. glutShowWindow: procedure; extdecl;
  541. glutHideWindow: procedure; extdecl;
  542. glutFullScreen: procedure; extdecl;
  543. glutSetCursor: procedure(cursor: Integer); extdecl;
  544. glutWarpPointer: procedure(x, y: Integer); extdecl;
  545. // GLUT overlay sub-API.
  546. glutEstablishOverlay: procedure; extdecl;
  547. glutRemoveOverlay: procedure; extdecl;
  548. glutUseLayer: procedure(layer: GLenum); extdecl;
  549. glutPostOverlayRedisplay: procedure; extdecl;
  550. glutPostWindowOverlayRedisplay: procedure(win: Integer); extdecl;
  551. glutShowOverlay: procedure; extdecl;
  552. glutHideOverlay: procedure; extdecl;
  553. // GLUT menu sub-API.
  554. glutCreateMenu: function(callback: TGlut1IntCallback): Integer; extdecl;
  555. glutDestroyMenu: procedure(menu: Integer); extdecl;
  556. glutGetMenu: function: Integer; extdecl;
  557. glutSetMenu: procedure(menu: Integer); extdecl;
  558. glutAddMenuEntry: procedure(const caption: PChar; value: Integer); extdecl;
  559. glutAddSubMenu: procedure(const caption: PChar; submenu: Integer); extdecl;
  560. glutChangeToMenuEntry: procedure(item: Integer; const caption: PChar; value: Integer); extdecl;
  561. glutChangeToSubMenu: procedure(item: Integer; const caption: PChar; submenu: Integer); extdecl;
  562. glutRemoveMenuItem: procedure(item: Integer); extdecl;
  563. glutAttachMenu: procedure(button: Integer); extdecl;
  564. glutDetachMenu: procedure(button: Integer); extdecl;
  565. // GLUT window callback sub-API.
  566. glutDisplayFunc: procedure(f: TGlutVoidCallback); extdecl;
  567. glutReshapeFunc: procedure(f: TGlut2IntCallback); extdecl;
  568. glutKeyboardFunc: procedure(f: TGlut1Char2IntCallback); extdecl;
  569. glutMouseFunc: procedure(f: TGlut4IntCallback); extdecl;
  570. glutMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  571. glutPassiveMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  572. glutEntryFunc: procedure(f: TGlut1IntCallback); extdecl;
  573. glutVisibilityFunc: procedure(f: TGlut1IntCallback); extdecl;
  574. glutIdleFunc: procedure(f: TGlutVoidCallback); extdecl;
  575. glutTimerFunc: procedure(millis: Word; f: TGlut1IntCallback; value: Integer); extdecl;
  576. glutMenuStateFunc: procedure(f: TGlut1IntCallback); extdecl;
  577. glutSpecialFunc: procedure(f: TGlut3IntCallback); extdecl;
  578. glutSpaceballMotionFunc: procedure(f: TGlut3IntCallback); extdecl;
  579. glutSpaceballRotateFunc: procedure(f: TGlut3IntCallback); extdecl;
  580. glutSpaceballButtonFunc: procedure(f: TGlut2IntCallback); extdecl;
  581. glutButtonBoxFunc: procedure(f: TGlut2IntCallback); extdecl;
  582. glutDialsFunc: procedure(f: TGlut2IntCallback); extdecl;
  583. glutTabletMotionFunc: procedure(f: TGlut2IntCallback); extdecl;
  584. glutTabletButtonFunc: procedure(f: TGlut4IntCallback); extdecl;
  585. glutMenuStatusFunc: procedure(f: TGlut3IntCallback); extdecl;
  586. glutOverlayDisplayFunc: procedure(f:TGlutVoidCallback); extdecl;
  587. glutWindowStatusFunc: procedure(f: TGlut1IntCallback); extdecl;
  588. glutKeyboardUpFunc: procedure(f: TGlut1Char2IntCallback); extdecl;
  589. glutSpecialUpFunc: procedure(f: TGlut3IntCallback); extdecl;
  590. glutJoystickFunc: procedure(f: TGlut1UInt3IntCallback; pollInterval: Integer); extdecl;
  591. // GLUT color index sub-API.
  592. glutSetColor: procedure(cell: Integer; red, green, blue: GLfloat); extdecl;
  593. glutGetColor: function(ndx, component: Integer): GLfloat; extdecl;
  594. glutCopyColormap: procedure(win: Integer); extdecl;
  595. // GLUT state retrieval sub-API.
  596. glutGet: function(t: GLenum): Integer; extdecl;
  597. glutDeviceGet: function(t: GLenum): Integer; extdecl;
  598. // GLUT extension support sub-API
  599. glutExtensionSupported: function(const name: PChar): Integer; extdecl;
  600. glutGetModifiers: function: Integer; extdecl;
  601. glutLayerGet: function(t: GLenum): Integer; extdecl;
  602. // GLUT font sub-API
  603. glutBitmapCharacter: procedure(font : pointer; character: Integer); extdecl;
  604. glutBitmapWidth: function(font : pointer; character: Integer): Integer; extdecl;
  605. glutStrokeCharacter: procedure(font : pointer; character: Integer); extdecl;
  606. glutStrokeWidth: function(font : pointer; character: Integer): Integer; extdecl;
  607. glutBitmapLength: function(font: pointer; const str: PChar): Integer; extdecl;
  608. glutStrokeLength: function(font: pointer; const str: PChar): Integer; extdecl;
  609. // GLUT pre-built models sub-API
  610. glutWireSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  611. glutSolidSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;
  612. glutWireCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  613. glutSolidCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;
  614. glutWireCube: procedure(size: GLdouble); extdecl;
  615. glutSolidCube: procedure(size: GLdouble); extdecl;
  616. glutWireTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  617. glutSolidTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;
  618. glutWireDodecahedron: procedure; extdecl;
  619. glutSolidDodecahedron: procedure; extdecl;
  620. glutWireTeapot: procedure(size: GLdouble); extdecl;
  621. glutSolidTeapot: procedure(size: GLdouble); extdecl;
  622. glutWireOctahedron: procedure; extdecl;
  623. glutSolidOctahedron: procedure; extdecl;
  624. glutWireTetrahedron: procedure; extdecl;
  625. glutSolidTetrahedron: procedure; extdecl;
  626. glutWireIcosahedron: procedure; extdecl;
  627. glutSolidIcosahedron: procedure; extdecl;
  628. // GLUT video resize sub-API.
  629. glutVideoResizeGet: function(param: GLenum): Integer; extdecl;
  630. glutSetupVideoResizing: procedure; extdecl;
  631. glutStopVideoResizing: procedure; extdecl;
  632. glutVideoResize: procedure(x, y, width, height: Integer); extdecl;
  633. glutVideoPan: procedure(x, y, width, height: Integer); extdecl;
  634. // GLUT debugging sub-API.
  635. glutReportErrors: procedure; extdecl;
  636. // GLUT device control sub-API.
  637. glutIgnoreKeyRepeat: procedure(ignore: Integer); extdecl;
  638. glutSetKeyRepeat: procedure(repeatMode: Integer); extdecl;
  639. glutForceJoystickFunc: procedure; extdecl;
  640. // GLUT game mode sub-API.
  641. //example glutGameModeString('1280x1024:32@75');
  642. glutGameModeString : procedure (const AString : PChar); extdecl;
  643. glutEnterGameMode : function : integer; extdecl;
  644. glutLeaveGameMode : procedure; extdecl;
  645. glutGameModeGet : function (mode : GLenum) : integer; extdecl;
  646. {$ENDIF GLUT_EXCLUSIVE_FPUMODE}
  647. {$ENDIF MORPHOS}
  648. procedure LoadGlut(const dll: String);
  649. procedure FreeGlut;
  650. implementation
  651. {$IFDEF MORPHOS}
  652. { MorphOS GL works differently due to different dynamic-library handling on Amiga-like }
  653. { systems, so its functions are included here. }
  654. {$INCLUDE tinygl.inc}
  655. {$ELSE MORPHOS}
  656. var
  657. hDLL: TLibHandle;
  658. {$ENDIF MORPHOS}
  659. procedure FreeGlut;
  660. begin
  661. {$IFDEF MORPHOS}
  662. // MorphOS's GL will closed down by TinyGL unit, nothing is needed here.
  663. {$ELSE MORPHOS}
  664. if (hDLL <> 0) then
  665. FreeLibrary(hDLL);
  666. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  667. @OLD_glutInit := nil;
  668. @OLD_glutInitDisplayMode := nil;
  669. @OLD_glutInitDisplayString := nil;
  670. @OLD_glutInitWindowPosition := nil;
  671. @OLD_glutInitWindowSize := nil;
  672. @OLD_glutMainLoop := nil;
  673. @OLD_glutCreateWindow := nil;
  674. @OLD_glutCreateSubWindow := nil;
  675. @OLD_glutDestroyWindow := nil;
  676. @OLD_glutPostRedisplay := nil;
  677. @OLD_glutPostWindowRedisplay := nil;
  678. @OLD_glutSwapBuffers := nil;
  679. @OLD_glutGetWindow := nil;
  680. @OLD_glutSetWindow := nil;
  681. @OLD_glutSetWindowTitle := nil;
  682. @OLD_glutSetIconTitle := nil;
  683. @OLD_glutPositionWindow := nil;
  684. @OLD_glutReshapeWindow := nil;
  685. @OLD_glutPopWindow := nil;
  686. @OLD_glutPushWindow := nil;
  687. @OLD_glutIconifyWindow := nil;
  688. @OLD_glutShowWindow := nil;
  689. @OLD_glutHideWindow := nil;
  690. @OLD_glutFullScreen := nil;
  691. @OLD_glutSetCursor := nil;
  692. @OLD_glutWarpPointer := nil;
  693. @OLD_glutEstablishOverlay := nil;
  694. @OLD_glutRemoveOverlay := nil;
  695. @OLD_glutUseLayer := nil;
  696. @OLD_glutPostOverlayRedisplay := nil;
  697. @OLD_glutPostWindowOverlayRedisplay := nil;
  698. @OLD_glutShowOverlay := nil;
  699. @OLD_glutHideOverlay := nil;
  700. @OLD_glutCreateMenu := nil;
  701. @OLD_glutDestroyMenu := nil;
  702. @OLD_glutGetMenu := nil;
  703. @OLD_glutSetMenu := nil;
  704. @OLD_glutAddMenuEntry := nil;
  705. @OLD_glutAddSubMenu := nil;
  706. @OLD_glutChangeToMenuEntry := nil;
  707. @OLD_glutChangeToSubMenu := nil;
  708. @OLD_glutRemoveMenuItem := nil;
  709. @OLD_glutAttachMenu := nil;
  710. @OLD_glutDetachMenu := nil;
  711. @OLD_glutDisplayFunc := nil;
  712. @OLD_glutReshapeFunc := nil;
  713. @OLD_glutKeyboardFunc := nil;
  714. @OLD_glutMouseFunc := nil;
  715. @OLD_glutMotionFunc := nil;
  716. @OLD_glutPassiveMotionFunc := nil;
  717. @OLD_glutEntryFunc := nil;
  718. @OLD_glutVisibilityFunc := nil;
  719. @OLD_glutIdleFunc := nil;
  720. @OLD_glutTimerFunc := nil;
  721. @OLD_glutMenuStateFunc := nil;
  722. @OLD_glutSpecialFunc := nil;
  723. @OLD_glutSpaceballMotionFunc := nil;
  724. @OLD_glutSpaceballRotateFunc := nil;
  725. @OLD_glutSpaceballButtonFunc := nil;
  726. @OLD_glutButtonBoxFunc := nil;
  727. @OLD_glutDialsFunc := nil;
  728. @OLD_glutTabletMotionFunc := nil;
  729. @OLD_glutTabletButtonFunc := nil;
  730. @OLD_glutMenuStatusFunc := nil;
  731. @OLD_glutOverlayDisplayFunc := nil;
  732. @OLD_glutWindowStatusFunc := nil;
  733. @OLD_glutKeyboardUpFunc := nil;
  734. @OLD_glutSpecialUpFunc := nil;
  735. @OLD_glutJoystickFunc := nil;
  736. @OLD_glutSetColor := nil;
  737. @OLD_glutGetColor := nil;
  738. @OLD_glutCopyColormap := nil;
  739. @OLD_glutGet := nil;
  740. @OLD_glutDeviceGet := nil;
  741. @OLD_glutExtensionSupported := nil;
  742. @OLD_glutGetModifiers := nil;
  743. @OLD_glutLayerGet := nil;
  744. @OLD_glutBitmapCharacter := nil;
  745. @OLD_glutBitmapWidth := nil;
  746. @OLD_glutStrokeCharacter := nil;
  747. @OLD_glutStrokeWidth := nil;
  748. @OLD_glutBitmapLength := nil;
  749. @OLD_glutStrokeLength := nil;
  750. @OLD_glutWireSphere := nil;
  751. @OLD_glutSolidSphere := nil;
  752. @OLD_glutWireCone := nil;
  753. @OLD_glutSolidCone := nil;
  754. @OLD_glutWireCube := nil;
  755. @OLD_glutSolidCube := nil;
  756. @OLD_glutWireTorus := nil;
  757. @OLD_glutSolidTorus := nil;
  758. @OLD_glutWireDodecahedron := nil;
  759. @OLD_glutSolidDodecahedron := nil;
  760. @OLD_glutWireTeapot := nil;
  761. @OLD_glutSolidTeapot := nil;
  762. @OLD_glutWireOctahedron := nil;
  763. @OLD_glutSolidOctahedron := nil;
  764. @OLD_glutWireTetrahedron := nil;
  765. @OLD_glutSolidTetrahedron := nil;
  766. @OLD_glutWireIcosahedron := nil;
  767. @OLD_glutSolidIcosahedron := nil;
  768. @OLD_glutVideoResizeGet := nil;
  769. @OLD_glutSetupVideoResizing := nil;
  770. @OLD_glutStopVideoResizing := nil;
  771. @OLD_glutVideoResize := nil;
  772. @OLD_glutVideoPan := nil;
  773. @OLD_glutReportErrors := nil;
  774. @OLD_glutIgnoreKeyRepeat := nil;
  775. @OLD_glutSetKeyRepeat := nil;
  776. @OLD_glutForceJoystickFunc := nil;
  777. @OLD_glutGameModeString := nil;
  778. @OLD_glutEnterGameMode := nil;
  779. @OLD_glutLeaveGameMode := nil;
  780. @OLD_glutGameModeGet := nil;
  781. {$ELSE GLUT_EXCLUSIVE_FPUMODE}
  782. @glutInit := nil;
  783. @glutInitDisplayMode := nil;
  784. @glutInitDisplayString := nil;
  785. @glutInitWindowPosition := nil;
  786. @glutInitWindowSize := nil;
  787. @glutMainLoop := nil;
  788. @glutCreateWindow := nil;
  789. @glutCreateSubWindow := nil;
  790. @glutDestroyWindow := nil;
  791. @glutPostRedisplay := nil;
  792. @glutPostWindowRedisplay := nil;
  793. @glutSwapBuffers := nil;
  794. @glutGetWindow := nil;
  795. @glutSetWindow := nil;
  796. @glutSetWindowTitle := nil;
  797. @glutSetIconTitle := nil;
  798. @glutPositionWindow := nil;
  799. @glutReshapeWindow := nil;
  800. @glutPopWindow := nil;
  801. @glutPushWindow := nil;
  802. @glutIconifyWindow := nil;
  803. @glutShowWindow := nil;
  804. @glutHideWindow := nil;
  805. @glutFullScreen := nil;
  806. @glutSetCursor := nil;
  807. @glutWarpPointer := nil;
  808. @glutEstablishOverlay := nil;
  809. @glutRemoveOverlay := nil;
  810. @glutUseLayer := nil;
  811. @glutPostOverlayRedisplay := nil;
  812. @glutPostWindowOverlayRedisplay := nil;
  813. @glutShowOverlay := nil;
  814. @glutHideOverlay := nil;
  815. @glutCreateMenu := nil;
  816. @glutDestroyMenu := nil;
  817. @glutGetMenu := nil;
  818. @glutSetMenu := nil;
  819. @glutAddMenuEntry := nil;
  820. @glutAddSubMenu := nil;
  821. @glutChangeToMenuEntry := nil;
  822. @glutChangeToSubMenu := nil;
  823. @glutRemoveMenuItem := nil;
  824. @glutAttachMenu := nil;
  825. @glutDetachMenu := nil;
  826. @glutDisplayFunc := nil;
  827. @glutReshapeFunc := nil;
  828. @glutKeyboardFunc := nil;
  829. @glutMouseFunc := nil;
  830. @glutMotionFunc := nil;
  831. @glutPassiveMotionFunc := nil;
  832. @glutEntryFunc := nil;
  833. @glutVisibilityFunc := nil;
  834. @glutIdleFunc := nil;
  835. @glutTimerFunc := nil;
  836. @glutMenuStateFunc := nil;
  837. @glutSpecialFunc := nil;
  838. @glutSpaceballMotionFunc := nil;
  839. @glutSpaceballRotateFunc := nil;
  840. @glutSpaceballButtonFunc := nil;
  841. @glutButtonBoxFunc := nil;
  842. @glutDialsFunc := nil;
  843. @glutTabletMotionFunc := nil;
  844. @glutTabletButtonFunc := nil;
  845. @glutMenuStatusFunc := nil;
  846. @glutOverlayDisplayFunc := nil;
  847. @glutWindowStatusFunc := nil;
  848. @glutKeyboardUpFunc := nil;
  849. @glutSpecialUpFunc := nil;
  850. @glutJoystickFunc := nil;
  851. @glutSetColor := nil;
  852. @glutGetColor := nil;
  853. @glutCopyColormap := nil;
  854. @glutGet := nil;
  855. @glutDeviceGet := nil;
  856. @glutExtensionSupported := nil;
  857. @glutGetModifiers := nil;
  858. @glutLayerGet := nil;
  859. @glutBitmapCharacter := nil;
  860. @glutBitmapWidth := nil;
  861. @glutStrokeCharacter := nil;
  862. @glutStrokeWidth := nil;
  863. @glutBitmapLength := nil;
  864. @glutStrokeLength := nil;
  865. @glutWireSphere := nil;
  866. @glutSolidSphere := nil;
  867. @glutWireCone := nil;
  868. @glutSolidCone := nil;
  869. @glutWireCube := nil;
  870. @glutSolidCube := nil;
  871. @glutWireTorus := nil;
  872. @glutSolidTorus := nil;
  873. @glutWireDodecahedron := nil;
  874. @glutSolidDodecahedron := nil;
  875. @glutWireTeapot := nil;
  876. @glutSolidTeapot := nil;
  877. @glutWireOctahedron := nil;
  878. @glutSolidOctahedron := nil;
  879. @glutWireTetrahedron := nil;
  880. @glutSolidTetrahedron := nil;
  881. @glutWireIcosahedron := nil;
  882. @glutSolidIcosahedron := nil;
  883. @glutVideoResizeGet := nil;
  884. @glutSetupVideoResizing := nil;
  885. @glutStopVideoResizing := nil;
  886. @glutVideoResize := nil;
  887. @glutVideoPan := nil;
  888. @glutReportErrors := nil;
  889. @glutIgnoreKeyRepeat := nil;
  890. @glutSetKeyRepeat := nil;
  891. @glutForceJoystickFunc := nil;
  892. @glutGameModeString := nil;
  893. @glutEnterGameMode := nil;
  894. @glutLeaveGameMode := nil;
  895. @glutGameModeGet := nil;
  896. {$ENDIF GLUT_EXCLUSIVE_FPUMODE}
  897. {$ENDIF MORPHOS}
  898. end;
  899. procedure LoadGlut(const dll: String);
  900. {$IFDEF MORPHOS}
  901. begin
  902. // MorphOS's GL has own initialization in TinyGL unit, nothing is needed here.
  903. end;
  904. {$ELSE MORPHOS}
  905. var
  906. MethodName: string = '';
  907. function GetGLutProcAddress(Lib: PtrInt; ProcName: PChar): Pointer;
  908. begin
  909. MethodName:=ProcName;
  910. Result:=GetProcAddress(Lib, ProcName);
  911. end;
  912. begin
  913. FreeGlut;
  914. hDLL := LoadLibrary(PChar(dll));
  915. if hDLL = 0 then raise Exception.Create('Could not load Glut from ' + dll);
  916. try
  917. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  918. @OLD_glutInit := GetGLutProcAddress(hDLL, 'glutInit');
  919. @OLD_glutInitDisplayMode := GetGLutProcAddress(hDLL, 'glutInitDisplayMode');
  920. @OLD_glutInitDisplayString := GetGLutProcAddress(hDLL, 'glutInitDisplayString');
  921. @OLD_glutInitWindowPosition := GetGLutProcAddress(hDLL, 'glutInitWindowPosition');
  922. @OLD_glutInitWindowSize := GetGLutProcAddress(hDLL, 'glutInitWindowSize');
  923. @OLD_glutMainLoop := GetGLutProcAddress(hDLL, 'glutMainLoop');
  924. @OLD_glutCreateWindow := GetGLutProcAddress(hDLL, 'glutCreateWindow');
  925. @OLD_glutCreateSubWindow := GetGLutProcAddress(hDLL, 'glutCreateSubWindow');
  926. @OLD_glutDestroyWindow := GetGLutProcAddress(hDLL, 'glutDestroyWindow');
  927. @OLD_glutPostRedisplay := GetGLutProcAddress(hDLL, 'glutPostRedisplay');
  928. @OLD_glutPostWindowRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowRedisplay');
  929. @OLD_glutSwapBuffers := GetGLutProcAddress(hDLL, 'glutSwapBuffers');
  930. @OLD_glutGetWindow := GetGLutProcAddress(hDLL, 'glutGetWindow');
  931. @OLD_glutSetWindow := GetGLutProcAddress(hDLL, 'glutSetWindow');
  932. @OLD_glutSetWindowTitle := GetGLutProcAddress(hDLL, 'glutSetWindowTitle');
  933. @OLD_glutSetIconTitle := GetGLutProcAddress(hDLL, 'glutSetIconTitle');
  934. @OLD_glutPositionWindow := GetGLutProcAddress(hDLL, 'glutPositionWindow');
  935. @OLD_glutReshapeWindow := GetGLutProcAddress(hDLL, 'glutReshapeWindow');
  936. @OLD_glutPopWindow := GetGLutProcAddress(hDLL, 'glutPopWindow');
  937. @OLD_glutPushWindow := GetGLutProcAddress(hDLL, 'glutPushWindow');
  938. @OLD_glutIconifyWindow := GetGLutProcAddress(hDLL, 'glutIconifyWindow');
  939. @OLD_glutShowWindow := GetGLutProcAddress(hDLL, 'glutShowWindow');
  940. @OLD_glutHideWindow := GetGLutProcAddress(hDLL, 'glutHideWindow');
  941. @OLD_glutFullScreen := GetGLutProcAddress(hDLL, 'glutFullScreen');
  942. @OLD_glutSetCursor := GetGLutProcAddress(hDLL, 'glutSetCursor');
  943. @OLD_glutWarpPointer := GetGLutProcAddress(hDLL, 'glutWarpPointer');
  944. @OLD_glutEstablishOverlay := GetGLutProcAddress(hDLL, 'glutEstablishOverlay');
  945. @OLD_glutRemoveOverlay := GetGLutProcAddress(hDLL, 'glutRemoveOverlay');
  946. @OLD_glutUseLayer := GetGLutProcAddress(hDLL, 'glutUseLayer');
  947. @OLD_glutPostOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostOverlayRedisplay');
  948. @OLD_glutPostWindowOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowOverlayRedisplay');
  949. @OLD_glutShowOverlay := GetGLutProcAddress(hDLL, 'glutShowOverlay');
  950. @OLD_glutHideOverlay := GetGLutProcAddress(hDLL, 'glutHideOverlay');
  951. @OLD_glutCreateMenu := GetGLutProcAddress(hDLL, 'glutCreateMenu');
  952. @OLD_glutDestroyMenu := GetGLutProcAddress(hDLL, 'glutDestroyMenu');
  953. @OLD_glutGetMenu := GetGLutProcAddress(hDLL, 'glutGetMenu');
  954. @OLD_glutSetMenu := GetGLutProcAddress(hDLL, 'glutSetMenu');
  955. @OLD_glutAddMenuEntry := GetGLutProcAddress(hDLL, 'glutAddMenuEntry');
  956. @OLD_glutAddSubMenu := GetGLutProcAddress(hDLL, 'glutAddSubMenu');
  957. @OLD_glutChangeToMenuEntry := GetGLutProcAddress(hDLL, 'glutChangeToMenuEntry');
  958. @OLD_glutChangeToSubMenu := GetGLutProcAddress(hDLL, 'glutChangeToSubMenu');
  959. @OLD_glutRemoveMenuItem := GetGLutProcAddress(hDLL, 'glutRemoveMenuItem');
  960. @OLD_glutAttachMenu := GetGLutProcAddress(hDLL, 'glutAttachMenu');
  961. @OLD_glutDetachMenu := GetGLutProcAddress(hDLL, 'glutDetachMenu');
  962. @OLD_glutDisplayFunc := GetGLutProcAddress(hDLL, 'glutDisplayFunc');
  963. @OLD_glutReshapeFunc := GetGLutProcAddress(hDLL, 'glutReshapeFunc');
  964. @OLD_glutKeyboardFunc := GetGLutProcAddress(hDLL, 'glutKeyboardFunc');
  965. @OLD_glutMouseFunc := GetGLutProcAddress(hDLL, 'glutMouseFunc');
  966. @OLD_glutMotionFunc := GetGLutProcAddress(hDLL, 'glutMotionFunc');
  967. @OLD_glutPassiveMotionFunc := GetGLutProcAddress(hDLL, 'glutPassiveMotionFunc');
  968. @OLD_glutEntryFunc := GetGLutProcAddress(hDLL, 'glutEntryFunc');
  969. @OLD_glutVisibilityFunc := GetGLutProcAddress(hDLL, 'glutVisibilityFunc');
  970. @OLD_glutIdleFunc := GetGLutProcAddress(hDLL, 'glutIdleFunc');
  971. @OLD_glutTimerFunc := GetGLutProcAddress(hDLL, 'glutTimerFunc');
  972. @OLD_glutMenuStateFunc := GetGLutProcAddress(hDLL, 'glutMenuStateFunc');
  973. @OLD_glutSpecialFunc := GetGLutProcAddress(hDLL, 'glutSpecialFunc');
  974. @OLD_glutSpaceballMotionFunc := GetGLutProcAddress(hDLL, 'glutSpaceballMotionFunc');
  975. @OLD_glutSpaceballRotateFunc := GetGLutProcAddress(hDLL, 'glutSpaceballRotateFunc');
  976. @OLD_glutSpaceballButtonFunc := GetGLutProcAddress(hDLL, 'glutSpaceballButtonFunc');
  977. @OLD_glutButtonBoxFunc := GetGLutProcAddress(hDLL, 'glutButtonBoxFunc');
  978. @OLD_glutDialsFunc := GetGLutProcAddress(hDLL, 'glutDialsFunc');
  979. @OLD_glutTabletMotionFunc := GetGLutProcAddress(hDLL, 'glutTabletMotionFunc');
  980. @OLD_glutTabletButtonFunc := GetGLutProcAddress(hDLL, 'glutTabletButtonFunc');
  981. @OLD_glutMenuStatusFunc := GetGLutProcAddress(hDLL, 'glutMenuStatusFunc');
  982. @OLD_glutOverlayDisplayFunc := GetGLutProcAddress(hDLL, 'glutOverlayDisplayFunc');
  983. @OLD_glutWindowStatusFunc := GetGLutProcAddress(hDLL, 'glutWindowStatusFunc');
  984. @OLD_glutKeyboardUpFunc := GetGLutProcAddress(hDLL, 'glutKeyboardUpFunc');
  985. @OLD_glutSpecialUpFunc := GetGLutProcAddress(hDLL, 'glutSpecialUpFunc');
  986. @OLD_glutJoystickFunc := GetGLutProcAddress(hDLL, 'glutJoystickFunc');
  987. @OLD_glutSetColor := GetGLutProcAddress(hDLL, 'glutSetColor');
  988. @OLD_glutGetColor := GetGLutProcAddress(hDLL, 'glutGetColor');
  989. @OLD_glutCopyColormap := GetGLutProcAddress(hDLL, 'glutCopyColormap');
  990. @OLD_glutGet := GetGLutProcAddress(hDLL, 'glutGet');
  991. @OLD_glutDeviceGet := GetGLutProcAddress(hDLL, 'glutDeviceGet');
  992. @OLD_glutExtensionSupported := GetGLutProcAddress(hDLL, 'glutExtensionSupported');
  993. @OLD_glutGetModifiers := GetGLutProcAddress(hDLL, 'glutGetModifiers');
  994. @OLD_glutLayerGet := GetGLutProcAddress(hDLL, 'glutLayerGet');
  995. @OLD_glutBitmapCharacter := GetGLutProcAddress(hDLL, 'glutBitmapCharacter');
  996. @OLD_glutBitmapWidth := GetGLutProcAddress(hDLL, 'glutBitmapWidth');
  997. @OLD_glutStrokeCharacter := GetGLutProcAddress(hDLL, 'glutStrokeCharacter');
  998. @OLD_glutStrokeWidth := GetGLutProcAddress(hDLL, 'glutStrokeWidth');
  999. @OLD_glutBitmapLength := GetGLutProcAddress(hDLL, 'glutBitmapLength');
  1000. @OLD_glutStrokeLength := GetGLutProcAddress(hDLL, 'glutStrokeLength');
  1001. @OLD_glutWireSphere := GetGLutProcAddress(hDLL, 'glutWireSphere');
  1002. @OLD_glutSolidSphere := GetGLutProcAddress(hDLL, 'glutSolidSphere');
  1003. @OLD_glutWireCone := GetGLutProcAddress(hDLL, 'glutWireCone');
  1004. @OLD_glutSolidCone := GetGLutProcAddress(hDLL, 'glutSolidCone');
  1005. @OLD_glutWireCube := GetGLutProcAddress(hDLL, 'glutWireCube');
  1006. @OLD_glutSolidCube := GetGLutProcAddress(hDLL, 'glutSolidCube');
  1007. @OLD_glutWireTorus := GetGLutProcAddress(hDLL, 'glutWireTorus');
  1008. @OLD_glutSolidTorus := GetGLutProcAddress(hDLL, 'glutSolidTorus');
  1009. @OLD_glutWireDodecahedron := GetGLutProcAddress(hDLL, 'glutWireDodecahedron');
  1010. @OLD_glutSolidDodecahedron := GetGLutProcAddress(hDLL, 'glutSolidDodecahedron');
  1011. @OLD_glutWireTeapot := GetGLutProcAddress(hDLL, 'glutWireTeapot');
  1012. @OLD_glutSolidTeapot := GetGLutProcAddress(hDLL, 'glutSolidTeapot');
  1013. @OLD_glutWireOctahedron := GetGLutProcAddress(hDLL, 'glutWireOctahedron');
  1014. @OLD_glutSolidOctahedron := GetGLutProcAddress(hDLL, 'glutSolidOctahedron');
  1015. @OLD_glutWireTetrahedron := GetGLutProcAddress(hDLL, 'glutWireTetrahedron');
  1016. @OLD_glutSolidTetrahedron := GetGLutProcAddress(hDLL, 'glutSolidTetrahedron');
  1017. @OLD_glutWireIcosahedron := GetGLutProcAddress(hDLL, 'glutWireIcosahedron');
  1018. @OLD_glutSolidIcosahedron := GetGLutProcAddress(hDLL, 'glutSolidIcosahedron');
  1019. @OLD_glutVideoResizeGet := GetGLutProcAddress(hDLL, 'glutVideoResizeGet');
  1020. @OLD_glutSetupVideoResizing := GetGLutProcAddress(hDLL, 'glutSetupVideoResizing');
  1021. @OLD_glutStopVideoResizing := GetGLutProcAddress(hDLL, 'glutStopVideoResizing');
  1022. @OLD_glutVideoResize := GetGLutProcAddress(hDLL, 'glutVideoResize');
  1023. @OLD_glutVideoPan := GetGLutProcAddress(hDLL, 'glutVideoPan');
  1024. @OLD_glutReportErrors := GetGLutProcAddress(hDLL, 'glutReportErrors');
  1025. @OLD_glutIgnoreKeyRepeat := GetGLutProcAddress(hDLL, 'glutIgnoreKeyRepeat');
  1026. @OLD_glutSetKeyRepeat := GetGLutProcAddress(hDLL, 'glutSetKeyRepeat');
  1027. @OLD_glutForceJoystickFunc := GetGLutProcAddress(hDLL, 'glutForceJoystickFunc');
  1028. @OLD_glutGameModeString := GetGLutProcAddress(hDLL, 'glutGameModeString');
  1029. @OLD_glutEnterGameMode := GetGLutProcAddress(hDLL, 'glutEnterGameMode');
  1030. @OLD_glutLeaveGameMode := GetGLutProcAddress(hDLL, 'glutLeaveGameMode');
  1031. @OLD_glutGameModeGet := GetGLutProcAddress(hDLL, 'glutGameModeGet');
  1032. {$ELSE GLUT_EXCLUSIVE_FPUMODE}
  1033. @glutInit := GetGLutProcAddress(hDLL, 'glutInit');
  1034. @glutInitDisplayMode := GetGLutProcAddress(hDLL, 'glutInitDisplayMode');
  1035. @glutInitDisplayString := GetGLutProcAddress(hDLL, 'glutInitDisplayString');
  1036. @glutInitWindowPosition := GetGLutProcAddress(hDLL, 'glutInitWindowPosition');
  1037. @glutInitWindowSize := GetGLutProcAddress(hDLL, 'glutInitWindowSize');
  1038. @glutMainLoop := GetGLutProcAddress(hDLL, 'glutMainLoop');
  1039. @glutCreateWindow := GetGLutProcAddress(hDLL, 'glutCreateWindow');
  1040. @glutCreateSubWindow := GetGLutProcAddress(hDLL, 'glutCreateSubWindow');
  1041. @glutDestroyWindow := GetGLutProcAddress(hDLL, 'glutDestroyWindow');
  1042. @glutPostRedisplay := GetGLutProcAddress(hDLL, 'glutPostRedisplay');
  1043. @glutPostWindowRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowRedisplay');
  1044. @glutSwapBuffers := GetGLutProcAddress(hDLL, 'glutSwapBuffers');
  1045. @glutGetWindow := GetGLutProcAddress(hDLL, 'glutGetWindow');
  1046. @glutSetWindow := GetGLutProcAddress(hDLL, 'glutSetWindow');
  1047. @glutSetWindowTitle := GetGLutProcAddress(hDLL, 'glutSetWindowTitle');
  1048. @glutSetIconTitle := GetGLutProcAddress(hDLL, 'glutSetIconTitle');
  1049. @glutPositionWindow := GetGLutProcAddress(hDLL, 'glutPositionWindow');
  1050. @glutReshapeWindow := GetGLutProcAddress(hDLL, 'glutReshapeWindow');
  1051. @glutPopWindow := GetGLutProcAddress(hDLL, 'glutPopWindow');
  1052. @glutPushWindow := GetGLutProcAddress(hDLL, 'glutPushWindow');
  1053. @glutIconifyWindow := GetGLutProcAddress(hDLL, 'glutIconifyWindow');
  1054. @glutShowWindow := GetGLutProcAddress(hDLL, 'glutShowWindow');
  1055. @glutHideWindow := GetGLutProcAddress(hDLL, 'glutHideWindow');
  1056. @glutFullScreen := GetGLutProcAddress(hDLL, 'glutFullScreen');
  1057. @glutSetCursor := GetGLutProcAddress(hDLL, 'glutSetCursor');
  1058. @glutWarpPointer := GetGLutProcAddress(hDLL, 'glutWarpPointer');
  1059. @glutEstablishOverlay := GetGLutProcAddress(hDLL, 'glutEstablishOverlay');
  1060. @glutRemoveOverlay := GetGLutProcAddress(hDLL, 'glutRemoveOverlay');
  1061. @glutUseLayer := GetGLutProcAddress(hDLL, 'glutUseLayer');
  1062. @glutPostOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostOverlayRedisplay');
  1063. @glutPostWindowOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowOverlayRedisplay');
  1064. @glutShowOverlay := GetGLutProcAddress(hDLL, 'glutShowOverlay');
  1065. @glutHideOverlay := GetGLutProcAddress(hDLL, 'glutHideOverlay');
  1066. @glutCreateMenu := GetGLutProcAddress(hDLL, 'glutCreateMenu');
  1067. @glutDestroyMenu := GetGLutProcAddress(hDLL, 'glutDestroyMenu');
  1068. @glutGetMenu := GetGLutProcAddress(hDLL, 'glutGetMenu');
  1069. @glutSetMenu := GetGLutProcAddress(hDLL, 'glutSetMenu');
  1070. @glutAddMenuEntry := GetGLutProcAddress(hDLL, 'glutAddMenuEntry');
  1071. @glutAddSubMenu := GetGLutProcAddress(hDLL, 'glutAddSubMenu');
  1072. @glutChangeToMenuEntry := GetGLutProcAddress(hDLL, 'glutChangeToMenuEntry');
  1073. @glutChangeToSubMenu := GetGLutProcAddress(hDLL, 'glutChangeToSubMenu');
  1074. @glutRemoveMenuItem := GetGLutProcAddress(hDLL, 'glutRemoveMenuItem');
  1075. @glutAttachMenu := GetGLutProcAddress(hDLL, 'glutAttachMenu');
  1076. @glutDetachMenu := GetGLutProcAddress(hDLL, 'glutDetachMenu');
  1077. @glutDisplayFunc := GetGLutProcAddress(hDLL, 'glutDisplayFunc');
  1078. @glutReshapeFunc := GetGLutProcAddress(hDLL, 'glutReshapeFunc');
  1079. @glutKeyboardFunc := GetGLutProcAddress(hDLL, 'glutKeyboardFunc');
  1080. @glutMouseFunc := GetGLutProcAddress(hDLL, 'glutMouseFunc');
  1081. @glutMotionFunc := GetGLutProcAddress(hDLL, 'glutMotionFunc');
  1082. @glutPassiveMotionFunc := GetGLutProcAddress(hDLL, 'glutPassiveMotionFunc');
  1083. @glutEntryFunc := GetGLutProcAddress(hDLL, 'glutEntryFunc');
  1084. @glutVisibilityFunc := GetGLutProcAddress(hDLL, 'glutVisibilityFunc');
  1085. @glutIdleFunc := GetGLutProcAddress(hDLL, 'glutIdleFunc');
  1086. @glutTimerFunc := GetGLutProcAddress(hDLL, 'glutTimerFunc');
  1087. @glutMenuStateFunc := GetGLutProcAddress(hDLL, 'glutMenuStateFunc');
  1088. @glutSpecialFunc := GetGLutProcAddress(hDLL, 'glutSpecialFunc');
  1089. @glutSpaceballMotionFunc := GetGLutProcAddress(hDLL, 'glutSpaceballMotionFunc');
  1090. @glutSpaceballRotateFunc := GetGLutProcAddress(hDLL, 'glutSpaceballRotateFunc');
  1091. @glutSpaceballButtonFunc := GetGLutProcAddress(hDLL, 'glutSpaceballButtonFunc');
  1092. @glutButtonBoxFunc := GetGLutProcAddress(hDLL, 'glutButtonBoxFunc');
  1093. @glutDialsFunc := GetGLutProcAddress(hDLL, 'glutDialsFunc');
  1094. @glutTabletMotionFunc := GetGLutProcAddress(hDLL, 'glutTabletMotionFunc');
  1095. @glutTabletButtonFunc := GetGLutProcAddress(hDLL, 'glutTabletButtonFunc');
  1096. @glutMenuStatusFunc := GetGLutProcAddress(hDLL, 'glutMenuStatusFunc');
  1097. @glutOverlayDisplayFunc := GetGLutProcAddress(hDLL, 'glutOverlayDisplayFunc');
  1098. @glutWindowStatusFunc := GetGLutProcAddress(hDLL, 'glutWindowStatusFunc');
  1099. @glutKeyboardUpFunc := GetGLutProcAddress(hDLL, 'glutKeyboardUpFunc');
  1100. @glutSpecialUpFunc := GetGLutProcAddress(hDLL, 'glutSpecialUpFunc');
  1101. @glutJoystickFunc := GetGLutProcAddress(hDLL, 'glutJoystickFunc');
  1102. @glutSetColor := GetGLutProcAddress(hDLL, 'glutSetColor');
  1103. @glutGetColor := GetGLutProcAddress(hDLL, 'glutGetColor');
  1104. @glutCopyColormap := GetGLutProcAddress(hDLL, 'glutCopyColormap');
  1105. @glutGet := GetGLutProcAddress(hDLL, 'glutGet');
  1106. @glutDeviceGet := GetGLutProcAddress(hDLL, 'glutDeviceGet');
  1107. @glutExtensionSupported := GetGLutProcAddress(hDLL, 'glutExtensionSupported');
  1108. @glutGetModifiers := GetGLutProcAddress(hDLL, 'glutGetModifiers');
  1109. @glutLayerGet := GetGLutProcAddress(hDLL, 'glutLayerGet');
  1110. @glutBitmapCharacter := GetGLutProcAddress(hDLL, 'glutBitmapCharacter');
  1111. @glutBitmapWidth := GetGLutProcAddress(hDLL, 'glutBitmapWidth');
  1112. @glutStrokeCharacter := GetGLutProcAddress(hDLL, 'glutStrokeCharacter');
  1113. @glutStrokeWidth := GetGLutProcAddress(hDLL, 'glutStrokeWidth');
  1114. @glutBitmapLength := GetGLutProcAddress(hDLL, 'glutBitmapLength');
  1115. @glutStrokeLength := GetGLutProcAddress(hDLL, 'glutStrokeLength');
  1116. @glutWireSphere := GetGLutProcAddress(hDLL, 'glutWireSphere');
  1117. @glutSolidSphere := GetGLutProcAddress(hDLL, 'glutSolidSphere');
  1118. @glutWireCone := GetGLutProcAddress(hDLL, 'glutWireCone');
  1119. @glutSolidCone := GetGLutProcAddress(hDLL, 'glutSolidCone');
  1120. @glutWireCube := GetGLutProcAddress(hDLL, 'glutWireCube');
  1121. @glutSolidCube := GetGLutProcAddress(hDLL, 'glutSolidCube');
  1122. @glutWireTorus := GetGLutProcAddress(hDLL, 'glutWireTorus');
  1123. @glutSolidTorus := GetGLutProcAddress(hDLL, 'glutSolidTorus');
  1124. @glutWireDodecahedron := GetGLutProcAddress(hDLL, 'glutWireDodecahedron');
  1125. @glutSolidDodecahedron := GetGLutProcAddress(hDLL, 'glutSolidDodecahedron');
  1126. @glutWireTeapot := GetGLutProcAddress(hDLL, 'glutWireTeapot');
  1127. @glutSolidTeapot := GetGLutProcAddress(hDLL, 'glutSolidTeapot');
  1128. @glutWireOctahedron := GetGLutProcAddress(hDLL, 'glutWireOctahedron');
  1129. @glutSolidOctahedron := GetGLutProcAddress(hDLL, 'glutSolidOctahedron');
  1130. @glutWireTetrahedron := GetGLutProcAddress(hDLL, 'glutWireTetrahedron');
  1131. @glutSolidTetrahedron := GetGLutProcAddress(hDLL, 'glutSolidTetrahedron');
  1132. @glutWireIcosahedron := GetGLutProcAddress(hDLL, 'glutWireIcosahedron');
  1133. @glutSolidIcosahedron := GetGLutProcAddress(hDLL, 'glutSolidIcosahedron');
  1134. @glutVideoResizeGet := GetGLutProcAddress(hDLL, 'glutVideoResizeGet');
  1135. @glutSetupVideoResizing := GetGLutProcAddress(hDLL, 'glutSetupVideoResizing');
  1136. @glutStopVideoResizing := GetGLutProcAddress(hDLL, 'glutStopVideoResizing');
  1137. @glutVideoResize := GetGLutProcAddress(hDLL, 'glutVideoResize');
  1138. @glutVideoPan := GetGLutProcAddress(hDLL, 'glutVideoPan');
  1139. @glutReportErrors := GetGLutProcAddress(hDLL, 'glutReportErrors');
  1140. @glutIgnoreKeyRepeat := GetGLutProcAddress(hDLL, 'glutIgnoreKeyRepeat');
  1141. @glutSetKeyRepeat := GetGLutProcAddress(hDLL, 'glutSetKeyRepeat');
  1142. @glutForceJoystickFunc := GetGLutProcAddress(hDLL, 'glutForceJoystickFunc');
  1143. @glutGameModeString := GetGLutProcAddress(hDLL, 'glutGameModeString');
  1144. @glutEnterGameMode := GetGLutProcAddress(hDLL, 'glutEnterGameMode');
  1145. @glutLeaveGameMode := GetGLutProcAddress(hDLL, 'glutLeaveGameMode');
  1146. @glutGameModeGet := GetGLutProcAddress(hDLL, 'glutGameModeGet');
  1147. {$ENDIF GLUT_EXCLUSIVE_FPUMODE}
  1148. {$ifndef Windows}
  1149. GLUT_STROKE_ROMAN := GetGLutProcAddress(hDll, 'glutStrokeRoman');
  1150. GLUT_STROKE_MONO_ROMAN := GetGLutProcAddress(hDll,'glutStrokeMonoRoman');
  1151. GLUT_BITMAP_9_BY_15 := GetGLutProcAddress(hDll, 'glutBitmap9By15');
  1152. GLUT_BITMAP_8_BY_13 := GetGLutProcAddress(hDll, 'glutBitmap8By13');
  1153. GLUT_BITMAP_TIMES_ROMAN_10 := GetGLutProcAddress(hDll, 'glutBitmapTimesRoman10');
  1154. GLUT_BITMAP_TIMES_ROMAN_24 := GetGLutProcAddress(hDll, 'glutBitmapTimesRoman24');
  1155. GLUT_BITMAP_HELVETICA_10 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica10');
  1156. GLUT_BITMAP_HELVETICA_12 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica12');
  1157. GLUT_BITMAP_HELVETICA_18 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica18');
  1158. {$endif Windows}
  1159. except
  1160. raise Exception.Create('Could not load ' + MethodName + ' from ' + dll);
  1161. end;
  1162. end;
  1163. {$ENDIF MORPHOS}
  1164. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  1165. VAR
  1166. GLUT_EXCLUSIVE_glut_ExceptionMask : TFPUExceptionMask;
  1167. GLUT_EXCLUSIVE_fpc__ExceptionMask : TFPUExceptionMask;
  1168. GLUT_EXCLUSIVE_glut_PrecisionMode : TFPUPrecisionMode;
  1169. GLUT_EXCLUSIVE_fpc__PrecisionMode : TFPUPrecisionMode;
  1170. GLUT_EXCLUSIVE_glut_RoundMode : TFPURoundingMode;
  1171. GLUT_EXCLUSIVE_fpc__RoundMode : TFPURoundingMode;
  1172. PROCEDURE init_fpumode;
  1173. BEGIN
  1174. GLUT_EXCLUSIVE_glut_ExceptionMask := GetExceptionMask+[exDenormalized, exInvalidOp, exOverflow, exPrecision, exUnderflow, exZeroDivide];
  1175. GLUT_EXCLUSIVE_glut_PrecisionMode := GetPrecisionMode;
  1176. GLUT_EXCLUSIVE_glut_RoundMode := GetRoundMode;
  1177. END;
  1178. PROCEDURE switch_to_glut_fpumode; mode_inline;
  1179. BEGIN
  1180. GLUT_EXCLUSIVE_fpc__ExceptionMask := GetExceptionMask;
  1181. GLUT_EXCLUSIVE_fpc__PrecisionMode := GetPrecisionMode;
  1182. GLUT_EXCLUSIVE_fpc__RoundMode := GetRoundMode;
  1183. SetExceptionMask(GLUT_EXCLUSIVE_glut_ExceptionMask);
  1184. SetPrecisionMode(GLUT_EXCLUSIVE_glut_PrecisionMode);
  1185. SetRoundMode(GLUT_EXCLUSIVE_glut_RoundMode);
  1186. END;
  1187. PROCEDURE switch_to_FPC_fpumode; mode_inline;
  1188. BEGIN
  1189. GLUT_EXCLUSIVE_glut_ExceptionMask := GetExceptionMask;
  1190. GLUT_EXCLUSIVE_glut_PrecisionMode := GetPrecisionMode;
  1191. GLUT_EXCLUSIVE_glut_RoundMode := GetRoundMode;
  1192. SetExceptionMask(GLUT_EXCLUSIVE_fpc__ExceptionMask);
  1193. SetPrecisionMode(GLUT_EXCLUSIVE_fpc__PrecisionMode);
  1194. SetRoundMode(GLUT_EXCLUSIVE_fpc__RoundMode);
  1195. END;
  1196. procedure glutInit(argcp: PInteger; argv: PPChar);
  1197. begin
  1198. switch_to_glut_fpumode;
  1199. OLD_glutInit(argcp,argv);
  1200. switch_to_FPC_fpumode;
  1201. end;
  1202. procedure glutInitDisplayMode(mode: Word);
  1203. begin
  1204. switch_to_glut_fpumode;
  1205. OLD_glutInitDisplayMode(mode);
  1206. switch_to_FPC_fpumode;
  1207. end;
  1208. procedure glutInitDisplayString(const str: PChar);
  1209. begin
  1210. switch_to_glut_fpumode;
  1211. OLD_glutInitDisplayString(str);
  1212. switch_to_FPC_fpumode;
  1213. end;
  1214. procedure glutInitWindowPosition(x, y: Integer);
  1215. begin
  1216. switch_to_glut_fpumode;
  1217. OLD_glutInitWindowPosition(x,y);
  1218. switch_to_FPC_fpumode;
  1219. end;
  1220. procedure glutInitWindowSize(width, height: Integer);
  1221. begin
  1222. switch_to_glut_fpumode;
  1223. OLD_glutInitWindowSize(width,height);
  1224. switch_to_FPC_fpumode;
  1225. end;
  1226. procedure glutMainLoop;
  1227. begin
  1228. switch_to_glut_fpumode;
  1229. OLD_glutMainLoop();
  1230. switch_to_FPC_fpumode;
  1231. end;
  1232. function glutCreateWindow(const title: PChar): Integer;
  1233. begin
  1234. switch_to_glut_fpumode;
  1235. glutCreateWindow := OLD_glutCreateWindow(title);
  1236. switch_to_FPC_fpumode;
  1237. end;
  1238. function glutCreateSubWindow(win, x, y, width, height: Integer): Integer;
  1239. begin
  1240. switch_to_glut_fpumode;
  1241. glutCreateSubWindow := OLD_glutCreateSubWindow(win,x,y,width,height);
  1242. switch_to_FPC_fpumode;
  1243. end;
  1244. procedure glutDestroyWindow(win: Integer);
  1245. begin
  1246. switch_to_glut_fpumode;
  1247. OLD_glutDestroyWindow(win);
  1248. switch_to_FPC_fpumode;
  1249. end;
  1250. procedure glutPostRedisplay;
  1251. begin
  1252. switch_to_glut_fpumode;
  1253. OLD_glutPostRedisplay();
  1254. switch_to_FPC_fpumode;
  1255. end;
  1256. procedure glutPostWindowRedisplay(win: Integer);
  1257. begin
  1258. switch_to_glut_fpumode;
  1259. OLD_glutPostWindowRedisplay(win);
  1260. switch_to_FPC_fpumode;
  1261. end;
  1262. procedure glutSwapBuffers;
  1263. begin
  1264. switch_to_glut_fpumode;
  1265. OLD_glutSwapBuffers();
  1266. switch_to_FPC_fpumode;
  1267. end;
  1268. function glutGetWindow: Integer;
  1269. begin
  1270. switch_to_glut_fpumode;
  1271. glutGetWindow := OLD_glutGetWindow();
  1272. switch_to_FPC_fpumode;
  1273. end;
  1274. procedure glutSetWindow(win: Integer);
  1275. begin
  1276. switch_to_glut_fpumode;
  1277. OLD_glutSetWindow(win);
  1278. switch_to_FPC_fpumode;
  1279. end;
  1280. procedure glutSetWindowTitle(const title: PChar);
  1281. begin
  1282. switch_to_glut_fpumode;
  1283. OLD_glutSetWindowTitle(title);
  1284. switch_to_FPC_fpumode;
  1285. end;
  1286. procedure glutSetIconTitle(const title: PChar);
  1287. begin
  1288. switch_to_glut_fpumode;
  1289. OLD_glutSetIconTitle(title);
  1290. switch_to_FPC_fpumode;
  1291. end;
  1292. procedure glutPositionWindow(x, y: Integer);
  1293. begin
  1294. switch_to_glut_fpumode;
  1295. OLD_glutPositionWindow(x,y);
  1296. switch_to_FPC_fpumode;
  1297. end;
  1298. procedure glutReshapeWindow(width, height: Integer);
  1299. begin
  1300. switch_to_glut_fpumode;
  1301. OLD_glutReshapeWindow(width,height);
  1302. switch_to_FPC_fpumode;
  1303. end;
  1304. procedure glutPopWindow;
  1305. begin
  1306. switch_to_glut_fpumode;
  1307. OLD_glutPopWindow();
  1308. switch_to_FPC_fpumode;
  1309. end;
  1310. procedure glutPushWindow;
  1311. begin
  1312. switch_to_glut_fpumode;
  1313. OLD_glutPushWindow();
  1314. switch_to_FPC_fpumode;
  1315. end;
  1316. procedure glutIconifyWindow;
  1317. begin
  1318. switch_to_glut_fpumode;
  1319. OLD_glutIconifyWindow();
  1320. switch_to_FPC_fpumode;
  1321. end;
  1322. procedure glutShowWindow;
  1323. begin
  1324. switch_to_glut_fpumode;
  1325. OLD_glutShowWindow();
  1326. switch_to_FPC_fpumode;
  1327. end;
  1328. procedure glutHideWindow;
  1329. begin
  1330. switch_to_glut_fpumode;
  1331. OLD_glutHideWindow();
  1332. switch_to_FPC_fpumode;
  1333. end;
  1334. procedure glutFullScreen;
  1335. begin
  1336. switch_to_glut_fpumode;
  1337. OLD_glutFullScreen();
  1338. switch_to_FPC_fpumode;
  1339. end;
  1340. procedure glutSetCursor(cursor: Integer);
  1341. begin
  1342. switch_to_glut_fpumode;
  1343. OLD_glutSetCursor(cursor);
  1344. switch_to_FPC_fpumode;
  1345. end;
  1346. procedure glutWarpPointer(x, y: Integer);
  1347. begin
  1348. switch_to_glut_fpumode;
  1349. OLD_glutWarpPointer(x,y);
  1350. switch_to_FPC_fpumode;
  1351. end;
  1352. procedure glutEstablishOverlay;
  1353. begin
  1354. switch_to_glut_fpumode;
  1355. OLD_glutEstablishOverlay();
  1356. switch_to_FPC_fpumode;
  1357. end;
  1358. procedure glutRemoveOverlay;
  1359. begin
  1360. switch_to_glut_fpumode;
  1361. OLD_glutRemoveOverlay();
  1362. switch_to_FPC_fpumode;
  1363. end;
  1364. procedure glutUseLayer(layer: GLenum);
  1365. begin
  1366. switch_to_glut_fpumode;
  1367. OLD_glutUseLayer(layer);
  1368. switch_to_FPC_fpumode;
  1369. end;
  1370. procedure glutPostOverlayRedisplay;
  1371. begin
  1372. switch_to_glut_fpumode;
  1373. OLD_glutPostOverlayRedisplay();
  1374. switch_to_FPC_fpumode;
  1375. end;
  1376. procedure glutPostWindowOverlayRedisplay(win: Integer);
  1377. begin
  1378. switch_to_glut_fpumode;
  1379. OLD_glutPostWindowOverlayRedisplay(win);
  1380. switch_to_FPC_fpumode;
  1381. end;
  1382. procedure glutShowOverlay;
  1383. begin
  1384. switch_to_glut_fpumode;
  1385. OLD_glutShowOverlay();
  1386. switch_to_FPC_fpumode;
  1387. end;
  1388. procedure glutHideOverlay;
  1389. begin
  1390. switch_to_glut_fpumode;
  1391. OLD_glutHideOverlay();
  1392. switch_to_FPC_fpumode;
  1393. end;
  1394. function glutCreateMenu(callback: TGlut1IntCallback): Integer;
  1395. begin
  1396. switch_to_glut_fpumode;
  1397. glutCreateMenu := OLD_glutCreateMenu(callback);
  1398. switch_to_FPC_fpumode;
  1399. end;
  1400. procedure glutDestroyMenu(menu: Integer);
  1401. begin
  1402. switch_to_glut_fpumode;
  1403. OLD_glutDestroyMenu(menu);
  1404. switch_to_FPC_fpumode;
  1405. end;
  1406. function glutGetMenu: Integer;
  1407. begin
  1408. switch_to_glut_fpumode;
  1409. glutGetMenu := OLD_glutGetMenu();
  1410. switch_to_FPC_fpumode;
  1411. end;
  1412. procedure glutSetMenu(menu: Integer);
  1413. begin
  1414. switch_to_glut_fpumode;
  1415. OLD_glutSetMenu(menu);
  1416. switch_to_FPC_fpumode;
  1417. end;
  1418. procedure glutAddMenuEntry(const caption: PChar; value: Integer);
  1419. begin
  1420. switch_to_glut_fpumode;
  1421. OLD_glutAddMenuEntry(caption,value);
  1422. switch_to_FPC_fpumode;
  1423. end;
  1424. procedure glutAddSubMenu(const caption: PChar; submenu: Integer);
  1425. begin
  1426. switch_to_glut_fpumode;
  1427. OLD_glutAddSubMenu(caption,submenu);
  1428. switch_to_FPC_fpumode;
  1429. end;
  1430. procedure glutChangeToMenuEntry(item: Integer; const caption: PChar; value: Integer);
  1431. begin
  1432. switch_to_glut_fpumode;
  1433. OLD_glutChangeToMenuEntry(item,caption,value);
  1434. switch_to_FPC_fpumode;
  1435. end;
  1436. procedure glutChangeToSubMenu(item: Integer; const caption: PChar; submenu: Integer);
  1437. begin
  1438. switch_to_glut_fpumode;
  1439. OLD_glutChangeToSubMenu(item,caption,submenu);
  1440. switch_to_FPC_fpumode;
  1441. end;
  1442. procedure glutRemoveMenuItem(item: Integer);
  1443. begin
  1444. switch_to_glut_fpumode;
  1445. OLD_glutRemoveMenuItem(item);
  1446. switch_to_FPC_fpumode;
  1447. end;
  1448. procedure glutAttachMenu(button: Integer);
  1449. begin
  1450. switch_to_glut_fpumode;
  1451. OLD_glutAttachMenu(button);
  1452. switch_to_FPC_fpumode;
  1453. end;
  1454. procedure glutDetachMenu(button: Integer);
  1455. begin
  1456. switch_to_glut_fpumode;
  1457. OLD_glutDetachMenu(button);
  1458. switch_to_FPC_fpumode;
  1459. end;
  1460. procedure glutDisplayFunc(f: TGlutVoidCallback);
  1461. begin
  1462. switch_to_glut_fpumode;
  1463. OLD_glutDisplayFunc(f);
  1464. switch_to_FPC_fpumode;
  1465. end;
  1466. procedure glutReshapeFunc(f: TGlut2IntCallback);
  1467. begin
  1468. switch_to_glut_fpumode;
  1469. OLD_glutReshapeFunc(f);
  1470. switch_to_FPC_fpumode;
  1471. end;
  1472. procedure glutKeyboardFunc(f: TGlut1Char2IntCallback);
  1473. begin
  1474. switch_to_glut_fpumode;
  1475. OLD_glutKeyboardFunc(f);
  1476. switch_to_FPC_fpumode;
  1477. end;
  1478. procedure glutMouseFunc(f: TGlut4IntCallback);
  1479. begin
  1480. switch_to_glut_fpumode;
  1481. OLD_glutMouseFunc(f);
  1482. switch_to_FPC_fpumode;
  1483. end;
  1484. procedure glutMotionFunc(f: TGlut2IntCallback);
  1485. begin
  1486. switch_to_glut_fpumode;
  1487. OLD_glutMotionFunc(f);
  1488. switch_to_FPC_fpumode;
  1489. end;
  1490. procedure glutPassiveMotionFunc(f: TGlut2IntCallback);
  1491. begin
  1492. switch_to_glut_fpumode;
  1493. OLD_glutPassiveMotionFunc(f);
  1494. switch_to_FPC_fpumode;
  1495. end;
  1496. procedure glutEntryFunc(f: TGlut1IntCallback);
  1497. begin
  1498. switch_to_glut_fpumode;
  1499. OLD_glutEntryFunc(f);
  1500. switch_to_FPC_fpumode;
  1501. end;
  1502. procedure glutVisibilityFunc(f: TGlut1IntCallback);
  1503. begin
  1504. switch_to_glut_fpumode;
  1505. OLD_glutVisibilityFunc(f);
  1506. switch_to_FPC_fpumode;
  1507. end;
  1508. procedure glutIdleFunc(f: TGlutVoidCallback);
  1509. begin
  1510. switch_to_glut_fpumode;
  1511. OLD_glutIdleFunc(f);
  1512. switch_to_FPC_fpumode;
  1513. end;
  1514. procedure glutTimerFunc(millis: Word; f: TGlut1IntCallback; value: Integer);
  1515. begin
  1516. switch_to_glut_fpumode;
  1517. OLD_glutTimerFunc(millis,f,value);
  1518. switch_to_FPC_fpumode;
  1519. end;
  1520. procedure glutMenuStateFunc(f: TGlut1IntCallback);
  1521. begin
  1522. switch_to_glut_fpumode;
  1523. OLD_glutMenuStateFunc(f);
  1524. switch_to_FPC_fpumode;
  1525. end;
  1526. procedure glutSpecialFunc(f: TGlut3IntCallback);
  1527. begin
  1528. switch_to_glut_fpumode;
  1529. OLD_glutSpecialFunc(f);
  1530. switch_to_FPC_fpumode;
  1531. end;
  1532. procedure glutSpaceballMotionFunc(f: TGlut3IntCallback);
  1533. begin
  1534. switch_to_glut_fpumode;
  1535. OLD_glutSpaceballMotionFunc(f);
  1536. switch_to_FPC_fpumode;
  1537. end;
  1538. procedure glutSpaceballRotateFunc(f: TGlut3IntCallback);
  1539. begin
  1540. switch_to_glut_fpumode;
  1541. OLD_glutSpaceballRotateFunc(f);
  1542. switch_to_FPC_fpumode;
  1543. end;
  1544. procedure glutSpaceballButtonFunc(f: TGlut2IntCallback);
  1545. begin
  1546. switch_to_glut_fpumode;
  1547. OLD_glutSpaceballButtonFunc(f);
  1548. switch_to_FPC_fpumode;
  1549. end;
  1550. procedure glutButtonBoxFunc(f: TGlut2IntCallback);
  1551. begin
  1552. switch_to_glut_fpumode;
  1553. OLD_glutButtonBoxFunc(f);
  1554. switch_to_FPC_fpumode;
  1555. end;
  1556. procedure glutDialsFunc(f: TGlut2IntCallback);
  1557. begin
  1558. switch_to_glut_fpumode;
  1559. OLD_glutDialsFunc(f);
  1560. switch_to_FPC_fpumode;
  1561. end;
  1562. procedure glutTabletMotionFunc(f: TGlut2IntCallback);
  1563. begin
  1564. switch_to_glut_fpumode;
  1565. OLD_glutTabletMotionFunc(f);
  1566. switch_to_FPC_fpumode;
  1567. end;
  1568. procedure glutTabletButtonFunc(f: TGlut4IntCallback);
  1569. begin
  1570. switch_to_glut_fpumode;
  1571. OLD_glutTabletButtonFunc(f);
  1572. switch_to_FPC_fpumode;
  1573. end;
  1574. procedure glutMenuStatusFunc(f: TGlut3IntCallback);
  1575. begin
  1576. switch_to_glut_fpumode;
  1577. OLD_glutMenuStatusFunc(f);
  1578. switch_to_FPC_fpumode;
  1579. end;
  1580. procedure glutOverlayDisplayFunc(f:TGlutVoidCallback);
  1581. begin
  1582. switch_to_glut_fpumode;
  1583. OLD_glutOverlayDisplayFunc(f);
  1584. switch_to_FPC_fpumode;
  1585. end;
  1586. procedure glutWindowStatusFunc(f: TGlut1IntCallback);
  1587. begin
  1588. switch_to_glut_fpumode;
  1589. OLD_glutWindowStatusFunc(f);
  1590. switch_to_FPC_fpumode;
  1591. end;
  1592. procedure glutKeyboardUpFunc(f: TGlut1Char2IntCallback);
  1593. begin
  1594. switch_to_glut_fpumode;
  1595. OLD_glutKeyboardUpFunc(f);
  1596. switch_to_FPC_fpumode;
  1597. end;
  1598. procedure glutSpecialUpFunc(f: TGlut3IntCallback);
  1599. begin
  1600. switch_to_glut_fpumode;
  1601. OLD_glutSpecialUpFunc(f);
  1602. switch_to_FPC_fpumode;
  1603. end;
  1604. procedure glutJoystickFunc(f: TGlut1UInt3IntCallback; pollInterval: Integer);
  1605. begin
  1606. switch_to_glut_fpumode;
  1607. OLD_glutJoystickFunc(f,pollInterval);
  1608. switch_to_FPC_fpumode;
  1609. end;
  1610. procedure glutSetColor(cell: Integer; red, green, blue: GLfloat);
  1611. begin
  1612. switch_to_glut_fpumode;
  1613. OLD_glutSetColor(cell,red,green,blue);
  1614. switch_to_FPC_fpumode;
  1615. end;
  1616. function glutGetColor(ndx, component: Integer): GLfloat;
  1617. begin
  1618. switch_to_glut_fpumode;
  1619. glutGetColor := OLD_glutGetColor(ndx,component);
  1620. switch_to_FPC_fpumode;
  1621. end;
  1622. procedure glutCopyColormap(win: Integer);
  1623. begin
  1624. switch_to_glut_fpumode;
  1625. OLD_glutCopyColormap(win);
  1626. switch_to_FPC_fpumode;
  1627. end;
  1628. function glutGet(t: GLenum): Integer;
  1629. begin
  1630. switch_to_glut_fpumode;
  1631. glutGet := OLD_glutGet(t);
  1632. switch_to_FPC_fpumode;
  1633. end;
  1634. function glutDeviceGet(t: GLenum): Integer;
  1635. begin
  1636. switch_to_glut_fpumode;
  1637. glutDeviceGet := OLD_glutDeviceGet(t);
  1638. switch_to_FPC_fpumode;
  1639. end;
  1640. function glutExtensionSupported(const name: PChar): Integer;
  1641. begin
  1642. switch_to_glut_fpumode;
  1643. glutExtensionSupported := OLD_glutExtensionSupported(name);
  1644. switch_to_FPC_fpumode;
  1645. end;
  1646. function glutGetModifiers: Integer;
  1647. begin
  1648. switch_to_glut_fpumode;
  1649. glutGetModifiers := OLD_glutGetModifiers();
  1650. switch_to_FPC_fpumode;
  1651. end;
  1652. function glutLayerGet(t: GLenum): Integer;
  1653. begin
  1654. switch_to_glut_fpumode;
  1655. glutLayerGet := OLD_glutLayerGet(t);
  1656. switch_to_FPC_fpumode;
  1657. end;
  1658. procedure glutBitmapCharacter(font : pointer; character: Integer);
  1659. begin
  1660. switch_to_glut_fpumode;
  1661. OLD_glutBitmapCharacter(font,character);
  1662. switch_to_FPC_fpumode;
  1663. end;
  1664. function glutBitmapWidth(font : pointer; character: Integer): Integer;
  1665. begin
  1666. switch_to_glut_fpumode;
  1667. glutBitmapWidth := OLD_glutBitmapWidth(font,character);
  1668. switch_to_FPC_fpumode;
  1669. end;
  1670. procedure glutStrokeCharacter(font : pointer; character: Integer);
  1671. begin
  1672. switch_to_glut_fpumode;
  1673. OLD_glutStrokeCharacter(font,character);
  1674. switch_to_FPC_fpumode;
  1675. end;
  1676. function glutStrokeWidth(font : pointer; character: Integer): Integer;
  1677. begin
  1678. switch_to_glut_fpumode;
  1679. glutStrokeWidth := OLD_glutStrokeWidth(font,character);
  1680. switch_to_FPC_fpumode;
  1681. end;
  1682. function glutBitmapLength(font: pointer; const str: PChar): Integer;
  1683. begin
  1684. switch_to_glut_fpumode;
  1685. glutBitmapLength := OLD_glutBitmapLength(font,str);
  1686. switch_to_FPC_fpumode;
  1687. end;
  1688. function glutStrokeLength(font: pointer; const str: PChar): Integer;
  1689. begin
  1690. switch_to_glut_fpumode;
  1691. glutStrokeLength := OLD_glutStrokeLength(font,str);
  1692. switch_to_FPC_fpumode;
  1693. end;
  1694. procedure glutWireSphere(radius: GLdouble; slices, stacks: GLint);
  1695. begin
  1696. switch_to_glut_fpumode;
  1697. OLD_glutWireSphere(radius,slices,stacks);
  1698. switch_to_FPC_fpumode;
  1699. end;
  1700. procedure glutSolidSphere(radius: GLdouble; slices, stacks: GLint);
  1701. begin
  1702. switch_to_glut_fpumode;
  1703. OLD_glutSolidSphere(radius,slices,stacks);
  1704. switch_to_FPC_fpumode;
  1705. end;
  1706. procedure glutWireCone(base, height: GLdouble; slices, stacks: GLint);
  1707. begin
  1708. switch_to_glut_fpumode;
  1709. OLD_glutWireCone(base,height,slices,stacks);
  1710. switch_to_FPC_fpumode;
  1711. end;
  1712. procedure glutSolidCone(base, height: GLdouble; slices, stacks: GLint);
  1713. begin
  1714. switch_to_glut_fpumode;
  1715. OLD_glutSolidCone(base,height,slices,stacks);
  1716. switch_to_FPC_fpumode;
  1717. end;
  1718. procedure glutWireCube(size: GLdouble);
  1719. begin
  1720. switch_to_glut_fpumode;
  1721. OLD_glutWireCube(size);
  1722. switch_to_FPC_fpumode;
  1723. end;
  1724. procedure glutSolidCube(size: GLdouble);
  1725. begin
  1726. switch_to_glut_fpumode;
  1727. OLD_glutSolidCube(size);
  1728. switch_to_FPC_fpumode;
  1729. end;
  1730. procedure glutWireTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint);
  1731. begin
  1732. switch_to_glut_fpumode;
  1733. OLD_glutWireTorus(innerRadius,outerRadius,sides,rings);
  1734. switch_to_FPC_fpumode;
  1735. end;
  1736. procedure glutSolidTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint);
  1737. begin
  1738. switch_to_glut_fpumode;
  1739. OLD_glutSolidTorus(innerRadius,outerRadius,sides,rings);
  1740. switch_to_FPC_fpumode;
  1741. end;
  1742. procedure glutWireDodecahedron;
  1743. begin
  1744. switch_to_glut_fpumode;
  1745. OLD_glutWireDodecahedron();
  1746. switch_to_FPC_fpumode;
  1747. end;
  1748. procedure glutSolidDodecahedron;
  1749. begin
  1750. switch_to_glut_fpumode;
  1751. OLD_glutSolidDodecahedron();
  1752. switch_to_FPC_fpumode;
  1753. end;
  1754. procedure glutWireTeapot(size: GLdouble);
  1755. begin
  1756. switch_to_glut_fpumode;
  1757. OLD_glutWireTeapot(size);
  1758. switch_to_FPC_fpumode;
  1759. end;
  1760. procedure glutSolidTeapot(size: GLdouble);
  1761. begin
  1762. switch_to_glut_fpumode;
  1763. OLD_glutSolidTeapot(size);
  1764. switch_to_FPC_fpumode;
  1765. end;
  1766. procedure glutWireOctahedron;
  1767. begin
  1768. switch_to_glut_fpumode;
  1769. OLD_glutWireOctahedron();
  1770. switch_to_FPC_fpumode;
  1771. end;
  1772. procedure glutSolidOctahedron;
  1773. begin
  1774. switch_to_glut_fpumode;
  1775. OLD_glutSolidOctahedron();
  1776. switch_to_FPC_fpumode;
  1777. end;
  1778. procedure glutWireTetrahedron;
  1779. begin
  1780. switch_to_glut_fpumode;
  1781. OLD_glutWireTetrahedron();
  1782. switch_to_FPC_fpumode;
  1783. end;
  1784. procedure glutSolidTetrahedron;
  1785. begin
  1786. switch_to_glut_fpumode;
  1787. OLD_glutSolidTetrahedron();
  1788. switch_to_FPC_fpumode;
  1789. end;
  1790. procedure glutWireIcosahedron;
  1791. begin
  1792. switch_to_glut_fpumode;
  1793. OLD_glutWireIcosahedron();
  1794. switch_to_FPC_fpumode;
  1795. end;
  1796. procedure glutSolidIcosahedron;
  1797. begin
  1798. switch_to_glut_fpumode;
  1799. OLD_glutSolidIcosahedron();
  1800. switch_to_FPC_fpumode;
  1801. end;
  1802. function glutVideoResizeGet(param: GLenum): Integer;
  1803. begin
  1804. switch_to_glut_fpumode;
  1805. glutVideoResizeGet := OLD_glutVideoResizeGet(param);
  1806. switch_to_FPC_fpumode;
  1807. end;
  1808. procedure glutSetupVideoResizing;
  1809. begin
  1810. switch_to_glut_fpumode;
  1811. OLD_glutSetupVideoResizing();
  1812. switch_to_FPC_fpumode;
  1813. end;
  1814. procedure glutStopVideoResizing;
  1815. begin
  1816. switch_to_glut_fpumode;
  1817. OLD_glutStopVideoResizing();
  1818. switch_to_FPC_fpumode;
  1819. end;
  1820. procedure glutVideoResize(x, y, width, height: Integer);
  1821. begin
  1822. switch_to_glut_fpumode;
  1823. OLD_glutVideoResize(x,y,width,height);
  1824. switch_to_FPC_fpumode;
  1825. end;
  1826. procedure glutVideoPan(x, y, width, height: Integer);
  1827. begin
  1828. switch_to_glut_fpumode;
  1829. OLD_glutVideoPan(x,y,width,height);
  1830. switch_to_FPC_fpumode;
  1831. end;
  1832. procedure glutReportErrors;
  1833. begin
  1834. switch_to_glut_fpumode;
  1835. OLD_glutReportErrors();
  1836. switch_to_FPC_fpumode;
  1837. end;
  1838. procedure glutIgnoreKeyRepeat(ignore: Integer);
  1839. begin
  1840. switch_to_glut_fpumode;
  1841. OLD_glutIgnoreKeyRepeat(ignore);
  1842. switch_to_FPC_fpumode;
  1843. end;
  1844. procedure glutSetKeyRepeat(repeatMode: Integer);
  1845. begin
  1846. switch_to_glut_fpumode;
  1847. OLD_glutSetKeyRepeat(repeatMode);
  1848. switch_to_FPC_fpumode;
  1849. end;
  1850. procedure glutForceJoystickFunc;
  1851. begin
  1852. switch_to_glut_fpumode;
  1853. OLD_glutForceJoystickFunc();
  1854. switch_to_FPC_fpumode;
  1855. end;
  1856. procedure glutGameModeString(const AString : PChar);
  1857. begin
  1858. switch_to_glut_fpumode;
  1859. OLD_glutGameModeString(AString);
  1860. switch_to_FPC_fpumode;
  1861. end;
  1862. function glutEnterGameMode: integer;
  1863. begin
  1864. switch_to_glut_fpumode;
  1865. glutEnterGameMode := OLD_glutEnterGameMode();
  1866. switch_to_FPC_fpumode;
  1867. end;
  1868. procedure glutLeaveGameMode;
  1869. begin
  1870. switch_to_glut_fpumode;
  1871. OLD_glutLeaveGameMode();
  1872. switch_to_FPC_fpumode;
  1873. end;
  1874. function glutGameModeGet(mode : GLenum): integer;
  1875. begin
  1876. switch_to_glut_fpumode;
  1877. glutGameModeGet := OLD_glutGameModeGet(mode);
  1878. switch_to_FPC_fpumode;
  1879. end;
  1880. {$ENDIF GLUT_EXCLUSIVE_FPUMODE}
  1881. initialization
  1882. {$IFDEF GLUT_EXCLUSIVE_FPUMODE}
  1883. init_fpumode;
  1884. {$ENDIF GLUT_EXCLUSIVE_FPUMODE}
  1885. {$IFDEF Windows}
  1886. LoadGlut('glut32.dll');
  1887. {$ELSE}
  1888. {$ifdef darwin}
  1889. LoadGlut('/System/Library/Frameworks/GLUT.framework/GLUT');
  1890. {$else}
  1891. {$IFNDEF MORPHOS}
  1892. LoadGlut('libglut.so.3');
  1893. {$ENDIF}
  1894. {$endif}
  1895. {$ENDIF}
  1896. finalization
  1897. FreeGlut;
  1898. end.