MSVC and Apple OS X fixes

This commit is contained in:
ehofman 2003-06-19 07:40:54 +00:00
parent 9ca1c6666e
commit 011ecd980d
2 changed files with 47 additions and 1 deletions

View File

@ -26,9 +26,11 @@
#ifndef WIN32
#include <dlfcn.h>
#else
#include <windows.h>
#endif
#include <extensions.hxx>
#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 <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

View File

@ -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);