Date: Mon, 5 Jan 2004 00:09:36 +0100
authorSam Lantinga <slouken@libsdl.org>
Mon, 05 Jan 2004 01:34:34 +0000
changeset 774 0c3e00cc9580
parent 773 da0a2ad35bf4
child 775 08b7fc2b5225
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...
src/SDL_loadso.c
src/video/maccommon/SDL_lowvideo.h
src/video/maccommon/SDL_macevents.c
src/video/maccommon/SDL_macgl.c
src/video/maccommon/SDL_macgl_c.h
src/video/macrom/SDL_romvideo.c
--- a/src/SDL_loadso.c	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/SDL_loadso.c	Mon Jan 05 01:34:34 2004 +0000
@@ -98,6 +98,7 @@
 			kLoadCFrag, &library_id, &mainAddr, errName);
 	switch (error) {
 		case noErr:
+			loaderror = NULL;
 			break;
 		case cfragNoLibraryErr:
 			loaderror = "Library not found";
--- a/src/video/maccommon/SDL_lowvideo.h	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/video/maccommon/SDL_lowvideo.h	Mon Jan 05 01:34:34 2004 +0000
@@ -89,6 +89,8 @@
 
 #ifdef HAVE_OPENGL
 	AGLContext appleGLContext;
+
+	void *libraryHandle;
 #endif
 };
 /* Old variable names */
--- a/src/video/maccommon/SDL_macevents.c	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/video/maccommon/SDL_macevents.c	Mon Jan 05 01:34:34 2004 +0000
@@ -384,6 +384,11 @@
 #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);
--- a/src/video/maccommon/SDL_macgl.c	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/video/maccommon/SDL_macgl.c	Mon Jan 05 01:34:34 2004 +0000
@@ -30,6 +30,7 @@
 #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 @@
 	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 */
 
--- a/src/video/maccommon/SDL_macgl_c.h	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/video/maccommon/SDL_macgl_c.h	Mon Jan 05 01:34:34 2004 +0000
@@ -44,5 +44,8 @@
 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
 
--- a/src/video/macrom/SDL_romvideo.c	Mon Jan 05 00:57:51 2004 +0000
+++ b/src/video/macrom/SDL_romvideo.c	Mon Jan 05 01:34:34 2004 +0000
@@ -163,6 +163,8 @@
 #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;