summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorThilo Schulz <arny@ats.s.bawue.de>2011-08-01 01:19:55 +0000
committerTim Angus <tim@ngus.net>2013-01-10 23:11:05 +0000
commit819546192265e70832c75cecc29dce929a4feeec (patch)
treea345b3d876d8dbdcccf1b13ff450fe0227bf2176 /src/client
parent500076c2e63329331c2a98e88cfa34f8044a7b76 (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.c4
-rw-r--r--src/client/cl_main.c56
-rw-r--r--src/client/cl_scrn.c4
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 {