summaryrefslogtreecommitdiff
path: root/source/cl_ref.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/cl_ref.c')
-rw-r--r--source/cl_ref.c208
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 );
}
-
-