r_smp now works as expected with sdl_glimp.c on Mac OS X.

This commit is contained in:
Ryan C. Gordon 2005-12-01 11:16:36 +00:00
parent 820f41162e
commit 4bea1e4ff9

View file

@ -75,6 +75,20 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "unix_glw.h" #include "unix_glw.h"
/* Just hack it for now. */
#ifdef MACOS_X
typedef CGLContextObj QGLContext;
#define GLimp_GetCurrentContext() CGLGetCurrentContext()
#define GLimp_SetCurrentContext(ctx) CGLSetCurrentContext(ctx)
#else
typedef void *QGLContext;
#define GLimp_GetCurrentContext() (NULL)
#define GLimp_SetCurrentContext(ctx)
#endif
static QGLContext opengl_context;
#define WINDOW_CLASS_NAME "Quake III: Arena" #define WINDOW_CLASS_NAME "Quake III: Arena"
#define WINDOW_CLASS_NAME_BRIEF "quake3" #define WINDOW_CLASS_NAME_BRIEF "quake3"
@ -637,6 +651,8 @@ static int GLW_SetMode( const char *drivername, int mode, qboolean fullscreen )
continue; continue;
} }
opengl_context = GLimp_GetCurrentContext();
ri.Printf( PRINT_ALL, "Using %d/%d/%d Color bits, %d depth, %d stencil display.\n", ri.Printf( PRINT_ALL, "Using %d/%d/%d Color bits, %d depth, %d stencil display.\n",
sdlcolorbits, sdlcolorbits, sdlcolorbits, sdlcolorbits, sdlcolorbits, sdlcolorbits,
tdepthbits, tstencilbits); tdepthbits, tstencilbits);
@ -1081,7 +1097,7 @@ static int GLimp_RenderThreadWrapper( void *arg )
glimpRenderThread(); glimpRenderThread();
//qglXMakeCurrent( dpy, None, NULL ); GLimp_SetCurrentContext(NULL);
Com_Printf( "Render thread terminating\n" ); Com_Printf( "Render thread terminating\n" );
@ -1090,6 +1106,17 @@ static int GLimp_RenderThreadWrapper( void *arg )
qboolean GLimp_SpawnRenderThread( void (*function)( void ) ) qboolean GLimp_SpawnRenderThread( void (*function)( void ) )
{ {
static qboolean warned = qfalse;
if (!warned)
{
Com_Printf("WARNING: You enable r_smp at your own risk!\n");
warned = qtrue;
}
#if !MACOS_X
return qfalse; /* better safe than sorry for now. */
#endif
if (renderThread != NULL) /* hopefully just a zombie at this point... */ if (renderThread != NULL) /* hopefully just a zombie at this point... */
{ {
Com_Printf("Already a render thread? Trying to clean it up...\n"); Com_Printf("Already a render thread? Trying to clean it up...\n");
@ -1146,7 +1173,7 @@ void *GLimp_RendererSleep( void )
{ {
void *data = NULL; void *data = NULL;
//qglXMakeCurrent( dpy, None, NULL ); GLimp_SetCurrentContext(NULL);
SDL_LockMutex(smpMutex); SDL_LockMutex(smpMutex);
{ {
@ -1164,7 +1191,7 @@ void *GLimp_RendererSleep( void )
} }
SDL_UnlockMutex(smpMutex); SDL_UnlockMutex(smpMutex);
//qglXMakeCurrent( dpy, win, ctx ); GLimp_SetCurrentContext(opengl_context);
return data; return data;
} }
@ -1179,12 +1206,12 @@ void GLimp_FrontEndSleep( void )
} }
SDL_UnlockMutex(smpMutex); SDL_UnlockMutex(smpMutex);
//qglXMakeCurrent( dpy, win, ctx ); GLimp_SetCurrentContext(opengl_context);
} }
void GLimp_WakeRenderer( void *data ) void GLimp_WakeRenderer( void *data )
{ {
//qglXMakeCurrent( dpy, None, NULL ); GLimp_SetCurrentContext(NULL);
SDL_LockMutex(smpMutex); SDL_LockMutex(smpMutex);
{ {