Skip to content

Commit

Permalink
* Add Sys_GLimpInit for platform specific GLimp initialisation
Browse files Browse the repository at this point in the history
* Move Unix specific signal handlers to Sys_PlatformInit
* (Windows only) Don't set the SDL video driver if SDL_VIDEODRIVER is already
  set externally
* (Windows only) Use the "windib" SDL video driver if in_mouse is set to -1
  • Loading branch information
timangus committed Aug 8, 2008
1 parent 2cf5052 commit d4d5527
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 16 deletions.
7 changes: 4 additions & 3 deletions code/sdl/sdl_glimp.c
Expand Up @@ -416,7 +416,8 @@ static qboolean GLimp_StartDriverAndSetMode( int mode, qboolean fullscreen )

if (SDL_Init(SDL_INIT_VIDEO) == -1)
{
ri.Printf( PRINT_ALL, "SDL_Init FAILED (%s)\n", SDL_GetError());
ri.Printf( PRINT_ALL, "SDL_Init( SDL_INIT_VIDEO ) FAILED (%s)\n",
SDL_GetError());
return qfalse;
}

Expand Down Expand Up @@ -642,6 +643,8 @@ void GLimp_Init( void )

r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH );

Sys_GLimpInit( );

// create the window and set up the context
if( !GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
{
Expand Down Expand Up @@ -679,8 +682,6 @@ void GLimp_Init( void )

// This depends on SDL_INIT_VIDEO, hence having it here
IN_Init( );

return;
}


Expand Down
1 change: 1 addition & 0 deletions code/sys/sys_local.h
Expand Up @@ -47,6 +47,7 @@ unsigned int CON_LogRead( char *out, unsigned int outSize );
char *Sys_StripAppBundle( char *pwd );
#endif

void Sys_GLimpInit( void );
void Sys_PlatformInit( void );
void Sys_SigHandler( int signal );
void Sys_ErrorDialog( const char *error );
Expand Down
10 changes: 0 additions & 10 deletions code/sys/sys_main.c
Expand Up @@ -551,16 +551,6 @@ int main( int argc, char **argv )

CON_Init( );

#ifndef _WIN32
// Windows doesn't have these signals
// see CON_CtrlHandler() in con_win32.c
signal( SIGHUP, Sys_SigHandler );
signal( SIGQUIT, Sys_SigHandler );
signal( SIGTRAP, Sys_SigHandler );
signal( SIGIOT, Sys_SigHandler );
signal( SIGBUS, Sys_SigHandler );
#endif

signal( SIGILL, Sys_SigHandler );
signal( SIGFPE, Sys_SigHandler );
signal( SIGSEGV, Sys_SigHandler );
Expand Down
19 changes: 18 additions & 1 deletion code/sys/sys_unix.c
Expand Up @@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "../qcommon/qcommon.h"
#include "sys_local.h"

#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
Expand Down Expand Up @@ -512,6 +513,18 @@ void Sys_ErrorDialog( const char *error )
FS_FCloseFile( f );
}

/*
==============
Sys_GLimpInit
Unix specific GL implementation initialisation
==============
*/
void Sys_GLimpInit( void )
{
// NOP
}

/*
==============
Sys_PlatformInit
Expand All @@ -521,5 +534,9 @@ Unix specific initialisation
*/
void Sys_PlatformInit( void )
{
// NOP
signal( SIGHUP, Sys_SigHandler );
signal( SIGQUIT, Sys_SigHandler );
signal( SIGTRAP, Sys_SigHandler );
signal( SIGIOT, Sys_SigHandler );
signal( SIGBUS, Sys_SigHandler );
}
46 changes: 44 additions & 2 deletions code/sys/sys_win32.c
Expand Up @@ -577,6 +577,40 @@ void Sys_ErrorDialog( const char *error )
}
}

#ifndef DEDICATED
static qboolean SDL_VIDEODRIVER_externallySet = qfalse;
#endif

/*
==============
Sys_GLimpInit
Windows specific GL implementation initialisation
==============
*/
void Sys_GLimpInit( void )
{
#ifndef DEDICATED
if( !SDL_VIDEODRIVER_externallySet )
{
// It's a little bit weird having in_mouse control the
// video driver, but from ioq3's point of view they're
// virtually the same except for the mouse input anyway
if( Cvar_VariableIntegerValue( "in_mouse" ) == -1 )
{
// Use the windib SDL backend, which is closest to
// the behaviour of idq3 with in_mouse set to -1
_putenv( "SDL_VIDEODRIVER=windib" );
}
else
{
// Use the DirectX SDL backend
_putenv( "SDL_VIDEODRIVER=directx" );
}
}
#endif
}

/*
==============
Sys_PlatformInit
Expand All @@ -587,7 +621,15 @@ Windows specific initialisation
void Sys_PlatformInit( void )
{
#ifndef DEDICATED
// Force the DirectX SDL backend to be used
_putenv( "SDL_VIDEODRIVER=directx" );
const char *SDL_VIDEODRIVER = getenv( "SDL_VIDEODRIVER" );

if( SDL_VIDEODRIVER )
{
Com_Printf( "SDL_VIDEODRIVER is externally set to \"%s\", "
"in_mouse -1 will have no effect\n", SDL_VIDEODRIVER );
SDL_VIDEODRIVER_externallySet = qtrue;
}
else
SDL_VIDEODRIVER_externallySet = qfalse;
#endif
}

0 comments on commit d4d5527

Please sign in to comment.