]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
patch from div0 that enables printf format warnings in gcc
[xonotic/darkplaces.git] / cl_screen.c
index 164ed0c2e0638283e32c3c741b483c09b55a8e07..895f491a93a9befe9c055977b4d40f7cfd03bd52 100644 (file)
@@ -43,6 +43,7 @@ cvar_t scr_zoomwindow = {CVAR_SAVE, "scr_zoomwindow", "0", "displays a zoomed in
 cvar_t scr_zoomwindow_viewsizex = {CVAR_SAVE, "scr_zoomwindow_viewsizex", "20", "horizontal viewsize of zoom window"};
 cvar_t scr_zoomwindow_viewsizey = {CVAR_SAVE, "scr_zoomwindow_viewsizey", "20", "vertical viewsize of zoom window"};
 cvar_t scr_zoomwindow_fov = {CVAR_SAVE, "scr_zoomwindow_fov", "20", "fov of zoom window"};
+cvar_t scr_stipple = {0, "scr_stipple", "0", "interlacing-like stippling of the display"};
 
 
 int jpeg_supported = false;
@@ -460,7 +461,7 @@ void SCR_BeginLoadingPlaque (void)
 
        Host_StartVideo();
        S_StopAllSounds();
-       SCR_UpdateLoadingScreen();
+       SCR_UpdateLoadingScreen(false);
 }
 
 //=============================================================================
@@ -612,6 +613,7 @@ void CL_Screen_Init(void)
        Cvar_RegisterVariable(&scr_zoomwindow_viewsizex);
        Cvar_RegisterVariable(&scr_zoomwindow_viewsizey);
        Cvar_RegisterVariable(&scr_zoomwindow_fov);
+       Cvar_RegisterVariable(&scr_stipple);
 
        Cmd_AddCommand ("sizeup",SCR_SizeUp_f, "increase view size (increases viewsize cvar)");
        Cmd_AddCommand ("sizedown",SCR_SizeDown_f, "decrease view size (decreases viewsize cvar)");
@@ -1598,7 +1600,7 @@ void SCR_DrawScreen (void)
                R_TimeReport("meshfinish");
 }
 
-void SCR_UpdateLoadingScreen (void)
+void SCR_UpdateLoadingScreen (qboolean clear)
 {
        float x, y;
        cachepic_t *pic;
@@ -1612,9 +1614,12 @@ void SCR_UpdateLoadingScreen (void)
        //qglDisable(GL_SCISSOR_TEST);CHECKGLERROR
        //qglDepthMask(1);CHECKGLERROR
        qglColorMask(1,1,1,1);CHECKGLERROR
-       //qglClearColor(0,0,0,0);CHECKGLERROR
-       //qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
-       //qglCullFace(GL_FRONT);CHECKGLERROR
+       qglClearColor(0,0,0,0);CHECKGLERROR
+       // when starting up a new video mode, make sure the screen is cleared to black
+       if (clear)
+       {
+               qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
+       }
        //qglDisable(GL_CULL_FACE);CHECKGLERROR
        //R_ClearScreen();
        R_Textures_Frame();
@@ -1644,19 +1649,20 @@ void SCR_UpdateLoadingScreen (void)
        texcoord2f[6] = 0;texcoord2f[7] = 1;
        if (vid.stereobuffer)
        {
-               qglDrawBuffer(GL_BACK_LEFT);
+               qglDrawBuffer(GL_FRONT_LEFT);
                R_Mesh_Draw(0, 4, 2, polygonelements);
-               qglDrawBuffer(GL_BACK_RIGHT);
+               qglDrawBuffer(GL_FRONT_RIGHT);
                R_Mesh_Draw(0, 4, 2, polygonelements);
        }
        else
        {
-               qglDrawBuffer(GL_BACK);
+               qglDrawBuffer(GL_FRONT);
                R_Mesh_Draw(0, 4, 2, polygonelements);
        }
        R_Mesh_Finish();
        // refresh
-       VID_Finish(false);
+       // not necessary when rendering to GL_FRONT buffers
+       //VID_Finish(false);
 }
 
 void CL_UpdateScreen(void)
@@ -1740,6 +1746,28 @@ void CL_UpdateScreen(void)
        qglClearColor(0,0,0,0);CHECKGLERROR
        qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
 
+       if(scr_stipple.integer)
+       {
+               GLubyte stipple[128];
+               int i, s, width, parts;
+               static int frame = 0;
+               ++frame;
+
+               s = scr_stipple.integer;
+               parts = (s & 007);
+               width = (s & 070) >> 3;
+
+               qglEnable(GL_POLYGON_STIPPLE); // 0x0B42
+               for(i = 0; i < 128; ++i)
+               {
+                       int line = i/4;
+                       stipple[i] = (((line >> width) + frame) & ((1 << parts) - 1)) ? 0x00 : 0xFF;
+               }
+               qglPolygonStipple(stipple);
+       }
+       else
+               qglDisable(GL_POLYGON_STIPPLE);
+
        if (r_timereport_active)
                R_TimeReport("clear");