From 63f6506e79adc0fa9285a2e5a72d54e8ec6bd481 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 23 Nov 2005 07:23:48 +0000 Subject: [PATCH] Moved Quartz SDL_GL_LoadLibrary() to SDL_loadso interface. --- src/video/quartz/SDL_QuartzGL.m | 48 ++++++------------------------ src/video/quartz/SDL_QuartzVideo.h | 5 ++-- src/video/quartz/SDL_QuartzVideo.m | 7 ++--- 3 files changed, 15 insertions(+), 45 deletions(-) diff --git a/src/video/quartz/SDL_QuartzGL.m b/src/video/quartz/SDL_QuartzGL.m index 96f0fd0d8..53e5d92ff 100644 --- a/src/video/quartz/SDL_QuartzGL.m +++ b/src/video/quartz/SDL_QuartzGL.m @@ -166,63 +166,33 @@ void QZ_TearDownOpenGL (_THIS) { /* SDL OpenGL functions */ +static const char *DEFAULT_OPENGL_LIB_NAME = + "/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib"; int QZ_GL_LoadLibrary (_THIS, const char *location) { - CFURLRef bundleURL; - CFStringRef cfstr; - if ( gl_context != NULL ) { SDL_SetError("OpenGL context already created"); return -1; } - if (opengl_bundle != NULL) - CFRelease(opengl_bundle); - - opengl_bundle = NULL; - this->gl_config.driver_loaded = 0; + if (opengl_library != NULL) + SDL_UnloadObject(opengl_library); if (location == NULL) - location = "/System/Library/Frameworks/OpenGL.framework"; - - cfstr = CFStringCreateWithCString(kCFAllocatorDefault, location, - kCFStringEncodingUTF8); - if (cfstr == NULL) { - SDL_OutOfMemory(); - return -1; - } - - bundleURL = CFURLCreateWithFileSystemPath (kCFAllocatorDefault, - cfstr, kCFURLPOSIXPathStyle, true); - - CFRelease(cfstr); + location = DEFAULT_OPENGL_LIB_NAME; - if (bundleURL == NULL) { - SDL_OutOfMemory(); - return -1; - } - - opengl_bundle = CFBundleCreate (kCFAllocatorDefault, bundleURL); - - CFRelease(bundleURL); - - if (opengl_bundle != NULL) { + opengl_library = SDL_LoadObject(location); + if (opengl_library != NULL) { this->gl_config.driver_loaded = 1; return 0; } - /* not exactly descriptive, but okay... */ - SDL_SetError("Could not load OpenGL library"); + this->gl_config.driver_loaded = 0; return -1; } void* QZ_GL_GetProcAddress (_THIS, const char *proc) { - CFStringRef funcName = CFStringCreateWithCString - (kCFAllocatorDefault, proc, kCFStringEncodingASCII); - - void *func = CFBundleGetFunctionPointerForName(opengl_bundle, funcName); - CFRelease (funcName); - return func; + return SDL_LoadFunction(opengl_library, proc); } int QZ_GL_GetAttribute (_THIS, SDL_GLattr attrib, int* value) { diff --git a/src/video/quartz/SDL_QuartzVideo.h b/src/video/quartz/SDL_QuartzVideo.h index fc7373e59..33220f31d 100644 --- a/src/video/quartz/SDL_QuartzVideo.h +++ b/src/video/quartz/SDL_QuartzVideo.h @@ -64,6 +64,7 @@ #include "SDL_sysvideo.h" #include "SDL_pixels_c.h" #include "SDL_events_c.h" +#include "SDL_loadso.h" /* This is a workaround to directly access NSOpenGLContext's CGL context @@ -117,7 +118,7 @@ typedef struct SDL_PrivateVideoData { Sint16 yuv_width, yuv_height; CGrafPtr yuv_port; - CFBundleRef opengl_bundle; /* dynamically loaded OpenGL library. */ + void *opengl_library; /* dynamically loaded OpenGL library. */ } SDL_PrivateVideoData; #define _THIS SDL_VideoDevice *this @@ -155,7 +156,7 @@ typedef struct SDL_PrivateVideoData { #define current_buffer (this->hidden->current_buffer) #define quit_thread (this->hidden->quit_thread) #define system_version (this->hidden->system_version) -#define opengl_bundle (this->hidden->opengl_bundle) +#define opengl_library (this->hidden->opengl_library) /* grab states - the input is in one of these states */ enum { diff --git a/src/video/quartz/SDL_QuartzVideo.m b/src/video/quartz/SDL_QuartzVideo.m index aa154405b..2cf89d915 100644 --- a/src/video/quartz/SDL_QuartzVideo.m +++ b/src/video/quartz/SDL_QuartzVideo.m @@ -23,7 +23,6 @@ #include "SDL_QuartzVideo.h" #include "SDL_QuartzWindow.h" - /* Add methods to get at private members of NSScreen. Since there is a bug in Apple's screen switching code @@ -1495,9 +1494,9 @@ static void QZ_VideoQuit (_THIS) { QZ_UnsetVideoMode (this); CGPaletteRelease (palette); - if (opengl_bundle) { - CFRelease(opengl_bundle); - opengl_bundle = NULL; + if (opengl_library) { + SDL_UnloadObject(opengl_library); + opengl_library = NULL; } this->gl_config.driver_loaded = 0; }