X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscreen%2Fextensions.cxx;h=a317bda42fec5d4c996a24f8dc561de627900323;hb=84dd54b33a6d8b35e57c32194b025f79245f35c4;hp=4acf0e260160efcea9e8492fc48f75dc080f1bdf;hpb=ab34b86574c951f5a3ee6edaa5bfe2010c9b6e44;p=simgear.git diff --git a/simgear/screen/extensions.cxx b/simgear/screen/extensions.cxx index 4acf0e26..a317bda4 100644 --- a/simgear/screen/extensions.cxx +++ b/simgear/screen/extensions.cxx @@ -24,23 +24,19 @@ #include -#ifdef WIN32 -#include -#endif - -#if !defined( WIN32 ) && !defined( __APPLE__ ) -#include -#endif - #include "extensions.hxx" +#include -bool SGSearchExtensionsString(char *extString, char *extName) { +bool SGSearchExtensionsString(const char *extString, const char *extName) { // Returns GL_TRUE if the *extName string appears in the *extString string, // surrounded by white spaces, or GL_FALSE otherwise. - char *p, *end; + const char *p, *end; int n, extNameLen; + if ((extString == NULL) || (extName == NULL)) + return false; + extNameLen = strlen(extName); p=extString; @@ -64,8 +60,7 @@ bool SGIsOpenGLExtensionSupported(char *extName) { // The *extName string must follow the OpenGL extensions naming scheme // (ie: "GL_type_extension", like GL_EXT_convolution) - return SGSearchExtensionsString((char *)glGetString(GL_EXTENSIONS), -extName); + return SGSearchExtensionsString((const char *)glGetString(GL_EXTENSIONS),extName); } #ifdef __APPLE__ @@ -101,4 +96,40 @@ void* macosxGetGLProcAddress(const char *func) { return function; } +#elif !defined( WIN32 ) + +void *SGGetGLProcAddress(const char *func) { + static void *libHandle = NULL; + void *fptr = NULL; + + /* + * Clear the error buffer + */ + dlerror(); + + /* + * Since libGL must be linked to the binary we run on, this is the + * right handle. That 'current binary' handle also avoids conflicts which + * arise from linking with a different libGL at link time an than later + * use the standard libGL at runtime ... + */ + if (libHandle == NULL) + libHandle = dlopen(NULL, RTLD_LAZY); + + 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); + } + + return fptr; +} + +#endif +