* Add Sys_GLimpInit for platform specific GLimp initialisation
* 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
This commit is contained in:
parent
2cf5052786
commit
d4d5527a89
5 changed files with 67 additions and 16 deletions
|
@ -416,7 +416,8 @@ static qboolean GLimp_StartDriverAndSetMode( int mode, qboolean fullscreen )
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) == -1)
|
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;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,6 +643,8 @@ void GLimp_Init( void )
|
||||||
|
|
||||||
r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH );
|
r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH );
|
||||||
|
|
||||||
|
Sys_GLimpInit( );
|
||||||
|
|
||||||
// create the window and set up the context
|
// create the window and set up the context
|
||||||
if( !GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
|
if( !GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
|
||||||
{
|
{
|
||||||
|
@ -679,8 +682,6 @@ void GLimp_Init( void )
|
||||||
|
|
||||||
// This depends on SDL_INIT_VIDEO, hence having it here
|
// This depends on SDL_INIT_VIDEO, hence having it here
|
||||||
IN_Init( );
|
IN_Init( );
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ unsigned int CON_LogRead( char *out, unsigned int outSize );
|
||||||
char *Sys_StripAppBundle( char *pwd );
|
char *Sys_StripAppBundle( char *pwd );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void Sys_GLimpInit( void );
|
||||||
void Sys_PlatformInit( void );
|
void Sys_PlatformInit( void );
|
||||||
void Sys_SigHandler( int signal );
|
void Sys_SigHandler( int signal );
|
||||||
void Sys_ErrorDialog( const char *error );
|
void Sys_ErrorDialog( const char *error );
|
||||||
|
|
|
@ -551,16 +551,6 @@ int main( int argc, char **argv )
|
||||||
|
|
||||||
CON_Init( );
|
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( SIGILL, Sys_SigHandler );
|
||||||
signal( SIGFPE, Sys_SigHandler );
|
signal( SIGFPE, Sys_SigHandler );
|
||||||
signal( SIGSEGV, Sys_SigHandler );
|
signal( SIGSEGV, Sys_SigHandler );
|
||||||
|
|
|
@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
#include "../qcommon/qcommon.h"
|
#include "../qcommon/qcommon.h"
|
||||||
#include "sys_local.h"
|
#include "sys_local.h"
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -512,6 +513,18 @@ void Sys_ErrorDialog( const char *error )
|
||||||
FS_FCloseFile( f );
|
FS_FCloseFile( f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==============
|
||||||
|
Sys_GLimpInit
|
||||||
|
|
||||||
|
Unix specific GL implementation initialisation
|
||||||
|
==============
|
||||||
|
*/
|
||||||
|
void Sys_GLimpInit( void )
|
||||||
|
{
|
||||||
|
// NOP
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============
|
==============
|
||||||
Sys_PlatformInit
|
Sys_PlatformInit
|
||||||
|
@ -521,5 +534,9 @@ Unix specific initialisation
|
||||||
*/
|
*/
|
||||||
void Sys_PlatformInit( void )
|
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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
Sys_PlatformInit
|
||||||
|
@ -587,7 +621,15 @@ Windows specific initialisation
|
||||||
void Sys_PlatformInit( void )
|
void Sys_PlatformInit( void )
|
||||||
{
|
{
|
||||||
#ifndef DEDICATED
|
#ifndef DEDICATED
|
||||||
// Force the DirectX SDL backend to be used
|
const char *SDL_VIDEODRIVER = getenv( "SDL_VIDEODRIVER" );
|
||||||
_putenv( "SDL_VIDEODRIVER=directx" );
|
|
||||||
|
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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue