#include <string.h>
#include "extensions.hxx"
+#include <simgear/debug/logstream.hxx>
static bool SGSearchExtensionsString(char *extString, char *extName) {
// Returns GL_TRUE if the *extName string appears in the *extString string,
return function;
}
+#else if !defined( WIN32 )
+
+void *SGGetGLProcAddress(const char *func) {
+ static void *libHandle = NULL;
+ void (*fptr)() = NULL;
+
+ /*
+ * Clear the error buffer
+ */
+ dlerror();
+
+ if (libHandle == NULL)
+ libHandle = dlopen("libGL.so", RTLD_LAZY);
+
+ if (libHandle != NULL) {
+ fptr = (void (*)()) dlsym(libHandle, func);
+
+ char *error = dlerror();
+ if (error)
+ SG_LOG(SG_GENERAL, SG_INFO, error);
+ }
+
+ return fptr;
+}
+
#endif
+
#ifdef __APPLE__
// don't use an inline function for symbol lookup, since it is too big
void* macosxGetGLProcAddress(const char *func);
+
+#else if !defined( WIN32 )
+
+ void *SGGetGLProcAddress(const char *func);
+
#endif
inline void (*SGLookupFunction(const char *func))()
#else // UNIX
- // If the target system s UNIX and the ARB_get_proc_address
- // GLX extension is *not* guaranteed to be supported. An alternative
- // dlsym-based approach will be used instead.
-
- void *libHandle;
- void (*fptr)();
- libHandle = dlopen("libGL.so", RTLD_LAZY);
- fptr = (void (*)()) dlsym(libHandle, func);
- dlclose(libHandle);
- return fptr;
+ return (void (*)()) SGGetGLProcAddress(func);
#endif
}