X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscreen%2Fextensions.cxx;h=130673c51f92c7654a1ba47c36b865a4ce14c3e5;hb=bbd61977f14c30ce93a2bcf5a3551708d36a29c8;hp=491618123389babf8000d7915c1c12ff01298769;hpb=63c4873d8a138562acfdbe1a7f14df44dcadd522;p=simgear.git diff --git a/simgear/screen/extensions.cxx b/simgear/screen/extensions.cxx index 49161812..130673c5 100644 --- a/simgear/screen/extensions.cxx +++ b/simgear/screen/extensions.cxx @@ -26,7 +26,7 @@ #include "extensions.hxx" #include -#if !defined(WIN32) && !defined( GLX_VERSION_1_4 ) +#if !defined(WIN32) # include #endif @@ -56,7 +56,7 @@ bool SGSearchExtensionsString(const char *extString, const char *extName) { return GL_FALSE; } -bool SGIsOpenGLExtensionSupported(char *extName) { +bool SGIsOpenGLExtensionSupported(const char *extName) { // Returns GL_TRUE if the OpenGL Extension whose name is *extName // is supported by the system, or GL_FALSE otherwise. // @@ -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,17 +117,31 @@ 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) { + const char *error = dlerror(); + 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__) const char *error = dlerror(); -#else - char *error = dlerror(); -#endif if (error) SG_LOG(SG_GENERAL, SG_INFO, error); }