[quake3-commits] r2112 - in trunk: . code/client code/qcommon code/renderer code/sdl

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Jul 31 21:19:55 EDT 2011


Author: thilo
Date: 2011-07-31 21:19:55 -0400 (Sun, 31 Jul 2011)
New Revision: 2112

Modified:
   trunk/Makefile
   trunk/code/client/cl_cin.c
   trunk/code/client/cl_main.c
   trunk/code/client/cl_scrn.c
   trunk/code/qcommon/common.c
   trunk/code/qcommon/q_math.c
   trunk/code/qcommon/q_platform.h
   trunk/code/renderer/tr_image.c
   trunk/code/renderer/tr_image_png.c
   trunk/code/renderer/tr_init.c
   trunk/code/renderer/tr_light.c
   trunk/code/renderer/tr_local.h
   trunk/code/renderer/tr_mesh.c
   trunk/code/renderer/tr_model.c
   trunk/code/renderer/tr_public.h
   trunk/code/renderer/tr_scene.c
   trunk/code/renderer/tr_shade.c
   trunk/code/renderer/tr_shade_calc.c
   trunk/code/renderer/tr_shader.c
   trunk/code/renderer/tr_sky.c
   trunk/code/renderer/tr_world.c
   trunk/code/sdl/sdl_gamma.c
   trunk/code/sdl/sdl_glimp.c
   trunk/code/sdl/sdl_input.c
Log:
Modular rendering system. Patch by use.less01
This might break MSVC builds. I'll take care of it later


Modified: trunk/Makefile
===================================================================
--- trunk/Makefile	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/Makefile	2011-08-01 01:19:55 UTC (rev 2112)
@@ -159,6 +159,10 @@
 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 @@
   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 ($(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 @@
 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 @@
 $(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 @@
 	@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 @@
   $(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 @@
   $(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 @@
 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: $(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 @@
 	$(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 @@
 # 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 @@
 
 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 \

Modified: trunk/code/client/cl_cin.c
===================================================================
--- trunk/code/client/cl_cin.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/client/cl_cin.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -52,9 +52,7 @@
 
 #define MAX_VIDEO_HANDLES	16
 
-extern glconfig_t glConfig;
 
-
 static void RoQ_init( void );
 
 /******************************************************************************
@@ -991,7 +989,7 @@
         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;
                 }

Modified: trunk/code/client/cl_main.c
===================================================================
--- trunk/code/client/cl_main.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/client/cl_main.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -24,6 +24,9 @@
 #include "client.h"
 #include <limits.h>
 
+#include "../sys/sys_local.h"
+#include "../sys/sys_loadlib.h"
+
 #ifdef USE_MUMBLE
 #include "libmumblelink.h"
 #endif
@@ -44,6 +47,8 @@
 cvar_t	*cl_voip;
 #endif
 
+cvar_t	*cl_renderer;
+
 cvar_t	*cl_nodelta;
 cvar_t	*cl_debugMove;
 
@@ -116,6 +121,9 @@
 
 // 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 @@
 	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 @@
 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 @@
 #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 @@
 	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 @@
   
 	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 @@
 	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 ();

Modified: trunk/code/client/cl_scrn.c
===================================================================
--- trunk/code/client/cl_scrn.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/client/cl_scrn.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -571,9 +571,9 @@
 	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 {

Modified: trunk/code/qcommon/common.c
===================================================================
--- trunk/code/qcommon/common.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/qcommon/common.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -3271,38 +3271,7 @@
 
 }
 
-//------------------------------------------------------------------------
-
-
 /*
-=====================
-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
 ===========================================

Modified: trunk/code/qcommon/q_math.c
===================================================================
--- trunk/code/qcommon/q_math.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/qcommon/q_math.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -1011,3 +1011,32 @@
 
 	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

Modified: trunk/code/qcommon/q_platform.h
===================================================================
--- trunk/code/qcommon/q_platform.h	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/qcommon/q_platform.h	2011-08-01 01:19:55 UTC (rev 2112)
@@ -73,6 +73,7 @@
 
 // for windows fastcall option
 #define QDECL
+#define QCALL
 
 //================================================================= WIN64/32 ===
 
@@ -84,6 +85,9 @@
 #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 @@
 #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 @@
 
 #endif
 
+
 //============================================================== MAC OS X ===
 
 #if defined(MACOS_X) || defined(__APPLE_CC__)

Modified: trunk/code/renderer/tr_image.c
===================================================================
--- trunk/code/renderer/tr_image.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_image.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -1434,7 +1434,7 @@
 
 	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 @@
 	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;
 	}
 

Modified: trunk/code/renderer/tr_image_png.c
===================================================================
--- trunk/code/renderer/tr_image_png.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_image_png.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -2063,7 +2063,7 @@
 	{
 		CloseBufferedFile(ThePNG);
 
-		Com_Printf(S_COLOR_YELLOW "%s: invalid image size\n", name);
+		ri.Printf( PRINT_WARNING, "%s: invalid image size\n", name );
 
 		return; 
 	}

Modified: trunk/code/renderer/tr_init.c
===================================================================
--- trunk/code/renderer/tr_init.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_init.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -1009,7 +1009,7 @@
 	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 @@
 	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 @@
 //	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 @@
 */
 void RE_EndRegistration( void ) {
 	R_SyncRenderThread();
-	if (!Sys_LowPhysicalMemory()) {
+	if (!ri.Sys_LowPhysicalMemory()) {
 		RB_ShowImages();
 	}
 }
@@ -1291,7 +1292,12 @@
 
 @@@@@@@@@@@@@@@@@@@@@
 */
+#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;

Modified: trunk/code/renderer/tr_light.c
===================================================================
--- trunk/code/renderer/tr_light.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_light.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -359,9 +359,9 @@
 	}
 
 	// 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

Modified: trunk/code/renderer/tr_local.h
===================================================================
--- trunk/code/renderer/tr_local.h	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_local.h	2011-08-01 01:19:55 UTC (rev 2112)
@@ -1306,6 +1306,7 @@
 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

Modified: trunk/code/renderer/tr_mesh.c
===================================================================
--- trunk/code/renderer/tr_mesh.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_mesh.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -218,7 +218,7 @@
 		}
 
 		flod *= tr.currentModel->numLods;
-		lod = Q_ftol(flod);
+		lod = ri.ftol(flod);
 
 		if ( lod < 0 )
 		{

Modified: trunk/code/renderer/tr_model.c
===================================================================
--- trunk/code/renderer/tr_model.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_model.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -278,7 +278,7 @@
 	}
 
 	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;
 	}
 

Modified: trunk/code/renderer/tr_public.h
===================================================================
--- trunk/code/renderer/tr_public.h	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_public.h	2011-08-01 01:19:55 UTC (rev 2112)
@@ -131,8 +131,11 @@
 
 	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 @@
 
 	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 @@
 	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

Modified: trunk/code/renderer/tr_scene.c
===================================================================
--- trunk/code/renderer/tr_scene.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_scene.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -215,7 +215,7 @@
 		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;
 	}

Modified: trunk/code/renderer/tr_shade.c
===================================================================
--- trunk/code/renderer/tr_shade.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_shade.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -233,7 +233,7 @@
 
 	// 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 @@
 				}
 			}
 			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;
 		}
 

Modified: trunk/code/renderer/tr_shade_calc.c
===================================================================
--- trunk/code/renderer/tr_shade_calc.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_shade_calc.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -27,7 +27,7 @@
 #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 @@
 		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 @@
 			*(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;
 		}

Modified: trunk/code/renderer/tr_shader.c
===================================================================
--- trunk/code/renderer/tr_shader.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_shader.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -2701,7 +2701,7 @@
 	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 @@
 	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 @@
 	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;
 	}
 

