| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102 | { Adaption of the delphi3d.net OpenGL units to FreePascal  Sebastian Guenther ([email protected]) in 2002  These units are free to use  19.6.07 : Added GLUT_EXCLUSIVE_FPUMODE to allow for  unsafe glut-libs, that don't handle FPU-exceptions in  a compatible way.  Jan Bruns ([email protected])}{$MACRO ON}{$MODE Delphi}{$IFDEF Windows}  {$DEFINE extdecl := stdcall}{$ELSE}  {$DEFINE extdecl := cdecl}{$ENDIF}{$IFDEF CPU86}  {$DEFINE GLUT_EXCLUSIVE_FPUMODE}  {$DEFINE mode_inline := register} //inine or local-calling{$ENDIF}{$IFDEF MORPHOS}{$INLINE ON}{$DEFINE GLUT_UNIT}{$ENDIF}unit Glut;// Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. */(* This program is freely distributable without licensing fees  and is   provided without guarantee or warrantee expressed or  implied. This   program is -not- in the public domain. *){******************************************************************************}{ Converted to Delphi by Tom Nuydens ([email protected])                        }{   Contributions by Igor Karpov ([email protected])                           }{   For the latest updates, visit Delphi3D: http://www.delphi3d.net            }{******************************************************************************}interfaceuses  SysUtils,  {$IFDEF Windows}  Windows, dynlibs,  {$ELSE}  {$IFDEF MORPHOS}  TinyGL,  {$ELSE}  dynlibs,  {$ENDIF}  {$ENDIF}  {$IFDEF GLUT_EXCLUSIVE_FPUMODE}  math,  {$ENDIF}  GL;type  PInteger = ^Integer;  PPChar = ^PChar;  TGlutVoidCallback = procedure; cdecl;  TGlut1IntCallback = procedure(value: Integer); cdecl;  TGlut2IntCallback = procedure(v1, v2: Integer); cdecl;  TGlut3IntCallback = procedure(v1, v2, v3: Integer); cdecl;  TGlut4IntCallback = procedure(v1, v2, v3, v4: Integer); cdecl;  TGlut1Char2IntCallback = procedure(c: Byte; v1, v2: Integer); cdecl;  TGlut1UInt3IntCallback = procedure(u: Cardinal; v1, v2, v3: Integer); cdecl;const  GLUT_API_VERSION                = 3;  GLUT_XLIB_IMPLEMENTATION        = 12;  // Display mode bit masks.  GLUT_RGB                        = 0;  GLUT_RGBA                       = GLUT_RGB;  GLUT_INDEX                      = 1;  GLUT_SINGLE                     = 0;  GLUT_DOUBLE                     = 2;  GLUT_ACCUM                      = 4;  GLUT_ALPHA                      = 8;  GLUT_DEPTH                      = 16;  GLUT_STENCIL                    = 32;  GLUT_MULTISAMPLE                = 128;  GLUT_STEREO                     = 256;  GLUT_LUMINANCE                  = 512;  // Mouse buttons.  GLUT_LEFT_BUTTON                = 0;  GLUT_MIDDLE_BUTTON              = 1;  GLUT_RIGHT_BUTTON               = 2;  // Mouse button state.  GLUT_DOWN                       = 0;  GLUT_UP                         = 1;  // function keys  GLUT_KEY_F1                     = 1;  GLUT_KEY_F2                     = 2;  GLUT_KEY_F3                     = 3;  GLUT_KEY_F4                     = 4;  GLUT_KEY_F5                     = 5;  GLUT_KEY_F6                     = 6;  GLUT_KEY_F7                     = 7;  GLUT_KEY_F8                     = 8;  GLUT_KEY_F9                     = 9;  GLUT_KEY_F10                    = 10;  GLUT_KEY_F11                    = 11;  GLUT_KEY_F12                    = 12;  // directional keys  GLUT_KEY_LEFT                   = 100;  GLUT_KEY_UP                     = 101;  GLUT_KEY_RIGHT                  = 102;  GLUT_KEY_DOWN                   = 103;  GLUT_KEY_PAGE_UP                = 104;  GLUT_KEY_PAGE_DOWN              = 105;  GLUT_KEY_HOME                   = 106;  GLUT_KEY_END                    = 107;  GLUT_KEY_INSERT                 = 108;  // Entry/exit  state.  GLUT_LEFT                       = 0;  GLUT_ENTERED                    = 1;  // Menu usage state.  GLUT_MENU_NOT_IN_USE            = 0;  GLUT_MENU_IN_USE                = 1;  // Visibility  state.  GLUT_NOT_VISIBLE                = 0;  GLUT_VISIBLE                    = 1;  // Window status  state.  GLUT_HIDDEN                     = 0;  GLUT_FULLY_RETAINED             = 1;  GLUT_PARTIALLY_RETAINED         = 2;  GLUT_FULLY_COVERED              = 3;  // Color index component selection values.  GLUT_RED                        = 0;  GLUT_GREEN                      = 1;  GLUT_BLUE                       = 2;  // Layers for use.  GLUT_NORMAL                     = 0;  GLUT_OVERLAY                    = 1;{$ifdef Windows}  // Stroke font constants (use these in GLUT program).  GLUT_STROKE_ROMAN               = Pointer(0);  GLUT_STROKE_MONO_ROMAN          = Pointer(1);  // Bitmap font constants (use these in GLUT program).  GLUT_BITMAP_9_BY_15             = Pointer(2);  GLUT_BITMAP_8_BY_13             = Pointer(3);  GLUT_BITMAP_TIMES_ROMAN_10      = Pointer(4);  GLUT_BITMAP_TIMES_ROMAN_24      = Pointer(5);  GLUT_BITMAP_HELVETICA_10        = Pointer(6);  GLUT_BITMAP_HELVETICA_12        = Pointer(7);  GLUT_BITMAP_HELVETICA_18        = Pointer(8);{$else Windows}var  // Stroke font constants (use these in GLUT program).  GLUT_STROKE_ROMAN               : Pointer;  GLUT_STROKE_MONO_ROMAN          : Pointer;  // Bitmap font constants (use these in GLUT program).  GLUT_BITMAP_9_BY_15             : Pointer;  GLUT_BITMAP_8_BY_13             : Pointer;  GLUT_BITMAP_TIMES_ROMAN_10      : Pointer;  GLUT_BITMAP_TIMES_ROMAN_24      : Pointer;  GLUT_BITMAP_HELVETICA_10        : Pointer;  GLUT_BITMAP_HELVETICA_12        : Pointer;  GLUT_BITMAP_HELVETICA_18        : Pointer;const{$endif Windows}  // glutGet parameters.  GLUT_WINDOW_X                   = 100;  GLUT_WINDOW_Y                   = 101;  GLUT_WINDOW_WIDTH               = 102;  GLUT_WINDOW_HEIGHT              = 103;  GLUT_WINDOW_BUFFER_SIZE         = 104;  GLUT_WINDOW_STENCIL_SIZE        = 105;  GLUT_WINDOW_DEPTH_SIZE          = 106;  GLUT_WINDOW_RED_SIZE            = 107;  GLUT_WINDOW_GREEN_SIZE          = 108;  GLUT_WINDOW_BLUE_SIZE           = 109;  GLUT_WINDOW_ALPHA_SIZE          = 110;  GLUT_WINDOW_ACCUM_RED_SIZE      = 111;  GLUT_WINDOW_ACCUM_GREEN_SIZE    = 112;  GLUT_WINDOW_ACCUM_BLUE_SIZE     = 113;  GLUT_WINDOW_ACCUM_ALPHA_SIZE    = 114;  GLUT_WINDOW_DOUBLEBUFFER        = 115;  GLUT_WINDOW_RGBA                = 116;  GLUT_WINDOW_PARENT              = 117;  GLUT_WINDOW_NUM_CHILDREN        = 118;  GLUT_WINDOW_COLORMAP_SIZE       = 119;  GLUT_WINDOW_NUM_SAMPLES         = 120;  GLUT_WINDOW_STEREO              = 121;  GLUT_WINDOW_CURSOR              = 122;  GLUT_SCREEN_WIDTH               = 200;  GLUT_SCREEN_HEIGHT              = 201;  GLUT_SCREEN_WIDTH_MM            = 202;  GLUT_SCREEN_HEIGHT_MM           = 203;  GLUT_MENU_NUM_ITEMS             = 300;  GLUT_DISPLAY_MODE_POSSIBLE      = 400;  GLUT_INIT_WINDOW_X              = 500;  GLUT_INIT_WINDOW_Y              = 501;  GLUT_INIT_WINDOW_WIDTH          = 502;  GLUT_INIT_WINDOW_HEIGHT         = 503;  GLUT_INIT_DISPLAY_MODE          = 504;  GLUT_ELAPSED_TIME               = 700;  GLUT_WINDOW_FORMAT_ID		  = 123;  // glutDeviceGet parameters.  GLUT_HAS_KEYBOARD               = 600;  GLUT_HAS_MOUSE                  = 601;  GLUT_HAS_SPACEBALL              = 602;  GLUT_HAS_DIAL_AND_BUTTON_BOX    = 603;  GLUT_HAS_TABLET                 = 604;  GLUT_NUM_MOUSE_BUTTONS          = 605;  GLUT_NUM_SPACEBALL_BUTTONS      = 606;  GLUT_NUM_BUTTON_BOX_BUTTONS     = 607;  GLUT_NUM_DIALS                  = 608;  GLUT_NUM_TABLET_BUTTONS         = 609;  GLUT_DEVICE_IGNORE_KEY_REPEAT   = 610;  GLUT_DEVICE_KEY_REPEAT          = 611;  GLUT_HAS_JOYSTICK               = 612;  GLUT_OWNS_JOYSTICK              = 613;  GLUT_JOYSTICK_BUTTONS           = 614;  GLUT_JOYSTICK_AXES              = 615;  GLUT_JOYSTICK_POLL_RATE         = 616;  // glutLayerGet parameters.  GLUT_OVERLAY_POSSIBLE           = 800;  GLUT_LAYER_IN_USE               = 801;  GLUT_HAS_OVERLAY                = 802;  GLUT_TRANSPARENT_INDEX          = 803;  GLUT_NORMAL_DAMAGED             = 804;  GLUT_OVERLAY_DAMAGED            = 805;  // glutVideoResizeGet parameters.  GLUT_VIDEO_RESIZE_POSSIBLE       = 900;  GLUT_VIDEO_RESIZE_IN_USE         = 901;  GLUT_VIDEO_RESIZE_X_DELTA        = 902;  GLUT_VIDEO_RESIZE_Y_DELTA        = 903;  GLUT_VIDEO_RESIZE_WIDTH_DELTA    = 904;  GLUT_VIDEO_RESIZE_HEIGHT_DELTA   = 905;  GLUT_VIDEO_RESIZE_X              = 906;  GLUT_VIDEO_RESIZE_Y              = 907;  GLUT_VIDEO_RESIZE_WIDTH          = 908;  GLUT_VIDEO_RESIZE_HEIGHT         = 909;  // glutGetModifiers return mask.  GLUT_ACTIVE_SHIFT                = 1;  GLUT_ACTIVE_CTRL                 = 2;  GLUT_ACTIVE_ALT                  = 4;  // glutSetCursor parameters.  // Basic arrows.  GLUT_CURSOR_RIGHT_ARROW          = 0;  GLUT_CURSOR_LEFT_ARROW           = 1;  // Symbolic cursor shapes.  GLUT_CURSOR_INFO                 = 2;  GLUT_CURSOR_DESTROY              = 3;  GLUT_CURSOR_HELP                 = 4;  GLUT_CURSOR_CYCLE                = 5;  GLUT_CURSOR_SPRAY                = 6;  GLUT_CURSOR_WAIT                 = 7;  GLUT_CURSOR_TEXT                 = 8;  GLUT_CURSOR_CROSSHAIR            = 9;  // Directional cursors.  GLUT_CURSOR_UP_DOWN              = 10;  GLUT_CURSOR_LEFT_RIGHT           = 11;  // Sizing cursors.  GLUT_CURSOR_TOP_SIDE             = 12;  GLUT_CURSOR_BOTTOM_SIDE          = 13;  GLUT_CURSOR_LEFT_SIDE            = 14;  GLUT_CURSOR_RIGHT_SIDE           = 15;  GLUT_CURSOR_TOP_LEFT_CORNER      = 16;  GLUT_CURSOR_TOP_RIGHT_CORNER     = 17;  GLUT_CURSOR_BOTTOM_RIGHT_CORNER  = 18;  GLUT_CURSOR_BOTTOM_LEFT_CORNER   = 19;  // Inherit from parent window.  GLUT_CURSOR_INHERIT              = 100;  // Blank cursor.  GLUT_CURSOR_NONE                 = 101;  // Fullscreen crosshair (if available).  GLUT_CURSOR_FULL_CROSSHAIR       = 102;  // GLUT device control sub-API.  // glutSetKeyRepeat modes.  GLUT_KEY_REPEAT_OFF      = 0;  GLUT_KEY_REPEAT_ON       = 1;  GLUT_KEY_REPEAT_DEFAULT  = 2;// Joystick button masks.  GLUT_JOYSTICK_BUTTON_A = 1;  GLUT_JOYSTICK_BUTTON_B = 2;  GLUT_JOYSTICK_BUTTON_C = 4;  GLUT_JOYSTICK_BUTTON_D = 8;  // GLUT game mode sub-API.  // glutGameModeGet.  GLUT_GAME_MODE_ACTIVE           = 0;  GLUT_GAME_MODE_POSSIBLE         = 1;  GLUT_GAME_MODE_WIDTH            = 2;  GLUT_GAME_MODE_HEIGHT           = 3;  GLUT_GAME_MODE_PIXEL_DEPTH      = 4;  GLUT_GAME_MODE_REFRESH_RATE     = 5;  GLUT_GAME_MODE_DISPLAY_CHANGED  = 6;{$IFDEF MORPHOS}{ MorphOS GL works differently due to different dynamic-library handling on Amiga-like }{ systems, so its headers are included here. }{$INCLUDE tinyglh.inc}{$ELSE MORPHOS}{$IFDEF GLUT_EXCLUSIVE_FPUMODE}varOLD_glutInit:procedure(argcp: PInteger; argv: PPChar); extdecl;OLD_glutInitDisplayMode:procedure(mode: Word); extdecl;OLD_glutInitDisplayString:procedure(const str: PChar); extdecl;OLD_glutInitWindowPosition:procedure(x, y: Integer); extdecl;OLD_glutInitWindowSize:procedure(width, height: Integer); extdecl;OLD_glutMainLoop:procedure; extdecl;OLD_glutCreateWindow:function(const title: PChar): Integer; extdecl;OLD_glutCreateSubWindow:function(win, x, y, width, height: Integer): Integer; extdecl;OLD_glutDestroyWindow:procedure(win: Integer); extdecl;OLD_glutPostRedisplay:procedure; extdecl;OLD_glutPostWindowRedisplay:procedure(win: Integer); extdecl;OLD_glutSwapBuffers:procedure; extdecl;OLD_glutGetWindow:function: Integer; extdecl;OLD_glutSetWindow:procedure(win: Integer); extdecl;OLD_glutSetWindowTitle:procedure(const title: PChar); extdecl;OLD_glutSetIconTitle:procedure(const title: PChar); extdecl;OLD_glutPositionWindow:procedure(x, y: Integer); extdecl;OLD_glutReshapeWindow:procedure(width, height: Integer); extdecl;OLD_glutPopWindow:procedure; extdecl;OLD_glutPushWindow:procedure; extdecl;OLD_glutIconifyWindow:procedure; extdecl;OLD_glutShowWindow:procedure; extdecl;OLD_glutHideWindow:procedure; extdecl;OLD_glutFullScreen:procedure; extdecl;OLD_glutSetCursor:procedure(cursor: Integer); extdecl;OLD_glutWarpPointer:procedure(x, y: Integer); extdecl;OLD_glutEstablishOverlay:procedure; extdecl;OLD_glutRemoveOverlay:procedure; extdecl;OLD_glutUseLayer:procedure(layer: GLenum); extdecl;OLD_glutPostOverlayRedisplay:procedure; extdecl;OLD_glutPostWindowOverlayRedisplay:procedure(win: Integer); extdecl;OLD_glutShowOverlay:procedure; extdecl;OLD_glutHideOverlay:procedure; extdecl;OLD_glutCreateMenu:function(callback: TGlut1IntCallback): Integer; extdecl;OLD_glutDestroyMenu:procedure(menu: Integer); extdecl;OLD_glutGetMenu:function: Integer; extdecl;OLD_glutSetMenu:procedure(menu: Integer); extdecl;OLD_glutAddMenuEntry:procedure(const caption: PChar; value: Integer); extdecl;OLD_glutAddSubMenu:procedure(const caption: PChar; submenu: Integer); extdecl;OLD_glutChangeToMenuEntry:procedure(item: Integer; const caption: PChar; value: Integer); extdecl;OLD_glutChangeToSubMenu:procedure(item: Integer; const caption: PChar; submenu: Integer); extdecl;OLD_glutRemoveMenuItem:procedure(item: Integer); extdecl;OLD_glutAttachMenu:procedure(button: Integer); extdecl;OLD_glutDetachMenu:procedure(button: Integer); extdecl;OLD_glutDisplayFunc:procedure(f: TGlutVoidCallback); extdecl;OLD_glutReshapeFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutKeyboardFunc:procedure(f: TGlut1Char2IntCallback); extdecl;OLD_glutMouseFunc:procedure(f: TGlut4IntCallback); extdecl;OLD_glutMotionFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutPassiveMotionFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutEntryFunc:procedure(f: TGlut1IntCallback); extdecl;OLD_glutVisibilityFunc:procedure(f: TGlut1IntCallback); extdecl;OLD_glutIdleFunc:procedure(f: TGlutVoidCallback); extdecl;OLD_glutTimerFunc:procedure(millis: Word; f: TGlut1IntCallback; value: Integer); extdecl;OLD_glutMenuStateFunc:procedure(f: TGlut1IntCallback); extdecl;OLD_glutSpecialFunc:procedure(f: TGlut3IntCallback); extdecl;OLD_glutSpaceballMotionFunc:procedure(f: TGlut3IntCallback); extdecl;OLD_glutSpaceballRotateFunc:procedure(f: TGlut3IntCallback); extdecl;OLD_glutSpaceballButtonFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutButtonBoxFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutDialsFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutTabletMotionFunc:procedure(f: TGlut2IntCallback); extdecl;OLD_glutTabletButtonFunc:procedure(f: TGlut4IntCallback); extdecl;OLD_glutMenuStatusFunc:procedure(f: TGlut3IntCallback); extdecl;OLD_glutOverlayDisplayFunc:procedure(f:TGlutVoidCallback); extdecl;OLD_glutWindowStatusFunc:procedure(f: TGlut1IntCallback); extdecl;OLD_glutKeyboardUpFunc:procedure(f: TGlut1Char2IntCallback); extdecl;OLD_glutSpecialUpFunc:procedure(f: TGlut3IntCallback); extdecl;OLD_glutJoystickFunc:procedure(f: TGlut1UInt3IntCallback; pollInterval: Integer); extdecl;OLD_glutSetColor:procedure(cell: Integer; red, green, blue: GLfloat); extdecl;OLD_glutGetColor:function(ndx, component: Integer): GLfloat; extdecl;OLD_glutCopyColormap:procedure(win: Integer); extdecl;OLD_glutGet:function(t: GLenum): Integer; extdecl;OLD_glutDeviceGet:function(t: GLenum): Integer; extdecl;OLD_glutExtensionSupported:function(const name: PChar): Integer; extdecl;OLD_glutGetModifiers:function: Integer; extdecl;OLD_glutLayerGet:function(t: GLenum): Integer; extdecl;OLD_glutBitmapCharacter:procedure(font : pointer; character: Integer); extdecl;OLD_glutBitmapWidth:function(font : pointer; character: Integer): Integer; extdecl;OLD_glutStrokeCharacter:procedure(font : pointer; character: Integer); extdecl;OLD_glutStrokeWidth:function(font : pointer; character: Integer): Integer; extdecl;OLD_glutBitmapLength:function(font: pointer; const str: PChar): Integer; extdecl;OLD_glutStrokeLength:function(font: pointer; const str: PChar): Integer; extdecl;OLD_glutWireSphere:procedure(radius: GLdouble; slices, stacks: GLint); extdecl;OLD_glutSolidSphere:procedure(radius: GLdouble; slices, stacks: GLint); extdecl;OLD_glutWireCone:procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;OLD_glutSolidCone:procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;OLD_glutWireCube:procedure(size: GLdouble); extdecl;OLD_glutSolidCube:procedure(size: GLdouble); extdecl;OLD_glutWireTorus:procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;OLD_glutSolidTorus:procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;OLD_glutWireDodecahedron:procedure; extdecl;OLD_glutSolidDodecahedron:procedure; extdecl;OLD_glutWireTeapot:procedure(size: GLdouble); extdecl;OLD_glutSolidTeapot:procedure(size: GLdouble); extdecl;OLD_glutWireOctahedron:procedure; extdecl;OLD_glutSolidOctahedron:procedure; extdecl;OLD_glutWireTetrahedron:procedure; extdecl;OLD_glutSolidTetrahedron:procedure; extdecl;OLD_glutWireIcosahedron:procedure; extdecl;OLD_glutSolidIcosahedron:procedure; extdecl;OLD_glutVideoResizeGet:function(param: GLenum): Integer; extdecl;OLD_glutSetupVideoResizing:procedure; extdecl;OLD_glutStopVideoResizing:procedure; extdecl;OLD_glutVideoResize:procedure(x, y, width, height: Integer); extdecl;OLD_glutVideoPan:procedure(x, y, width, height: Integer); extdecl;OLD_glutReportErrors:procedure; extdecl;OLD_glutIgnoreKeyRepeat:procedure(ignore: Integer); extdecl;OLD_glutSetKeyRepeat:procedure(repeatMode: Integer); extdecl;OLD_glutForceJoystickFunc:procedure; extdecl;OLD_glutGameModeString:procedure(const AString : PChar); extdecl;OLD_glutEnterGameMode:function: integer; extdecl;OLD_glutLeaveGameMode:procedure; extdecl;OLD_glutGameModeGet:function(mode : GLenum): integer; extdecl;procedure glutInit(argcp: PInteger; argv: PPChar); mode_inline;procedure glutInitDisplayMode(mode: Word); mode_inline;procedure glutInitDisplayString(const str: PChar); mode_inline;procedure glutInitWindowPosition(x, y: Integer); mode_inline;procedure glutInitWindowSize(width, height: Integer); mode_inline;procedure glutMainLoop; mode_inline;function glutCreateWindow(const title: PChar): Integer; mode_inline;function glutCreateSubWindow(win, x, y, width, height: Integer): Integer; mode_inline;procedure glutDestroyWindow(win: Integer); mode_inline;procedure glutPostRedisplay; mode_inline;procedure glutPostWindowRedisplay(win: Integer); mode_inline;procedure glutSwapBuffers; mode_inline;function glutGetWindow: Integer; mode_inline;procedure glutSetWindow(win: Integer); mode_inline;procedure glutSetWindowTitle(const title: PChar); mode_inline;procedure glutSetIconTitle(const title: PChar); mode_inline;procedure glutPositionWindow(x, y: Integer); mode_inline;procedure glutReshapeWindow(width, height: Integer); mode_inline;procedure glutPopWindow; mode_inline;procedure glutPushWindow; mode_inline;procedure glutIconifyWindow; mode_inline;procedure glutShowWindow; mode_inline;procedure glutHideWindow; mode_inline;procedure glutFullScreen; mode_inline;procedure glutSetCursor(cursor: Integer); mode_inline;procedure glutWarpPointer(x, y: Integer); mode_inline;procedure glutEstablishOverlay; mode_inline;procedure glutRemoveOverlay; mode_inline;procedure glutUseLayer(layer: GLenum); mode_inline;procedure glutPostOverlayRedisplay; mode_inline;procedure glutPostWindowOverlayRedisplay(win: Integer); mode_inline;procedure glutShowOverlay; mode_inline;procedure glutHideOverlay; mode_inline;function glutCreateMenu(callback: TGlut1IntCallback): Integer; mode_inline;procedure glutDestroyMenu(menu: Integer); mode_inline;function glutGetMenu: Integer; mode_inline;procedure glutSetMenu(menu: Integer); mode_inline;procedure glutAddMenuEntry(const caption: PChar; value: Integer); mode_inline;procedure glutAddSubMenu(const caption: PChar; submenu: Integer); mode_inline;procedure glutChangeToMenuEntry(item: Integer; const caption: PChar; value: Integer); mode_inline;procedure glutChangeToSubMenu(item: Integer; const caption: PChar; submenu: Integer); mode_inline;procedure glutRemoveMenuItem(item: Integer); mode_inline;procedure glutAttachMenu(button: Integer); mode_inline;procedure glutDetachMenu(button: Integer); mode_inline;procedure glutDisplayFunc(f: TGlutVoidCallback); mode_inline;procedure glutReshapeFunc(f: TGlut2IntCallback); mode_inline;procedure glutKeyboardFunc(f: TGlut1Char2IntCallback); mode_inline;procedure glutMouseFunc(f: TGlut4IntCallback); mode_inline;procedure glutMotionFunc(f: TGlut2IntCallback); mode_inline;procedure glutPassiveMotionFunc(f: TGlut2IntCallback); mode_inline;procedure glutEntryFunc(f: TGlut1IntCallback); mode_inline;procedure glutVisibilityFunc(f: TGlut1IntCallback); mode_inline;procedure glutIdleFunc(f: TGlutVoidCallback); mode_inline;procedure glutTimerFunc(millis: Word; f: TGlut1IntCallback; value: Integer); mode_inline;procedure glutMenuStateFunc(f: TGlut1IntCallback); mode_inline;procedure glutSpecialFunc(f: TGlut3IntCallback); mode_inline;procedure glutSpaceballMotionFunc(f: TGlut3IntCallback); mode_inline;procedure glutSpaceballRotateFunc(f: TGlut3IntCallback); mode_inline;procedure glutSpaceballButtonFunc(f: TGlut2IntCallback); mode_inline;procedure glutButtonBoxFunc(f: TGlut2IntCallback); mode_inline;procedure glutDialsFunc(f: TGlut2IntCallback); mode_inline;procedure glutTabletMotionFunc(f: TGlut2IntCallback); mode_inline;procedure glutTabletButtonFunc(f: TGlut4IntCallback); mode_inline;procedure glutMenuStatusFunc(f: TGlut3IntCallback); mode_inline;procedure glutOverlayDisplayFunc(f:TGlutVoidCallback); mode_inline;procedure glutWindowStatusFunc(f: TGlut1IntCallback); mode_inline;procedure glutKeyboardUpFunc(f: TGlut1Char2IntCallback); mode_inline;procedure glutSpecialUpFunc(f: TGlut3IntCallback); mode_inline;procedure glutJoystickFunc(f: TGlut1UInt3IntCallback; pollInterval: Integer); mode_inline;procedure glutSetColor(cell: Integer; red, green, blue: GLfloat); mode_inline;function glutGetColor(ndx, component: Integer): GLfloat; mode_inline;procedure glutCopyColormap(win: Integer); mode_inline;function glutGet(t: GLenum): Integer; mode_inline;function glutDeviceGet(t: GLenum): Integer; mode_inline;function glutExtensionSupported(const name: PChar): Integer; mode_inline;function glutGetModifiers: Integer; mode_inline;function glutLayerGet(t: GLenum): Integer; mode_inline;procedure glutBitmapCharacter(font : pointer; character: Integer); mode_inline;function glutBitmapWidth(font : pointer; character: Integer): Integer; mode_inline;procedure glutStrokeCharacter(font : pointer; character: Integer); mode_inline;function glutStrokeWidth(font : pointer; character: Integer): Integer; mode_inline;function glutBitmapLength(font: pointer; const str: PChar): Integer; mode_inline;function glutStrokeLength(font: pointer; const str: PChar): Integer; mode_inline;procedure glutWireSphere(radius: GLdouble; slices, stacks: GLint); mode_inline;procedure glutSolidSphere(radius: GLdouble; slices, stacks: GLint); mode_inline;procedure glutWireCone(base, height: GLdouble; slices, stacks: GLint); mode_inline;procedure glutSolidCone(base, height: GLdouble; slices, stacks: GLint); mode_inline;procedure glutWireCube(size: GLdouble); mode_inline;procedure glutSolidCube(size: GLdouble); mode_inline;procedure glutWireTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint); mode_inline;procedure glutSolidTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint); mode_inline;procedure glutWireDodecahedron; mode_inline;procedure glutSolidDodecahedron; mode_inline;procedure glutWireTeapot(size: GLdouble); mode_inline;procedure glutSolidTeapot(size: GLdouble); mode_inline;procedure glutWireOctahedron; mode_inline;procedure glutSolidOctahedron; mode_inline;procedure glutWireTetrahedron; mode_inline;procedure glutSolidTetrahedron; mode_inline;procedure glutWireIcosahedron; mode_inline;procedure glutSolidIcosahedron; mode_inline;function glutVideoResizeGet(param: GLenum): Integer; mode_inline;procedure glutSetupVideoResizing; mode_inline;procedure glutStopVideoResizing; mode_inline;procedure glutVideoResize(x, y, width, height: Integer); mode_inline;procedure glutVideoPan(x, y, width, height: Integer); mode_inline;procedure glutReportErrors; mode_inline;procedure glutIgnoreKeyRepeat(ignore: Integer); mode_inline;procedure glutSetKeyRepeat(repeatMode: Integer); mode_inline;procedure glutForceJoystickFunc; mode_inline;procedure glutGameModeString(const AString : PChar); mode_inline;function glutEnterGameMode: integer; mode_inline;procedure glutLeaveGameMode; mode_inline;function glutGameModeGet(mode : GLenum): integer; mode_inline;{$ELSE GLUT_EXCLUSIVE_FPUMODE}var// GLUT initialization sub-API.  glutInit: procedure(argcp: PInteger; argv: PPChar); extdecl;  glutInitDisplayMode: procedure(mode: Word); extdecl;  glutInitDisplayString: procedure(const str: PChar); extdecl;  glutInitWindowPosition: procedure(x, y: Integer); extdecl;  glutInitWindowSize: procedure(width, height: Integer); extdecl;  glutMainLoop: procedure; extdecl;// GLUT window sub-API.  glutCreateWindow: function(const title: PChar): Integer; extdecl;  glutCreateSubWindow: function(win, x, y, width, height: Integer): Integer; extdecl;  glutDestroyWindow: procedure(win: Integer); extdecl;  glutPostRedisplay: procedure; extdecl;  glutPostWindowRedisplay: procedure(win: Integer); extdecl;  glutSwapBuffers: procedure; extdecl;  glutGetWindow: function: Integer; extdecl;  glutSetWindow: procedure(win: Integer); extdecl;  glutSetWindowTitle: procedure(const title: PChar); extdecl;  glutSetIconTitle: procedure(const title: PChar); extdecl;  glutPositionWindow: procedure(x, y: Integer); extdecl;  glutReshapeWindow: procedure(width, height: Integer); extdecl;  glutPopWindow: procedure; extdecl;  glutPushWindow: procedure; extdecl;  glutIconifyWindow: procedure; extdecl;  glutShowWindow: procedure; extdecl;  glutHideWindow: procedure; extdecl;  glutFullScreen: procedure; extdecl;  glutSetCursor: procedure(cursor: Integer); extdecl;  glutWarpPointer: procedure(x, y: Integer); extdecl;// GLUT overlay sub-API.  glutEstablishOverlay: procedure; extdecl;  glutRemoveOverlay: procedure; extdecl;  glutUseLayer: procedure(layer: GLenum); extdecl;  glutPostOverlayRedisplay: procedure; extdecl;  glutPostWindowOverlayRedisplay: procedure(win: Integer); extdecl;  glutShowOverlay: procedure; extdecl;  glutHideOverlay: procedure; extdecl;// GLUT menu sub-API.  glutCreateMenu: function(callback: TGlut1IntCallback): Integer; extdecl;  glutDestroyMenu: procedure(menu: Integer); extdecl;  glutGetMenu: function: Integer; extdecl;  glutSetMenu: procedure(menu: Integer); extdecl;  glutAddMenuEntry: procedure(const caption: PChar; value: Integer); extdecl;  glutAddSubMenu: procedure(const caption: PChar; submenu: Integer); extdecl;  glutChangeToMenuEntry: procedure(item: Integer; const caption: PChar; value: Integer); extdecl;  glutChangeToSubMenu: procedure(item: Integer; const caption: PChar; submenu: Integer); extdecl;  glutRemoveMenuItem: procedure(item: Integer); extdecl;  glutAttachMenu: procedure(button: Integer); extdecl;  glutDetachMenu: procedure(button: Integer); extdecl;// GLUT window callback sub-API.  glutDisplayFunc: procedure(f: TGlutVoidCallback); extdecl;  glutReshapeFunc: procedure(f: TGlut2IntCallback); extdecl;  glutKeyboardFunc: procedure(f: TGlut1Char2IntCallback); extdecl;  glutMouseFunc: procedure(f: TGlut4IntCallback); extdecl;  glutMotionFunc: procedure(f: TGlut2IntCallback); extdecl;  glutPassiveMotionFunc: procedure(f: TGlut2IntCallback); extdecl;  glutEntryFunc: procedure(f: TGlut1IntCallback); extdecl;  glutVisibilityFunc: procedure(f: TGlut1IntCallback); extdecl;  glutIdleFunc: procedure(f: TGlutVoidCallback); extdecl;  glutTimerFunc: procedure(millis: Word; f: TGlut1IntCallback; value: Integer); extdecl;  glutMenuStateFunc: procedure(f: TGlut1IntCallback); extdecl;  glutSpecialFunc: procedure(f: TGlut3IntCallback); extdecl;  glutSpaceballMotionFunc: procedure(f: TGlut3IntCallback); extdecl;  glutSpaceballRotateFunc: procedure(f: TGlut3IntCallback); extdecl;  glutSpaceballButtonFunc: procedure(f: TGlut2IntCallback); extdecl;  glutButtonBoxFunc: procedure(f: TGlut2IntCallback); extdecl;  glutDialsFunc: procedure(f: TGlut2IntCallback); extdecl;  glutTabletMotionFunc: procedure(f: TGlut2IntCallback); extdecl;  glutTabletButtonFunc: procedure(f: TGlut4IntCallback); extdecl;  glutMenuStatusFunc: procedure(f: TGlut3IntCallback); extdecl;  glutOverlayDisplayFunc: procedure(f:TGlutVoidCallback); extdecl;  glutWindowStatusFunc: procedure(f: TGlut1IntCallback); extdecl;  glutKeyboardUpFunc: procedure(f: TGlut1Char2IntCallback); extdecl;  glutSpecialUpFunc: procedure(f: TGlut3IntCallback); extdecl;  glutJoystickFunc: procedure(f: TGlut1UInt3IntCallback; pollInterval: Integer); extdecl;// GLUT color index sub-API.  glutSetColor: procedure(cell: Integer; red, green, blue: GLfloat); extdecl;  glutGetColor: function(ndx, component: Integer): GLfloat; extdecl;  glutCopyColormap: procedure(win: Integer); extdecl;// GLUT state retrieval sub-API.  glutGet: function(t: GLenum): Integer; extdecl;  glutDeviceGet: function(t: GLenum): Integer; extdecl;// GLUT extension support sub-API  glutExtensionSupported: function(const name: PChar): Integer; extdecl;  glutGetModifiers: function: Integer; extdecl;  glutLayerGet: function(t: GLenum): Integer; extdecl;// GLUT font sub-API  glutBitmapCharacter: procedure(font : pointer; character: Integer); extdecl;  glutBitmapWidth: function(font : pointer; character: Integer): Integer; extdecl;  glutStrokeCharacter: procedure(font : pointer; character: Integer); extdecl;  glutStrokeWidth: function(font : pointer; character: Integer): Integer; extdecl;  glutBitmapLength: function(font: pointer; const str: PChar): Integer; extdecl;  glutStrokeLength: function(font: pointer; const str: PChar): Integer; extdecl;// GLUT pre-built models sub-API  glutWireSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;  glutSolidSphere: procedure(radius: GLdouble; slices, stacks: GLint); extdecl;  glutWireCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;  glutSolidCone: procedure(base, height: GLdouble; slices, stacks: GLint); extdecl;  glutWireCube: procedure(size: GLdouble); extdecl;  glutSolidCube: procedure(size: GLdouble); extdecl;  glutWireTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;  glutSolidTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); extdecl;  glutWireDodecahedron: procedure; extdecl;  glutSolidDodecahedron: procedure; extdecl;  glutWireTeapot: procedure(size: GLdouble); extdecl;  glutSolidTeapot: procedure(size: GLdouble); extdecl;  glutWireOctahedron: procedure; extdecl;  glutSolidOctahedron: procedure; extdecl;  glutWireTetrahedron: procedure; extdecl;  glutSolidTetrahedron: procedure; extdecl;  glutWireIcosahedron: procedure; extdecl;  glutSolidIcosahedron: procedure; extdecl;// GLUT video resize sub-API.  glutVideoResizeGet: function(param: GLenum): Integer; extdecl;  glutSetupVideoResizing: procedure; extdecl;  glutStopVideoResizing: procedure; extdecl;  glutVideoResize: procedure(x, y, width, height: Integer); extdecl;  glutVideoPan: procedure(x, y, width, height: Integer); extdecl;// GLUT debugging sub-API.  glutReportErrors: procedure; extdecl;// GLUT device control sub-API.  glutIgnoreKeyRepeat: procedure(ignore: Integer); extdecl;  glutSetKeyRepeat: procedure(repeatMode: Integer); extdecl;  glutForceJoystickFunc: procedure; extdecl;// GLUT game mode sub-API.  //example glutGameModeString('1280x1024:32@75');  glutGameModeString : procedure (const AString : PChar); extdecl;  glutEnterGameMode : function : integer; extdecl;  glutLeaveGameMode : procedure; extdecl;  glutGameModeGet : function (mode : GLenum) : integer; extdecl;{$ENDIF GLUT_EXCLUSIVE_FPUMODE}{$ENDIF MORPHOS}procedure LoadGlut(const dll: String);procedure FreeGlut;implementation{$IFDEF MORPHOS}{ MorphOS GL works differently due to different dynamic-library handling on Amiga-like }{ systems, so its functions are included here. }{$INCLUDE tinygl.inc}{$ELSE MORPHOS}var  hDLL: TLibHandle;{$ENDIF MORPHOS}procedure FreeGlut;begin{$IFDEF MORPHOS}  // MorphOS's GL will closed down by TinyGL unit, nothing is needed here.{$ELSE MORPHOS}  if (hDLL <> 0) then    FreeLibrary(hDLL);{$IFDEF GLUT_EXCLUSIVE_FPUMODE}  @OLD_glutInit := nil;  @OLD_glutInitDisplayMode := nil;  @OLD_glutInitDisplayString := nil;  @OLD_glutInitWindowPosition := nil;  @OLD_glutInitWindowSize := nil;  @OLD_glutMainLoop := nil;  @OLD_glutCreateWindow := nil;  @OLD_glutCreateSubWindow := nil;  @OLD_glutDestroyWindow := nil;  @OLD_glutPostRedisplay := nil;  @OLD_glutPostWindowRedisplay := nil;  @OLD_glutSwapBuffers := nil;  @OLD_glutGetWindow := nil;  @OLD_glutSetWindow := nil;  @OLD_glutSetWindowTitle := nil;  @OLD_glutSetIconTitle := nil;  @OLD_glutPositionWindow := nil;  @OLD_glutReshapeWindow := nil;  @OLD_glutPopWindow := nil;  @OLD_glutPushWindow := nil;  @OLD_glutIconifyWindow := nil;  @OLD_glutShowWindow := nil;  @OLD_glutHideWindow := nil;  @OLD_glutFullScreen := nil;  @OLD_glutSetCursor := nil;  @OLD_glutWarpPointer := nil;  @OLD_glutEstablishOverlay := nil;  @OLD_glutRemoveOverlay := nil;  @OLD_glutUseLayer := nil;  @OLD_glutPostOverlayRedisplay := nil;  @OLD_glutPostWindowOverlayRedisplay := nil;  @OLD_glutShowOverlay := nil;  @OLD_glutHideOverlay := nil;  @OLD_glutCreateMenu := nil;  @OLD_glutDestroyMenu := nil;  @OLD_glutGetMenu := nil;  @OLD_glutSetMenu := nil;  @OLD_glutAddMenuEntry := nil;  @OLD_glutAddSubMenu := nil;  @OLD_glutChangeToMenuEntry := nil;  @OLD_glutChangeToSubMenu := nil;  @OLD_glutRemoveMenuItem := nil;  @OLD_glutAttachMenu := nil;  @OLD_glutDetachMenu := nil;  @OLD_glutDisplayFunc := nil;  @OLD_glutReshapeFunc := nil;  @OLD_glutKeyboardFunc := nil;  @OLD_glutMouseFunc := nil;  @OLD_glutMotionFunc := nil;  @OLD_glutPassiveMotionFunc := nil;  @OLD_glutEntryFunc := nil;  @OLD_glutVisibilityFunc := nil;  @OLD_glutIdleFunc := nil;  @OLD_glutTimerFunc := nil;  @OLD_glutMenuStateFunc := nil;  @OLD_glutSpecialFunc := nil;  @OLD_glutSpaceballMotionFunc := nil;  @OLD_glutSpaceballRotateFunc := nil;  @OLD_glutSpaceballButtonFunc := nil;  @OLD_glutButtonBoxFunc := nil;  @OLD_glutDialsFunc := nil;  @OLD_glutTabletMotionFunc := nil;  @OLD_glutTabletButtonFunc := nil;  @OLD_glutMenuStatusFunc := nil;  @OLD_glutOverlayDisplayFunc := nil;  @OLD_glutWindowStatusFunc := nil;  @OLD_glutKeyboardUpFunc := nil;  @OLD_glutSpecialUpFunc := nil;  @OLD_glutJoystickFunc := nil;  @OLD_glutSetColor := nil;  @OLD_glutGetColor := nil;  @OLD_glutCopyColormap := nil;  @OLD_glutGet := nil;  @OLD_glutDeviceGet := nil;  @OLD_glutExtensionSupported := nil;  @OLD_glutGetModifiers := nil;  @OLD_glutLayerGet := nil;  @OLD_glutBitmapCharacter := nil;  @OLD_glutBitmapWidth := nil;  @OLD_glutStrokeCharacter := nil;  @OLD_glutStrokeWidth := nil;  @OLD_glutBitmapLength := nil;  @OLD_glutStrokeLength := nil;  @OLD_glutWireSphere := nil;  @OLD_glutSolidSphere := nil;  @OLD_glutWireCone := nil;  @OLD_glutSolidCone := nil;  @OLD_glutWireCube := nil;  @OLD_glutSolidCube := nil;  @OLD_glutWireTorus := nil;  @OLD_glutSolidTorus := nil;  @OLD_glutWireDodecahedron := nil;  @OLD_glutSolidDodecahedron := nil;  @OLD_glutWireTeapot := nil;  @OLD_glutSolidTeapot := nil;  @OLD_glutWireOctahedron := nil;  @OLD_glutSolidOctahedron := nil;  @OLD_glutWireTetrahedron := nil;  @OLD_glutSolidTetrahedron := nil;  @OLD_glutWireIcosahedron := nil;  @OLD_glutSolidIcosahedron := nil;  @OLD_glutVideoResizeGet := nil;  @OLD_glutSetupVideoResizing := nil;  @OLD_glutStopVideoResizing := nil;  @OLD_glutVideoResize := nil;  @OLD_glutVideoPan := nil;  @OLD_glutReportErrors := nil;  @OLD_glutIgnoreKeyRepeat := nil;  @OLD_glutSetKeyRepeat := nil;  @OLD_glutForceJoystickFunc := nil;  @OLD_glutGameModeString := nil;  @OLD_glutEnterGameMode := nil;  @OLD_glutLeaveGameMode := nil;  @OLD_glutGameModeGet := nil;{$ELSE GLUT_EXCLUSIVE_FPUMODE}  @glutInit := nil;  @glutInitDisplayMode := nil;  @glutInitDisplayString := nil;  @glutInitWindowPosition := nil;  @glutInitWindowSize := nil;  @glutMainLoop := nil;  @glutCreateWindow := nil;  @glutCreateSubWindow := nil;  @glutDestroyWindow := nil;  @glutPostRedisplay := nil;  @glutPostWindowRedisplay := nil;  @glutSwapBuffers := nil;  @glutGetWindow := nil;  @glutSetWindow := nil;  @glutSetWindowTitle := nil;  @glutSetIconTitle := nil;  @glutPositionWindow := nil;  @glutReshapeWindow := nil;  @glutPopWindow := nil;  @glutPushWindow := nil;  @glutIconifyWindow := nil;  @glutShowWindow := nil;  @glutHideWindow := nil;  @glutFullScreen := nil;  @glutSetCursor := nil;  @glutWarpPointer := nil;  @glutEstablishOverlay := nil;  @glutRemoveOverlay := nil;  @glutUseLayer := nil;  @glutPostOverlayRedisplay := nil;  @glutPostWindowOverlayRedisplay := nil;  @glutShowOverlay := nil;  @glutHideOverlay := nil;  @glutCreateMenu := nil;  @glutDestroyMenu := nil;  @glutGetMenu := nil;  @glutSetMenu := nil;  @glutAddMenuEntry := nil;  @glutAddSubMenu := nil;  @glutChangeToMenuEntry := nil;  @glutChangeToSubMenu := nil;  @glutRemoveMenuItem := nil;  @glutAttachMenu := nil;  @glutDetachMenu := nil;  @glutDisplayFunc := nil;  @glutReshapeFunc := nil;  @glutKeyboardFunc := nil;  @glutMouseFunc := nil;  @glutMotionFunc := nil;  @glutPassiveMotionFunc := nil;  @glutEntryFunc := nil;  @glutVisibilityFunc := nil;  @glutIdleFunc := nil;  @glutTimerFunc := nil;  @glutMenuStateFunc := nil;  @glutSpecialFunc := nil;  @glutSpaceballMotionFunc := nil;  @glutSpaceballRotateFunc := nil;  @glutSpaceballButtonFunc := nil;  @glutButtonBoxFunc := nil;  @glutDialsFunc := nil;  @glutTabletMotionFunc := nil;  @glutTabletButtonFunc := nil;  @glutMenuStatusFunc := nil;  @glutOverlayDisplayFunc := nil;  @glutWindowStatusFunc := nil;  @glutKeyboardUpFunc := nil;  @glutSpecialUpFunc := nil;  @glutJoystickFunc := nil;  @glutSetColor := nil;  @glutGetColor := nil;  @glutCopyColormap := nil;  @glutGet := nil;  @glutDeviceGet := nil;  @glutExtensionSupported := nil;  @glutGetModifiers := nil;  @glutLayerGet := nil;  @glutBitmapCharacter := nil;  @glutBitmapWidth := nil;  @glutStrokeCharacter := nil;  @glutStrokeWidth := nil;  @glutBitmapLength := nil;  @glutStrokeLength := nil;  @glutWireSphere := nil;  @glutSolidSphere := nil;  @glutWireCone := nil;  @glutSolidCone := nil;  @glutWireCube := nil;  @glutSolidCube := nil;  @glutWireTorus := nil;  @glutSolidTorus := nil;  @glutWireDodecahedron := nil;  @glutSolidDodecahedron := nil;  @glutWireTeapot := nil;  @glutSolidTeapot := nil;  @glutWireOctahedron := nil;  @glutSolidOctahedron := nil;  @glutWireTetrahedron := nil;  @glutSolidTetrahedron := nil;  @glutWireIcosahedron := nil;  @glutSolidIcosahedron := nil;  @glutVideoResizeGet := nil;  @glutSetupVideoResizing := nil;  @glutStopVideoResizing := nil;  @glutVideoResize := nil;  @glutVideoPan := nil;  @glutReportErrors := nil;  @glutIgnoreKeyRepeat := nil;  @glutSetKeyRepeat := nil;  @glutForceJoystickFunc := nil;  @glutGameModeString := nil;  @glutEnterGameMode := nil;  @glutLeaveGameMode := nil;  @glutGameModeGet := nil;{$ENDIF GLUT_EXCLUSIVE_FPUMODE}{$ENDIF MORPHOS}end;procedure LoadGlut(const dll: String);{$IFDEF MORPHOS}begin  // MorphOS's GL has own initialization in TinyGL unit, nothing is needed here.end;{$ELSE MORPHOS}var  MethodName: string = '';  function GetGLutProcAddress(Lib: PtrInt; ProcName: PChar): Pointer;  begin    MethodName:=ProcName;    Result:=GetProcAddress(Lib, ProcName);  end;begin  FreeGlut;  hDLL := LoadLibrary(PChar(dll));  if hDLL = 0 then raise Exception.Create('Could not load Glut from ' + dll);  try{$IFDEF GLUT_EXCLUSIVE_FPUMODE}    @OLD_glutInit := GetGLutProcAddress(hDLL, 'glutInit');    @OLD_glutInitDisplayMode := GetGLutProcAddress(hDLL, 'glutInitDisplayMode');    @OLD_glutInitDisplayString := GetGLutProcAddress(hDLL, 'glutInitDisplayString');    @OLD_glutInitWindowPosition := GetGLutProcAddress(hDLL, 'glutInitWindowPosition');    @OLD_glutInitWindowSize := GetGLutProcAddress(hDLL, 'glutInitWindowSize');    @OLD_glutMainLoop := GetGLutProcAddress(hDLL, 'glutMainLoop');    @OLD_glutCreateWindow := GetGLutProcAddress(hDLL, 'glutCreateWindow');    @OLD_glutCreateSubWindow := GetGLutProcAddress(hDLL, 'glutCreateSubWindow');    @OLD_glutDestroyWindow := GetGLutProcAddress(hDLL, 'glutDestroyWindow');    @OLD_glutPostRedisplay := GetGLutProcAddress(hDLL, 'glutPostRedisplay');    @OLD_glutPostWindowRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowRedisplay');    @OLD_glutSwapBuffers := GetGLutProcAddress(hDLL, 'glutSwapBuffers');    @OLD_glutGetWindow := GetGLutProcAddress(hDLL, 'glutGetWindow');    @OLD_glutSetWindow := GetGLutProcAddress(hDLL, 'glutSetWindow');    @OLD_glutSetWindowTitle := GetGLutProcAddress(hDLL, 'glutSetWindowTitle');    @OLD_glutSetIconTitle := GetGLutProcAddress(hDLL, 'glutSetIconTitle');    @OLD_glutPositionWindow := GetGLutProcAddress(hDLL, 'glutPositionWindow');    @OLD_glutReshapeWindow := GetGLutProcAddress(hDLL, 'glutReshapeWindow');    @OLD_glutPopWindow := GetGLutProcAddress(hDLL, 'glutPopWindow');    @OLD_glutPushWindow := GetGLutProcAddress(hDLL, 'glutPushWindow');    @OLD_glutIconifyWindow := GetGLutProcAddress(hDLL, 'glutIconifyWindow');    @OLD_glutShowWindow := GetGLutProcAddress(hDLL, 'glutShowWindow');    @OLD_glutHideWindow := GetGLutProcAddress(hDLL, 'glutHideWindow');    @OLD_glutFullScreen := GetGLutProcAddress(hDLL, 'glutFullScreen');    @OLD_glutSetCursor := GetGLutProcAddress(hDLL, 'glutSetCursor');    @OLD_glutWarpPointer := GetGLutProcAddress(hDLL, 'glutWarpPointer');    @OLD_glutEstablishOverlay := GetGLutProcAddress(hDLL, 'glutEstablishOverlay');    @OLD_glutRemoveOverlay := GetGLutProcAddress(hDLL, 'glutRemoveOverlay');    @OLD_glutUseLayer := GetGLutProcAddress(hDLL, 'glutUseLayer');    @OLD_glutPostOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostOverlayRedisplay');    @OLD_glutPostWindowOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowOverlayRedisplay');    @OLD_glutShowOverlay := GetGLutProcAddress(hDLL, 'glutShowOverlay');    @OLD_glutHideOverlay := GetGLutProcAddress(hDLL, 'glutHideOverlay');    @OLD_glutCreateMenu := GetGLutProcAddress(hDLL, 'glutCreateMenu');    @OLD_glutDestroyMenu := GetGLutProcAddress(hDLL, 'glutDestroyMenu');    @OLD_glutGetMenu := GetGLutProcAddress(hDLL, 'glutGetMenu');    @OLD_glutSetMenu := GetGLutProcAddress(hDLL, 'glutSetMenu');    @OLD_glutAddMenuEntry := GetGLutProcAddress(hDLL, 'glutAddMenuEntry');    @OLD_glutAddSubMenu := GetGLutProcAddress(hDLL, 'glutAddSubMenu');    @OLD_glutChangeToMenuEntry := GetGLutProcAddress(hDLL, 'glutChangeToMenuEntry');    @OLD_glutChangeToSubMenu := GetGLutProcAddress(hDLL, 'glutChangeToSubMenu');    @OLD_glutRemoveMenuItem := GetGLutProcAddress(hDLL, 'glutRemoveMenuItem');    @OLD_glutAttachMenu := GetGLutProcAddress(hDLL, 'glutAttachMenu');    @OLD_glutDetachMenu := GetGLutProcAddress(hDLL, 'glutDetachMenu');    @OLD_glutDisplayFunc := GetGLutProcAddress(hDLL, 'glutDisplayFunc');    @OLD_glutReshapeFunc := GetGLutProcAddress(hDLL, 'glutReshapeFunc');    @OLD_glutKeyboardFunc := GetGLutProcAddress(hDLL, 'glutKeyboardFunc');    @OLD_glutMouseFunc := GetGLutProcAddress(hDLL, 'glutMouseFunc');    @OLD_glutMotionFunc := GetGLutProcAddress(hDLL, 'glutMotionFunc');    @OLD_glutPassiveMotionFunc := GetGLutProcAddress(hDLL, 'glutPassiveMotionFunc');    @OLD_glutEntryFunc := GetGLutProcAddress(hDLL, 'glutEntryFunc');    @OLD_glutVisibilityFunc := GetGLutProcAddress(hDLL, 'glutVisibilityFunc');    @OLD_glutIdleFunc := GetGLutProcAddress(hDLL, 'glutIdleFunc');    @OLD_glutTimerFunc := GetGLutProcAddress(hDLL, 'glutTimerFunc');    @OLD_glutMenuStateFunc := GetGLutProcAddress(hDLL, 'glutMenuStateFunc');    @OLD_glutSpecialFunc := GetGLutProcAddress(hDLL, 'glutSpecialFunc');    @OLD_glutSpaceballMotionFunc := GetGLutProcAddress(hDLL, 'glutSpaceballMotionFunc');    @OLD_glutSpaceballRotateFunc := GetGLutProcAddress(hDLL, 'glutSpaceballRotateFunc');    @OLD_glutSpaceballButtonFunc := GetGLutProcAddress(hDLL, 'glutSpaceballButtonFunc');    @OLD_glutButtonBoxFunc := GetGLutProcAddress(hDLL, 'glutButtonBoxFunc');    @OLD_glutDialsFunc := GetGLutProcAddress(hDLL, 'glutDialsFunc');    @OLD_glutTabletMotionFunc := GetGLutProcAddress(hDLL, 'glutTabletMotionFunc');    @OLD_glutTabletButtonFunc := GetGLutProcAddress(hDLL, 'glutTabletButtonFunc');    @OLD_glutMenuStatusFunc := GetGLutProcAddress(hDLL, 'glutMenuStatusFunc');    @OLD_glutOverlayDisplayFunc := GetGLutProcAddress(hDLL, 'glutOverlayDisplayFunc');    @OLD_glutWindowStatusFunc := GetGLutProcAddress(hDLL, 'glutWindowStatusFunc');    @OLD_glutKeyboardUpFunc := GetGLutProcAddress(hDLL, 'glutKeyboardUpFunc');    @OLD_glutSpecialUpFunc := GetGLutProcAddress(hDLL, 'glutSpecialUpFunc');    @OLD_glutJoystickFunc := GetGLutProcAddress(hDLL, 'glutJoystickFunc');    @OLD_glutSetColor := GetGLutProcAddress(hDLL, 'glutSetColor');    @OLD_glutGetColor := GetGLutProcAddress(hDLL, 'glutGetColor');    @OLD_glutCopyColormap := GetGLutProcAddress(hDLL, 'glutCopyColormap');    @OLD_glutGet := GetGLutProcAddress(hDLL, 'glutGet');    @OLD_glutDeviceGet := GetGLutProcAddress(hDLL, 'glutDeviceGet');    @OLD_glutExtensionSupported := GetGLutProcAddress(hDLL, 'glutExtensionSupported');    @OLD_glutGetModifiers := GetGLutProcAddress(hDLL, 'glutGetModifiers');    @OLD_glutLayerGet := GetGLutProcAddress(hDLL, 'glutLayerGet');    @OLD_glutBitmapCharacter := GetGLutProcAddress(hDLL, 'glutBitmapCharacter');    @OLD_glutBitmapWidth := GetGLutProcAddress(hDLL, 'glutBitmapWidth');    @OLD_glutStrokeCharacter := GetGLutProcAddress(hDLL, 'glutStrokeCharacter');    @OLD_glutStrokeWidth := GetGLutProcAddress(hDLL, 'glutStrokeWidth');    @OLD_glutBitmapLength := GetGLutProcAddress(hDLL, 'glutBitmapLength');    @OLD_glutStrokeLength := GetGLutProcAddress(hDLL, 'glutStrokeLength');    @OLD_glutWireSphere := GetGLutProcAddress(hDLL, 'glutWireSphere');    @OLD_glutSolidSphere := GetGLutProcAddress(hDLL, 'glutSolidSphere');    @OLD_glutWireCone := GetGLutProcAddress(hDLL, 'glutWireCone');    @OLD_glutSolidCone := GetGLutProcAddress(hDLL, 'glutSolidCone');    @OLD_glutWireCube := GetGLutProcAddress(hDLL, 'glutWireCube');    @OLD_glutSolidCube := GetGLutProcAddress(hDLL, 'glutSolidCube');    @OLD_glutWireTorus := GetGLutProcAddress(hDLL, 'glutWireTorus');    @OLD_glutSolidTorus := GetGLutProcAddress(hDLL, 'glutSolidTorus');    @OLD_glutWireDodecahedron := GetGLutProcAddress(hDLL, 'glutWireDodecahedron');    @OLD_glutSolidDodecahedron := GetGLutProcAddress(hDLL, 'glutSolidDodecahedron');    @OLD_glutWireTeapot := GetGLutProcAddress(hDLL, 'glutWireTeapot');    @OLD_glutSolidTeapot := GetGLutProcAddress(hDLL, 'glutSolidTeapot');    @OLD_glutWireOctahedron := GetGLutProcAddress(hDLL, 'glutWireOctahedron');    @OLD_glutSolidOctahedron := GetGLutProcAddress(hDLL, 'glutSolidOctahedron');    @OLD_glutWireTetrahedron := GetGLutProcAddress(hDLL, 'glutWireTetrahedron');    @OLD_glutSolidTetrahedron := GetGLutProcAddress(hDLL, 'glutSolidTetrahedron');    @OLD_glutWireIcosahedron := GetGLutProcAddress(hDLL, 'glutWireIcosahedron');    @OLD_glutSolidIcosahedron := GetGLutProcAddress(hDLL, 'glutSolidIcosahedron');    @OLD_glutVideoResizeGet := GetGLutProcAddress(hDLL, 'glutVideoResizeGet');    @OLD_glutSetupVideoResizing := GetGLutProcAddress(hDLL, 'glutSetupVideoResizing');    @OLD_glutStopVideoResizing := GetGLutProcAddress(hDLL, 'glutStopVideoResizing');    @OLD_glutVideoResize := GetGLutProcAddress(hDLL, 'glutVideoResize');    @OLD_glutVideoPan := GetGLutProcAddress(hDLL, 'glutVideoPan');    @OLD_glutReportErrors := GetGLutProcAddress(hDLL, 'glutReportErrors');    @OLD_glutIgnoreKeyRepeat := GetGLutProcAddress(hDLL, 'glutIgnoreKeyRepeat');    @OLD_glutSetKeyRepeat := GetGLutProcAddress(hDLL, 'glutSetKeyRepeat');    @OLD_glutForceJoystickFunc := GetGLutProcAddress(hDLL, 'glutForceJoystickFunc');    @OLD_glutGameModeString := GetGLutProcAddress(hDLL, 'glutGameModeString');    @OLD_glutEnterGameMode := GetGLutProcAddress(hDLL, 'glutEnterGameMode');    @OLD_glutLeaveGameMode := GetGLutProcAddress(hDLL, 'glutLeaveGameMode');    @OLD_glutGameModeGet := GetGLutProcAddress(hDLL, 'glutGameModeGet');{$ELSE GLUT_EXCLUSIVE_FPUMODE}    @glutInit := GetGLutProcAddress(hDLL, 'glutInit');    @glutInitDisplayMode := GetGLutProcAddress(hDLL, 'glutInitDisplayMode');    @glutInitDisplayString := GetGLutProcAddress(hDLL, 'glutInitDisplayString');    @glutInitWindowPosition := GetGLutProcAddress(hDLL, 'glutInitWindowPosition');    @glutInitWindowSize := GetGLutProcAddress(hDLL, 'glutInitWindowSize');    @glutMainLoop := GetGLutProcAddress(hDLL, 'glutMainLoop');    @glutCreateWindow := GetGLutProcAddress(hDLL, 'glutCreateWindow');    @glutCreateSubWindow := GetGLutProcAddress(hDLL, 'glutCreateSubWindow');    @glutDestroyWindow := GetGLutProcAddress(hDLL, 'glutDestroyWindow');    @glutPostRedisplay := GetGLutProcAddress(hDLL, 'glutPostRedisplay');    @glutPostWindowRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowRedisplay');    @glutSwapBuffers := GetGLutProcAddress(hDLL, 'glutSwapBuffers');    @glutGetWindow := GetGLutProcAddress(hDLL, 'glutGetWindow');    @glutSetWindow := GetGLutProcAddress(hDLL, 'glutSetWindow');    @glutSetWindowTitle := GetGLutProcAddress(hDLL, 'glutSetWindowTitle');    @glutSetIconTitle := GetGLutProcAddress(hDLL, 'glutSetIconTitle');    @glutPositionWindow := GetGLutProcAddress(hDLL, 'glutPositionWindow');    @glutReshapeWindow := GetGLutProcAddress(hDLL, 'glutReshapeWindow');    @glutPopWindow := GetGLutProcAddress(hDLL, 'glutPopWindow');    @glutPushWindow := GetGLutProcAddress(hDLL, 'glutPushWindow');    @glutIconifyWindow := GetGLutProcAddress(hDLL, 'glutIconifyWindow');    @glutShowWindow := GetGLutProcAddress(hDLL, 'glutShowWindow');    @glutHideWindow := GetGLutProcAddress(hDLL, 'glutHideWindow');    @glutFullScreen := GetGLutProcAddress(hDLL, 'glutFullScreen');    @glutSetCursor := GetGLutProcAddress(hDLL, 'glutSetCursor');    @glutWarpPointer := GetGLutProcAddress(hDLL, 'glutWarpPointer');    @glutEstablishOverlay := GetGLutProcAddress(hDLL, 'glutEstablishOverlay');    @glutRemoveOverlay := GetGLutProcAddress(hDLL, 'glutRemoveOverlay');    @glutUseLayer := GetGLutProcAddress(hDLL, 'glutUseLayer');    @glutPostOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostOverlayRedisplay');    @glutPostWindowOverlayRedisplay := GetGLutProcAddress(hDLL, 'glutPostWindowOverlayRedisplay');    @glutShowOverlay := GetGLutProcAddress(hDLL, 'glutShowOverlay');    @glutHideOverlay := GetGLutProcAddress(hDLL, 'glutHideOverlay');    @glutCreateMenu := GetGLutProcAddress(hDLL, 'glutCreateMenu');    @glutDestroyMenu := GetGLutProcAddress(hDLL, 'glutDestroyMenu');    @glutGetMenu := GetGLutProcAddress(hDLL, 'glutGetMenu');    @glutSetMenu := GetGLutProcAddress(hDLL, 'glutSetMenu');    @glutAddMenuEntry := GetGLutProcAddress(hDLL, 'glutAddMenuEntry');    @glutAddSubMenu := GetGLutProcAddress(hDLL, 'glutAddSubMenu');    @glutChangeToMenuEntry := GetGLutProcAddress(hDLL, 'glutChangeToMenuEntry');    @glutChangeToSubMenu := GetGLutProcAddress(hDLL, 'glutChangeToSubMenu');    @glutRemoveMenuItem := GetGLutProcAddress(hDLL, 'glutRemoveMenuItem');    @glutAttachMenu := GetGLutProcAddress(hDLL, 'glutAttachMenu');    @glutDetachMenu := GetGLutProcAddress(hDLL, 'glutDetachMenu');    @glutDisplayFunc := GetGLutProcAddress(hDLL, 'glutDisplayFunc');    @glutReshapeFunc := GetGLutProcAddress(hDLL, 'glutReshapeFunc');    @glutKeyboardFunc := GetGLutProcAddress(hDLL, 'glutKeyboardFunc');    @glutMouseFunc := GetGLutProcAddress(hDLL, 'glutMouseFunc');    @glutMotionFunc := GetGLutProcAddress(hDLL, 'glutMotionFunc');    @glutPassiveMotionFunc := GetGLutProcAddress(hDLL, 'glutPassiveMotionFunc');    @glutEntryFunc := GetGLutProcAddress(hDLL, 'glutEntryFunc');    @glutVisibilityFunc := GetGLutProcAddress(hDLL, 'glutVisibilityFunc');    @glutIdleFunc := GetGLutProcAddress(hDLL, 'glutIdleFunc');    @glutTimerFunc := GetGLutProcAddress(hDLL, 'glutTimerFunc');    @glutMenuStateFunc := GetGLutProcAddress(hDLL, 'glutMenuStateFunc');    @glutSpecialFunc := GetGLutProcAddress(hDLL, 'glutSpecialFunc');    @glutSpaceballMotionFunc := GetGLutProcAddress(hDLL, 'glutSpaceballMotionFunc');    @glutSpaceballRotateFunc := GetGLutProcAddress(hDLL, 'glutSpaceballRotateFunc');    @glutSpaceballButtonFunc := GetGLutProcAddress(hDLL, 'glutSpaceballButtonFunc');    @glutButtonBoxFunc := GetGLutProcAddress(hDLL, 'glutButtonBoxFunc');    @glutDialsFunc := GetGLutProcAddress(hDLL, 'glutDialsFunc');    @glutTabletMotionFunc := GetGLutProcAddress(hDLL, 'glutTabletMotionFunc');    @glutTabletButtonFunc := GetGLutProcAddress(hDLL, 'glutTabletButtonFunc');    @glutMenuStatusFunc := GetGLutProcAddress(hDLL, 'glutMenuStatusFunc');    @glutOverlayDisplayFunc := GetGLutProcAddress(hDLL, 'glutOverlayDisplayFunc');    @glutWindowStatusFunc := GetGLutProcAddress(hDLL, 'glutWindowStatusFunc');    @glutKeyboardUpFunc := GetGLutProcAddress(hDLL, 'glutKeyboardUpFunc');    @glutSpecialUpFunc := GetGLutProcAddress(hDLL, 'glutSpecialUpFunc');    @glutJoystickFunc := GetGLutProcAddress(hDLL, 'glutJoystickFunc');    @glutSetColor := GetGLutProcAddress(hDLL, 'glutSetColor');    @glutGetColor := GetGLutProcAddress(hDLL, 'glutGetColor');    @glutCopyColormap := GetGLutProcAddress(hDLL, 'glutCopyColormap');    @glutGet := GetGLutProcAddress(hDLL, 'glutGet');    @glutDeviceGet := GetGLutProcAddress(hDLL, 'glutDeviceGet');    @glutExtensionSupported := GetGLutProcAddress(hDLL, 'glutExtensionSupported');    @glutGetModifiers := GetGLutProcAddress(hDLL, 'glutGetModifiers');    @glutLayerGet := GetGLutProcAddress(hDLL, 'glutLayerGet');    @glutBitmapCharacter := GetGLutProcAddress(hDLL, 'glutBitmapCharacter');    @glutBitmapWidth := GetGLutProcAddress(hDLL, 'glutBitmapWidth');    @glutStrokeCharacter := GetGLutProcAddress(hDLL, 'glutStrokeCharacter');    @glutStrokeWidth := GetGLutProcAddress(hDLL, 'glutStrokeWidth');    @glutBitmapLength := GetGLutProcAddress(hDLL, 'glutBitmapLength');    @glutStrokeLength := GetGLutProcAddress(hDLL, 'glutStrokeLength');    @glutWireSphere := GetGLutProcAddress(hDLL, 'glutWireSphere');    @glutSolidSphere := GetGLutProcAddress(hDLL, 'glutSolidSphere');    @glutWireCone := GetGLutProcAddress(hDLL, 'glutWireCone');    @glutSolidCone := GetGLutProcAddress(hDLL, 'glutSolidCone');    @glutWireCube := GetGLutProcAddress(hDLL, 'glutWireCube');    @glutSolidCube := GetGLutProcAddress(hDLL, 'glutSolidCube');    @glutWireTorus := GetGLutProcAddress(hDLL, 'glutWireTorus');    @glutSolidTorus := GetGLutProcAddress(hDLL, 'glutSolidTorus');    @glutWireDodecahedron := GetGLutProcAddress(hDLL, 'glutWireDodecahedron');    @glutSolidDodecahedron := GetGLutProcAddress(hDLL, 'glutSolidDodecahedron');    @glutWireTeapot := GetGLutProcAddress(hDLL, 'glutWireTeapot');    @glutSolidTeapot := GetGLutProcAddress(hDLL, 'glutSolidTeapot');    @glutWireOctahedron := GetGLutProcAddress(hDLL, 'glutWireOctahedron');    @glutSolidOctahedron := GetGLutProcAddress(hDLL, 'glutSolidOctahedron');    @glutWireTetrahedron := GetGLutProcAddress(hDLL, 'glutWireTetrahedron');    @glutSolidTetrahedron := GetGLutProcAddress(hDLL, 'glutSolidTetrahedron');    @glutWireIcosahedron := GetGLutProcAddress(hDLL, 'glutWireIcosahedron');    @glutSolidIcosahedron := GetGLutProcAddress(hDLL, 'glutSolidIcosahedron');    @glutVideoResizeGet := GetGLutProcAddress(hDLL, 'glutVideoResizeGet');    @glutSetupVideoResizing := GetGLutProcAddress(hDLL, 'glutSetupVideoResizing');    @glutStopVideoResizing := GetGLutProcAddress(hDLL, 'glutStopVideoResizing');    @glutVideoResize := GetGLutProcAddress(hDLL, 'glutVideoResize');    @glutVideoPan := GetGLutProcAddress(hDLL, 'glutVideoPan');    @glutReportErrors := GetGLutProcAddress(hDLL, 'glutReportErrors');    @glutIgnoreKeyRepeat := GetGLutProcAddress(hDLL, 'glutIgnoreKeyRepeat');    @glutSetKeyRepeat := GetGLutProcAddress(hDLL, 'glutSetKeyRepeat');    @glutForceJoystickFunc := GetGLutProcAddress(hDLL, 'glutForceJoystickFunc');    @glutGameModeString := GetGLutProcAddress(hDLL, 'glutGameModeString');    @glutEnterGameMode := GetGLutProcAddress(hDLL, 'glutEnterGameMode');    @glutLeaveGameMode := GetGLutProcAddress(hDLL, 'glutLeaveGameMode');    @glutGameModeGet := GetGLutProcAddress(hDLL, 'glutGameModeGet');{$ENDIF GLUT_EXCLUSIVE_FPUMODE}{$ifndef Windows}    GLUT_STROKE_ROMAN := GetGLutProcAddress(hDll, 'glutStrokeRoman');    GLUT_STROKE_MONO_ROMAN := GetGLutProcAddress(hDll,'glutStrokeMonoRoman');    GLUT_BITMAP_9_BY_15 := GetGLutProcAddress(hDll, 'glutBitmap9By15');    GLUT_BITMAP_8_BY_13 := GetGLutProcAddress(hDll, 'glutBitmap8By13');    GLUT_BITMAP_TIMES_ROMAN_10 := GetGLutProcAddress(hDll, 'glutBitmapTimesRoman10');    GLUT_BITMAP_TIMES_ROMAN_24 := GetGLutProcAddress(hDll, 'glutBitmapTimesRoman24');    GLUT_BITMAP_HELVETICA_10 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica10');    GLUT_BITMAP_HELVETICA_12 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica12');    GLUT_BITMAP_HELVETICA_18 := GetGLutProcAddress(hDll, 'glutBitmapHelvetica18');{$endif Windows}  except    raise Exception.Create('Could not load ' + MethodName + ' from ' + dll);  end;end;{$ENDIF MORPHOS}{$IFDEF GLUT_EXCLUSIVE_FPUMODE}VARGLUT_EXCLUSIVE_glut_ExceptionMask : TFPUExceptionMask;GLUT_EXCLUSIVE_fpc__ExceptionMask : TFPUExceptionMask;GLUT_EXCLUSIVE_glut_PrecisionMode : TFPUPrecisionMode;GLUT_EXCLUSIVE_fpc__PrecisionMode : TFPUPrecisionMode;GLUT_EXCLUSIVE_glut_RoundMode : TFPURoundingMode;GLUT_EXCLUSIVE_fpc__RoundMode : TFPURoundingMode;PROCEDURE init_fpumode;BEGIN  GLUT_EXCLUSIVE_glut_ExceptionMask := GetExceptionMask+[exDenormalized, exInvalidOp, exOverflow, exPrecision, exUnderflow, exZeroDivide];  GLUT_EXCLUSIVE_glut_PrecisionMode := GetPrecisionMode;  GLUT_EXCLUSIVE_glut_RoundMode     := GetRoundMode;END;PROCEDURE switch_to_glut_fpumode; mode_inline;BEGIN  GLUT_EXCLUSIVE_fpc__ExceptionMask := GetExceptionMask;  GLUT_EXCLUSIVE_fpc__PrecisionMode := GetPrecisionMode;  GLUT_EXCLUSIVE_fpc__RoundMode     := GetRoundMode;  SetExceptionMask(GLUT_EXCLUSIVE_glut_ExceptionMask);  SetPrecisionMode(GLUT_EXCLUSIVE_glut_PrecisionMode);  SetRoundMode(GLUT_EXCLUSIVE_glut_RoundMode);END;PROCEDURE switch_to_FPC_fpumode; mode_inline;BEGIN  GLUT_EXCLUSIVE_glut_ExceptionMask := GetExceptionMask;  GLUT_EXCLUSIVE_glut_PrecisionMode := GetPrecisionMode;  GLUT_EXCLUSIVE_glut_RoundMode     := GetRoundMode;  SetExceptionMask(GLUT_EXCLUSIVE_fpc__ExceptionMask);  SetPrecisionMode(GLUT_EXCLUSIVE_fpc__PrecisionMode);  SetRoundMode(GLUT_EXCLUSIVE_fpc__RoundMode);END;procedure glutInit(argcp: PInteger; argv: PPChar);begin  switch_to_glut_fpumode;  OLD_glutInit(argcp,argv);  switch_to_FPC_fpumode;end;procedure glutInitDisplayMode(mode: Word);begin  switch_to_glut_fpumode;  OLD_glutInitDisplayMode(mode);  switch_to_FPC_fpumode;end;procedure glutInitDisplayString(const str: PChar);begin  switch_to_glut_fpumode;  OLD_glutInitDisplayString(str);  switch_to_FPC_fpumode;end;procedure glutInitWindowPosition(x, y: Integer);begin  switch_to_glut_fpumode;  OLD_glutInitWindowPosition(x,y);  switch_to_FPC_fpumode;end;procedure glutInitWindowSize(width, height: Integer);begin  switch_to_glut_fpumode;  OLD_glutInitWindowSize(width,height);  switch_to_FPC_fpumode;end;procedure glutMainLoop;begin  switch_to_glut_fpumode;  OLD_glutMainLoop();  switch_to_FPC_fpumode;end;function glutCreateWindow(const title: PChar): Integer;begin  switch_to_glut_fpumode;  glutCreateWindow := OLD_glutCreateWindow(title);  switch_to_FPC_fpumode;end;function glutCreateSubWindow(win, x, y, width, height: Integer): Integer;begin  switch_to_glut_fpumode;  glutCreateSubWindow := OLD_glutCreateSubWindow(win,x,y,width,height);  switch_to_FPC_fpumode;end;procedure glutDestroyWindow(win: Integer);begin  switch_to_glut_fpumode;  OLD_glutDestroyWindow(win);  switch_to_FPC_fpumode;end;procedure glutPostRedisplay;begin  switch_to_glut_fpumode;  OLD_glutPostRedisplay();  switch_to_FPC_fpumode;end;procedure glutPostWindowRedisplay(win: Integer);begin  switch_to_glut_fpumode;  OLD_glutPostWindowRedisplay(win);  switch_to_FPC_fpumode;end;procedure glutSwapBuffers;begin  switch_to_glut_fpumode;  OLD_glutSwapBuffers();  switch_to_FPC_fpumode;end;function glutGetWindow: Integer;begin  switch_to_glut_fpumode;  glutGetWindow := OLD_glutGetWindow();  switch_to_FPC_fpumode;end;procedure glutSetWindow(win: Integer);begin  switch_to_glut_fpumode;  OLD_glutSetWindow(win);  switch_to_FPC_fpumode;end;procedure glutSetWindowTitle(const title: PChar);begin  switch_to_glut_fpumode;  OLD_glutSetWindowTitle(title);  switch_to_FPC_fpumode;end;procedure glutSetIconTitle(const title: PChar);begin  switch_to_glut_fpumode;  OLD_glutSetIconTitle(title);  switch_to_FPC_fpumode;end;procedure glutPositionWindow(x, y: Integer);begin  switch_to_glut_fpumode;  OLD_glutPositionWindow(x,y);  switch_to_FPC_fpumode;end;procedure glutReshapeWindow(width, height: Integer);begin  switch_to_glut_fpumode;  OLD_glutReshapeWindow(width,height);  switch_to_FPC_fpumode;end;procedure glutPopWindow;begin  switch_to_glut_fpumode;  OLD_glutPopWindow();  switch_to_FPC_fpumode;end;procedure glutPushWindow;begin  switch_to_glut_fpumode;  OLD_glutPushWindow();  switch_to_FPC_fpumode;end;procedure glutIconifyWindow;begin  switch_to_glut_fpumode;  OLD_glutIconifyWindow();  switch_to_FPC_fpumode;end;procedure glutShowWindow;begin  switch_to_glut_fpumode;  OLD_glutShowWindow();  switch_to_FPC_fpumode;end;procedure glutHideWindow;begin  switch_to_glut_fpumode;  OLD_glutHideWindow();  switch_to_FPC_fpumode;end;procedure glutFullScreen;begin  switch_to_glut_fpumode;  OLD_glutFullScreen();  switch_to_FPC_fpumode;end;procedure glutSetCursor(cursor: Integer);begin  switch_to_glut_fpumode;  OLD_glutSetCursor(cursor);  switch_to_FPC_fpumode;end;procedure glutWarpPointer(x, y: Integer);begin  switch_to_glut_fpumode;  OLD_glutWarpPointer(x,y);  switch_to_FPC_fpumode;end;procedure glutEstablishOverlay;begin  switch_to_glut_fpumode;  OLD_glutEstablishOverlay();  switch_to_FPC_fpumode;end;procedure glutRemoveOverlay;begin  switch_to_glut_fpumode;  OLD_glutRemoveOverlay();  switch_to_FPC_fpumode;end;procedure glutUseLayer(layer: GLenum);begin  switch_to_glut_fpumode;  OLD_glutUseLayer(layer);  switch_to_FPC_fpumode;end;procedure glutPostOverlayRedisplay;begin  switch_to_glut_fpumode;  OLD_glutPostOverlayRedisplay();  switch_to_FPC_fpumode;end;procedure glutPostWindowOverlayRedisplay(win: Integer);begin  switch_to_glut_fpumode;  OLD_glutPostWindowOverlayRedisplay(win);  switch_to_FPC_fpumode;end;procedure glutShowOverlay;begin  switch_to_glut_fpumode;  OLD_glutShowOverlay();  switch_to_FPC_fpumode;end;procedure glutHideOverlay;begin  switch_to_glut_fpumode;  OLD_glutHideOverlay();  switch_to_FPC_fpumode;end;function glutCreateMenu(callback: TGlut1IntCallback): Integer;begin  switch_to_glut_fpumode;  glutCreateMenu := OLD_glutCreateMenu(callback);  switch_to_FPC_fpumode;end;procedure glutDestroyMenu(menu: Integer);begin  switch_to_glut_fpumode;  OLD_glutDestroyMenu(menu);  switch_to_FPC_fpumode;end;function glutGetMenu: Integer;begin  switch_to_glut_fpumode;  glutGetMenu := OLD_glutGetMenu();  switch_to_FPC_fpumode;end;procedure glutSetMenu(menu: Integer);begin  switch_to_glut_fpumode;  OLD_glutSetMenu(menu);  switch_to_FPC_fpumode;end;procedure glutAddMenuEntry(const caption: PChar; value: Integer);begin  switch_to_glut_fpumode;  OLD_glutAddMenuEntry(caption,value);  switch_to_FPC_fpumode;end;procedure glutAddSubMenu(const caption: PChar; submenu: Integer);begin  switch_to_glut_fpumode;  OLD_glutAddSubMenu(caption,submenu);  switch_to_FPC_fpumode;end;procedure glutChangeToMenuEntry(item: Integer; const caption: PChar; value: Integer);begin  switch_to_glut_fpumode;  OLD_glutChangeToMenuEntry(item,caption,value);  switch_to_FPC_fpumode;end;procedure glutChangeToSubMenu(item: Integer; const caption: PChar; submenu: Integer);begin  switch_to_glut_fpumode;  OLD_glutChangeToSubMenu(item,caption,submenu);  switch_to_FPC_fpumode;end;procedure glutRemoveMenuItem(item: Integer);begin  switch_to_glut_fpumode;  OLD_glutRemoveMenuItem(item);  switch_to_FPC_fpumode;end;procedure glutAttachMenu(button: Integer);begin  switch_to_glut_fpumode;  OLD_glutAttachMenu(button);  switch_to_FPC_fpumode;end;procedure glutDetachMenu(button: Integer);begin  switch_to_glut_fpumode;  OLD_glutDetachMenu(button);  switch_to_FPC_fpumode;end;procedure glutDisplayFunc(f: TGlutVoidCallback);begin  switch_to_glut_fpumode;  OLD_glutDisplayFunc(f);  switch_to_FPC_fpumode;end;procedure glutReshapeFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutReshapeFunc(f);  switch_to_FPC_fpumode;end;procedure glutKeyboardFunc(f: TGlut1Char2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutKeyboardFunc(f);  switch_to_FPC_fpumode;end;procedure glutMouseFunc(f: TGlut4IntCallback);begin  switch_to_glut_fpumode;  OLD_glutMouseFunc(f);  switch_to_FPC_fpumode;end;procedure glutMotionFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutMotionFunc(f);  switch_to_FPC_fpumode;end;procedure glutPassiveMotionFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutPassiveMotionFunc(f);  switch_to_FPC_fpumode;end;procedure glutEntryFunc(f: TGlut1IntCallback);begin  switch_to_glut_fpumode;  OLD_glutEntryFunc(f);  switch_to_FPC_fpumode;end;procedure glutVisibilityFunc(f: TGlut1IntCallback);begin  switch_to_glut_fpumode;  OLD_glutVisibilityFunc(f);  switch_to_FPC_fpumode;end;procedure glutIdleFunc(f: TGlutVoidCallback);begin  switch_to_glut_fpumode;  OLD_glutIdleFunc(f);  switch_to_FPC_fpumode;end;procedure glutTimerFunc(millis: Word; f: TGlut1IntCallback; value: Integer);begin  switch_to_glut_fpumode;  OLD_glutTimerFunc(millis,f,value);  switch_to_FPC_fpumode;end;procedure glutMenuStateFunc(f: TGlut1IntCallback);begin  switch_to_glut_fpumode;  OLD_glutMenuStateFunc(f);  switch_to_FPC_fpumode;end;procedure glutSpecialFunc(f: TGlut3IntCallback);begin  switch_to_glut_fpumode;  OLD_glutSpecialFunc(f);  switch_to_FPC_fpumode;end;procedure glutSpaceballMotionFunc(f: TGlut3IntCallback);begin  switch_to_glut_fpumode;  OLD_glutSpaceballMotionFunc(f);  switch_to_FPC_fpumode;end;procedure glutSpaceballRotateFunc(f: TGlut3IntCallback);begin  switch_to_glut_fpumode;  OLD_glutSpaceballRotateFunc(f);  switch_to_FPC_fpumode;end;procedure glutSpaceballButtonFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutSpaceballButtonFunc(f);  switch_to_FPC_fpumode;end;procedure glutButtonBoxFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutButtonBoxFunc(f);  switch_to_FPC_fpumode;end;procedure glutDialsFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutDialsFunc(f);  switch_to_FPC_fpumode;end;procedure glutTabletMotionFunc(f: TGlut2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutTabletMotionFunc(f);  switch_to_FPC_fpumode;end;procedure glutTabletButtonFunc(f: TGlut4IntCallback);begin  switch_to_glut_fpumode;  OLD_glutTabletButtonFunc(f);  switch_to_FPC_fpumode;end;procedure glutMenuStatusFunc(f: TGlut3IntCallback);begin  switch_to_glut_fpumode;  OLD_glutMenuStatusFunc(f);  switch_to_FPC_fpumode;end;procedure glutOverlayDisplayFunc(f:TGlutVoidCallback);begin  switch_to_glut_fpumode;  OLD_glutOverlayDisplayFunc(f);  switch_to_FPC_fpumode;end;procedure glutWindowStatusFunc(f: TGlut1IntCallback);begin  switch_to_glut_fpumode;  OLD_glutWindowStatusFunc(f);  switch_to_FPC_fpumode;end;procedure glutKeyboardUpFunc(f: TGlut1Char2IntCallback);begin  switch_to_glut_fpumode;  OLD_glutKeyboardUpFunc(f);  switch_to_FPC_fpumode;end;procedure glutSpecialUpFunc(f: TGlut3IntCallback);begin  switch_to_glut_fpumode;  OLD_glutSpecialUpFunc(f);  switch_to_FPC_fpumode;end;procedure glutJoystickFunc(f: TGlut1UInt3IntCallback; pollInterval: Integer);begin  switch_to_glut_fpumode;  OLD_glutJoystickFunc(f,pollInterval);  switch_to_FPC_fpumode;end;procedure glutSetColor(cell: Integer; red, green, blue: GLfloat);begin  switch_to_glut_fpumode;  OLD_glutSetColor(cell,red,green,blue);  switch_to_FPC_fpumode;end;function glutGetColor(ndx, component: Integer): GLfloat;begin  switch_to_glut_fpumode;  glutGetColor := OLD_glutGetColor(ndx,component);  switch_to_FPC_fpumode;end;procedure glutCopyColormap(win: Integer);begin  switch_to_glut_fpumode;  OLD_glutCopyColormap(win);  switch_to_FPC_fpumode;end;function glutGet(t: GLenum): Integer;begin  switch_to_glut_fpumode;  glutGet := OLD_glutGet(t);  switch_to_FPC_fpumode;end;function glutDeviceGet(t: GLenum): Integer;begin  switch_to_glut_fpumode;  glutDeviceGet := OLD_glutDeviceGet(t);  switch_to_FPC_fpumode;end;function glutExtensionSupported(const name: PChar): Integer;begin  switch_to_glut_fpumode;  glutExtensionSupported := OLD_glutExtensionSupported(name);  switch_to_FPC_fpumode;end;function glutGetModifiers: Integer;begin  switch_to_glut_fpumode;  glutGetModifiers := OLD_glutGetModifiers();  switch_to_FPC_fpumode;end;function glutLayerGet(t: GLenum): Integer;begin  switch_to_glut_fpumode;  glutLayerGet := OLD_glutLayerGet(t);  switch_to_FPC_fpumode;end;procedure glutBitmapCharacter(font : pointer; character: Integer);begin  switch_to_glut_fpumode;  OLD_glutBitmapCharacter(font,character);  switch_to_FPC_fpumode;end;function glutBitmapWidth(font : pointer; character: Integer): Integer;begin  switch_to_glut_fpumode;  glutBitmapWidth := OLD_glutBitmapWidth(font,character);  switch_to_FPC_fpumode;end;procedure glutStrokeCharacter(font : pointer; character: Integer);begin  switch_to_glut_fpumode;  OLD_glutStrokeCharacter(font,character);  switch_to_FPC_fpumode;end;function glutStrokeWidth(font : pointer; character: Integer): Integer;begin  switch_to_glut_fpumode;  glutStrokeWidth := OLD_glutStrokeWidth(font,character);  switch_to_FPC_fpumode;end;function glutBitmapLength(font: pointer; const str: PChar): Integer;begin  switch_to_glut_fpumode;  glutBitmapLength := OLD_glutBitmapLength(font,str);  switch_to_FPC_fpumode;end;function glutStrokeLength(font: pointer; const str: PChar): Integer;begin  switch_to_glut_fpumode;  glutStrokeLength := OLD_glutStrokeLength(font,str);  switch_to_FPC_fpumode;end;procedure glutWireSphere(radius: GLdouble; slices, stacks: GLint);begin  switch_to_glut_fpumode;  OLD_glutWireSphere(radius,slices,stacks);  switch_to_FPC_fpumode;end;procedure glutSolidSphere(radius: GLdouble; slices, stacks: GLint);begin  switch_to_glut_fpumode;  OLD_glutSolidSphere(radius,slices,stacks);  switch_to_FPC_fpumode;end;procedure glutWireCone(base, height: GLdouble; slices, stacks: GLint);begin  switch_to_glut_fpumode;  OLD_glutWireCone(base,height,slices,stacks);  switch_to_FPC_fpumode;end;procedure glutSolidCone(base, height: GLdouble; slices, stacks: GLint);begin  switch_to_glut_fpumode;  OLD_glutSolidCone(base,height,slices,stacks);  switch_to_FPC_fpumode;end;procedure glutWireCube(size: GLdouble);begin  switch_to_glut_fpumode;  OLD_glutWireCube(size);  switch_to_FPC_fpumode;end;procedure glutSolidCube(size: GLdouble);begin  switch_to_glut_fpumode;  OLD_glutSolidCube(size);  switch_to_FPC_fpumode;end;procedure glutWireTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint);begin  switch_to_glut_fpumode;  OLD_glutWireTorus(innerRadius,outerRadius,sides,rings);  switch_to_FPC_fpumode;end;procedure glutSolidTorus(innerRadius, outerRadius: GLdouble; sides, rings: GLint);begin  switch_to_glut_fpumode;  OLD_glutSolidTorus(innerRadius,outerRadius,sides,rings);  switch_to_FPC_fpumode;end;procedure glutWireDodecahedron;begin  switch_to_glut_fpumode;  OLD_glutWireDodecahedron();  switch_to_FPC_fpumode;end;procedure glutSolidDodecahedron;begin  switch_to_glut_fpumode;  OLD_glutSolidDodecahedron();  switch_to_FPC_fpumode;end;procedure glutWireTeapot(size: GLdouble);begin  switch_to_glut_fpumode;  OLD_glutWireTeapot(size);  switch_to_FPC_fpumode;end;procedure glutSolidTeapot(size: GLdouble);begin  switch_to_glut_fpumode;  OLD_glutSolidTeapot(size);  switch_to_FPC_fpumode;end;procedure glutWireOctahedron;begin  switch_to_glut_fpumode;  OLD_glutWireOctahedron();  switch_to_FPC_fpumode;end;procedure glutSolidOctahedron;begin  switch_to_glut_fpumode;  OLD_glutSolidOctahedron();  switch_to_FPC_fpumode;end;procedure glutWireTetrahedron;begin  switch_to_glut_fpumode;  OLD_glutWireTetrahedron();  switch_to_FPC_fpumode;end;procedure glutSolidTetrahedron;begin  switch_to_glut_fpumode;  OLD_glutSolidTetrahedron();  switch_to_FPC_fpumode;end;procedure glutWireIcosahedron;begin  switch_to_glut_fpumode;  OLD_glutWireIcosahedron();  switch_to_FPC_fpumode;end;procedure glutSolidIcosahedron;begin  switch_to_glut_fpumode;  OLD_glutSolidIcosahedron();  switch_to_FPC_fpumode;end;function glutVideoResizeGet(param: GLenum): Integer;begin  switch_to_glut_fpumode;  glutVideoResizeGet := OLD_glutVideoResizeGet(param);  switch_to_FPC_fpumode;end;procedure glutSetupVideoResizing;begin  switch_to_glut_fpumode;  OLD_glutSetupVideoResizing();  switch_to_FPC_fpumode;end;procedure glutStopVideoResizing;begin  switch_to_glut_fpumode;  OLD_glutStopVideoResizing();  switch_to_FPC_fpumode;end;procedure glutVideoResize(x, y, width, height: Integer);begin  switch_to_glut_fpumode;  OLD_glutVideoResize(x,y,width,height);  switch_to_FPC_fpumode;end;procedure glutVideoPan(x, y, width, height: Integer);begin  switch_to_glut_fpumode;  OLD_glutVideoPan(x,y,width,height);  switch_to_FPC_fpumode;end;procedure glutReportErrors;begin  switch_to_glut_fpumode;  OLD_glutReportErrors();  switch_to_FPC_fpumode;end;procedure glutIgnoreKeyRepeat(ignore: Integer);begin  switch_to_glut_fpumode;  OLD_glutIgnoreKeyRepeat(ignore);  switch_to_FPC_fpumode;end;procedure glutSetKeyRepeat(repeatMode: Integer);begin  switch_to_glut_fpumode;  OLD_glutSetKeyRepeat(repeatMode);  switch_to_FPC_fpumode;end;procedure glutForceJoystickFunc;begin  switch_to_glut_fpumode;  OLD_glutForceJoystickFunc();  switch_to_FPC_fpumode;end;procedure glutGameModeString(const AString : PChar);begin  switch_to_glut_fpumode;  OLD_glutGameModeString(AString);  switch_to_FPC_fpumode;end;function glutEnterGameMode: integer;begin  switch_to_glut_fpumode;  glutEnterGameMode := OLD_glutEnterGameMode();  switch_to_FPC_fpumode;end;procedure glutLeaveGameMode;begin  switch_to_glut_fpumode;  OLD_glutLeaveGameMode();  switch_to_FPC_fpumode;end;function glutGameModeGet(mode : GLenum): integer;begin  switch_to_glut_fpumode;  glutGameModeGet := OLD_glutGameModeGet(mode);  switch_to_FPC_fpumode;end;{$ENDIF GLUT_EXCLUSIVE_FPUMODE}initialization  {$IFDEF GLUT_EXCLUSIVE_FPUMODE}  init_fpumode;  {$ENDIF GLUT_EXCLUSIVE_FPUMODE}  {$IFDEF Windows}  LoadGlut('glut32.dll');  {$ELSE}  {$ifdef darwin}  LoadGlut('/System/Library/Frameworks/GLUT.framework/GLUT');  {$else}  {$IFNDEF MORPHOS}  LoadGlut('libglut.so.3');  {$ENDIF}  {$endif}  {$ENDIF}finalization  FreeGlut;end.
 |