]> git.mxchange.org Git - simgear.git/blobdiff - simgear/screen/extensions.cxx
Fix a problem with systems that don't define GLXPbufferSGIX or GLXFBConfigSGIX
[simgear.git] / simgear / screen / extensions.cxx
index 420789eb6aa49e97c23efcdcc076fc08a3a1286a..9a6de53b243d3bea0d3ef116e03c2c54e8177b48 100644 (file)
 #include "extensions.hxx"
 #include <simgear/debug/logstream.hxx>
 
-static 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))
@@ -60,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__
@@ -97,11 +96,11 @@ void* macosxGetGLProcAddress(const char *func) {
   return function;
 }
 
-#else if !defined( WIN32 )
+#elif !defined( WIN32 )
 
 void *SGGetGLProcAddress(const char *func) {
     static void *libHandle = NULL;
-    void (*fptr)() = NULL;
+    void *fptr = NULL;
 
     /*
      * Clear the error buffer
@@ -111,10 +110,17 @@ void *SGGetGLProcAddress(const char *func) {
     if (libHandle == NULL)
         libHandle = dlopen("libGL.so", RTLD_LAZY);
 
+    if (libHandle == NULL)
+        libHandle = dlopen("libGL.so.1", RTLD_LAZY);
+
     if (libHandle != NULL) {
-        fptr = (void (*)()) dlsym(libHandle, func);
+        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);
     }