diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-10-14 14:15:48 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-10-14 14:15:48 +0000 |
commit | 863be30ba9af4ce98ef82e76ca6a6c04e39f0846 (patch) | |
tree | 6e5e143d258314ac57ea16fd51ca5b2067c1b37e /packages | |
parent | b9034f4b9494edfff3c5312d4acc5095d98b781c (diff) | |
download | fpc-863be30ba9af4ce98ef82e76ca6a6c04e39f0846.tar.gz |
* fpu safe glut by Jan Bruns, resolves #8995
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@8795 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages')
-rw-r--r-- | packages/extra/opengl/glut.pp | 1339 |
1 files changed, 1334 insertions, 5 deletions
diff --git a/packages/extra/opengl/glut.pp b/packages/extra/opengl/glut.pp index d2d2d58a44..26e3581aaf 100644 --- a/packages/extra/opengl/glut.pp +++ b/packages/extra/opengl/glut.pp @@ -1,8 +1,10 @@ -{ - - Adaption of the delphi3d.net OpenGL units to FreePascal +{ Adaption of the delphi3d.net OpenGL units to FreePascal Sebastian Guenther (sg@freepascal.org) 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 (post@abnuto.de) } {$MACRO ON} @@ -13,6 +15,13 @@ {$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} @@ -45,6 +54,9 @@ uses dynlibs, {$ENDIF} {$ENDIF} + {$IFDEF GLUT_EXCLUSIVE_FPUMODE} + math, + {$ENDIF} GL; type @@ -310,6 +322,241 @@ const {$INCLUDE tinyglh.inc} {$ELSE MORPHOS} + +{$IFDEF GLUT_EXCLUSIVE_FPUMODE} +var +OLD_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; @@ -455,6 +702,8 @@ var glutEnterGameMode : function : integer; extdecl; glutLeaveGameMode : procedure; extdecl; glutGameModeGet : function (mode : GLenum) : integer; extdecl; + +{$ENDIF GLUT_EXCLUSIVE_FPUMODE} {$ENDIF MORPHOS} procedure LoadGlut(const dll: String); @@ -482,6 +731,124 @@ begin 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; @@ -596,6 +963,7 @@ begin @glutEnterGameMode := nil; @glutLeaveGameMode := nil; @glutGameModeGet := nil; +{$ENDIF GLUT_EXCLUSIVE_FPUMODE} {$ENDIF MORPHOS} end; @@ -621,6 +989,122 @@ begin 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'); @@ -735,6 +1219,8 @@ begin @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'); @@ -752,8 +1238,853 @@ begin end; {$ENDIF MORPHOS} +{$IFDEF GLUT_EXCLUSIVE_FPUMODE} + +VAR +GLUT_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} @@ -767,7 +2098,5 @@ initialization {$ENDIF} finalization - FreeGlut; - end. |