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
This commit is contained in:
parent
2918fb4cec
commit
e95a3dbbbe
6 changed files with 38 additions and 0 deletions
|
@ -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 {
|
||||||
|
|
||||||
#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)
|
||||||
#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 =
|
||||||
#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)
|
||||||
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);
|
||||||
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)
|
||||||
#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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue