Skip to content
Permalink
Browse files

Moved Quartz SDL_GL_LoadLibrary() to SDL_loadso interface.

  • Loading branch information
icculus committed Nov 23, 2005
1 parent 73e35f4 commit 63f6506e79adc0fa9285a2e5a72d54e8ec6bd481
Showing with 15 additions and 45 deletions.
  1. +9 −39 src/video/quartz/SDL_QuartzGL.m
  2. +3 −2 src/video/quartz/SDL_QuartzVideo.h
  3. +3 −4 src/video/quartz/SDL_QuartzVideo.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) {
@@ -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 {
@@ -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;
}

0 comments on commit 63f6506

Please sign in to comment.