summaryrefslogtreecommitdiff
path: root/src/sdl/sdl_glimp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdl/sdl_glimp.c')
-rw-r--r--src/sdl/sdl_glimp.c250
1 files changed, 0 insertions, 250 deletions
diff --git a/src/sdl/sdl_glimp.c b/src/sdl/sdl_glimp.c
index f15816af..f9c2ce87 100644
--- a/src/sdl/sdl_glimp.c
+++ b/src/sdl/sdl_glimp.c
@@ -27,14 +27,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# include <SDL.h>
#endif
-#ifdef SMP
-# ifdef USE_LOCAL_HEADERS
-# include "SDL_thread.h"
-# else
-# include <SDL_thread.h>
-# endif
-#endif
-
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -822,245 +814,3 @@ void GLimp_EndFrame( void )
r_fullscreen->modified = qfalse;
}
}
-
-
-
-#ifdef SMP
-/*
-===========================================================
-
-SMP acceleration
-
-===========================================================
-*/
-
-/*
- * I have no idea if this will even work...most platforms don't offer
- * thread-safe OpenGL libraries, and it looks like the original Linux
- * code counted on each thread claiming the GL context with glXMakeCurrent(),
- * which you can't currently do in SDL. We'll just have to hope for the best.
- */
-
-static SDL_mutex *smpMutex = NULL;
-static SDL_cond *renderCommandsEvent = NULL;
-static SDL_cond *renderCompletedEvent = NULL;
-static void (*glimpRenderThread)( void ) = NULL;
-static SDL_Thread *renderThread = NULL;
-
-/*
-===============
-GLimp_ShutdownRenderThread
-===============
-*/
-static void GLimp_ShutdownRenderThread(void)
-{
- if (smpMutex != NULL)
- {
- SDL_DestroyMutex(smpMutex);
- smpMutex = NULL;
- }
-
- if (renderCommandsEvent != NULL)
- {
- SDL_DestroyCond(renderCommandsEvent);
- renderCommandsEvent = NULL;
- }
-
- if (renderCompletedEvent != NULL)
- {
- SDL_DestroyCond(renderCompletedEvent);
- renderCompletedEvent = NULL;
- }
-
- glimpRenderThread = NULL;
-}
-
-/*
-===============
-GLimp_RenderThreadWrapper
-===============
-*/
-static int GLimp_RenderThreadWrapper( void *arg )
-{
- Com_Printf( "Render thread starting\n" );
-
- glimpRenderThread();
-
- GLimp_SetCurrentContext(NULL);
-
- Com_Printf( "Render thread terminating\n" );
-
- return 0;
-}
-
-/*
-===============
-GLimp_SpawnRenderThread
-===============
-*/
-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;
- }
-
-#ifndef MACOS_X
- return qfalse; /* better safe than sorry for now. */
-#endif
-
- if (renderThread != NULL) /* hopefully just a zombie at this point... */
- {
- Com_Printf("Already a render thread? Trying to clean it up...\n");
- SDL_WaitThread(renderThread, NULL);
- renderThread = NULL;
- GLimp_ShutdownRenderThread();
- }
-
- smpMutex = SDL_CreateMutex();
- if (smpMutex == NULL)
- {
- Com_Printf( "smpMutex creation failed: %s\n", SDL_GetError() );
- GLimp_ShutdownRenderThread();
- return qfalse;
- }
-
- renderCommandsEvent = SDL_CreateCond();
- if (renderCommandsEvent == NULL)
- {
- Com_Printf( "renderCommandsEvent creation failed: %s\n", SDL_GetError() );
- GLimp_ShutdownRenderThread();
- return qfalse;
- }
-
- renderCompletedEvent = SDL_CreateCond();
- if (renderCompletedEvent == NULL)
- {
- Com_Printf( "renderCompletedEvent creation failed: %s\n", SDL_GetError() );
- GLimp_ShutdownRenderThread();
- return qfalse;
- }
-
- glimpRenderThread = function;
- renderThread = SDL_CreateThread(GLimp_RenderThreadWrapper, NULL);
- if ( renderThread == NULL )
- {
- ri.Printf( PRINT_ALL, "SDL_CreateThread() returned %s", SDL_GetError() );
- GLimp_ShutdownRenderThread();
- return qfalse;
- }
- else
- {
- // tma 01/09/07: don't think this is necessary anyway?
- //
- // !!! FIXME: No detach API available in SDL!
- //ret = pthread_detach( renderThread );
- //if ( ret ) {
- //ri.Printf( PRINT_ALL, "pthread_detach returned %d: %s", ret, strerror( ret ) );
- //}
- }
-
- return qtrue;
-}
-
-static volatile void *smpData = NULL;
-static volatile qboolean smpDataReady;
-
-/*
-===============
-GLimp_RendererSleep
-===============
-*/
-void *GLimp_RendererSleep( void )
-{
- void *data = NULL;
-
- GLimp_SetCurrentContext(NULL);
-
- SDL_LockMutex(smpMutex);
- {
- smpData = NULL;
- smpDataReady = qfalse;
-
- // after this, the front end can exit GLimp_FrontEndSleep
- SDL_CondSignal(renderCompletedEvent);
-
- while ( !smpDataReady )
- SDL_CondWait(renderCommandsEvent, smpMutex);
-
- data = (void *)smpData;
- }
- SDL_UnlockMutex(smpMutex);
-
- GLimp_SetCurrentContext(opengl_context);
-
- return data;
-}
-
-/*
-===============
-GLimp_FrontEndSleep
-===============
-*/
-void GLimp_FrontEndSleep( void )
-{
- SDL_LockMutex(smpMutex);
- {
- while ( smpData )
- SDL_CondWait(renderCompletedEvent, smpMutex);
- }
- SDL_UnlockMutex(smpMutex);
-
- GLimp_SetCurrentContext(opengl_context);
-}
-
-/*
-===============
-GLimp_WakeRenderer
-===============
-*/
-void GLimp_WakeRenderer( void *data )
-{
- GLimp_SetCurrentContext(NULL);
-
- SDL_LockMutex(smpMutex);
- {
- assert( smpData == NULL );
- smpData = data;
- smpDataReady = qtrue;
-
- // after this, the renderer can continue through GLimp_RendererSleep
- SDL_CondSignal(renderCommandsEvent);
- }
- SDL_UnlockMutex(smpMutex);
-}
-
-#else
-
-// No SMP - stubs
-void GLimp_RenderThreadWrapper( void *arg )
-{
-}
-
-qboolean GLimp_SpawnRenderThread( void (*function)( void ) )
-{
- ri.Printf( PRINT_WARNING, "ERROR: SMP support was disabled at compile time\n");
- return qfalse;
-}
-
-void *GLimp_RendererSleep( void )
-{
- return NULL;
-}
-
-void GLimp_FrontEndSleep( void )
-{
-}
-
-void GLimp_WakeRenderer( void *data )
-{
-}
-
-#endif