diff --git a/simgear/screen/extensions.cxx b/simgear/screen/extensions.cxx index aeab8998..e6c17ea2 100644 --- a/simgear/screen/extensions.cxx +++ b/simgear/screen/extensions.cxx @@ -26,9 +26,11 @@ #ifndef WIN32 #include +#else +#include #endif -#include +#include "extensions.hxx" bool SGSearchExtensionsString(char *extString, char *extName) { // Returns GL_TRUE if the *extName string appears in the *extString string, @@ -64,3 +66,37 @@ bool SGIsOpenGLExtensionSupported(char *extName) { extName); } +#ifdef __APPLE__ + +#include + +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 diff --git a/simgear/screen/extensions.hxx b/simgear/screen/extensions.hxx index 77efd3c3..cbf4c231 100644 --- a/simgear/screen/extensions.hxx +++ b/simgear/screen/extensions.hxx @@ -37,11 +37,18 @@ extern "C" { static bool SGSearchExtensionsString(char *extString, char *extName); bool SGIsOpenGLExtensionSupported(char *extName); +#ifdef __APPLE__ + // don't use an inline function for symbol lookup, since it is too big + void* macosxGetGLProcAddress(const char *func); +#endif + inline void (*SGLookupFunction(const char *func))() { #if defined( WIN32 ) return (void (*)()) wglGetProcAddress(func); +#elif defined( __APPLE__ ) + return (void (*)()) macosxGetGLProcAddress(func); #else // If the target system s UNIX and the ARB_get_proc_address @@ -63,6 +70,9 @@ inline void (*SGLookupFunction(const char *func))() { /* OpenGL extension declarations */ +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 + typedef void (APIENTRY * glPointParameterfProc)(GLenum pname, GLfloat param); typedef void (APIENTRY * glPointParameterfvProc)(GLenum pname, const GLfloat *params);