X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=cl_screen.c;h=f1ae56690bc8dac6392aac19e08c7f93dfa67e9e;hb=c078746041540be0308cbef49e2e083fb8cda687;hp=bf3749ae2494c1c05d6abec7d2df709e98dfa521;hpb=b3aa28fd7f2e07369fa604f33f6fc8ecba78989e;p=xonotic%2Fdarkplaces.git diff --git a/cl_screen.c b/cl_screen.c index bf3749ae..f1ae5669 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -39,6 +39,7 @@ cvar_t scr_loadingscreen_scale = {0, "scr_loadingscreen_scale","1", "scale facto cvar_t scr_loadingscreen_scale_base = {0, "scr_loadingscreen_scale_base","0", "0 = console pixels, 1 = video pixels"}; cvar_t scr_loadingscreen_scale_limit = {0, "scr_loadingscreen_scale_limit","0", "0 = no limit, 1 = until first edge hits screen edge, 2 = until last edge hits screen edge, 3 = until width hits screen width, 4 = until height hits screen height"}; cvar_t scr_loadingscreen_count = {0, "scr_loadingscreen_count","1", "number of loading screen files to use randomly (named loading.tga, loading2.tga, loading3.tga, ...)"}; +cvar_t scr_loadingscreen_firstforstartup = {0, "scr_loadingscreen_firstforstartup","0", "remove loading.tga from random scr_loadingscreen_count selection and only display it on client startup, 0 = normal, 1 = firstforstartup"}; cvar_t scr_loadingscreen_barcolor = {0, "scr_loadingscreen_barcolor", "0 0 1", "rgb color of loadingscreen progress bar"}; cvar_t scr_loadingscreen_barheight = {0, "scr_loadingscreen_barheight", "8", "the height of the loadingscreen progress bar"}; cvar_t scr_infobar_height = {0, "scr_infobar_height", "8", "the height of the infobar items"}; @@ -143,7 +144,7 @@ void SCR_CenterPrint(const char *str) } -void SCR_DrawCenterString (void) +static void SCR_DrawCenterString (void) { char *start; int x, y; @@ -200,7 +201,7 @@ void SCR_DrawCenterString (void) } while (1); } -void SCR_CheckDrawCenterString (void) +static void SCR_CheckDrawCenterString (void) { if (scr_center_lines > scr_erase_lines) scr_erase_lines = scr_center_lines; @@ -220,7 +221,7 @@ void SCR_CheckDrawCenterString (void) SCR_DrawCenterString (); } -void SCR_DrawNetGraph_DrawGraph (int graphx, int graphy, int graphwidth, int graphheight, float graphscale, const char *label, float textsize, int packetcounter, netgraphitem_t *netgraph) +static void SCR_DrawNetGraph_DrawGraph (int graphx, int graphy, int graphwidth, int graphheight, float graphscale, const char *label, float textsize, int packetcounter, netgraphitem_t *netgraph) { netgraphitem_t *graph; int j, x, y, numlines; @@ -308,11 +309,12 @@ void SCR_DrawNetGraph_DrawGraph (int graphx, int graphy, int graphwidth, int gra SCR_DrawNetGraph ============== */ -void SCR_DrawNetGraph (void) +static void SCR_DrawNetGraph (void) { int i, separator1, separator2, graphwidth, graphheight, netgraph_x, netgraph_y, textsize, index, netgraphsperrow; float graphscale; netconn_t *c; + char vabuf[1024]; if (cls.state != ca_connected) return; @@ -348,7 +350,7 @@ void SCR_DrawNetGraph (void) continue; netgraph_x = (vid_conwidth.integer + separator2) - (1 + (index % netgraphsperrow)) * (graphwidth * 2 + separator1 + separator2); netgraph_y = (vid_conheight.integer - 48 + separator2) - (1 + (index / netgraphsperrow)) * (graphheight + textsize + separator2); - SCR_DrawNetGraph_DrawGraph(netgraph_x , netgraph_y, graphwidth, graphheight, graphscale, va("%s", svs.clients[i].name), textsize, c->outgoing_packetcounter, c->outgoing_netgraph); + SCR_DrawNetGraph_DrawGraph(netgraph_x , netgraph_y, graphwidth, graphheight, graphscale, va(vabuf, sizeof(vabuf), "%s", svs.clients[i].name), textsize, c->outgoing_packetcounter, c->outgoing_netgraph); SCR_DrawNetGraph_DrawGraph(netgraph_x + graphwidth + separator1, netgraph_y, graphwidth, graphheight, graphscale, "" , textsize, c->incoming_packetcounter, c->incoming_netgraph); index++; } @@ -360,7 +362,7 @@ void SCR_DrawNetGraph (void) SCR_DrawTurtle ============== */ -void SCR_DrawTurtle (void) +static void SCR_DrawTurtle (void) { static int count; @@ -388,7 +390,7 @@ void SCR_DrawTurtle (void) SCR_DrawNet ============== */ -void SCR_DrawNet (void) +static void SCR_DrawNet (void) { if (cls.state != ca_connected) return; @@ -405,7 +407,7 @@ void SCR_DrawNet (void) DrawPause ============== */ -void SCR_DrawPause (void) +static void SCR_DrawPause (void) { cachepic_t *pic; @@ -427,7 +429,7 @@ void SCR_DrawPause (void) SCR_DrawBrand ============== */ -void SCR_DrawBrand (void) +static void SCR_DrawBrand (void) { cachepic_t *pic; float x, y; @@ -549,9 +551,10 @@ static int SCR_DrawCurlDownload(int offset) float size = scr_infobar_height.value; Curl_downloadinfo_t *downinfo; char temp[256]; + char addinfobuf[128]; const char *addinfo; - downinfo = Curl_GetDownloadInfo(&nDownloads, &addinfo); + downinfo = Curl_GetDownloadInfo(&nDownloads, &addinfo, addinfobuf, sizeof(addinfobuf)); if(!downinfo) return 0; @@ -606,6 +609,7 @@ static int SCR_InfobarHeight(void) Curl_downloadinfo_t *downinfo; const char *addinfo; int nDownloads; + char addinfobuf[128]; if (cl.time > cl.oldtime) scr_infobartime_off -= cl.time - cl.oldtime; @@ -614,7 +618,7 @@ static int SCR_InfobarHeight(void) if(cls.qw_downloadname[0]) offset += 1; - downinfo = Curl_GetDownloadInfo(&nDownloads, &addinfo); + downinfo = Curl_GetDownloadInfo(&nDownloads, &addinfo, addinfobuf, sizeof(addinfobuf)); if(downinfo) { offset += (nDownloads + (addinfo ? 1 : 0)); @@ -630,7 +634,7 @@ static int SCR_InfobarHeight(void) SCR_InfoBar_f ============== */ -void SCR_InfoBar_f(void) +static void SCR_InfoBar_f(void) { if(Cmd_Argc() == 3) { @@ -649,7 +653,7 @@ void SCR_InfoBar_f(void) SCR_SetUpToDrawConsole ================== */ -void SCR_SetUpToDrawConsole (void) +static void SCR_SetUpToDrawConsole (void) { // lines of console to display float conlines; @@ -706,13 +710,13 @@ SCR_BeginLoadingPlaque ================ */ -void SCR_BeginLoadingPlaque (void) +void SCR_BeginLoadingPlaque (qboolean startup) { // save console log up to this point to log_file if it was set by configs Log_Start(); Host_StartVideo(); - SCR_UpdateLoadingScreen(false); + SCR_UpdateLoadingScreen(false, startup); } //============================================================================= @@ -736,7 +740,7 @@ void R_TimeReport(const char *desc) GL_Finish(); CHECKGLERROR r_timereport_temp = r_timereport_current; - r_timereport_current = Sys_DoubleTime(); + r_timereport_current = Sys_DirtyTime(); t = (int) ((r_timereport_current - r_timereport_temp) * 1000000.0 + 0.5); length = dpsnprintf(tempbuf, sizeof(tempbuf), "%8i %s", t, desc); @@ -756,7 +760,7 @@ void R_TimeReport(const char *desc) speedstringcount += length; } -void R_TimeReport_BeginFrame(void) +static void R_TimeReport_BeginFrame(void) { speedstringcount = 0; r_speeds_timestring[0] = 0; @@ -766,7 +770,7 @@ void R_TimeReport_BeginFrame(void) if (r_speeds.integer >= 2) { r_timereport_active = true; - r_timereport_start = r_timereport_current = Sys_DoubleTime(); + r_timereport_start = r_timereport_current = Sys_DirtyTime(); } } @@ -780,7 +784,7 @@ static int R_CountLeafTriangles(const dp_model_t *model, const mleaf_t *leaf) extern cvar_t r_viewscale; extern float viewscalefpsadjusted; -void R_TimeReport_EndFrame(void) +static void R_TimeReport_EndFrame(void) { int i, j, lines, y; cl_locnode_t *loc; @@ -829,7 +833,7 @@ void R_TimeReport_EndFrame(void) if (r_speeds.integer >= 2) { r_timereport_active = true; - r_timereport_start = r_timereport_current = Sys_DoubleTime(); + r_timereport_start = r_timereport_current = Sys_DirtyTime(); } } @@ -867,7 +871,7 @@ SCR_SizeUp_f Keybinding command ================= */ -void SCR_SizeUp_f (void) +static void SCR_SizeUp_f (void) { Cvar_SetValue ("viewsize",scr_viewsize.value+10); } @@ -880,7 +884,7 @@ SCR_SizeDown_f Keybinding command ================= */ -void SCR_SizeDown_f (void) +static void SCR_SizeDown_f (void) { Cvar_SetValue ("viewsize",scr_viewsize.value-10); } @@ -913,6 +917,7 @@ void CL_Screen_Init(void) Cvar_RegisterVariable (&scr_loadingscreen_scale_base); Cvar_RegisterVariable (&scr_loadingscreen_scale_limit); Cvar_RegisterVariable (&scr_loadingscreen_count); + Cvar_RegisterVariable (&scr_loadingscreen_firstforstartup); Cvar_RegisterVariable (&scr_loadingscreen_barcolor); Cvar_RegisterVariable (&scr_loadingscreen_barheight); Cvar_RegisterVariable (&scr_infobar_height); @@ -990,6 +995,7 @@ void SCR_ScreenShot_f (void) unsigned char *buffer2; qboolean jpeg = (scr_screenshot_jpeg.integer != 0); qboolean png = (scr_screenshot_png.integer != 0) && !jpeg; + char vabuf[1024]; if (Cmd_Argc() == 2) { @@ -1029,9 +1035,9 @@ void SCR_ScreenShot_f (void) // find a file name to save it to for (shotnumber100 = 0;shotnumber100 < 100;shotnumber100++) - if (!FS_SysFileExists(va("%s/screenshots/%s-%02d.tga", fs_gamedir, prefix_name, shotnumber100)) - && !FS_SysFileExists(va("%s/screenshots/%s-%02d.jpg", fs_gamedir, prefix_name, shotnumber100)) - && !FS_SysFileExists(va("%s/screenshots/%s-%02d.png", fs_gamedir, prefix_name, shotnumber100))) + if (!FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s-%02d.tga", fs_gamedir, prefix_name, shotnumber100)) + && !FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s-%02d.jpg", fs_gamedir, prefix_name, shotnumber100)) + && !FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s-%02d.png", fs_gamedir, prefix_name, shotnumber100))) break; if (shotnumber100 >= 100) { @@ -1060,9 +1066,9 @@ void SCR_ScreenShot_f (void) // find a file name to save it to for (;shotnumber < 1000000;shotnumber++) - if (!FS_SysFileExists(va("%s/screenshots/%s%06d.tga", fs_gamedir, prefix_name, shotnumber)) - && !FS_SysFileExists(va("%s/screenshots/%s%06d.jpg", fs_gamedir, prefix_name, shotnumber)) - && !FS_SysFileExists(va("%s/screenshots/%s%06d.png", fs_gamedir, prefix_name, shotnumber))) + if (!FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s%06d.tga", fs_gamedir, prefix_name, shotnumber)) + && !FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s%06d.jpg", fs_gamedir, prefix_name, shotnumber)) + && !FS_SysFileExists(va(vabuf, sizeof(vabuf), "%s/screenshots/%s%06d.png", fs_gamedir, prefix_name, shotnumber))) break; if (shotnumber >= 1000000) { @@ -1097,7 +1103,7 @@ void SCR_ScreenShot_f (void) Mem_Free (buffer2); } -void SCR_CaptureVideo_BeginVideo(void) +static void SCR_CaptureVideo_BeginVideo(void) { double r, g, b; unsigned int i; @@ -1132,7 +1138,7 @@ void SCR_CaptureVideo_BeginVideo(void) cls.capturevideo.soundchannels = S_GetSoundChannels(); cls.capturevideo.startrealtime = realtime; cls.capturevideo.frame = cls.capturevideo.lastfpsframe = 0; - cls.capturevideo.starttime = cls.capturevideo.lastfpstime = Sys_DoubleTime(); + cls.capturevideo.starttime = cls.capturevideo.lastfpstime = realtime; cls.capturevideo.soundsampleframe = 0; cls.capturevideo.realtime = cl_capturevideo_realtime.integer != 0; cls.capturevideo.screenbuffer = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 4); @@ -1290,7 +1296,7 @@ static void SCR_ScaleDownBGRA(unsigned char *in, int inw, int inh, unsigned char } } -void SCR_CaptureVideo_VideoFrame(int newframestepframenum) +static void SCR_CaptureVideo_VideoFrame(int newframestepframenum) { int x = 0, y = 0; int width = cls.capturevideo.width, height = cls.capturevideo.height; @@ -1311,7 +1317,7 @@ void SCR_CaptureVideo_VideoFrame(int newframestepframenum) if(cl_capturevideo_printfps.integer) { char buf[80]; - double t = Sys_DoubleTime(); + double t = realtime; if(t > cls.capturevideo.lastfpstime + 1) { double fps1 = (cls.capturevideo.frame - cls.capturevideo.lastfpsframe) / (t - cls.capturevideo.lastfpstime + 0.0000001); @@ -1330,7 +1336,7 @@ void SCR_CaptureVideo_SoundFrame(const portable_sampleframe_t *paintbuffer, size cls.capturevideo.soundframe(paintbuffer, length); } -void SCR_CaptureVideo(void) +static void SCR_CaptureVideo(void) { int newframenum; if (cl_capturevideo.integer) @@ -1475,7 +1481,7 @@ void SHOWLMP_decodehide(void) { int i; char *lmplabel; - lmplabel = MSG_ReadString(); + lmplabel = MSG_ReadString(&cl_message, cl_readstring, sizeof(cl_readstring)); for (i = 0;i < cl.num_showlmps;i++) if (cl.showlmps[i].isactive && strcmp(cl.showlmps[i].label, lmplabel) == 0) { @@ -1489,17 +1495,17 @@ void SHOWLMP_decodeshow(void) int k; char lmplabel[256], picname[256]; float x, y; - strlcpy (lmplabel,MSG_ReadString(), sizeof (lmplabel)); - strlcpy (picname, MSG_ReadString(), sizeof (picname)); + strlcpy (lmplabel,MSG_ReadString(&cl_message, cl_readstring, sizeof(cl_readstring)), sizeof (lmplabel)); + strlcpy (picname, MSG_ReadString(&cl_message, cl_readstring, sizeof(cl_readstring)), sizeof (picname)); if (gamemode == GAME_NEHAHRA) // LordHavoc: nasty old legacy junk { - x = MSG_ReadByte(); - y = MSG_ReadByte(); + x = MSG_ReadByte(&cl_message); + y = MSG_ReadByte(&cl_message); } else { - x = MSG_ReadShort(); - y = MSG_ReadShort(); + x = MSG_ReadShort(&cl_message); + y = MSG_ReadShort(&cl_message); } if (!cl.showlmps || cl.num_showlmps >= cl.max_showlmps) { @@ -1637,7 +1643,6 @@ static void SCR_DrawTouchscreenOverlay(void) } } -extern void R_UpdateFog(void); void R_ClearScreen(qboolean fogcolor) { float clearcolor[4]; @@ -1656,14 +1661,9 @@ void R_ClearScreen(qboolean fogcolor) GL_Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | (vid.stencil ? GL_STENCIL_BUFFER_BIT : 0), clearcolor, 1.0f, 128); } -qboolean CL_VM_UpdateView (void); -void SCR_DrawConsole (void); -void R_Shadow_EditLights_DrawSelectedLightProperties(void); - int r_stereo_side; -extern void Sbar_ShowFPS(void); -void SCR_DrawScreen (void) +static void SCR_DrawScreen (void) { Draw_Frame(); @@ -1892,7 +1892,7 @@ static void SCR_SetLoadingScreenTexture(void) void SCR_UpdateLoadingScreenIfShown(void) { if(loadingscreendone) - SCR_UpdateLoadingScreen(loadingscreencleared); + SCR_UpdateLoadingScreen(loadingscreencleared, false); } void SCR_PushLoadingScreen (qboolean redraw, const char *msg, float len_in_parent) @@ -2031,6 +2031,7 @@ static void SCR_DrawLoadingScreen_SharedSetup (qboolean clear) { r_viewport_t viewport; float x, y, w, h, sw, sh, f; + char vabuf[1024]; // release mouse grab while loading if (!vid.fullscreen) VID_SetMouse(false, false, false); @@ -2047,7 +2048,7 @@ static void SCR_DrawLoadingScreen_SharedSetup (qboolean clear) R_Mesh_Start(); R_EntityMatrix(&identitymatrix); // draw the loading plaque - loadingscreenpic = Draw_CachePic_Flags (loadingscreenpic_number ? va("gfx/loading%d", loadingscreenpic_number+1) : "gfx/loading", loadingscreenpic_number ? CACHEPICFLAG_NOTPERSISTENT : 0); + loadingscreenpic = Draw_CachePic_Flags (loadingscreenpic_number ? va(vabuf, sizeof(vabuf), "gfx/loading%d", loadingscreenpic_number+1) : "gfx/loading", loadingscreenpic_number ? CACHEPICFLAG_NOTPERSISTENT : 0); w = loadingscreenpic->width; h = loadingscreenpic->height; @@ -2129,7 +2130,7 @@ static void SCR_DrawLoadingScreen_SharedFinish (qboolean clear) VID_Finish(); } -void SCR_UpdateLoadingScreen (qboolean clear) +void SCR_UpdateLoadingScreen (qboolean clear, qboolean startup) { keydest_t old_key_dest; int old_key_consoleactive; @@ -2145,7 +2146,17 @@ void SCR_UpdateLoadingScreen (qboolean clear) clear |= loadingscreencleared; if(!loadingscreendone) - loadingscreenpic_number = rand() % (scr_loadingscreen_count.integer > 1 ? scr_loadingscreen_count.integer : 1); + { + if(startup && scr_loadingscreen_firstforstartup.integer) + loadingscreenpic_number = 0; + else if(scr_loadingscreen_firstforstartup.integer) + if(scr_loadingscreen_count.integer > 1) + loadingscreenpic_number = rand() % (scr_loadingscreen_count.integer - 1) + 1; + else + loadingscreenpic_number = 0; + else + loadingscreenpic_number = rand() % (scr_loadingscreen_count.integer > 1 ? scr_loadingscreen_count.integer : 1); + } if(clear) SCR_ClearLoadingScreenTexture(); @@ -2206,21 +2217,90 @@ extern cvar_t cl_minfps; extern cvar_t cl_minfps_fade; extern cvar_t cl_minfps_qualitymax; extern cvar_t cl_minfps_qualitymin; -extern cvar_t cl_minfps_qualitypower; -extern cvar_t cl_minfps_qualityscale; -extern cvar_t r_viewscale_fpsscaling; -static double cl_updatescreen_rendertime = 0; +extern cvar_t cl_minfps_qualitymultiply; +extern cvar_t cl_minfps_qualityhysteresis; +extern cvar_t cl_minfps_qualitystepmax; +extern cvar_t cl_minfps_force; static double cl_updatescreen_quality = 1; -extern void Sbar_ShowFPS_Update(void); void CL_UpdateScreen(void) { vec3_t vieworigin; - double rendertime1; - double drawscreenstart; + static double drawscreenstart = 0.0; + double drawscreendelta; float conwidth, conheight; - float f; r_viewport_t viewport; + if(drawscreenstart) + { + drawscreendelta = Sys_DirtyTime() - drawscreenstart; + if (cl_minfps.value > 0 && (cl_minfps_force.integer || !(cls.timedemo || (cls.capturevideo.active && !cls.capturevideo.realtime))) && drawscreendelta >= 0 && drawscreendelta < 60) + { + // quality adjustment according to render time + double actualframetime; + double targetframetime; + double adjust; + double f; + double h; + + // fade lastdrawscreentime + r_refdef.lastdrawscreentime += (drawscreendelta - r_refdef.lastdrawscreentime) * cl_minfps_fade.value; + + // find actual and target frame times + actualframetime = r_refdef.lastdrawscreentime; + targetframetime = (1.0 / cl_minfps.value); + + // we scale hysteresis by quality + h = cl_updatescreen_quality * cl_minfps_qualityhysteresis.value; + + // calculate adjustment assuming linearity + f = cl_updatescreen_quality / actualframetime * cl_minfps_qualitymultiply.value; + adjust = (targetframetime - actualframetime) * f; + + // one sided hysteresis + if(adjust > 0) + adjust = max(0, adjust - h); + + // adjust > 0 if: + // (targetframetime - actualframetime) * f > h + // ((1.0 / cl_minfps.value) - actualframetime) * (cl_updatescreen_quality / actualframetime * cl_minfps_qualitymultiply.value) > (cl_updatescreen_quality * cl_minfps_qualityhysteresis.value) + // ((1.0 / cl_minfps.value) - actualframetime) * (cl_minfps_qualitymultiply.value / actualframetime) > cl_minfps_qualityhysteresis.value + // (1.0 / cl_minfps.value) * (cl_minfps_qualitymultiply.value / actualframetime) - cl_minfps_qualitymultiply.value > cl_minfps_qualityhysteresis.value + // (1.0 / cl_minfps.value) * (cl_minfps_qualitymultiply.value / actualframetime) > cl_minfps_qualityhysteresis.value + cl_minfps_qualitymultiply.value + // (1.0 / cl_minfps.value) / actualframetime > (cl_minfps_qualityhysteresis.value + cl_minfps_qualitymultiply.value) / cl_minfps_qualitymultiply.value + // (1.0 / cl_minfps.value) / actualframetime > 1.0 + cl_minfps_qualityhysteresis.value / cl_minfps_qualitymultiply.value + // cl_minfps.value * actualframetime < 1.0 / (1.0 + cl_minfps_qualityhysteresis.value / cl_minfps_qualitymultiply.value) + // actualframetime < 1.0 / cl_minfps.value / (1.0 + cl_minfps_qualityhysteresis.value / cl_minfps_qualitymultiply.value) + // actualfps > cl_minfps.value * (1.0 + cl_minfps_qualityhysteresis.value / cl_minfps_qualitymultiply.value) + + // adjust < 0 if: + // (targetframetime - actualframetime) * f < 0 + // ((1.0 / cl_minfps.value) - actualframetime) * (cl_updatescreen_quality / actualframetime * cl_minfps_qualitymultiply.value) < 0 + // ((1.0 / cl_minfps.value) - actualframetime) < 0 + // -actualframetime) < -(1.0 / cl_minfps.value) + // actualfps < cl_minfps.value + + /* + Con_Printf("adjust UP if fps > %f, adjust DOWN if fps < %f\n", + cl_minfps.value * (1.0 + cl_minfps_qualityhysteresis.value / cl_minfps_qualitymultiply.value), + cl_minfps.value); + */ + + // don't adjust too much at once + adjust = bound(-cl_minfps_qualitystepmax.value, adjust, cl_minfps_qualitystepmax.value); + + // adjust! + cl_updatescreen_quality += adjust; + cl_updatescreen_quality = bound(max(0.01, cl_minfps_qualitymin.value), cl_updatescreen_quality, cl_minfps_qualitymax.value); + } + else + { + cl_updatescreen_quality = 1; + r_refdef.lastdrawscreentime = 0; + } + } + + drawscreenstart = Sys_DirtyTime(); + Sbar_ShowFPS_Update(); if (!scr_initialized || !con_initialized || !scr_refresh.integer) @@ -2247,8 +2327,6 @@ void CL_UpdateScreen(void) return; } - rendertime1 = Sys_DoubleTime(); - conwidth = bound(160, vid_conwidth.value, 32768); conheight = bound(90, vid_conheight.value, 24576); if (vid_conwidth.value != conwidth) @@ -2317,8 +2395,9 @@ void CL_UpdateScreen(void) R_ClearScreen(false); r_refdef.view.clear = false; r_refdef.view.isoverlay = false; - f = pow((float)cl_updatescreen_quality, cl_minfps_qualitypower.value) * cl_minfps_qualityscale.value; - r_refdef.view.quality = bound(cl_minfps_qualitymin.value, f, cl_minfps_qualitymax.value); + + // calculate r_refdef.view.quality + r_refdef.view.quality = cl_updatescreen_quality; #ifndef USE_GLES2 if (qglPolygonStipple) @@ -2349,9 +2428,6 @@ void CL_UpdateScreen(void) } #endif - if (r_viewscale_fpsscaling.integer) - GL_Finish(); - drawscreenstart = Sys_DoubleTime(); #ifndef USE_GLES2 if (R_Stereo_Active()) { @@ -2370,6 +2446,7 @@ void CL_UpdateScreen(void) SCR_DrawScreen(); r_stereo_side = 1; + r_refdef.view.clear = true; if (r_stereo_redblue.integer || r_stereo_redgreen.integer || r_stereo_redcyan.integer) { @@ -2386,22 +2463,12 @@ void CL_UpdateScreen(void) else #endif SCR_DrawScreen(); - if (r_viewscale_fpsscaling.integer) - GL_Finish(); - r_refdef.lastdrawscreentime = Sys_DoubleTime() - drawscreenstart; SCR_CaptureVideo(); if (qglFlush) qglFlush(); // FIXME: should we really be using qglFlush here? - // quality adjustment according to render time - cl_updatescreen_rendertime += ((Sys_DoubleTime() - rendertime1) - cl_updatescreen_rendertime) * bound(0, cl_minfps_fade.value, 1); - if (cl_minfps.value > 0 && cl_updatescreen_rendertime > 0 && !cls.timedemo && (!cls.capturevideo.active || !cls.capturevideo.realtime)) - cl_updatescreen_quality = 1 / (cl_updatescreen_rendertime * cl_minfps.value); - else - cl_updatescreen_quality = 1; - if (!vid_activewindow) VID_SetMouse(false, false, false); else if (key_consoleactive)