]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - host.c
implemented framerate-dependent particle quality reduction to try to
[xonotic/darkplaces.git] / host.c
diff --git a/host.c b/host.c
index 060bbea771352ffa12236382c08349955f30b4cb..fac4fa4630a498d2e3ebf98149836c314d5efd08 100644 (file)
--- a/host.c
+++ b/host.c
@@ -59,7 +59,10 @@ jmp_buf host_abortframe;
 cvar_t host_framerate = {0, "host_framerate","0", "locks frame timing to this value in seconds, 0.05 is 20fps for example, note that this can easily run too fast, use cl_maxfps if you want to limit your framerate instead, or sys_ticrate to limit server speed"};
 // shows time used by certain subsystems
 cvar_t host_speeds = {0, "host_speeds","0", "reports how much time is used in server/graphics/sound"};
-// LordHavoc: framerate upper cap
+cvar_t cl_minfps = {CVAR_SAVE, "cl_minfps", "40", "minimum fps target - while the rendering performance is below this, it will drift toward lower quality"};
+cvar_t cl_minfps_expbase = {CVAR_SAVE, "cl_minfps_expbase", "1.2", "base for log() function in calculating quality reduction, should be in the range 1.1 to 2.0"};
+cvar_t cl_minfps_fade = {CVAR_SAVE, "cl_minfps_fade", "0.2", "how fast the quality reduction adapts to varying framerate"};
+cvar_t cl_minfps_maxqualityreduction = {CVAR_SAVE, "cl_minfps_maxqualityreduction", "3", "how much particle quality can be reduced (as a power of 2) when framerate is staying below cl_minfps, 0 = no reduction, 1 = 50% quality, 2 = 25% quality, 3 = 12.5% quality, ..."};
 cvar_t cl_maxfps = {CVAR_SAVE, "cl_maxfps", "1000000", "maximum fps cap, if game is running faster than this it will wait before running another frame (useful to make cpu time available to other programs)"};
 cvar_t cl_maxidlefps = {CVAR_SAVE, "cl_maxidlefps", "20", "maximum fps cap when the game is not the active window (makes cpu time available to other programs"};
 
@@ -202,6 +205,10 @@ static void Host_InitLocal (void)
 
        Cvar_RegisterVariable (&host_framerate);
        Cvar_RegisterVariable (&host_speeds);
+       Cvar_RegisterVariable (&cl_minfps);
+       Cvar_RegisterVariable (&cl_minfps_expbase);
+       Cvar_RegisterVariable (&cl_minfps_fade);
+       Cvar_RegisterVariable (&cl_minfps_maxqualityreduction);
        Cvar_RegisterVariable (&cl_maxfps);
        Cvar_RegisterVariable (&cl_maxidlefps);
 
@@ -516,6 +523,13 @@ void Host_ShutdownServer(void)
        for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++)
                if (host_client->active)
                        SV_DropClient(false); // server shutdown
+       if(prog->loaded)
+               if(prog->funcoffsets.SV_Shutdown)
+               {
+                       func_t s = prog->funcoffsets.SV_Shutdown;
+                       prog->funcoffsets.SV_Shutdown = 0; // prevent it from getting called again
+                       PRVM_ExecuteProgram(s,"SV_Shutdown() required");
+               }
        SV_VM_End();
 
        NetConn_CloseServerPorts();
@@ -857,9 +871,7 @@ void Host_Main(void)
                        //ui_update();
 
                        CL_Video_Frame();
-#ifdef SUPPORT_GECKO
                        CL_Gecko_Frame();
-#endif
 
                        CL_UpdateScreen();
 
@@ -994,23 +1006,7 @@ static void Host_Init (void)
        COM_InitGameType();
 
        // construct a version string for the corner of the console
-#if defined(__linux__)
-       os = "Linux";
-#elif defined(WIN32)
-       os = "Windows";
-#elif defined(__FreeBSD__)
-       os = "FreeBSD";
-#elif defined(__NetBSD__)
-       os = "NetBSD";
-#elif defined(__OpenBSD__)
-       os = "OpenBSD";
-#elif defined(MACOSX)
-       os = "Mac OS X";
-#elif defined(__MORPHOS__)
-       os = "MorphOS";
-#else
-       os = "Unknown";
-#endif
+       os = DP_OS_NAME;
        dpsnprintf (engineversion, sizeof (engineversion), "%s %s %s", gamename, os, buildstring);
        Con_Printf("%s\n", engineversion);
 
@@ -1172,9 +1168,7 @@ void Host_Shutdown(void)
        // AK shutdown PRVM
        // AK hmm, no PRVM_Shutdown(); yet
 
-#ifdef SUPPORT_GECKO
        CL_Gecko_Shutdown();
-#endif
        CL_Video_Shutdown();
 
        Host_SaveConfig();