diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
commit | 1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch) | |
tree | b361766433d4a7b4a111865afd52803e2bbf7754 /source/cl_ref.c | |
parent | e826e5f176f21cd18b3bbc22887a266835ada57c (diff) |
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems.
Refresh libraries may not longer be dynamically loaded.
Made gi.TagMalloc use separate tag namespace to avoid
conflicts with engine reserverd tags.
Fixed listing order of MVD channels in chooser menu.
A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/cl_ref.c')
-rw-r--r-- | source/cl_ref.c | 208 |
1 files changed, 17 insertions, 191 deletions
diff --git a/source/cl_ref.c b/source/cl_ref.c index 7c130b7..5c15700 100644 --- a/source/cl_ref.c +++ b/source/cl_ref.c @@ -28,9 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "in_public.h" #include "vid_local.h" -// Structure containing functions exported from refresh DLL -refAPI_t ref; - // Console variables that we need to access from this module cvar_t *vid_ref; // Name of Refresh DLL loaded cvar_t *vid_geometry; @@ -41,18 +38,9 @@ cvar_t *_vid_fullscreen; #define MODE_GEOMETRY 1 #define MODE_FULLSCREEN 2 #define MODE_MODELIST 4 -#define MODE_REFRESH 8 static int mode_changed; - -#ifdef REF_HARD_LINKED -qboolean Ref_APISetupCallback( api_type_t type, void *api ); -#else -// Global variables used internally by this module -static void *reflib_library; // Handle to refresh DLL -#endif - /* ========================================================================== @@ -188,141 +176,11 @@ LOADING / SHUTDOWN */ /* -============== -CL_FreeRefresh -============== -*/ -static void CL_FreeRefresh( void ) { -#ifndef REF_HARD_LINKED - Sys_FreeLibrary( reflib_library ); - reflib_library = NULL; -#endif - memset( &ref, 0, sizeof( ref ) ); - cls.ref_initialized = qfalse; -} - -#ifndef REF_HARD_LINKED - -/* -============== -CL_RefSetupCallback -============== -*/ -static qboolean CL_RefSetupCallback( api_type_t type, void *api ) { - switch( type ) { - case API_CMD: - Cmd_FillAPI( ( cmdAPI_t * )api ); - break; - case API_CVAR: - Cvar_FillAPI( ( cvarAPI_t * )api ); - break; - case API_FS: - FS_FillAPI( ( fsAPI_t * )api ); - break; - case API_COMMON: - Com_FillAPI( ( commonAPI_t * )api ); - break; - case API_SYSTEM: - Sys_FillAPI( ( sysAPI_t * )api ); - break; - case API_VIDEO_SOFTWARE: - VID_FillSWAPI( ( videoAPI_t * )api ); - break; - case API_VIDEO_OPENGL: - VID_FillGLAPI( ( videoAPI_t * )api ); - break; - default: - Com_Error( ERR_FATAL, "CL_RefSetupCallback: bad api type" ); - } - - return qtrue; -} - -#endif - -/* -============== -CL_LoadRefresh -============== -*/ -static qboolean CL_LoadRefresh( const char *name ) { -#ifndef REF_HARD_LINKED - char path[MAX_OSPATH]; - moduleEntry_t entry; - moduleInfo_t info; - moduleCapability_t caps; - APISetupCallback_t callback; -#endif - - if( cls.ref_initialized ) { - ref.Shutdown( qtrue ); - CL_FreeRefresh(); - } - - Com_Printf( "------- Loading %s -------\n", name ); - -#ifdef REF_HARD_LINKED -#ifdef SOFTWARE_RENDERER - VID_FillSWAPI( &video ); -#else - VID_FillGLAPI( &video ); -#endif - - Ref_APISetupCallback( API_REFRESH, &ref ); -#else - - Q_concat( path, sizeof( path ), sys_refdir->string, PATH_SEP_STRING, - name, LIBSUFFIX, NULL ); - entry = Sys_LoadLibrary( path, "moduleEntry", &reflib_library ); - if( !entry ) { - Com_WPrintf( "Couldn't load %s\n", name ); - return qfalse; - } - - entry( MQ_GETINFO, &info ); - if( info.api_version != MODULES_APIVERSION ) { - Com_WPrintf( "%s has incompatible api_version: %i, should be %i\n", - name, info.api_version, MODULES_APIVERSION ); - goto fail; - } - - caps = ( moduleCapability_t )entry( MQ_GETCAPS, NULL ); - if( !( caps & MCP_REFRESH ) ) { - Com_WPrintf( "%s doesn't have REFRESH capability\n", name ); - goto fail; - } - - callback = ( APISetupCallback_t )entry( MQ_SETUPAPI, ( void * )CL_RefSetupCallback ); - if( !callback ) { - Com_WPrintf( "%s returned NULL callback\n", name ); - goto fail; - } - - callback( API_REFRESH, &ref ); -#endif - - cls.ref_initialized = qtrue; - if( !ref.Init( qtrue ) ) { - goto fail; - } - - Sys_FixFPCW(); - - Com_Printf( "------------------------------------\n" ); - - return qtrue; - -fail: - CL_FreeRefresh(); - return qfalse; -} - -/* ============ -CL_PumpEvents +CL_RunResfresh ============ */ -void CL_PumpEvents( void ) { +void CL_RunRefresh( void ) { if( !cls.ref_initialized ) { return; } @@ -330,24 +188,19 @@ void CL_PumpEvents( void ) { VID_PumpEvents(); if( mode_changed ) { -#ifndef REF_HARD_LINKED - if( mode_changed & MODE_REFRESH ) { - Cbuf_AddText( "vid_restart\n" ); - } else -#endif if( mode_changed & MODE_FULLSCREEN ) { if( vid_fullscreen->integer ) { Cvar_Set( "_vid_fullscreen", vid_fullscreen->string ); } - VID_ModeChanged(); + VID_SetMode(); } else { if( vid_fullscreen->integer ) { if( mode_changed & MODE_MODELIST ) { - VID_ModeChanged(); + VID_SetMode(); } } else { if( mode_changed & MODE_GEOMETRY ) { - VID_ModeChanged(); + VID_SetMode(); } } } @@ -367,12 +220,6 @@ static void vid_modelist_changed( cvar_t *self ) { mode_changed |= MODE_MODELIST; } -#ifndef REF_HARD_LINKED -static void vid_ref_changed( cvar_t *self ) { - mode_changed |= MODE_REFRESH; -} -#endif - /* ============ CL_InitRefresh @@ -384,6 +231,7 @@ void CL_InitRefresh( void ) { } // Create the video variables so we know how to start the graphics drivers + vid_ref = Cvar_Get( "vid_ref", VID_REF, CVAR_ROM ); vid_geometry = Cvar_Get( "vid_geometry", "640x480", CVAR_ARCHIVE ); vid_fullscreen = Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE ); _vid_fullscreen = Cvar_Get( "_vid_fullscreen", "1", CVAR_ARCHIVE ); @@ -395,33 +243,12 @@ void CL_InitRefresh( void ) { Cvar_Set( "_vid_fullscreen", "1" ); } -#if REF_HARD_LINKED - vid_ref = Cvar_Get( "vid_ref", DEFAULT_REFRESH_DRIVER, CVAR_ROM ); - if( !CL_LoadRefresh( "ref_" DEFAULT_REFRESH_DRIVER ) ) { - Com_Error( ERR_FATAL, "Couldn't load built-in video driver!" ); - } -#else - vid_ref = Cvar_Get( "vid_ref", DEFAULT_REFRESH_DRIVER, CVAR_ARCHIVE ); - - // Start the graphics mode and load refresh DLL - while( 1 ) { - char buffer[MAX_QPATH]; - - Q_concat( buffer, sizeof( buffer ), "ref_", vid_ref->string, NULL ); - if( CL_LoadRefresh( buffer ) ) { - break; - } - - if( !strcmp( vid_ref->string, DEFAULT_REFRESH_DRIVER ) ) { - Com_Error( ERR_FATAL, "Couldn't fall back to %s driver!", buffer ); - } - - Com_Printf( "Falling back to default refresh...\n" ); - Cvar_Set( "vid_ref", DEFAULT_REFRESH_DRIVER ); + if( !R_Init( qtrue ) ) { + Com_Error( ERR_FATAL, "Couldn't initialize refresh" ); } - vid_ref->changed = vid_ref_changed; -#endif + cls.ref_initialized = qtrue; + vid_geometry->changed = vid_geometry_changed; vid_fullscreen->changed = vid_fullscreen_changed; vid_modelist->changed = vid_modelist_changed; @@ -431,7 +258,9 @@ void CL_InitRefresh( void ) { // Initialize the rest of graphics subsystems V_Init(); SCR_Init(); +#if USE_UI UI_Init(); +#endif SCR_RegisterMedia(); Con_RegisterMedia(); @@ -450,21 +279,18 @@ void CL_ShutdownRefresh( void ) { // Shutdown the rest of graphics subsystems V_Shutdown(); SCR_Shutdown(); +#if USE_UI UI_Shutdown(); +#endif vid_geometry->changed = NULL; vid_fullscreen->changed = NULL; vid_modelist->changed = NULL; -#if !REF_HARD_LINKED - vid_ref->changed = NULL; -#endif - ref.Shutdown( qtrue ); - CL_FreeRefresh(); + R_Shutdown( qtrue ); - Z_LeakTest( TAG_RENDERER ); + cls.ref_initialized = qfalse; + Z_LeakTest( TAG_RENDERER ); } - - |