Commit e95a3dbb authored by Sam Lantinga's avatar Sam Lantinga

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
parent 2918fb4c
...@@ -98,6 +98,7 @@ void *SDL_LoadObject(const char *sofile) ...@@ -98,6 +98,7 @@ void *SDL_LoadObject(const char *sofile)
kLoadCFrag, &library_id, &mainAddr, errName); kLoadCFrag, &library_id, &mainAddr, errName);
switch (error) { switch (error) {
case noErr: case noErr:
loaderror = NULL;
break; break;
case cfragNoLibraryErr: case cfragNoLibraryErr:
loaderror = "Library not found"; loaderror = "Library not found";
......
...@@ -89,6 +89,8 @@ struct SDL_PrivateVideoData { ...@@ -89,6 +89,8 @@ struct SDL_PrivateVideoData {
#ifdef HAVE_OPENGL #ifdef HAVE_OPENGL
AGLContext appleGLContext; AGLContext appleGLContext;
void *libraryHandle;
#endif #endif
}; };
/* Old variable names */ /* Old variable names */
......
...@@ -384,6 +384,11 @@ static int Mac_HandleEvents(_THIS, int wait4it) ...@@ -384,6 +384,11 @@ static int Mac_HandleEvents(_THIS, int wait4it)
#endif #endif
case updateEvt: { case updateEvt: {
BeginUpdate(SDL_Window); BeginUpdate(SDL_Window);
#ifdef HAVE_OPENGL
if (SDL_VideoSurface->flags & SDL_OPENGL)
SDL_GL_SwapBuffers();
else
#endif
if ( (SDL_VideoSurface->flags & SDL_HWSURFACE) == if ( (SDL_VideoSurface->flags & SDL_HWSURFACE) ==
SDL_SWSURFACE ) { SDL_SWSURFACE ) {
SDL_UpdateRect(SDL_VideoSurface, 0, 0, 0, 0); SDL_UpdateRect(SDL_VideoSurface, 0, 0, 0, 0);
......
...@@ -30,6 +30,7 @@ static char rcsid = ...@@ -30,6 +30,7 @@ static char rcsid =
#include "SDL_error.h" #include "SDL_error.h"
#include "SDL_lowvideo.h" #include "SDL_lowvideo.h"
#include "SDL_macgl_c.h" #include "SDL_macgl_c.h"
#include "SDL_loadso.h"
/* krat: adding OpenGL support */ /* krat: adding OpenGL support */
...@@ -156,5 +157,29 @@ void Mac_GL_SwapBuffers(_THIS) ...@@ -156,5 +157,29 @@ void Mac_GL_SwapBuffers(_THIS)
aglSwapBuffers(glContext); 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 */ #endif /* HAVE_OPENGL */
...@@ -44,5 +44,8 @@ extern void Mac_GL_Quit(_THIS); ...@@ -44,5 +44,8 @@ extern void Mac_GL_Quit(_THIS);
extern int Mac_GL_MakeCurrent(_THIS); extern int Mac_GL_MakeCurrent(_THIS);
extern int Mac_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value); extern int Mac_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
extern void Mac_GL_SwapBuffers(_THIS); 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 #endif
...@@ -163,6 +163,8 @@ static SDL_VideoDevice *ROM_CreateDevice(int devindex) ...@@ -163,6 +163,8 @@ static SDL_VideoDevice *ROM_CreateDevice(int devindex)
#ifdef HAVE_OPENGL #ifdef HAVE_OPENGL
device->GL_MakeCurrent = Mac_GL_MakeCurrent; device->GL_MakeCurrent = Mac_GL_MakeCurrent;
device->GL_SwapBuffers = Mac_GL_SwapBuffers; device->GL_SwapBuffers = Mac_GL_SwapBuffers;
device->GL_LoadLibrary = Mac_GL_LoadLibrary;
device->GL_GetProcAddress = Mac_GL_GetProcAddress;
#endif #endif
device->SetCaption = Mac_SetCaption; device->SetCaption = Mac_SetCaption;
device->SetIcon = NULL; device->SetIcon = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment