]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
Fix engine not starting on Windows if linked against SDL > 2.0.5
[xonotic/darkplaces.git] / cl_screen.c
index 36eccda64f572647d72b226c2a161164a218695d..9625b6443bec916e258464a8bd236e6fde49e4a4 100644 (file)
@@ -49,7 +49,8 @@ cvar_t scr_loadingscreen_barcolor = {0, "scr_loadingscreen_barcolor", "0 0 1", "
 cvar_t scr_loadingscreen_barheight = {0, "scr_loadingscreen_barheight", "8", "the height of the loadingscreen progress bar"};
 cvar_t scr_loadingscreen_maxfps = {0, "scr_loadingscreen_maxfps", "10", "restrict maximal FPS for loading screen so it will not update very often (this will make lesser loading times on a maps loading large number of models)"};
 cvar_t scr_infobar_height = {0, "scr_infobar_height", "8", "the height of the infobar items"};
-cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640", "virtual width of 2D graphics system"};
+cvar_t vid_conwidthauto = { CVAR_SAVE, "vid_conwidthauto", "1", "automatically update vid_conwidth to match aspect ratio" };
+cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640", "virtual width of 2D graphics system (note: changes may be overwritten, see vid_conwidthauto)"};
 cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480", "virtual height of 2D graphics system"};
 cvar_t vid_pixelheight = {CVAR_SAVE, "vid_pixelheight", "1", "adjusts vertical field of vision to account for non-square pixels (1280x1024 on a CRT monitor for example)"};
 cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","1", "save jpeg instead of targa"};
@@ -1308,6 +1309,7 @@ void CL_Screen_Init(void)
        Cvar_RegisterVariable (&vid_conwidth);
        Cvar_RegisterVariable (&vid_conheight);
        Cvar_RegisterVariable (&vid_pixelheight);
+       Cvar_RegisterVariable (&vid_conwidthauto);
        Cvar_RegisterVariable (&scr_screenshot_jpeg);
        Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
        Cvar_RegisterVariable (&scr_screenshot_png);
@@ -2153,6 +2155,9 @@ static void SCR_DrawScreen (void)
                }
        }
 
+       // Don't apply debugging stuff like r_showsurfaces to the UI
+       r_refdef.view.showdebug = false;
+
        if (!r_stereo_sidebyside.integer && !r_stereo_horizontal.integer && !r_stereo_vertical.integer)
        {
                r_refdef.view.width = vid.width;
@@ -2533,6 +2538,8 @@ static void SCR_DrawLoadingScreen_SharedFinish (qboolean clear)
 
 static double loadingscreen_lastupdate;
 
+static void SCR_UpdateVars(void);
+
 void SCR_UpdateLoadingScreen (qboolean clear, qboolean startup)
 {
        keydest_t       old_key_dest;
@@ -2551,6 +2558,8 @@ void SCR_UpdateLoadingScreen (qboolean clear, qboolean startup)
                loadingscreen_lastupdate = t;
        }
 
+       SCR_UpdateVars();
+
        // set up the r_texture_gammaramps texture which we need for rendering the loadingscreenpic
        VID_UpdateGamma();
        R_UpdateVariables();
@@ -2590,10 +2599,9 @@ void SCR_UpdateLoadingScreen (qboolean clear, qboolean startup)
        SCR_DrawLoadingScreen_SharedSetup(clear);
        SCR_DrawLoadingScreen(clear);
 #else
-       if (qglDrawBuffer)
-               qglDrawBuffer(GL_BACK);
+       qglDrawBuffer(GL_BACK);
        SCR_DrawLoadingScreen_SharedSetup(clear);
-       if (vid.stereobuffer && qglDrawBuffer)
+       if (vid.stereobuffer)
        {
                qglDrawBuffer(GL_BACK_LEFT);
                SCR_DrawLoadingScreen(clear);
@@ -2602,8 +2610,7 @@ void SCR_UpdateLoadingScreen (qboolean clear, qboolean startup)
        }
        else
        {
-               if (qglDrawBuffer)
-                       qglDrawBuffer(GL_BACK);
+               qglDrawBuffer(GL_BACK);
                SCR_DrawLoadingScreen(clear);
        }
 #endif
@@ -2629,6 +2636,43 @@ qboolean R_Stereo_Active(void)
        return (vid.stereobuffer || r_stereo_sidebyside.integer || r_stereo_horizontal.integer || r_stereo_vertical.integer || R_Stereo_ColorMasking());
 }
 
