diff options
author | Thilo Schulz <arny@ats.s.bawue.de> | 2011-08-01 01:19:55 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-10 23:11:05 +0000 |
commit | 819546192265e70832c75cecc29dce929a4feeec (patch) | |
tree | a345b3d876d8dbdcccf1b13ff450fe0227bf2176 /src/client | |
parent | 500076c2e63329331c2a98e88cfa34f8044a7b76 (diff) |
Modular rendering system. Patch by use.less01 This might break MSVC builds. I'll take care of it later
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/cl_cin.c | 4 | ||||
-rw-r--r-- | src/client/cl_main.c | 56 | ||||
-rw-r--r-- | src/client/cl_scrn.c | 4 |
3 files changed, 57 insertions, 7 deletions
diff --git a/src/client/cl_cin.c b/src/client/cl_cin.c index 8f6e82a2..3e0f55c7 100644 --- a/src/client/cl_cin.c +++ b/src/client/cl_cin.c @@ -53,8 +53,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define MAX_VIDEO_HANDLES 16 -extern glconfig_t glConfig; - static void RoQ_init( void ); @@ -992,7 +990,7 @@ static void readQuadInfo( byte *qData ) cinTable[currentHandle].drawY = cinTable[currentHandle].CIN_HEIGHT; // rage pro is very slow at 512 wide textures, voodoo can't do it at all - if ( glConfig.hardwareType == GLHW_RAGEPRO || glConfig.maxTextureSize <= 256) { + if ( cls.glconfig.hardwareType == GLHW_RAGEPRO || cls.glconfig.maxTextureSize <= 256) { if (cinTable[currentHandle].drawX>256) { cinTable[currentHandle].drawX = 256; } diff --git a/src/client/cl_main.c b/src/client/cl_main.c index a10b1444..3ffa0007 100644 --- a/src/client/cl_main.c +++ b/src/client/cl_main.c @@ -25,6 +25,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "client.h" #include <limits.h> +#include "../sys/sys_local.h" +#include "../sys/sys_loadlib.h" + #ifdef USE_MUMBLE #include "libmumblelink.h" #endif @@ -45,6 +48,8 @@ cvar_t *cl_voipShowMeter; cvar_t *cl_voip; #endif +cvar_t *cl_renderer; + cvar_t *cl_nodelta; cvar_t *cl_debugMove; @@ -118,6 +123,9 @@ vm_t *cgvm; // Structure containing functions exported from refresh DLL refexport_t re; +#ifdef USE_RENDERER_DLOPEN +static void *rendererLib = NULL; +#endif ping_t cl_pinglist[MAX_PINGREQUESTS]; @@ -138,7 +146,6 @@ int serverStatusCount; void hA3Dg_ExportRenderGeom (refexport_t *incoming_re); #endif -extern void GLimp_Minimize(void); extern void SV_BotFrame( int time ); void CL_CheckForResend( void ); void CL_ShowIP_f(void); @@ -3238,9 +3245,39 @@ CL_InitRef void CL_InitRef( void ) { refimport_t ri; refexport_t *ret; +#ifdef USE_RENDERER_DLOPEN + GetRefAPI_t GetRefAPI; + char dllName[MAX_OSPATH]; +#endif Com_Printf( "----- Initializing Renderer ----\n" ); +#ifdef USE_RENDERER_DLOPEN + cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH); + + Com_sprintf(dllName, sizeof(dllName), "renderer_%s_" ARCH_STRING DLL_EXT, cl_renderer->string); + + if(!(rendererLib = Sys_LoadDll(dllName)) && strcmp(cl_renderer->string, cl_renderer->resetString)) + { + Cvar_ForceReset("cl_renderer"); + + Com_sprintf(dllName, sizeof(dllName), "renderer_opengl1_" ARCH_STRING DLL_EXT); + rendererLib = Sys_LoadLibrary(dllName); + } + + if(!rendererLib) + { + Com_Printf("failed:\n\"%s\"\n", Sys_LibraryError()); + Com_Error(ERR_FATAL, "Failed to load renderer"); + } + + GetRefAPI = Sys_LoadFunction(rendererLib, "GetRefAPI"); + if(!GetRefAPI) + { + Com_Error(ERR_FATAL, "Can't load symbol GetRefAPI: '%s'", Sys_LibraryError()); + } +#endif + ri.Cmd_AddCommand = Cmd_AddCommand; ri.Cmd_RemoveCommand = Cmd_RemoveCommand; ri.Cmd_Argc = Cmd_Argc; @@ -3258,7 +3295,10 @@ void CL_InitRef( void ) { #endif ri.Hunk_AllocateTempMemory = Hunk_AllocateTempMemory; ri.Hunk_FreeTempMemory = Hunk_FreeTempMemory; + + ri.CM_ClusterPVS = CM_ClusterPVS; ri.CM_DrawDebugSurface = CM_DrawDebugSurface; + ri.FS_ReadFile = FS_ReadFile; ri.FS_FreeFile = FS_FreeFile; ri.FS_WriteFile = FS_WriteFile; @@ -3268,7 +3308,9 @@ void CL_InitRef( void ) { ri.FS_FileExists = FS_FileExists; ri.Cvar_Get = Cvar_Get; ri.Cvar_Set = Cvar_Set; + ri.Cvar_SetValue = Cvar_SetValue; ri.Cvar_CheckRange = Cvar_CheckRange; + ri.Cvar_VariableIntegerValue = Cvar_VariableIntegerValue; // cinematic stuff @@ -3278,6 +3320,17 @@ void CL_InitRef( void ) { ri.CL_WriteAVIVideoFrame = CL_WriteAVIVideoFrame; + ri.IN_Init = IN_Init; + ri.IN_Shutdown = IN_Shutdown; + ri.IN_Restart = IN_Restart; + + ri.ftol = Q_ftol; + + ri.Sys_SetEnv = Sys_SetEnv; + ri.Sys_GLimpSafeInit = Sys_GLimpSafeInit; + ri.Sys_GLimpInit = Sys_GLimpInit; + ri.Sys_LowPhysicalMemory = Sys_LowPhysicalMemory; + ret = GetRefAPI( REF_API_VERSION, &ri ); #if defined __USEA3D && defined __A3D_GEOM @@ -3619,7 +3672,6 @@ void CL_Init( void ) { Cmd_AddCommand ("model", CL_SetModel_f ); Cmd_AddCommand ("video", CL_Video_f ); Cmd_AddCommand ("stopvideo", CL_StopVideo_f ); - Cmd_AddCommand("minimize", GLimp_Minimize); CL_InitRef(); SCR_Init (); diff --git a/src/client/cl_scrn.c b/src/client/cl_scrn.c index 1a7a34b4..cd1252e1 100644 --- a/src/client/cl_scrn.c +++ b/src/client/cl_scrn.c @@ -545,9 +545,9 @@ void SCR_UpdateScreen( void ) { if( uivm || com_dedicated->integer ) { // XXX - extern cvar_t* r_anaglyphMode; + int in_anaglyphMode = Cvar_VariableIntegerValue("r_anaglyphMode"); // if running in stereo, we need to draw the frame twice - if ( cls.glconfig.stereoEnabled || r_anaglyphMode->integer) { + if ( cls.glconfig.stereoEnabled || in_anaglyphMode) { SCR_DrawScreenField( STEREO_LEFT ); SCR_DrawScreenField( STEREO_RIGHT ); } else { |