diff options
| author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-08-03 19:42:53 +0000 | 
|---|---|---|
| committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-08-03 19:42:53 +0000 | 
| commit | 4901c4880e652e5ff74bd759049ccf628d8fb4b4 (patch) | |
| tree | 5342b157682affcfa7feb607c86e2007d3fe73e2 | |
| parent | 7e79fa2629cce14e4ee4649dec92468748109b59 (diff) | |
| download | ioquake3-aero-4901c4880e652e5ff74bd759049ccf628d8fb4b4.tar.gz ioquake3-aero-4901c4880e652e5ff74bd759049ccf628d8fb4b4.zip  | |
* Change win32 client Sys_Sleep so it ONLY sleeps since before it was waking on 
  more or less any input event; fine for the server, not so much use for the
  client
* In the main loop, don't bother sleeping if it's going to be less than 10ms as
  the methods we're using to sleep at the moment aren't very precise
* Add Sys_PlatformInit for platform specific initialisation
* In win32 Sys_PlatformInit force selection of the DirectX SDL backend in order
  to get better fullscreen mouse input (in conjunction with a patched SDL DLL
  http://bugzilla.libsdl.org/show_bug.cgi?id=265)
git-svn-id: svn://svn.icculus.org/quake3/trunk@1434 edf5b092-35ff-0310-97b2-ce42778d08ea
| -rw-r--r-- | code/qcommon/common.c | 9 | ||||
| -rw-r--r-- | code/sys/sys_local.h | 1 | ||||
| -rw-r--r-- | code/sys/sys_main.c | 2 | ||||
| -rw-r--r-- | code/sys/sys_unix.c | 12 | ||||
| -rw-r--r-- | code/sys/sys_win32.c | 25 | 
5 files changed, 47 insertions, 2 deletions
diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 475d045..b35d848 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2864,7 +2864,14 @@ void Com_Frame( void ) {  	msec = minMsec;  	do { -		Sys_Sleep( minMsec - msec ); +		int timeRemaining = minMsec - msec; + +		// The existing Sys_Sleep implementations aren't really +		// precise enough to be of use beyond 100fps +		// FIXME: implement a more precise sleep (RDTSC or something) +		if( timeRemaining >= 10 ) +			Sys_Sleep( timeRemaining ); +  		com_frameTime = Com_EventLoop();  		if ( lastTime > com_frameTime ) {  			lastTime = com_frameTime;		// possible on first frame diff --git a/code/sys/sys_local.h b/code/sys/sys_local.h index e837b8b..97a9ad6 100644 --- a/code/sys/sys_local.h +++ b/code/sys/sys_local.h @@ -47,6 +47,7 @@ unsigned int CON_LogRead( char *out, unsigned int outSize );  char *Sys_StripAppBundle( char *pwd );  #endif +void Sys_PlatformInit( void );  void Sys_SigHandler( int signal );  void Sys_ErrorDialog( const char *error );  void Sys_AnsiColorPrint( const char *msg ); diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index dc846dd..bad8772 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -533,6 +533,8 @@ int main( int argc, char **argv )  	}  #endif +	Sys_PlatformInit( ); +  	Sys_ParseArgs( argc, argv );  	Sys_SetBinaryPath( Sys_Dirname( argv[ 0 ] ) );  	Sys_SetDefaultInstallPath( DEFAULT_BASEDIR ); diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 40479b9..13ded33 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -511,3 +511,15 @@ void Sys_ErrorDialog( const char *error )  	FS_FCloseFile( f );  } + +/* +============== +Sys_PlatformInit + +Unix specific initialisation +============== +*/ +void Sys_PlatformInit( void ) +{ +	// NOP +} diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index fb924e6..79998dc 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -514,7 +514,7 @@ void Sys_FreeFileList( char **list )  ==============  Sys_Sleep -Block execution for msec or until input is recieved. +Block execution for msec or until input is received.  ==============  */  void Sys_Sleep( int msec ) @@ -522,10 +522,18 @@ void Sys_Sleep( int msec )  	if( msec == 0 )  		return; +#ifdef DEDICATED  	if( msec < 0 )  		WaitForSingleObject( GetStdHandle( STD_INPUT_HANDLE ), INFINITE );  	else  		WaitForSingleObject( GetStdHandle( STD_INPUT_HANDLE ), msec ); +#else +	// Client Sys_Sleep doesn't support waiting on stdin +	if( msec < 0 ) +		return; + +	Sleep( msec ); +#endif  }  /* @@ -568,3 +576,18 @@ void Sys_ErrorDialog( const char *error )  		}  	}  } + +/* +============== +Sys_PlatformInit + +Windows specific initialisation +============== +*/ +void Sys_PlatformInit( void ) +{ +#ifndef DEDICATED +	// Force the DirectX SDL backend to be used +	_putenv( "SDL_VIDEODRIVER=directx" ); +#endif +}  | 
