From 40dfcee06e70ebf0ccb7c7b8172e330e5395e38a Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Mon, 1 Aug 2011 01:19:55 +0000 Subject: [PATCH] Modular rendering system. Patch by use.less01 This might break MSVC builds. I'll take care of it later --- Makefile | 259 +++++++++++++++++++++------------- code/client/cl_cin.c | 4 +- code/client/cl_main.c | 56 +++++++- code/client/cl_scrn.c | 4 +- code/qcommon/common.c | 31 ---- code/qcommon/q_math.c | 29 ++++ code/qcommon/q_platform.h | 8 ++ code/renderer/tr_image.c | 6 +- code/renderer/tr_image_png.c | 2 +- code/renderer/tr_init.c | 12 +- code/renderer/tr_light.c | 6 +- code/renderer/tr_local.h | 1 + code/renderer/tr_mesh.c | 2 +- code/renderer/tr_model.c | 2 +- code/renderer/tr_public.h | 23 +++ code/renderer/tr_scene.c | 2 +- code/renderer/tr_shade.c | 8 +- code/renderer/tr_shade_calc.c | 10 +- code/renderer/tr_shader.c | 6 +- code/renderer/tr_sky.c | 8 +- code/renderer/tr_world.c | 2 +- code/sdl/sdl_gamma.c | 2 +- code/sdl/sdl_glimp.c | 22 +-- code/sdl/sdl_input.c | 16 +-- 24 files changed, 335 insertions(+), 186 deletions(-) diff --git a/Makefile b/Makefile index c0d382d9..533dcb39 100644 --- a/Makefile +++ b/Makefile @@ -159,6 +159,10 @@ ifndef USE_LOCAL_HEADERS USE_LOCAL_HEADERS=1 endif +ifndef USE_RENDERER_DLOPEN +USE_RENDERER_DLOPEN=1 +endif + ifndef DEBUG_CFLAGS DEBUG_CFLAGS=-g -O0 endif @@ -290,6 +294,10 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu")) ifeq ($(USE_CODEC_VORBIS),1) CLIENT_CFLAGS += -DUSE_CODEC_VORBIS endif + + ifeq ($(USE_RENDERER_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_RENDERER_DLOPEN + endif OPTIMIZEVM = -O3 -funroll-loops -fomit-frame-pointer OPTIMIZE = $(OPTIMIZEVM) -ffast-math @@ -499,6 +507,10 @@ ifeq ($(PLATFORM),mingw32) ifeq ($(USE_CODEC_VORBIS),1) CLIENT_CFLAGS += -DUSE_CODEC_VORBIS endif + + ifeq ($(USE_RENDERER_DLOPEN),1) + CLIENT_CFLAGS += -DUSE_RENDERER_DLOPEN + endif ifeq ($(ARCH),x64) OPTIMIZEVM = -O3 -fno-omit-frame-pointer \ @@ -856,9 +868,16 @@ ifneq ($(BUILD_SERVER),0) endif ifneq ($(BUILD_CLIENT),0) - TARGETS += $(B)/ioquake3$(FULLBINEXT) - ifneq ($(BUILD_CLIENT_SMP),0) - TARGETS += $(B)/ioquake3-smp$(FULLBINEXT) + ifneq ($(USE_RENDERER_DLOPEN),0) + TARGETS += $(B)/ioquake3$(FULLBINEXT) $(B)/renderer_opengl1_$(SHLIBNAME) + ifneq ($(BUILD_CLIENT_SMP),0) + TARGETS += $(B)/renderer_opengl1_smp_$(SHLIBNAME) + endif + else + TARGETS += $(B)/ioquake3$(FULLBINEXT) + ifneq ($(BUILD_CLIENT_SMP),0) + TARGETS += $(B)/ioquake3-smp$(FULLBINEXT) + endif endif endif @@ -961,9 +980,14 @@ $(echo_cmd) "CC $<" $(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -o $@ -c $< endef +define DO_REF_CC +$(echo_cmd) "REF_CC $<" +$(Q)$(CC) $(SHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -o $@ -c $< +endef + define DO_SMP_CC $(echo_cmd) "SMP_CC $<" -$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -DSMP -o $@ -c $< +$(Q)$(CC) $(SHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -DSMP -o $@ -c $< endef define DO_BOT_CC @@ -1123,6 +1147,8 @@ makedirs: @if [ ! -d $(B) ];then $(MKDIR) $(B);fi @if [ ! -d $(B)/client ];then $(MKDIR) $(B)/client;fi @if [ ! -d $(B)/clientsmp ];then $(MKDIR) $(B)/clientsmp;fi + @if [ ! -d $(B)/renderer ];then $(MKDIR) $(B)/renderer;fi + @if [ ! -d $(B)/renderersmp ];then $(MKDIR) $(B)/renderersmp;fi @if [ ! -d $(B)/ded ];then $(MKDIR) $(B)/ded;fi @if [ ! -d $(B)/baseq3 ];then $(MKDIR) $(B)/baseq3;fi @if [ ! -d $(B)/baseq3/cgame ];then $(MKDIR) $(B)/baseq3/cgame;fi @@ -1412,37 +1438,7 @@ Q3OBJ = \ $(B)/client/l_precomp.o \ $(B)/client/l_script.o \ $(B)/client/l_struct.o \ - $(B)/client/tr_animation.o \ - $(B)/client/tr_backend.o \ - $(B)/client/tr_bsp.o \ - $(B)/client/tr_cmds.o \ - $(B)/client/tr_curve.o \ - $(B)/client/tr_flares.o \ - $(B)/client/tr_font.o \ - $(B)/client/tr_image.o \ - $(B)/client/tr_image_png.o \ - $(B)/client/tr_image_jpg.o \ - $(B)/client/tr_image_bmp.o \ - $(B)/client/tr_image_tga.o \ - $(B)/client/tr_image_pcx.o \ - $(B)/client/tr_init.o \ - $(B)/client/tr_light.o \ - $(B)/client/tr_main.o \ - $(B)/client/tr_marks.o \ - $(B)/client/tr_mesh.o \ - $(B)/client/tr_model.o \ - $(B)/client/tr_model_iqm.o \ - $(B)/client/tr_noise.o \ - $(B)/client/tr_scene.o \ - $(B)/client/tr_shade.o \ - $(B)/client/tr_shade_calc.o \ - $(B)/client/tr_shader.o \ - $(B)/client/tr_shadows.o \ - $(B)/client/tr_sky.o \ - $(B)/client/tr_surface.o \ - $(B)/client/tr_world.o \ \ - $(B)/client/sdl_gamma.o \ $(B)/client/sdl_input.o \ $(B)/client/sdl_snd.o \ \ @@ -1450,54 +1446,95 @@ Q3OBJ = \ $(B)/client/con_log.o \ $(B)/client/sys_main.o +Q3ROBJ = \ + $(B)/renderer/tr_animation.o \ + $(B)/renderer/tr_backend.o \ + $(B)/renderer/tr_bsp.o \ + $(B)/renderer/tr_cmds.o \ + $(B)/renderer/tr_curve.o \ + $(B)/renderer/tr_flares.o \ + $(B)/renderer/tr_font.o \ + $(B)/renderer/tr_image.o \ + $(B)/renderer/tr_image_png.o \ + $(B)/renderer/tr_image_jpg.o \ + $(B)/renderer/tr_image_bmp.o \ + $(B)/renderer/tr_image_tga.o \ + $(B)/renderer/tr_image_pcx.o \ + $(B)/renderer/tr_init.o \ + $(B)/renderer/tr_light.o \ + $(B)/renderer/tr_main.o \ + $(B)/renderer/tr_marks.o \ + $(B)/renderer/tr_mesh.o \ + $(B)/renderer/tr_model.o \ + $(B)/renderer/tr_model_iqm.o \ + $(B)/renderer/tr_noise.o \ + $(B)/renderer/tr_scene.o \ + $(B)/renderer/tr_shade.o \ + $(B)/renderer/tr_shade_calc.o \ + $(B)/renderer/tr_shader.o \ + $(B)/renderer/tr_shadows.o \ + $(B)/renderer/tr_sky.o \ + $(B)/renderer/tr_surface.o \ + $(B)/renderer/tr_world.o \ + \ + $(B)/renderer/sdl_gamma.o + +ifneq ($(USE_RENDERER_DLOPEN), 0) + Q3ROBJ += \ + $(B)/renderer/q_shared.o \ + $(B)/renderer/puff.o \ + $(B)/renderer/q_math.o \ + $(B)/renderer/tr_subs.o +endif + ifneq ($(USE_INTERNAL_JPEG),0) - Q3OBJ += \ - $(B)/client/jaricom.o \ - $(B)/client/jcapimin.o \ - $(B)/client/jcapistd.o \ - $(B)/client/jcarith.o \ - $(B)/client/jccoefct.o \ - $(B)/client/jccolor.o \ - $(B)/client/jcdctmgr.o \ - $(B)/client/jchuff.o \ - $(B)/client/jcinit.o \ - $(B)/client/jcmainct.o \ - $(B)/client/jcmarker.o \ - $(B)/client/jcmaster.o \ - $(B)/client/jcomapi.o \ - $(B)/client/jcparam.o \ - $(B)/client/jcprepct.o \ - $(B)/client/jcsample.o \ - $(B)/client/jctrans.o \ - $(B)/client/jdapimin.o \ - $(B)/client/jdapistd.o \ - $(B)/client/jdarith.o \ - $(B)/client/jdatadst.o \ - $(B)/client/jdatasrc.o \ - $(B)/client/jdcoefct.o \ - $(B)/client/jdcolor.o \ - $(B)/client/jddctmgr.o \ - $(B)/client/jdhuff.o \ - $(B)/client/jdinput.o \ - $(B)/client/jdmainct.o \ - $(B)/client/jdmarker.o \ - $(B)/client/jdmaster.o \ - $(B)/client/jdmerge.o \ - $(B)/client/jdpostct.o \ - $(B)/client/jdsample.o \ - $(B)/client/jdtrans.o \ - $(B)/client/jerror.o \ - $(B)/client/jfdctflt.o \ - $(B)/client/jfdctfst.o \ - $(B)/client/jfdctint.o \ - $(B)/client/jidctflt.o \ - $(B)/client/jidctfst.o \ - $(B)/client/jidctint.o \ - $(B)/client/jmemmgr.o \ - $(B)/client/jmemnobs.o \ - $(B)/client/jquant1.o \ - $(B)/client/jquant2.o \ - $(B)/client/jutils.o + Q3ROBJ += \ + $(B)/renderer/jaricom.o \ + $(B)/renderer/jcapimin.o \ + $(B)/renderer/jcapistd.o \ + $(B)/renderer/jcarith.o \ + $(B)/renderer/jccoefct.o \ + $(B)/renderer/jccolor.o \ + $(B)/renderer/jcdctmgr.o \ + $(B)/renderer/jchuff.o \ + $(B)/renderer/jcinit.o \ + $(B)/renderer/jcmainct.o \ + $(B)/renderer/jcmarker.o \ + $(B)/renderer/jcmaster.o \ + $(B)/renderer/jcomapi.o \ + $(B)/renderer/jcparam.o \ + $(B)/renderer/jcprepct.o \ + $(B)/renderer/jcsample.o \ + $(B)/renderer/jctrans.o \ + $(B)/renderer/jdapimin.o \ + $(B)/renderer/jdapistd.o \ + $(B)/renderer/jdarith.o \ + $(B)/renderer/jdatadst.o \ + $(B)/renderer/jdatasrc.o \ + $(B)/renderer/jdcoefct.o \ + $(B)/renderer/jdcolor.o \ + $(B)/renderer/jddctmgr.o \ + $(B)/renderer/jdhuff.o \ + $(B)/renderer/jdinput.o \ + $(B)/renderer/jdmainct.o \ + $(B)/renderer/jdmarker.o \ + $(B)/renderer/jdmaster.o \ + $(B)/renderer/jdmerge.o \ + $(B)/renderer/jdpostct.o \ + $(B)/renderer/jdsample.o \ + $(B)/renderer/jdtrans.o \ + $(B)/renderer/jerror.o \ + $(B)/renderer/jfdctflt.o \ + $(B)/renderer/jfdctfst.o \ + $(B)/renderer/jfdctint.o \ + $(B)/renderer/jidctflt.o \ + $(B)/renderer/jidctfst.o \ + $(B)/renderer/jidctint.o \ + $(B)/renderer/jmemmgr.o \ + $(B)/renderer/jmemnobs.o \ + $(B)/renderer/jquant1.o \ + $(B)/renderer/jquant2.o \ + $(B)/renderer/jutils.o endif ifeq ($(ARCH),i386) @@ -1656,22 +1693,40 @@ ifeq ($(USE_MUMBLE),1) endif Q3POBJ += \ - $(B)/client/sdl_glimp.o + $(B)/renderer/sdl_glimp.o Q3POBJ_SMP += \ - $(B)/clientsmp/sdl_glimp.o + $(B)/renderersmp/sdl_glimp.o -$(B)/ioquake3$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ) $(LIBSDLMAIN) +ifneq ($(USE_RENDERER_DLOPEN),0) +$(B)/ioquake3$(FULLBINEXT): $(Q3OBJ) $(LIBSDLMAIN) $(echo_cmd) "LD $@" $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) \ - -o $@ $(Q3OBJ) $(Q3POBJ) \ + -o $@ $(Q3OBJ) \ $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) -$(B)/ioquake3-smp$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN) +$(B)/renderer_opengl1_$(SHLIBNAME): $(Q3ROBJ) $(Q3POBJ) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3ROBJ) $(Q3POBJ) \ + $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) + +$(B)/renderer_opengl1_smp_$(SHLIBNAME): $(Q3ROBJ) $(Q3POBJ_SMP) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3ROBJ) $(Q3POBJ_SMP) \ + $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) +else +$(B)/ioquake3$(FULLBINEXT): $(Q3OBJ) $(Q3ROBJ) $(Q3POBJ) $(LIBSDLMAIN) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) \ + -o $@ $(Q3OBJ) $(Q3ROBJ) $(Q3POBJ) \ + $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) + +$(B)/ioquake3-smp$(FULLBINEXT): $(Q3OBJ) $(Q3ROBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN) $(echo_cmd) "LD $@" $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(THREAD_LDFLAGS) \ - -o $@ $(Q3OBJ) $(Q3POBJ_SMP) \ + -o $@ $(Q3OBJ) $(Q3ROBJ) $(Q3POBJ_SMP) \ $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) +endif ifneq ($(strip $(LIBSDLMAIN)),) ifneq ($(strip $(LIBSDLMAINSRC)),) @@ -2175,22 +2230,16 @@ $(B)/client/%.o: $(CMDIR)/%.c $(B)/client/%.o: $(BLIBDIR)/%.c $(DO_BOT_CC) -$(B)/client/%.o: $(JPDIR)/%.c - $(DO_CC) - $(B)/client/%.o: $(SPEEXDIR)/%.c $(DO_CC) $(B)/client/%.o: $(ZDIR)/%.c $(DO_CC) -$(B)/client/%.o: $(RDIR)/%.c - $(DO_CC) - $(B)/client/%.o: $(SDLDIR)/%.c $(DO_CC) -$(B)/clientsmp/%.o: $(SDLDIR)/%.c +$(B)/renderersmp/%.o: $(SDLDIR)/%.c $(DO_SMP_CC) $(B)/client/%.o: $(SYSDIR)/%.c @@ -2203,6 +2252,19 @@ $(B)/client/%.o: $(SYSDIR)/%.rc $(DO_WINDRES) +$(B)/renderer/%.o: $(CMDIR)/%.c + $(DO_REF_CC) + +$(B)/renderer/%.o: $(SDLDIR)/%.c + $(DO_REF_CC) + +$(B)/renderer/%.o: $(JPDIR)/%.c + $(DO_REF_CC) + +$(B)/renderer/%.o: $(RDIR)/%.c + $(DO_REF_CC) + + $(B)/ded/%.o: $(ASMDIR)/%.s $(DO_AS) @@ -2326,7 +2388,7 @@ $(B)/missionpack/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC) # MISC ############################################################################# -OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \ +OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3ROBJ) $(Q3DOBJ) \ $(MPGOBJ) $(Q3GOBJ) $(Q3CGOBJ) $(MPCGOBJ) $(Q3UIOBJ) $(MPUIOBJ) \ $(MPGVMOBJ) $(Q3GVMOBJ) $(Q3CGVMOBJ) $(MPCGVMOBJ) $(Q3UIVMOBJ) $(MPUIVMOBJ) TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ) @@ -2339,12 +2401,13 @@ copyfiles: release ifneq ($(BUILD_CLIENT),0) $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ioquake3$(FULLBINEXT) $(COPYBINDIR)/ioquake3$(FULLBINEXT) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl1_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl1_$(SHLIBNAME) endif # Don't copy the SMP until it's working together with SDL. -#ifneq ($(BUILD_CLIENT_SMP),0) -# $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ioquake3-smp$(FULLBINEXT) $(COPYBINDIR)/ioquake3-smp$(FULLBINEXT) -#endif +ifneq ($(BUILD_CLIENT_SMP),0) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl1_smp_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl1_smp_$(SHLIBNAME) +endif ifneq ($(BUILD_SERVER),0) @if [ -f $(BR)/ioq3ded$(FULLBINEXT) ]; then \ diff --git a/code/client/cl_cin.c b/code/client/cl_cin.c index 8f3a5cbf..b28b0e8a 100644 --- a/code/client/cl_cin.c +++ b/code/client/cl_cin.c @@ -52,8 +52,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 ); @@ -991,7 +989,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/code/client/cl_main.c b/code/client/cl_main.c index ac2239ed..765c106b 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -24,6 +24,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "client.h" #include +#include "../sys/sys_local.h" +#include "../sys/sys_loadlib.h" + #ifdef USE_MUMBLE #include "libmumblelink.h" #endif @@ -44,6 +47,8 @@ cvar_t *cl_voipShowMeter; cvar_t *cl_voip; #endif +cvar_t *cl_renderer; + cvar_t *cl_nodelta; cvar_t *cl_debugMove; @@ -116,6 +121,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]; @@ -136,7 +144,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); @@ -3163,9 +3170,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; @@ -3183,7 +3220,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; @@ -3193,7 +3233,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 @@ -3203,6 +3245,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 @@ -3555,7 +3608,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/code/client/cl_scrn.c b/code/client/cl_scrn.c index 11c7db8f..b1f60349 100644 --- a/code/client/cl_scrn.c +++ b/code/client/cl_scrn.c @@ -571,9 +571,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 { diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 411c1ffe..06dbb798 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3271,37 +3271,6 @@ void Com_Shutdown (void) { } -//------------------------------------------------------------------------ - - -/* -===================== -Q_acos - -the msvc acos doesn't always return a value between -PI and PI: - -int i; -i = 1065353246; -acos(*(float*) &i) == -1.#IND0 - - This should go in q_math but it is too late to add new traps - to game and ui -===================== -*/ -float Q_acos(float c) { - float angle; - - angle = acos(c); - - if (angle > M_PI) { - return (float)M_PI; - } - if (angle < -M_PI) { - return (float)M_PI; - } - return angle; -} - /* =========================================== command line completion diff --git a/code/qcommon/q_math.c b/code/qcommon/q_math.c index 979989ba..ce47317a 100644 --- a/code/qcommon/q_math.c +++ b/code/qcommon/q_math.c @@ -1011,3 +1011,32 @@ int Q_isnan( float x ) return (int)( (unsigned int)fi.ui >> 31 ); } +//------------------------------------------------------------------------ + +#ifndef Q3_VM +/* +===================== +Q_acos + +the msvc acos doesn't always return a value between -PI and PI: + +int i; +i = 1065353246; +acos(*(float*) &i) == -1.#IND0 + +===================== +*/ +float Q_acos(float c) { + float angle; + + angle = acos(c); + + if (angle > M_PI) { + return (float)M_PI; + } + if (angle < -M_PI) { + return (float)M_PI; + } + return angle; +} +#endif diff --git a/code/qcommon/q_platform.h b/code/qcommon/q_platform.h index d61ccc6b..c9965035 100644 --- a/code/qcommon/q_platform.h +++ b/code/qcommon/q_platform.h @@ -73,6 +73,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // for windows fastcall option #define QDECL +#define QCALL //================================================================= WIN64/32 === @@ -84,6 +85,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #undef QDECL #define QDECL __cdecl +#undef QCALL +#define QCALL __stdcall + #if defined( _MSC_VER ) #define OS_STRING "win_msvc64" #elif defined __MINGW64__ @@ -108,6 +112,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #undef QDECL #define QDECL __cdecl +#undef QCALL +#define QCALL __stdcall + #if defined( _MSC_VER ) #define OS_STRING "win_msvc" #elif defined __MINGW32__ @@ -129,6 +136,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #endif + //============================================================== MAC OS X === #if defined(MACOS_X) || defined(__APPLE_CC__) diff --git a/code/renderer/tr_image.c b/code/renderer/tr_image.c index 886228b9..f5112010 100644 --- a/code/renderer/tr_image.c +++ b/code/renderer/tr_image.c @@ -1434,7 +1434,7 @@ static char *CommaParse( char **data_p ) { if (len == MAX_TOKEN_CHARS) { -// Com_Printf ("Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS); +// ri.Printf (PRINT_DEVELOPER, "Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS); len = 0; } com_token[len] = 0; @@ -1463,12 +1463,12 @@ qhandle_t RE_RegisterSkin( const char *name ) { char surfName[MAX_QPATH]; if ( !name || !name[0] ) { - Com_Printf( "Empty name passed to RE_RegisterSkin\n" ); + ri.Printf( PRINT_DEVELOPER, "Empty name passed to RE_RegisterSkin\n" ); return 0; } if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Skin name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_DEVELOPER, "Skin name exceeds MAX_QPATH\n" ); return 0; } diff --git a/code/renderer/tr_image_png.c b/code/renderer/tr_image_png.c index 8b65f758..4dc9d9bb 100644 --- a/code/renderer/tr_image_png.c +++ b/code/renderer/tr_image_png.c @@ -2063,7 +2063,7 @@ void R_LoadPNG(const char *name, byte **pic, int *width, int *height) { CloseBufferedFile(ThePNG); - Com_Printf(S_COLOR_YELLOW "%s: invalid image size\n", name); + ri.Printf( PRINT_WARNING, "%s: invalid image size\n", name ); return; } diff --git a/code/renderer/tr_init.c b/code/renderer/tr_init.c index cd4760a1..e3880d9e 100644 --- a/code/renderer/tr_init.c +++ b/code/renderer/tr_init.c @@ -1009,7 +1009,7 @@ void R_Register( void ) r_ignorehwgamma = ri.Cvar_Get( "r_ignorehwgamma", "0", CVAR_ARCHIVE | CVAR_LATCH); r_mode = ri.Cvar_Get( "r_mode", "3", CVAR_ARCHIVE | CVAR_LATCH ); r_fullscreen = ri.Cvar_Get( "r_fullscreen", "1", CVAR_ARCHIVE ); - r_noborder = Cvar_Get("r_noborder", "0", CVAR_ARCHIVE); + r_noborder = ri.Cvar_Get("r_noborder", "0", CVAR_ARCHIVE); r_customwidth = ri.Cvar_Get( "r_customwidth", "1600", CVAR_ARCHIVE | CVAR_LATCH ); r_customheight = ri.Cvar_Get( "r_customheight", "1024", CVAR_ARCHIVE | CVAR_LATCH ); r_customPixelAspect = ri.Cvar_Get( "r_customPixelAspect", "1", CVAR_ARCHIVE | CVAR_LATCH ); @@ -1129,6 +1129,7 @@ void R_Register( void ) ri.Cmd_AddCommand( "screenshot", R_ScreenShot_f ); ri.Cmd_AddCommand( "screenshotJPEG", R_ScreenShotJPEG_f ); ri.Cmd_AddCommand( "gfxinfo", GfxInfo_f ); + ri.Cmd_AddCommand( "minimize", GLimp_Minimize ); } /* @@ -1154,7 +1155,7 @@ void R_Init( void ) { // Swap_Init(); if ( (intptr_t)tess.xyz & 15 ) { - Com_Printf( "WARNING: tess.xyz not 16 byte aligned\n" ); + ri.Printf( PRINT_WARNING, "tess.xyz not 16 byte aligned\n" ); } Com_Memset( tess.constantColor255, 255, sizeof( tess.constantColor255 ) ); @@ -1279,7 +1280,7 @@ Touch all images to make sure they are resident */ void RE_EndRegistration( void ) { R_SyncRenderThread(); - if (!Sys_LowPhysicalMemory()) { + if (!ri.Sys_LowPhysicalMemory()) { RB_ShowImages(); } } @@ -1291,7 +1292,12 @@ GetRefAPI @@@@@@@@@@@@@@@@@@@@@ */ +#ifdef USE_RENDERER_DLOPEN +Q_EXPORT refexport_t QDECL *GetRefAPI ( int apiVersion, refimport_t *rimp ) { +#else refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp ) { +#endif + static refexport_t re; ri = *rimp; diff --git a/code/renderer/tr_light.c b/code/renderer/tr_light.c index 977be8ed..89153854 100644 --- a/code/renderer/tr_light.c +++ b/code/renderer/tr_light.c @@ -359,9 +359,9 @@ void R_SetupEntityLighting( const trRefdef_t *refdef, trRefEntity_t *ent ) { } // save out the byte packet version - ((byte *)&ent->ambientLightInt)[0] = Q_ftol(ent->ambientLight[0]); - ((byte *)&ent->ambientLightInt)[1] = Q_ftol(ent->ambientLight[1]); - ((byte *)&ent->ambientLightInt)[2] = Q_ftol(ent->ambientLight[2]); + ((byte *)&ent->ambientLightInt)[0] = ri.ftol(ent->ambientLight[0]); + ((byte *)&ent->ambientLightInt)[1] = ri.ftol(ent->ambientLight[1]); + ((byte *)&ent->ambientLightInt)[2] = ri.ftol(ent->ambientLight[2]); ((byte *)&ent->ambientLightInt)[3] = 0xff; // transform the direction to local space diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 09ba8c40..3ecde445 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -1306,6 +1306,7 @@ void GLimp_FrontEndSleep( void ); void GLimp_WakeRenderer( void *data ); void GLimp_LogComment( char *comment ); +void GLimp_Minimize(void); // NOTE TTimo linux works with float gamma value, not the gamma table // the params won't be used, getting the r_gamma cvar directly diff --git a/code/renderer/tr_mesh.c b/code/renderer/tr_mesh.c index 8e866251..0883088f 100644 --- a/code/renderer/tr_mesh.c +++ b/code/renderer/tr_mesh.c @@ -218,7 +218,7 @@ int R_ComputeLOD( trRefEntity_t *ent ) { } flod *= tr.currentModel->numLods; - lod = Q_ftol(flod); + lod = ri.ftol(flod); if ( lod < 0 ) { diff --git a/code/renderer/tr_model.c b/code/renderer/tr_model.c index d1ddf9f3..51e0427f 100644 --- a/code/renderer/tr_model.c +++ b/code/renderer/tr_model.c @@ -278,7 +278,7 @@ qhandle_t RE_RegisterModel( const char *name ) { } if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Model name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Model name exceeds MAX_QPATH\n" ); return 0; } diff --git a/code/renderer/tr_public.h b/code/renderer/tr_public.h index 9b913375..adb6c0ed 100644 --- a/code/renderer/tr_public.h +++ b/code/renderer/tr_public.h @@ -131,8 +131,11 @@ typedef struct { cvar_t *(*Cvar_Get)( const char *name, const char *value, int flags ); void (*Cvar_Set)( const char *name, const char *value ); + void (*Cvar_SetValue) (const char *name, float value); void (*Cvar_CheckRange)( cvar_t *cv, float minVal, float maxVal, qboolean shouldBeIntegral ); + int (*Cvar_VariableIntegerValue) (const char *var_name); + void (*Cmd_AddCommand)( const char *name, void(*cmd)(void) ); void (*Cmd_RemoveCommand)( const char *name ); @@ -141,6 +144,8 @@ typedef struct { void (*Cmd_ExecuteText) (int exec_when, const char *text); + byte *(*CM_ClusterPVS)(int cluster); + // visualization for debugging collision detection void (*CM_DrawDebugSurface)( void (*drawPoly)(int color, int numPoints, float *points) ); @@ -160,12 +165,30 @@ typedef struct { e_status (*CIN_RunCinematic) (int handle); void (*CL_WriteAVIVideoFrame)( const byte *buffer, int size ); + + // input event handling + void (*IN_Init)( void ); + void (*IN_Shutdown)( void ); + void (*IN_Restart)( void ); + + // math + long (*ftol)(float f); + + // system stuff + void (*Sys_SetEnv)( const char *name, const char *value ); + void (*Sys_GLimpSafeInit)( void ); + void (*Sys_GLimpInit)( void ); + qboolean (*Sys_LowPhysicalMemory)( void ); } refimport_t; // this is the only function actually exported at the linker level // If the module can't init to a valid rendering state, NULL will be // returned. +#ifdef USE_RENDERER_DLOPEN +typedef refexport_t* (QDECL *GetRefAPI_t) (int apiVersion, refimport_t * rimp); +#else refexport_t*GetRefAPI( int apiVersion, refimport_t *rimp ); +#endif #endif // __TR_PUBLIC_H diff --git a/code/renderer/tr_scene.c b/code/renderer/tr_scene.c index 970ac338..34e4141d 100644 --- a/code/renderer/tr_scene.c +++ b/code/renderer/tr_scene.c @@ -215,7 +215,7 @@ void RE_AddRefEntityToScene( const refEntity_t *ent ) { static qboolean firstTime = qtrue; if (firstTime) { firstTime = qfalse; - Com_DPrintf(S_COLOR_YELLOW "WARNING: RE_AddRefEntityToScene passed a refEntity which has an origin with a NaN component\n"); + ri.Printf( PRINT_WARNING, "RE_AddRefEntityToScene passed a refEntity which has an origin with a NaN component\n"); } return; } diff --git a/code/renderer/tr_shade.c b/code/renderer/tr_shade.c index b89d6dce..04cef08b 100644 --- a/code/renderer/tr_shade.c +++ b/code/renderer/tr_shade.c @@ -233,7 +233,7 @@ static void R_BindAnimatedImage( textureBundle_t *bundle ) { // it is necessary to do this messy calc to make sure animations line up // exactly with waveforms of the same frequency - index = Q_ftol(tess.shaderTime * bundle->imageAnimationSpeed * FUNCTABLE_SIZE); + index = ri.ftol(tess.shaderTime * bundle->imageAnimationSpeed * FUNCTABLE_SIZE); index >>= FUNCTABLE_SIZE2; if ( index < 0 ) { @@ -689,9 +689,9 @@ static void ProjectDlightTexture_scalar( void ) { } } clipBits[i] = clip; - colors[0] = Q_ftol(floatColor[0] * modulate); - colors[1] = Q_ftol(floatColor[1] * modulate); - colors[2] = Q_ftol(floatColor[2] * modulate); + colors[0] = ri.ftol(floatColor[0] * modulate); + colors[1] = ri.ftol(floatColor[1] * modulate); + colors[2] = ri.ftol(floatColor[2] * modulate); colors[3] = 255; } diff --git a/code/renderer/tr_shade_calc.c b/code/renderer/tr_shade_calc.c index cde1751b..e8f43e4f 100644 --- a/code/renderer/tr_shade_calc.c +++ b/code/renderer/tr_shade_calc.c @@ -27,7 +27,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #endif -#define WAVEVALUE( table, base, amplitude, phase, freq ) ((base) + table[ Q_ftol( ( ( (phase) + tess.shaderTime * (freq) ) * FUNCTABLE_SIZE ) ) & FUNCTABLE_MASK ] * (amplitude)) +#define WAVEVALUE( table, base, amplitude, phase, freq ) ((base) + table[ ri.ftol( ( ( (phase) + tess.shaderTime * (freq) ) * FUNCTABLE_SIZE ) ) & FUNCTABLE_MASK ] * (amplitude)) static float *TableForFunc( genFunc_t func ) { @@ -699,7 +699,7 @@ void RB_CalcWaveColor( const waveForm_t *wf, unsigned char *dstColors ) glow = 1; } - v = Q_ftol(255 * glow); + v = ri.ftol(255 * glow); color[0] = color[1] = color[2] = v; color[3] = 255; v = *(int *)color; @@ -1180,19 +1180,19 @@ static void RB_CalcDiffuseColor_scalar( unsigned char *colors ) *(int *)&colors[i*4] = ambientLightInt; continue; } - j = Q_ftol(ambientLight[0] + incoming * directedLight[0]); + j = ri.ftol(ambientLight[0] + incoming * directedLight[0]); if ( j > 255 ) { j = 255; } colors[i*4+0] = j; - j = Q_ftol(ambientLight[1] + incoming * directedLight[1]); + j = ri.ftol(ambientLight[1] + incoming * directedLight[1]); if ( j > 255 ) { j = 255; } colors[i*4+1] = j; - j = Q_ftol(ambientLight[2] + incoming * directedLight[2]); + j = ri.ftol(ambientLight[2] + incoming * directedLight[2]); if ( j > 255 ) { j = 255; } diff --git a/code/renderer/tr_shader.c b/code/renderer/tr_shader.c index b6f1b68b..9bb64166 100644 --- a/code/renderer/tr_shader.c +++ b/code/renderer/tr_shader.c @@ -2701,7 +2701,7 @@ qhandle_t RE_RegisterShaderLightMap( const char *name, int lightmapIndex ) { shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } @@ -2735,7 +2735,7 @@ qhandle_t RE_RegisterShader( const char *name ) { shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } @@ -2765,7 +2765,7 @@ qhandle_t RE_RegisterShaderNoMip( const char *name ) { shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } diff --git a/code/renderer/tr_sky.c b/code/renderer/tr_sky.c index 5a5c699b..3e774a31 100644 --- a/code/renderer/tr_sky.c +++ b/code/renderer/tr_sky.c @@ -553,10 +553,10 @@ static void FillCloudBox( const shader_t *shader, int stage ) continue; } - sky_mins_subd[0] = Q_ftol(sky_mins[0][i] * HALF_SKY_SUBDIVISIONS); - sky_mins_subd[1] = Q_ftol(sky_mins[1][i] * HALF_SKY_SUBDIVISIONS); - sky_maxs_subd[0] = Q_ftol(sky_maxs[0][i] * HALF_SKY_SUBDIVISIONS); - sky_maxs_subd[1] = Q_ftol(sky_maxs[1][i] * HALF_SKY_SUBDIVISIONS); + sky_mins_subd[0] = ri.ftol(sky_mins[0][i] * HALF_SKY_SUBDIVISIONS); + sky_mins_subd[1] = ri.ftol(sky_mins[1][i] * HALF_SKY_SUBDIVISIONS); + sky_maxs_subd[0] = ri.ftol(sky_maxs[0][i] * HALF_SKY_SUBDIVISIONS); + sky_maxs_subd[1] = ri.ftol(sky_maxs[1][i] * HALF_SKY_SUBDIVISIONS); if ( sky_mins_subd[0] < -HALF_SKY_SUBDIVISIONS ) sky_mins_subd[0] = -HALF_SKY_SUBDIVISIONS; diff --git a/code/renderer/tr_world.c b/code/renderer/tr_world.c index 3fea94b0..9818883c 100644 --- a/code/renderer/tr_world.c +++ b/code/renderer/tr_world.c @@ -547,7 +547,7 @@ qboolean R_inPVS( const vec3_t p1, const vec3_t p2 ) { byte *vis; leaf = R_PointInLeaf( p1 ); - vis = CM_ClusterPVS( leaf->cluster ); + vis = ri.CM_ClusterPVS( leaf->cluster ); // why not R_ClusterPVS ?? leaf = R_PointInLeaf( p2 ); if ( !(vis[leaf->cluster>>3] & (1<<(leaf->cluster&7))) ) { diff --git a/code/sdl/sdl_gamma.c b/code/sdl/sdl_gamma.c index 71a42c84..906d0f4e 100644 --- a/code/sdl/sdl_gamma.c +++ b/code/sdl/sdl_gamma.c @@ -60,7 +60,7 @@ void GLimp_SetGamma( unsigned char red[256], unsigned char green[256], unsigned GetVersionEx( &vinfo ); if( vinfo.dwMajorVersion >= 5 && vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT ) { - Com_DPrintf( "performing gamma clamp.\n" ); + ri.Printf( PRINT_DEVELOPER, "performing gamma clamp.\n" ); for( j = 0 ; j < 3 ; j++ ) { for( i = 0 ; i < 128 ; i++ ) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 36962496..cbdbcefa 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -90,7 +90,7 @@ GLimp_Shutdown */ void GLimp_Shutdown( void ) { - IN_Shutdown(); + ri.IN_Shutdown(); SDL_QuitSubSystem( SDL_INIT_VIDEO ); screen = NULL; @@ -464,10 +464,10 @@ static qboolean GLimp_StartDriverAndSetMode(int mode, qboolean fullscreen, qbool SDL_VideoDriverName( driverName, sizeof( driverName ) - 1 ); ri.Printf( PRINT_ALL, "SDL using driver \"%s\"\n", driverName ); - Cvar_Set( "r_sdlDriver", driverName ); + ri.Cvar_Set( "r_sdlDriver", driverName ); } - if (fullscreen && Cvar_VariableIntegerValue( "in_nograb" ) ) + if (fullscreen && ri.Cvar_VariableIntegerValue( "in_nograb" ) ) { ri.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n"); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -686,7 +686,7 @@ void GLimp_Init( void ) r_allowResize = ri.Cvar_Get( "r_allowResize", "0", CVAR_ARCHIVE ); r_centerWindow = ri.Cvar_Get( "r_centerWindow", "0", CVAR_ARCHIVE ); - if( Cvar_VariableIntegerValue( "com_abnormalExit" ) ) + if( ri.Cvar_VariableIntegerValue( "com_abnormalExit" ) ) { ri.Cvar_Set( "r_mode", va( "%d", R_MODE_FALLBACK ) ); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -694,16 +694,16 @@ void GLimp_Init( void ) ri.Cvar_Set( "com_abnormalExit", "0" ); } - Sys_SetEnv( "SDL_VIDEO_CENTERED", r_centerWindow->integer ? "1" : "" ); + ri.Sys_SetEnv( "SDL_VIDEO_CENTERED", r_centerWindow->integer ? "1" : "" ); - Sys_GLimpInit( ); + ri.Sys_GLimpInit( ); // Create the window and set up the context if(GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, r_noborder->integer)) goto success; // Try again, this time in a platform specific "safe mode" - Sys_GLimpSafeInit( ); + ri.Sys_GLimpSafeInit( ); if(GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, qfalse)) goto success; @@ -747,7 +747,7 @@ success: ri.Cvar_Get( "r_availableModes", "", CVAR_ROM ); // This depends on SDL_INIT_VIDEO, hence having it here - IN_Init( ); + ri.IN_Init( ); } @@ -778,7 +778,7 @@ void GLimp_EndFrame( void ) // Find out the current state fullscreen = !!( s->flags & SDL_FULLSCREEN ); - if( r_fullscreen->integer && Cvar_VariableIntegerValue( "in_nograb" ) ) + if( r_fullscreen->integer && ri.Cvar_VariableIntegerValue( "in_nograb" ) ) { ri.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n"); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -796,9 +796,9 @@ void GLimp_EndFrame( void ) { // SDL_WM_ToggleFullScreen didn't work, so do it the slow way if( !sdlToggled ) - Cbuf_AddText( "vid_restart" ); + ri.Cmd_ExecuteText(EXEC_APPEND, "vid_restart"); - IN_Restart( ); + ri.IN_Restart( ); } r_fullscreen->modified = qfalse; diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index e89a9b31..6d85945a 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -464,7 +464,7 @@ static void IN_ActivateMouse( void ) } // in_nograb makes no sense in fullscreen mode - if( !r_fullscreen->integer ) + if( !Cvar_VariableIntegerValue("r_fullscreen") ) { if( in_nograb->modified || !mouseActive ) { @@ -492,7 +492,7 @@ static void IN_DeactivateMouse( void ) // Always show the cursor when the mouse is disabled, // but not when fullscreen - if( !r_fullscreen->integer ) + if( !Cvar_VariableIntegerValue("r_fullscreen") ) SDL_ShowCursor( 1 ); if( !mouseAvailable ) @@ -525,7 +525,7 @@ static void IN_DeactivateMouse( void ) // Don't warp the mouse unless the cursor is within the window if( SDL_GetAppState( ) & SDL_APPMOUSEFOCUS ) - SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 ); + SDL_WarpMouse( cls.glconfig.vidWidth / 2, cls.glconfig.vidHeight / 2 ); mouseActive = qfalse; } @@ -936,9 +936,9 @@ static void IN_ProcessEvents( void ) char width[32], height[32]; Com_sprintf( width, sizeof(width), "%d", e.resize.w ); Com_sprintf( height, sizeof(height), "%d", e.resize.h ); - ri.Cvar_Set( "r_customwidth", width ); - ri.Cvar_Set( "r_customheight", height ); - ri.Cvar_Set( "r_mode", "-1" ); + Cvar_Set( "r_customwidth", width ); + Cvar_Set( "r_customheight", height ); + Cvar_Set( "r_mode", "-1" ); /* wait until user stops dragging for 1 second, so we aren't constantly recreating the GL context while he tries to drag...*/ @@ -975,12 +975,12 @@ void IN_Frame( void ) // If not DISCONNECTED (main menu) or ACTIVE (in game), we're loading loading = !!( clc.state != CA_DISCONNECTED && clc.state != CA_ACTIVE ); - if( !r_fullscreen->integer && ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) + if( !Cvar_VariableIntegerValue("r_fullscreen") && ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) { // Console is down in windowed mode IN_DeactivateMouse( ); } - else if( !r_fullscreen->integer && loading ) + else if( !Cvar_VariableIntegerValue("r_fullscreen") && loading ) { // Loading in windowed mode IN_DeactivateMouse( );