Modified: trunk/code/renderer/tr_sky.c
===================================================================
--- trunk/code/renderer/tr_sky.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_sky.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -553,10 +553,10 @@
 			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;

Modified: trunk/code/renderer/tr_world.c
===================================================================
--- trunk/code/renderer/tr_world.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/renderer/tr_world.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -547,7 +547,7 @@
 	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))) ) {

Modified: trunk/code/sdl/sdl_gamma.c
===================================================================
--- trunk/code/sdl/sdl_gamma.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/sdl/sdl_gamma.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -60,7 +60,7 @@
 		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++ )

Modified: trunk/code/sdl/sdl_glimp.c
===================================================================
--- trunk/code/sdl/sdl_glimp.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/sdl/sdl_glimp.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -90,7 +90,7 @@
 */
 void GLimp_Shutdown( void )
 {
-	IN_Shutdown();
+	ri.IN_Shutdown();
 
 	SDL_QuitSubSystem( SDL_INIT_VIDEO );
 	screen = NULL;
@@ -464,10 +464,10 @@
 
 		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 @@
 	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 @@
 		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 @@
 	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 @@
 			// 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 @@
 		{
 			// 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;

Modified: trunk/code/sdl/sdl_input.c
===================================================================
--- trunk/code/sdl/sdl_input.c	2011-08-01 01:14:26 UTC (rev 2111)
+++ trunk/code/sdl/sdl_input.c	2011-08-01 01:19:55 UTC (rev 2112)
@@ -464,7 +464,7 @@
 	}
 
 	// 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 @@
 
 	// 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 @@
 
 		// 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 @@
 				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 @@
 	// 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( );



More information about the quake3-commits mailing list