Modified Files:
simgear/screen/extensions.cxx simgear/screen/extensions.hxx: Avoid the assumption that with glx-1.4 glXGetProcAddress is available - use dlsym to get that function.
This commit is contained in:
parent
e947bac4a3
commit
cc6179a4dd
@ -26,7 +26,7 @@
|
||||
|
||||
#include "extensions.hxx"
|
||||
#include <simgear/debug/logstream.hxx>
|
||||
#if !defined(WIN32) && !defined( GLX_VERSION_1_4 )
|
||||
#if !defined(WIN32)
|
||||
# include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
@ -99,10 +99,11 @@ void* macosxGetGLProcAddress(const char *func) {
|
||||
return function;
|
||||
}
|
||||
|
||||
#elif !defined( WIN32 ) && !defined(GLX_VERSION_1_4)
|
||||
#elif !defined( WIN32 )
|
||||
|
||||
void *SGGetGLProcAddress(const char *func) {
|
||||
static void *libHandle = NULL;
|
||||
static void *(*glXGetProcAddressPtr)(const GLubyte*) = 0;
|
||||
void *fptr = NULL;
|
||||
|
||||
/*
|
||||
@ -116,10 +117,32 @@ void *SGGetGLProcAddress(const char *func) {
|
||||
* arise from linking with a different libGL at link time an than later
|
||||
* use the standard libGL at runtime ...
|
||||
*/
|
||||
if (libHandle == NULL)
|
||||
if (libHandle == NULL) {
|
||||
libHandle = dlopen(NULL, RTLD_LAZY);
|
||||
|
||||
if (libHandle != NULL) {
|
||||
if (!libHandle) {
|
||||
#if defined (__FreeBSD__)
|
||||
const char *error = dlerror();
|
||||
#else
|
||||
char *error = dlerror();
|
||||
#endif
|
||||
if (error) {
|
||||
SG_LOG(SG_GENERAL, SG_INFO, error);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void* symbol = dlsym(libHandle, "glXGetProcAddress");
|
||||
if (!symbol)
|
||||
symbol = dlsym(libHandle, "glXGetProcAddressARB");
|
||||
glXGetProcAddressPtr = (void *(*)(const GLubyte*)) symbol;
|
||||
}
|
||||
|
||||
// First try the glx api function for that
|
||||
if (glXGetProcAddressPtr) {
|
||||
fptr = glXGetProcAddressPtr((const GLubyte*)func);
|
||||
|
||||
} else if (libHandle != NULL) {
|
||||
fptr = dlsym(libHandle, func);
|
||||
|
||||
#if defined (__FreeBSD__)
|
||||
|
@ -56,7 +56,7 @@ bool SGIsOpenGLExtensionSupported(char *extName);
|
||||
// don't use an inline function for symbol lookup, since it is too big
|
||||
void* macosxGetGLProcAddress(const char *func);
|
||||
|
||||
#elif !defined( WIN32 ) && !defined( GLX_VERSION_1_4 )
|
||||
#elif !defined( WIN32 )
|
||||
|
||||
void *SGGetGLProcAddress(const char *func);
|
||||
|
||||
@ -70,9 +70,6 @@ inline void (*SGLookupFunction(const char *func))()
|
||||
#elif defined( __APPLE__ )
|
||||
return (void (*)()) macosxGetGLProcAddress(func);
|
||||
|
||||
#elif defined( GLX_VERSION_1_4 )
|
||||
return glXGetProcAddress((const GLubyte*)func);
|
||||
|
||||
#else // UNIX, default
|
||||
return (void (*)()) SGGetGLProcAddress(func);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user