diff options
author | Sam Lantinga <slouken@libsdl.org> | 2004-01-05 01:34:34 +0000 |
---|---|---|
committer | Sam Lantinga <slouken@libsdl.org> | 2004-01-05 01:34:34 +0000 |
commit | e95a3dbbbe4dd9cd8e33cdc358f6c9bc293c8606 (patch) | |
tree | da9d7c0acbf987c1e6591c52299ba0ecbcb25e36 | |
parent | 2918fb4cecbd31d3ed590b833b1f20f45cdc12e2 (diff) |
Date: Mon, 5 Jan 2004 00:09:36 +0100
From: Anders_F_Bj?rklund
Subject: [SDL] Dynamic OpenGL lib support for Mac
Here's a patch that adds LoadLibrary and GetProcAddress
to the Carbon macintosh driver (for Mac OS 9 and Mac OS X):
http://www.algonet.se/~afb/SDL-1.2.6-macdynamicgl.patch
It just calls the corresponding function from SDL_loadso.
It also fixes one Mac bug in SDL_loadso.c, that made it fail
always when loading a library, and fixes the screen update
after receiving an update event - which caused the OpenGL
context to be overwritten by a blank window by UpdateRect...
--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40775
-rw-r--r-- | src/SDL_loadso.c | 1 | ||||
-rw-r--r-- | src/video/maccommon/SDL_lowvideo.h | 2 | ||||
-rw-r--r-- | src/video/maccommon/SDL_macevents.c | 5 | ||||
-rw-r--r-- | src/video/maccommon/SDL_macgl.c | 25 | ||||
-rw-r--r-- | src/video/maccommon/SDL_macgl_c.h | 3 | ||||
-rw-r--r-- | src/video/macrom/SDL_romvideo.c | 2 |
6 files changed, 38 insertions, 0 deletions
diff --git a/src/SDL_loadso.c b/src/SDL_loadso.c index ad4aaf28..8996bfe4 100644 --- a/src/SDL_loadso.c +++ b/src/SDL_loadso.c @@ -98,6 +98,7 @@ void *SDL_LoadObject(const char *sofile) kLoadCFrag, &library_id, &mainAddr, errName); switch (error) { case noErr: + loaderror = NULL; break; case cfragNoLibraryErr: loaderror = "Library not found"; diff --git a/src/video/maccommon/SDL_lowvideo.h b/src/video/maccommon/SDL_lowvideo.h index bcae2430..26a69338 100644 --- a/src/video/maccommon/SDL_lowvideo.h +++ b/src/video/maccommon/SDL_lowvideo.h @@ -89,6 +89,8 @@ struct SDL_PrivateVideoData { #ifdef HAVE_OPENGL AGLContext appleGLContext; + + void *libraryHandle; #endif }; /* Old variable names */ diff --git a/src/video/maccommon/SDL_macevents.c b/src/video/maccommon/SDL_macevents.c index 5cb71fec..3c9e833f 100644 --- a/src/video/maccommon/SDL_macevents.c +++ b/src/video/maccommon/SDL_macevents.c @@ -384,6 +384,11 @@ static int Mac_HandleEvents(_THIS, int wait4it) #endif case updateEvt: { BeginUpdate(SDL_Window); + #ifdef HAVE_OPENGL + if (SDL_VideoSurface->flags & SDL_OPENGL) + SDL_GL_SwapBuffers(); + else + #endif if ( (SDL_VideoSurface->flags & SDL_HWSURFACE) == SDL_SWSURFACE ) { SDL_UpdateRect(SDL_VideoSurface, 0, 0, 0, 0); diff --git a/src/video/maccommon/SDL_macgl.c b/src/video/maccommon/SDL_macgl.c index 2996661e..13cb73f0 100644 --- a/src/video/maccommon/SDL_macgl.c +++ b/src/video/maccommon/SDL_macgl.c @@ -30,6 +30,7 @@ static char rcsid = #include "SDL_error.h" #include "SDL_lowvideo.h" #include "SDL_macgl_c.h" +#include "SDL_loadso.h" /* krat: adding OpenGL support */ @@ -156,5 +157,29 @@ void Mac_GL_SwapBuffers(_THIS) aglSwapBuffers(glContext); } +int Mac_GL_LoadLibrary(_THIS, const char *location) +{ + if (location == NULL) + location = "OpenGLLibrary"; + + this->hidden->libraryHandle = SDL_LoadObject(location); + + this->gl_config.driver_loaded = 1; + return (this->hidden->libraryHandle != NULL) ? 0 : -1; +} + +void Mac_GL_UnloadLibrary(_THIS) +{ + SDL_UnloadObject(this->hidden->libraryHandle); + + this->hidden->libraryHandle = NULL; + this->gl_config.driver_loaded = 0; +} + +void* Mac_GL_GetProcAddress(_THIS, const char *proc) +{ + return SDL_LoadFunction( this->hidden->libraryHandle, proc ); +} + #endif /* HAVE_OPENGL */ diff --git a/src/video/maccommon/SDL_macgl_c.h b/src/video/maccommon/SDL_macgl_c.h index 918be8a6..eab5c2e6 100644 --- a/src/video/maccommon/SDL_macgl_c.h +++ b/src/video/maccommon/SDL_macgl_c.h @@ -44,5 +44,8 @@ extern void Mac_GL_Quit(_THIS); extern int Mac_GL_MakeCurrent(_THIS); extern int Mac_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value); extern void Mac_GL_SwapBuffers(_THIS); +extern int Mac_GL_LoadLibrary(_THIS, const char *location); +extern void Mac_GL_UnloadLibrary(_THIS); +extern void* Mac_GL_GetProcAddress(_THIS, const char *proc); #endif diff --git a/src/video/macrom/SDL_romvideo.c b/src/video/macrom/SDL_romvideo.c index 79831f5d..a82b968a 100644 --- a/src/video/macrom/SDL_romvideo.c +++ b/src/video/macrom/SDL_romvideo.c @@ -163,6 +163,8 @@ static SDL_VideoDevice *ROM_CreateDevice(int devindex) #ifdef HAVE_OPENGL device->GL_MakeCurrent = Mac_GL_MakeCurrent; device->GL_SwapBuffers = Mac_GL_SwapBuffers; + device->GL_LoadLibrary = Mac_GL_LoadLibrary; + device->GL_GetProcAddress = Mac_GL_GetProcAddress; #endif device->SetCaption = Mac_SetCaption; device->SetIcon = NULL; |