123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- { FreeGlut extensions, see http://freeglut.sourceforge.net/ .
- Complements the Glut unit that defines standard Glut functionality.
- Function entry points will be nil if freeglut is not
- actually available (or if freeglut version necessary for specific extension
- is not available).
- Includes all the extensions up to FreeGlut 2.6.0 version.
- Omitted is only deprecated stuff, and glutGetProcAddress
- (which is not needed as we have nice glext unit in FPC). }
- unit FreeGlut;
- {$mode Delphi} {< to keep assignments to proc vars look the same as in glut.pp }
- {$MACRO ON}
- { Keep this synched with glut.pp "extdecl" definition. }
- {$IFDEF Windows}
- {$DEFINE extdecl := stdcall}
- {$ELSE}
- {$DEFINE extdecl := cdecl}
- {$ENDIF}
- interface
- uses DynLibs, GL, Glut;
- type
- TGLdouble3 = array [0..2] of GLdouble;
- PGLdouble3 = ^TGLdouble3;
- const
- // Additional GLUT Key definitions for the Special key function
- GLUT_KEY_NUM_LOCK = $006D;
- GLUT_KEY_BEGIN = $006E;
- GLUT_KEY_DELETE = $006F;
- // GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window
- GLUT_ACTION_EXIT = 0;
- GLUT_ACTION_GLUTMAINLOOP_RETURNS = 1;
- GLUT_ACTION_CONTINUE_EXECUTION = 2;
- // Create a new rendering context when the user opens a new window?
- GLUT_CREATE_NEW_CONTEXT = 0;
- GLUT_USE_CURRENT_CONTEXT = 1;
- // Direct/Indirect rendering context options (has meaning only in Unix/X11)
- GLUT_FORCE_INDIRECT_CONTEXT = 0;
- GLUT_ALLOW_DIRECT_CONTEXT = 1;
- GLUT_TRY_DIRECT_CONTEXT = 2;
- GLUT_FORCE_DIRECT_CONTEXT = 3;
- // GLUT API Extension macro definitions -- the glutGet parameters
- GLUT_INIT_STATE = $007C;
- GLUT_ACTION_ON_WINDOW_CLOSE = $01F9;
- GLUT_WINDOW_BORDER_WIDTH = $01FA;
- GLUT_WINDOW_HEADER_HEIGHT = $01FB;
- GLUT_VERSION = $01FC;
- GLUT_RENDERING_CONTEXT = $01FD;
- GLUT_DIRECT_RENDERING = $01FE;
- GLUT_FULL_SCREEN = $01FF;
- // New tokens for glutInitDisplayMode.
- // Only one GLUT_AUXn bit may be used at a time.
- // Value 0x0400 is defined in OpenGLUT.
- GLUT_AUX = $1000;
- GLUT_AUX1 = $1000;
- GLUT_AUX2 = $2000;
- GLUT_AUX3 = $4000;
- GLUT_AUX4 = $8000;
- // Context-related flags
- GLUT_INIT_MAJOR_VERSION = $0200;
- GLUT_INIT_MINOR_VERSION = $0201;
- GLUT_INIT_FLAGS = $0202;
- GLUT_INIT_PROFILE = $0203;
- // Flags for glutInitContextFlags
- GLUT_DEBUG = $0001;
- GLUT_FORWARD_COMPATIBLE = $0002;
- // Flags for glutInitContextProfile
- GLUT_CORE_PROFILE = $0001;
- GLUT_COMPATIBILITY_PROFILE = $0002;
- // GLUT API macro definitions -- the display mode definitions
- GLUT_CAPTIONLESS = $0400;
- GLUT_BORDERLESS = $0800;
- GLUT_SRGB = $1000;
- var
- // Process loop function
- glutMainLoopEvent: procedure; extdecl;
- glutLeaveMainLoop: procedure; extdecl;
- glutExit: procedure; extdecl;
- // Window management functions
- glutFullScreenToggle: procedure; extdecl;
- // Window-specific callback functions
- glutMouseWheelFunc: procedure(callback: TGlut4IntCallback); extdecl;
- glutCloseFunc: procedure(callback: TGlutVoidCallback); extdecl;
- // A. Donev: Also a destruction callback for menus
- glutMenuDestroyFunc: procedure(callback: TGlutVoidCallback); extdecl;
- // State setting and retrieval functions
- glutSetOption: procedure(option_flag: GLenum; value: Integer); extdecl;
- glutGetModeValues: function(mode: GLenum; size: PInteger): Integer; extdecl;
- // A.Donev: User-data manipulation
- glutGetWindowData: function: Pointer; extdecl;
- glutSetWindowData: procedure(data: Pointer); extdecl;
- glutGetMenuData: function: Pointer; extdecl;
- glutSetMenuData: procedure(data: Pointer); extdecl;
- // Font stuff
- glutBitmapHeight: function(font : pointer): Integer; extdecl;
- glutStrokeHeight: function(font : pointer): GLfloat; extdecl;
- glutBitmapString: procedure(font : pointer; const str: PChar); extdecl;
- glutStrokeString: procedure(font : pointer; const str: PChar); extdecl;
- // Geometry functions
- glutWireRhombicDodecahedron: procedure; extdecl;
- glutSolidRhombicDodecahedron: procedure; extdecl;
- glutWireSierpinskiSponge: procedure(num_levels: Integer; offset: PGLdouble3; scale: GLdouble); extdecl;
- glutSolidSierpinskiSponge: procedure(num_levels: Integer; offset: PGLdouble3; scale: GLdouble); extdecl;
- glutWireCylinder: procedure(radius: GLdouble; height: GLdouble; slices: GLint; stacks: GLint); extdecl;
- glutSolidCylinder: procedure(radius: GLdouble; height: GLdouble; slices: GLint; stacks: GLint); extdecl;
- // Initialization functions
- glutInitContextVersion: procedure(majorVersion: Integer; minorVersion: Integer); extdecl;
- glutInitContextFlags: procedure(flags: Integer); extdecl;
- glutInitContextProfile: procedure(profile: Integer); extdecl;
- { Load all freeglut functions from given library.
- Called automatically from Glut unit when standard Glut stuff is loaded. }
- procedure LoadFreeGlut(hDLL: TLibHandle);
- { Set to nil all freeglut functions.
- Called automatically from Glut unit when standard Glut stuff is unloaded. }
- procedure UnloadFreeGlut;
- implementation
- procedure LoadFreeGlut(hDLL: TLibHandle);
- begin
- @glutMainLoopEvent := GetProcAddress(hDLL, 'glutMainLoopEvent');
- @glutLeaveMainLoop := GetProcAddress(hDLL, 'glutLeaveMainLoop');
- @glutExit := GetProcAddress(hDLL, 'glutExit');
- @glutFullScreenToggle := GetProcAddress(hDLL, 'glutFullScreenToggle');
- @glutMouseWheelFunc := GetProcAddress(hDLL, 'glutMouseWheelFunc');
- @glutCloseFunc := GetProcAddress(hDLL, 'glutCloseFunc');
- @glutMenuDestroyFunc := GetProcAddress(hDLL, 'glutMenuDestroyFunc');
- @glutSetOption := GetProcAddress(hDLL, 'glutSetOption');
- @glutGetModeValues := GetProcAddress(hDLL, 'glutGetModeValues');
- @glutGetWindowData := GetProcAddress(hDLL, 'glutGetWindowData');
- @glutSetWindowData := GetProcAddress(hDLL, 'glutSetWindowData');
- @glutGetMenuData := GetProcAddress(hDLL, 'glutGetMenuData');
- @glutSetMenuData := GetProcAddress(hDLL, 'glutSetMenuData');
- @glutBitmapHeight := GetProcAddress(hDLL, 'glutBitmapHeight');
- @glutStrokeHeight := GetProcAddress(hDLL, 'glutStrokeHeight');
- @glutBitmapString := GetProcAddress(hDLL, 'glutBitmapString');
- @glutStrokeString := GetProcAddress(hDLL, 'glutStrokeString');
- @glutWireRhombicDodecahedron := GetProcAddress(hDLL, 'glutWireRhombicDodecahedron');
- @glutSolidRhombicDodecahedron := GetProcAddress(hDLL, 'glutSolidRhombicDodecahedron');
- @glutWireSierpinskiSponge := GetProcAddress(hDLL, 'glutWireSierpinskiSponge');
- @glutSolidSierpinskiSponge := GetProcAddress(hDLL, 'glutSolidSierpinskiSponge');
- @glutWireCylinder := GetProcAddress(hDLL, 'glutWireCylinder');
- @glutSolidCylinder := GetProcAddress(hDLL, 'glutSolidCylinder');
- @glutInitContextVersion := GetProcAddress(hDLL, 'glutInitContextVersion');
- @glutInitContextFlags := GetProcAddress(hDLL, 'glutInitContextFlags');
- @glutInitContextProfile := GetProcAddress(hDLL, 'glutInitContextProfile');
- end;
- procedure UnloadFreeGlut;
- begin
- @glutMainLoopEvent := nil;
- @glutLeaveMainLoop := nil;
- @glutExit := nil;
- @glutFullScreenToggle := nil;
- @glutMouseWheelFunc := nil;
- @glutCloseFunc := nil;
- @glutMenuDestroyFunc := nil;
- @glutSetOption := nil;
- @glutGetModeValues := nil;
- @glutGetWindowData := nil;
- @glutSetWindowData := nil;
- @glutGetMenuData := nil;
- @glutSetMenuData := nil;
- @glutBitmapHeight := nil;
- @glutStrokeHeight := nil;
- @glutBitmapString := nil;
- @glutStrokeString := nil;
- @glutWireRhombicDodecahedron := nil;
- @glutSolidRhombicDodecahedron := nil;
- @glutWireSierpinskiSponge := nil;
- @glutSolidSierpinskiSponge := nil;
- @glutWireCylinder := nil;
- @glutSolidCylinder := nil;
- @glutInitContextVersion := nil;
- @glutInitContextFlags := nil;
- @glutInitContextProfile := nil;
- end;
- end.
|