Mercurial > sdl-ios-xcode
diff src/video/x11/SDL_x11gl.c @ 1861:b42823412c3b
Fixed bug #232
------- Comment #2 From Matthias Geissert 2006-05-24 07:54 [reply] -------
See http://dri.sourceforge.net/doc/DRIuserguide.html, section 11.5. There is
written that you need to use RTLD_GLOBAL, since, otherwise, nested open of
dynamic libraries doesn't work. However, This is necassary in this case, since
libGL opens the hardware-specific driver/library. I hope this helps you.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 20 Jun 2006 03:52:41 +0000 |
parents | 0495a8e98595 |
children | 9d940db55a91 |
line wrap: on
line diff
--- a/src/video/x11/SDL_x11gl.c Tue Jun 20 03:29:47 2006 +0000 +++ b/src/video/x11/SDL_x11gl.c Tue Jun 20 03:52:41 2006 +0000 @@ -422,12 +422,24 @@ #endif /* SDL_VIDEO_OPENGL_GLX */ +#define OPENGL_REQUIRS_DLOPEN +#if defined(OPENGL_REQUIRS_DLOPEN) && defined(SDL_LOADSO_DLOPEN) +#include <dlfcn.h> +#define GL_LoadObject(X) dlopen(X, (RTLD_NOW|RTLD_GLOBAL)) +#define GL_LoadFunction dlsym +#define GL_UnloadObject dlclose +#else +#define GL_LoadObject SDL_LoadObject +#define GL_LoadFunction SDL_LoadFunction +#define GL_UnloadObject SDL_UnloadObject +#endif + void X11_GL_UnloadLibrary(_THIS) { #if SDL_VIDEO_OPENGL_GLX if ( this->gl_config.driver_loaded ) { - SDL_UnloadObject(this->gl_config.dll_handle); + GL_UnloadObject(this->gl_config.dll_handle); this->gl_data->glXGetProcAddress = NULL; this->gl_data->glXChooseVisual = NULL; @@ -464,7 +476,7 @@ } } - handle = SDL_LoadObject(path); + handle = GL_LoadObject(path); if ( handle == NULL ) { /* SDL_LoadObject() will call SDL_SetError() for us. */ return -1; @@ -475,27 +487,27 @@ /* Load new function pointers */ this->gl_data->glXGetProcAddress = - (void *(*)(const GLubyte *)) SDL_LoadFunction(handle, "glXGetProcAddressARB"); + (void *(*)(const GLubyte *)) GL_LoadFunction(handle, "glXGetProcAddressARB"); this->gl_data->glXChooseVisual = - (XVisualInfo *(*)(Display *, int, int *)) SDL_LoadFunction(handle, "glXChooseVisual"); + (XVisualInfo *(*)(Display *, int, int *)) GL_LoadFunction(handle, "glXChooseVisual"); this->gl_data->glXCreateContext = - (GLXContext (*)(Display *, XVisualInfo *, GLXContext, int)) SDL_LoadFunction(handle, "glXCreateContext"); + (GLXContext (*)(Display *, XVisualInfo *, GLXContext, int)) GL_LoadFunction(handle, "glXCreateContext"); this->gl_data->glXDestroyContext = - (void (*)(Display *, GLXContext)) SDL_LoadFunction(handle, "glXDestroyContext"); + (void (*)(Display *, GLXContext)) GL_LoadFunction(handle, "glXDestroyContext"); this->gl_data->glXMakeCurrent = - (int (*)(Display *, GLXDrawable, GLXContext)) SDL_LoadFunction(handle, "glXMakeCurrent"); + (int (*)(Display *, GLXDrawable, GLXContext)) GL_LoadFunction(handle, "glXMakeCurrent"); this->gl_data->glXSwapBuffers = - (void (*)(Display *, GLXDrawable)) SDL_LoadFunction(handle, "glXSwapBuffers"); + (void (*)(Display *, GLXDrawable)) GL_LoadFunction(handle, "glXSwapBuffers"); this->gl_data->glXGetConfig = - (int (*)(Display *, XVisualInfo *, int, int *)) SDL_LoadFunction(handle, "glXGetConfig"); + (int (*)(Display *, XVisualInfo *, int, int *)) GL_LoadFunction(handle, "glXGetConfig"); this->gl_data->glXQueryExtensionsString = - (const char *(*)(Display *, int)) SDL_LoadFunction(handle, "glXQueryExtensionsString"); + (const char *(*)(Display *, int)) GL_LoadFunction(handle, "glXQueryExtensionsString"); this->gl_data->glXSwapIntervalSGI = - (int (*)(int)) SDL_LoadFunction(handle, "glXSwapIntervalSGI"); + (int (*)(int)) GL_LoadFunction(handle, "glXSwapIntervalSGI"); this->gl_data->glXSwapIntervalMESA = - (GLint (*)(unsigned)) SDL_LoadFunction(handle, "glXSwapIntervalMESA"); + (GLint (*)(unsigned)) GL_LoadFunction(handle, "glXSwapIntervalMESA"); this->gl_data->glXGetSwapIntervalMESA = - (GLint (*)(void)) SDL_LoadFunction(handle, "glXGetSwapIntervalMESA"); + (GLint (*)(void)) GL_LoadFunction(handle, "glXGetSwapIntervalMESA"); if ( (this->gl_data->glXChooseVisual == NULL) || (this->gl_data->glXCreateContext == NULL) || @@ -527,7 +539,7 @@ if ( this->gl_data->glXGetProcAddress ) { return this->gl_data->glXGetProcAddress((const GLubyte *)proc); } - return SDL_LoadFunction(handle, proc); + return GL_LoadFunction(handle, proc); } #endif /* SDL_VIDEO_OPENGL_GLX */