]> git.mxchange.org Git - simgear.git/blobdiff - simgear/screen/extensions.cxx
Fix a problem where the cloud layers suddenly change color when looking towards the sun
[simgear.git] / simgear / screen / extensions.cxx
index aeab8998520201aa546ff1bf3a33a66a46270289..75f7d11e7655594004f6fc3340564dc03635469a 100644 (file)
 
 #include <string.h>
 
-#ifndef WIN32
-#include <dlfcn.h>
-#endif
-
-#include <extensions.hxx>
+#include "extensions.hxx"
 
-bool SGSearchExtensionsString(char *extString, char *extName) {
+static bool SGSearchExtensionsString(char *extString, 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;
     int n, extNameLen;
 
+    if ((extString == NULL) || (extName == NULL))
+        return false;
+
     extNameLen = strlen(extName);
 
     p=extString;
@@ -64,3 +63,37 @@ bool SGIsOpenGLExtensionSupported(char *extName) {
 extName);
 }
 
+#ifdef __APPLE__
+
+#include <CoreFoundation/CoreFoundation.h>
+
+void* macosxGetGLProcAddress(const char *func) {
+
+  /* We may want to cache the bundleRef at some point */
+  static CFBundleRef bundle = 0;
+
+  if (!bundle) {
+
+    CFURLRef bundleURL = CFURLCreateWithFileSystemPath (kCFAllocatorDefault,
+                                                       CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, true);
+
+    bundle = CFBundleCreate (kCFAllocatorDefault, bundleURL);
+    CFRelease (bundleURL);
+  }
+
+  if (!bundle)
+    return 0;
+
+  CFStringRef functionName = CFStringCreateWithCString
+    (kCFAllocatorDefault, func, kCFStringEncodingASCII);
+  
+  void *function;
+  
+  function = CFBundleGetFunctionPointerForName (bundle, functionName);
+
+  CFRelease (functionName);
+
+  return function;
+}
+
+#endif