+void SCR_UpdateVars(void)
+{
+       float conwidth = bound(160, vid_conwidth.value, 32768);
+       float conheight = bound(90, vid_conheight.value, 24576);
+       if (vid_conwidthauto.integer)
+               conwidth = floor(conheight * vid.width / (vid.height * vid_pixelheight.value));
+       if (vid_conwidth.value != conwidth)
+               Cvar_SetValue("vid_conwidth", conwidth);
+       if (vid_conheight.value != conheight)
+               Cvar_SetValue("vid_conheight", conheight);
+
+       // bound viewsize
+       if (scr_viewsize.value < 30)
+               Cvar_Set("viewsize", "30");
+       if (scr_viewsize.value > 120)
+               Cvar_Set("viewsize", "120");
+
+       // bound field of view
+       if (scr_fov.value < 1)
+               Cvar_Set("fov", "1");
+       if (scr_fov.value > 170)
+               Cvar_Set("fov", "170");
+
+       // intermission is always full screen
+       if (cl.intermission)
+               sb_lines = 0;
+       else
+       {
+               if (scr_viewsize.value >= 120)
+                       sb_lines = 0;           // no status bar at all
+               else if (scr_viewsize.value >= 110)
+                       sb_lines = 24;          // no inventory
+               else
+                       sb_lines = 24 + 16 + 8;
+       }
+}
+
 extern cvar_t cl_minfps;
 extern cvar_t cl_minfps_fade;
 extern cvar_t cl_minfps_qualitymax;
@@ -2643,7 +2687,6 @@ void CL_UpdateScreen(void)
        vec3_t vieworigin;
        static double drawscreenstart = 0.0;
        double drawscreendelta;
-       float conwidth, conheight;
        r_viewport_t viewport;
 
        if(drawscreenstart)
@@ -2743,37 +2786,7 @@ void CL_UpdateScreen(void)
                return;
        }
 
-       conwidth = bound(160, vid_conwidth.value, 32768);
-       conheight = bound(90, vid_conheight.value, 24576);
-       if (vid_conwidth.value != conwidth)
-               Cvar_SetValue("vid_conwidth", conwidth);
-       if (vid_conheight.value != conheight)
-               Cvar_SetValue("vid_conheight", conheight);
-
-       // bound viewsize
-       if (scr_viewsize.value < 30)
-               Cvar_Set ("viewsize","30");
-       if (scr_viewsize.value > 120)
-               Cvar_Set ("viewsize","120");
-
-       // bound field of view
-       if (scr_fov.value < 1)
-               Cvar_Set ("fov","1");
-       if (scr_fov.value > 170)
-               Cvar_Set ("fov","170");
-
-       // intermission is always full screen
-       if (cl.intermission)
-               sb_lines = 0;
-       else
-       {
-               if (scr_viewsize.value >= 120)
-                       sb_lines = 0;           // no status bar at all
-               else if (scr_viewsize.value >= 110)
-                       sb_lines = 24;          // no inventory
-               else
-                       sb_lines = 24+16+8;
-       }
+       SCR_UpdateVars();
 
        R_FrameData_NewFrame();
        R_BufferData_NewFrame();
@@ -2788,11 +2801,8 @@ void CL_UpdateScreen(void)
        SCR_SetUpToDrawConsole();
 
 #ifndef USE_GLES2
-       if (qglDrawBuffer)
-       {
-               CHECKGLERROR
-               qglDrawBuffer(GL_BACK);CHECKGLERROR
-       }
+       CHECKGLERROR
+       qglDrawBuffer(GL_BACK);CHECKGLERROR
 #endif
 
        R_Viewport_InitOrtho(&viewport, &identitymatrix, 0, 0, vid.width, vid.height, 0, 0, vid_conwidth.integer, vid_conheight.integer, -10, 100, NULL);
@@ -2859,8 +2869,7 @@ void CL_UpdateScreen(void)
        SCR_CaptureVideo();
 #endif
 
-       if (qglFlush)
-               qglFlush(); // FIXME: should we really be using qglFlush here?
+       qglFlush(); // ensure that the commands are submitted to the GPU before we do other things
 
        if (!vid_activewindow)
                VID_SetMouse(false, false, false);