From f8e7835d4c8e5763be8a739809f6339800e26ca8 Mon Sep 17 00:00:00 2001 From: havoc Date: Tue, 12 Dec 2006 06:28:54 +0000 Subject: [PATCH] display loading plaque much sooner in startup process, and draw it to GL_FRONT buffer rather than drawing it to the GL_BACK buffer and swapping, as if triple buffering is used the GL_BACK buffer might not be shown for some time, but the GL_FRONT buffer is instantaneous git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6647 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_screen.c | 21 +++++++++++++-------- gl_backend.h | 2 +- gl_draw.c | 3 +++ gl_rmain.c | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/cl_screen.c b/cl_screen.c index e806e45a..895f491a 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -461,7 +461,7 @@ void SCR_BeginLoadingPlaque (void) Host_StartVideo(); S_StopAllSounds(); - SCR_UpdateLoadingScreen(); + SCR_UpdateLoadingScreen(false); } //============================================================================= @@ -1600,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; @@ -1614,8 +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 + 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(); @@ -1645,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) diff --git a/gl_backend.h b/gl_backend.h index 248c4efd..0c66d2f1 100644 --- a/gl_backend.h +++ b/gl_backend.h @@ -105,7 +105,7 @@ void R_ClearScreen(void); // invoke refresh of frame void SCR_UpdateScreen(void); // invoke refresh of loading plaque (nothing else seen) -void SCR_UpdateLoadingScreen(void); +void SCR_UpdateLoadingScreen(qboolean clear); #endif diff --git a/gl_draw.c b/gl_draw.c index a1374cd3..9184ace7 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -511,6 +511,9 @@ static void gl_draw_start(void) char_texture = Draw_CachePic("gfx/conchars", true)->tex; for (i = 1;i <= NUMCROSSHAIRS;i++) r_crosshairs[i] = Draw_CachePic(va("gfx/crosshair%i", i), true); + + // draw the loading screen so people have something to see in the newly opened window + SCR_UpdateLoadingScreen(true); } static void gl_draw_shutdown(void) diff --git a/gl_rmain.c b/gl_rmain.c index c0a2f446..ac4fbd08 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -1050,8 +1050,8 @@ void Render_Init(void) { gl_backend_init(); R_Textures_Init(); - GL_Main_Init(); GL_Draw_Init(); + GL_Main_Init(); R_Shadow_Init(); R_Sky_Init(); GL_Surf_Init(); -- 2.39.2