From: Gregory P. <gre...@us...> - 2002-12-30 22:05:11
|
Update of /cvsroot/java-game-lib/LWJGL/src/native/common In directory sc8-pr-cvs1:/tmp/cvs-serv1276/src/native/common Modified Files: extgl.h extgl.c Log Message: Updated to include the dynamic loading of the OpenGL.framework and use function pointers so OpenGL functions can be called. Index: extgl.h CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/common/extgl.h =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/common/extgl.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- extgl.h 30 Dec 2002 07:07:40 -0000 1.4 +++ extgl.h 30 Dec 2002 22:05:05 -0000 1.5 @@ -319,7 +319,95 @@ extern glXQueryServerStringPROC glXQueryServerString; extern glXQueryExtensionsStringPROC glXQueryExtensionsString; -#endif +#endif /* X11 */ + +#ifdef _OSX +#include <Carbon/Carbon.h> + +CFBundleRef gBundleRefOpenGL = NULL; +// ------------------------- +OSStatus aglInitEntryPoints (void) +{ + OSStatus err = noErr; + const Str255 frameworkName = "\pOpenGL.framework"; + FSRefParam fileRefParam; + FSRef fileRef; + CFURLRef bundleURLOpenGL; + memset(&fileRefParam, 0, sizeof(fileRefParam)); + memset(&fileRef, 0, sizeof(fileRef)); + fileRefParam.ioNamePtr = frameworkName; + fileRefParam.newRef = &fileRef; + + // Frameworks directory/folder + // + err = FindFolder (kSystemDomain, kFrameworksFolderType, false, &fileRefParam.ioVRefNum, &fileRefParam.ioDirID); + if (noErr != err) + { + DebugStr ("\pCould not find frameworks folder"); + return err; + } + + // make FSRef for folder + // + err = PBMakeFSRefSync (&fileRefParam); + + + if (noErr != err) + { + DebugStr ("\pCould make FSref to frameworks folder"); + return err; + } + + // create URL to folder + // + bundleURLOpenGL = CFURLCreateFromFSRef (kCFAllocatorDefault, &fileRef); + if (!bundleURLOpenGL) + { + DebugStr ("\pCould create OpenGL Framework bundle URL"); + return paramErr; + } + + // create ref to GL's bundle + // + gBundleRefOpenGL = CFBundleCreate (kCFAllocatorDefault,bundleURLOpenGL); + if (!gBundleRefOpenGL) + { + DebugStr ("\pCould not create OpenGL Framework bundle"); + return paramErr; + } + + // release created bundle + // + CFRelease (bundleURLOpenGL); + + // if the code was successfully loaded, look for our function. + if (!CFBundleLoadExecutable (gBundleRefOpenGL)) + { + DebugStr ("\pCould not load MachO executable"); + return paramErr; + } + + return err; +} + + +void aglDellocEntryPoints (void) +{ + if (gBundleRefOpenGL != NULL) + { + // unload the bundle's code. + CFBundleUnloadExecutable (gBundleRefOpenGL); + CFRelease (gBundleRefOpenGL); + gBundleRefOpenGL = NULL; + } +} + + +void * aglGetProcAddress (char * pszProc) +{ + return CFBundleGetFunctionPointerForName (gBundleRefOpenGL,CFStringCreateWithCStringNoCopy (NULL, pszProc, CFStringGetSystemEncoding (), NULL)); +} +#endif /* OSX */ /*************************************************************/ /* GLU functions */ @@ -5441,7 +5529,6 @@ /* I use int here because C does not know bool */ #ifdef _WIN32 - struct WGLExtensionTypes { int ARB_buffer_region; @@ -5456,11 +5543,9 @@ int NV_render_depth_texture; int NV_render_texture_rectangle; }; - #endif /* WIN32 */ #ifdef _X11 - struct GLXExtensionTypes { int GLX12; @@ -5468,9 +5553,14 @@ int EXT_visual_info; int EXT_visual_rating; }; - #endif /* X11 */ +#ifdef _OSX +struct AGLExtensionTypes +{ +}; +#endif; + struct GLUExtensionTypes { int GLU12; @@ -5487,6 +5577,10 @@ #ifdef _X11 struct GLXExtensionTypes glx; #endif /* X11 */ +#ifdef _OSX + struct AGLExtensionTypes agl; +#endif /* OSX */ + struct GLUExtensionTypes glu; int ARB_imaging; int ARB_depth_texture; @@ -5587,6 +5681,10 @@ #endif #ifdef _WIN32 +int extgl_Open(void); +#endif + +#ifdef _OSX int extgl_Open(void); #endif Index: extgl.c CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/common/extgl.c =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/common/extgl.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- extgl.c 30 Dec 2002 07:07:40 -0000 1.4 +++ extgl.c 30 Dec 2002 22:05:06 -0000 1.5 @@ -268,7 +268,6 @@ glGetPointervPROC glGetPointerv = NULL; glGetPolygonStipplePROC glGetPolygonStipple = NULL; glGetStringPROC glGetString = NULL; -//const GLubyte * glGetString(const GLenum name); glGetTexEnvfvPROC glGetTexEnvfv = NULL; glGetTexEnvivPROC glGetTexEnviv = NULL; glGetTexGendvPROC glGetTexGendv = NULL; @@ -376,7 +375,6 @@ glRasterPos3fPROC glRasterPos3f = NULL; glRasterPos3fvPROC glRasterPos3fv = NULL; glRasterPos3iPROC glRasterPos3i = NULL; - glRasterPos3ivPROC glRasterPos3iv = NULL; glRasterPos3sPROC glRasterPos3s = NULL; glRasterPos3svPROC glRasterPos3sv = NULL; @@ -776,6 +774,10 @@ glXFreeMemoryNVPROC glXFreeMemoryNV = NULL; #endif /* X11 */ +#ifdef _OSX +// TODO: find the OSX equivalent of these functions +#endif /* OSX */ + #endif /* GL_NV_vertex_array_range */ /* EXT_point_parameters */ @@ -1325,8 +1327,6 @@ struct ExtensionTypes extgl_Extensions; -struct ExtensionTypes SupportedExtensions; /* deprecated, please do not use */ - #ifdef _WIN32 HMODULE lib_gl_handle = NULL; HMODULE lib_glu_handle = NULL; @@ -1337,6 +1337,12 @@ void * lib_glu_handle = NULL; #endif +#ifdef _OSX +// Note: Not used, there is a CFBundleRef in the header file that handles the +// dynamic load from the GL Framework bundle and this framework include gl +// and glu in the same library +#endif + /* getProcAddress */ void *extgl_GetProcAddress(char *name) @@ -1371,6 +1377,12 @@ } return t; #endif + +#ifdef _OSX + void *t =(void *)aglGetProcAddress(name); + + return t; +#endif } /*-----------------------------------------------------*/ @@ -1523,6 +1535,23 @@ /* WGL stuff END*/ /*-----------------------------------------------------*/ +/*-----------------------------------------------------*/ +/* AGL stuff BEGIN*/ +/*-----------------------------------------------------*/ +#ifdef _OSX + +int extgl_InitializeWGL() +{ + // add in AGL extensions here + + return 0; +} + +#endif +/*-----------------------------------------------------*/ +/* AGL stuff END*/ +/*-----------------------------------------------------*/ + int QueryExtension(const GLubyte*extensions, const char *name) { const GLubyte *start; @@ -3199,7 +3228,11 @@ extgl_InitializeWGL(); #endif - SupportedExtensions = extgl_Extensions; +#ifdef _OSX + /* load AGL extensions */ + extgl_InitializeAGL(); +#endif + return extgl_error; } @@ -3217,12 +3250,13 @@ return 1; return 0; } -#endif +#endif /* X11 */ #ifdef _WIN32 int extgl_Open(void) { - + // load the dynamic libraries for OpenGL + // lib_gl_handle = LoadLibrary("opengl32.dll"); if (lib_gl_handle == NULL) return 1; @@ -3231,7 +3265,25 @@ return 1; return 0; } -#endif +#endif /* WIN32 */ + +#ifdef _OSX +int extgl_Open(void) +{ + OSStatus err = aglInitEntryPoints(); + if ( noErr != err ) + { + // if we encountered an error while initializing OpenGL + // we're hosed - return + // + return 1; + } + + // open gl framework initialized just fine + // + return 0; +} +#endif /* OSX */ void extgl_Close(void) { @@ -3243,12 +3295,9 @@ FreeLibrary(lib_gl_handle); FreeLibrary(lib_glu_handle); #endif -} - -/* deprecated function please do not use it, use extgl_Initialize() instead */ -int glInitialize() -{ - return extgl_Initialize(); +#ifdef _OSX + aglDellocEntryPoints(); +#endif } /* turn on the warning for the borland compiler*/ |