]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
improve abstraction of the console buffers; console drawing still needs to be changed...
[xonotic/darkplaces.git] / cl_screen.c
index 790887330f41d4d72d1f532caa10c480a8d863f2..d2f2b0ed4c311fa790883fb08b4de4c624fdde19 100644 (file)
@@ -743,6 +743,7 @@ void R_TimeReport_EndFrame(void)
        int i, j, lines, y;
        cl_locnode_t *loc;
        char string[1024+4096];
+       mleaf_t *viewleaf;
 
        string[0] = 0;
        if (r_speeds.integer && cls.signon == SIGNONS && cls.state == ca_connected)
@@ -750,12 +751,13 @@ void R_TimeReport_EndFrame(void)
                // put the location name in the r_speeds display as it greatly helps
                // when creating loc files
                loc = CL_Locs_FindNearest(cl.movement_origin);
+               viewleaf = (r_refdef.scene.worldmodel && r_refdef.scene.worldmodel->brush.PointInLeaf) ? r_refdef.scene.worldmodel->brush.PointInLeaf(r_refdef.scene.worldmodel, r_refdef.view.origin) : NULL;
                dpsnprintf(string, sizeof(string),
 "%s%s\n"
 "%3i renders org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\n"
 "%7i surfaces%7i triangles %5i entities (%7i surfaces%7i triangles)\n"
 "%5i leafs%5i portals%6i/%6i particles%6i/%6i decals %3i%% quality\n"
-"%7i lightmap updates (%7i pixels)\n"
+"%7i lightmap updates (%7i pixels)%s\n"
 "%4i lights%4i clears%4i scissored%7i light%7i shadow%7i dynamic\n"
 "rendered%6i meshes%8i triangles bloompixels%8i copied%8i drawn\n"
 "%s"
@@ -763,7 +765,7 @@ void R_TimeReport_EndFrame(void)
 , r_refdef.stats.renders, r_refdef.view.origin[0], r_refdef.view.origin[1], r_refdef.view.origin[2], r_refdef.view.forward[0], r_refdef.view.forward[1], r_refdef.view.forward[2]
 , r_refdef.stats.world_surfaces, r_refdef.stats.world_triangles, r_refdef.stats.entities, r_refdef.stats.entities_surfaces, r_refdef.stats.entities_triangles
 , r_refdef.stats.world_leafs, r_refdef.stats.world_portals, r_refdef.stats.particles, cl.num_particles, r_refdef.stats.decals, cl.num_decals, (int)(100 * r_refdef.view.quality)
-, r_refdef.stats.lightmapupdates, r_refdef.stats.lightmapupdatepixels
+, r_refdef.stats.lightmapupdates, r_refdef.stats.lightmapupdatepixels, viewleaf ? va(" clusterindex%6i", viewleaf->clusterindex) : ""
 , r_refdef.stats.lights, r_refdef.stats.lights_clears, r_refdef.stats.lights_scissored, r_refdef.stats.lights_lighttriangles, r_refdef.stats.lights_shadowtriangles, r_refdef.stats.lights_dynamicshadowtriangles
 , r_refdef.stats.meshes, r_refdef.stats.meshes_elements / 3, r_refdef.stats.bloom_copypixels, r_refdef.stats.bloom_drawpixels
 , r_speeds_timestring);
@@ -1634,7 +1636,7 @@ static void SCR_ClearLoadingScreenTexture()
        loadingscreentexture = NULL;
 }
 
-extern rtexturepool_t r_main_texturepool;
+extern rtexturepool_t *r_main_texturepool;
 static void SCR_SetLoadingScreenTexture()
 {
        int w, h;
@@ -1655,7 +1657,7 @@ static void SCR_SetLoadingScreenTexture()
                loadingscreentexture_h = vid.height / (float) h;
        }
 
-       loadingscreentexture = R_LoadTexture2D(&r_main_texturepool, "loadingscreentexture", w, h, NULL, TEXTYPE_BGRA, TEXF_FORCENEAREST | TEXF_CLAMP | TEXF_ALWAYSPRECACHE, NULL);
+       loadingscreentexture = R_LoadTexture2D(r_main_texturepool, "loadingscreentexture", w, h, NULL, TEXTYPE_BGRA, TEXF_FORCENEAREST | TEXF_CLAMP | TEXF_ALWAYSPRECACHE, NULL);
        R_Mesh_TexBind(0, R_GetTexture(loadingscreentexture));
        GL_ActiveTexture(0);
        CHECKGLERROR
@@ -1707,6 +1709,13 @@ void SCR_PushLoadingScreen (qboolean redraw, const char *msg, float len_in_paren
 void SCR_PopLoadingScreen (qboolean redraw)
 {
        loadingscreenstack_t *s = loadingscreenstack;
+
+       if(!s)
+       {
+               Con_DPrintf("Popping a loading screen item from an empty stack!\n");
+               return;
+       }
+
        loadingscreenstack = s->prev;
        if(s->prev)
                s->prev->relative_completion = (s->absolute_loading_amount_min + s->absolute_loading_amount_len - s->prev->absolute_loading_amount_min) / s->prev->absolute_loading_amount_len;
@@ -1716,6 +1725,12 @@ void SCR_PopLoadingScreen (qboolean redraw)
                SCR_UpdateLoadingScreenIfShown();
 }
 
+void SCR_ClearLoadingScreen (qboolean redraw)
+{
+       while(loadingscreenstack)
+               SCR_PopLoadingScreen(redraw && !loadingscreenstack->prev);
+}
+
 static float SCR_DrawLoadingStack_r(loadingscreenstack_t *s, float y)
 {
        float size = 8;
@@ -1778,9 +1793,9 @@ static void SCR_DrawLoadingStack()
                verts[7] = verts[10] = vid_conheight.integer;
 
                for(i = 0; i < 16; ++i)
-                       colors[i] = (i % 4 == 3) || (i >= 8 && i % 4 == 2);
-                       //                                     ^^^^^^^^^^ blue component
-                       //                           ^^^^^^ bottom row
+                       colors[i] = (i % 4 == 3) ? 1 : (i >= 8 && i % 4 == 2) ? 1 : 0;
+                       //                                        ^^^^^^^^^^ blue component
+                       //                              ^^^^^^ bottom row
                        //          ^^^^^^^^^^^^ alpha is always on
                R_Mesh_Draw(0, 4, 0, 2, NULL, polygonelements, 0, 0);
 
@@ -1872,10 +1887,13 @@ void SCR_UpdateLoadingScreen (qboolean clear)
        if (vid_hidden || !scr_refresh.integer || cls.state == ca_dedicated)
                return;
        
+       if(loadingscreentime == realtime)
+               clear |= loadingscreencleared;
+
        if(clear)
-               SCR_ClearLoadingScreenTexture();
+               SCR_ClearLoadingScreenTexture();
        else if(loadingscreentime != realtime)
-               SCR_SetLoadingScreenTexture();
+               SCR_SetLoadingScreenTexture();
 
        if(loadingscreentime != realtime)
        {