summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Lantinga <slouken@libsdl.org>2004-01-05 01:34:34 +0000
committerSam Lantinga <slouken@libsdl.org>2004-01-05 01:34:34 +0000
commite95a3dbbbe4dd9cd8e33cdc358f6c9bc293c8606 (patch)
treeda9d7c0acbf987c1e6591c52299ba0ecbcb25e36
parent2918fb4cecbd31d3ed590b833b1f20f45cdc12e2 (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.c1
-rw-r--r--src/video/maccommon/SDL_lowvideo.h2
-rw-r--r--src/video/maccommon/SDL_macevents.c5
-rw-r--r--src/video/maccommon/SDL_macgl.c25
-rw-r--r--src/video/maccommon/SDL_macgl_c.h3
-rw-r--r--src/video/macrom/SDL_romvideo.c2
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;