]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
lightning beams have been replaced with a polygon effect which renders faster than...
[xonotic/darkplaces.git] / cl_screen.c
index deceed22740dc192e092866de0b755d0f78fe08d..4c369fead832100dc444e4ed08017c105d19a0ce 100644 (file)
@@ -237,11 +237,15 @@ void SCR_SetUpToDrawConsole (void)
 {
        Con_CheckResize ();
 
-       //if (key_dest == key_game && (!cl.worldmodel || cls.signon != SIGNONS))
-       //      key_dest = key_console;
+       if (key_dest == key_game && cls.signon != SIGNONS)
+               key_consoleactive |= KEY_CONSOLEACTIVE_FORCED;
+       else
+               key_consoleactive &= ~KEY_CONSOLEACTIVE_FORCED;
 
 // decide on the height of the console
-       if (key_consoleactive)
+       if (key_consoleactive & KEY_CONSOLEACTIVE_FORCED)
+               scr_conlines = vid.conheight; // full screen
+       else if (key_consoleactive & KEY_CONSOLEACTIVE_USER)
                scr_conlines = vid.conheight/2; // half screen
        else
                scr_conlines = 0;                               // none visible
@@ -346,9 +350,13 @@ void R_TimeReport(char *desc)
        }
 }
 
+extern int c_rt_lights, c_rt_clears, c_rt_scissored;
+extern int c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris;
+extern int c_rtcached_shadowmeshes, c_rtcached_shadowtris;
+extern int r_shadow_lightingmode;
 void R_TimeReport_Start(void)
 {
-       r_timereport_active = r_speeds.integer && cl.worldmodel && cls.state == ca_connected;
+       r_timereport_active = r_speeds.integer && cls.signon == SIGNONS && cls.state == ca_connected;
        r_speeds_string[0] = 0;
        if (r_timereport_active)
        {
@@ -356,15 +364,24 @@ void R_TimeReport_Start(void)
                AngleVectors (r_refdef.viewangles, vpn, NULL, NULL);
                sprintf(r_speeds_string,
                        "org:'%+8.2f %+8.2f %+8.2f' ang:'%+4.0f %+4.0f %+4.0f' dir:'%+2.3f %+2.3f %+2.3f'\n"
-                       "world:%6i faces%6i nodes%6i leafs%6i walls%6i dlitwalls\n"
+                       "world:%6i faces%6i nodes%6i leafs%6i dlitwalls\n"
                        "%5i models%5i bmodels%5i sprites%6i particles%4i dlights\n"
                        "%6i modeltris%6i meshs%6i meshtris\n",
                        r_refdef.vieworg[0], r_refdef.vieworg[1], r_refdef.vieworg[2], r_refdef.viewangles[0], r_refdef.viewangles[1], r_refdef.viewangles[2], vpn[0], vpn[1], vpn[2],
-                       c_faces, c_nodes, c_leafs, c_brush_polys, c_light_polys,
+                       c_faces, c_nodes, c_leafs, c_light_polys,
                        c_models, c_bmodels, c_sprites, c_particles, c_dlights,
-                       c_alias_polys, c_meshs, c_meshtris);
+                       c_alias_polys, c_meshs, c_meshelements / 3);
+               if (r_shadow_lightingmode)
+               {
+                       sprintf(r_speeds_string + strlen(r_speeds_string),
+                               "realtime lighting:%4i lights%4i clears%4i scissored\n"
+                               "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n"
+                               "precomputed: %6i shadowmeshes%6i shadowtris\n",
+                               c_rt_lights, c_rt_clears, c_rt_scissored,
+                               c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris,
+                               c_rtcached_shadowmeshes, c_rtcached_shadowtris);
+               }
 
-               c_brush_polys = 0;
                c_alias_polys = 0;
                c_light_polys = 0;
                c_faces = 0;
@@ -374,6 +391,8 @@ void R_TimeReport_Start(void)
                c_bmodels = 0;
                c_sprites = 0;
                c_particles = 0;
+               c_meshs = 0;
+               c_meshelements = 0;
 
                r_timereport_start = Sys_DoubleTime();
        }
@@ -478,7 +497,7 @@ void DrawQ_Pic(float x, float y, char *picname, float width, float height, float
 {
        int size;
        drawqueue_t *dq;
-       if (alpha < (1.0f / 255.0f))
+       if (alpha < (1.0f / 255.0f) || !picname || !picname[0])
                return;
        size = sizeof(*dq) + ((strlen(picname) + 1 + 3) & ~3);
        if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
@@ -501,7 +520,7 @@ void DrawQ_Pic(float x, float y, char *picname, float width, float height, float
        r_refdef.drawqueuesize += dq->size;
 }
 
-void DrawQ_String(float x, float y, char *string, int maxlen, float scalex, float scaley, float red, float green, float blue, float alpha, int flags)
+void DrawQ_String(float x, float y, const char *string, int maxlen, float scalex, float scaley, float red, float green, float blue, float alpha, int flags)
 {
        int size, len;
        drawqueue_t *dq;
@@ -575,8 +594,8 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
        drawqueuemesh_t *m;
        size = sizeof(*dq);
        size += sizeof(drawqueuemesh_t);
-       size += sizeof(int) * mesh->numindices;
-       size += sizeof(float[3]) * mesh->numvertices;
+       size += sizeof(int[3]) * mesh->numtriangles;
+       size += sizeof(float[4]) * mesh->numvertices;
        size += sizeof(float[2]) * mesh->numvertices;
        size += sizeof(float[4]) * mesh->numvertices;
        if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
@@ -592,12 +611,12 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
        dq->scaley = 0;
        p = (void *)(dq + 1);
        m = p;(qbyte *)p += sizeof(drawqueuemesh_t);
-       m->numindices = mesh->numindices;
+       m->numtriangles = mesh->numtriangles;
        m->numvertices = mesh->numvertices;
        m->texture = mesh->texture;
-       m->indices   = p;memcpy(m->indices  , mesh->indices  , m->numindices  * sizeof(int     ));(qbyte *)p += m->numindices  * sizeof(int     );
-       m->vertices  = p;memcpy(m->vertices , mesh->vertices , m->numvertices * sizeof(float[3]));(qbyte *)p += m->numvertices * sizeof(float[3]);
-       m->texcoords = p;memcpy(m->texcoords, mesh->texcoords, m->numvertices * sizeof(float[2]));(qbyte *)p += m->numvertices * sizeof(float[2]);
+       m->indices   = p;memcpy(m->indices  , mesh->indices  , m->numtriangles * sizeof(int[3]));(qbyte *)p += m->numtriangles * sizeof(int[3]);
+       m->vertices  = p;memcpy(m->vertices , mesh->vertices , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
+       m->texcoords = p;memcpy(m->texcoords, mesh->texcoords, m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
        m->colors    = p;memcpy(m->colors   , mesh->colors   , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
        r_refdef.drawqueuesize += dq->size;
 }
@@ -684,7 +703,7 @@ static void SCR_CalcRefdef (void)
        if (cl.worldmodel)
        {
                Mod_CheckLoaded(cl.worldmodel);
-               contents = Mod_PointInLeaf(r_refdef.vieworg, cl.worldmodel)->contents;
+               contents = Mod_PointContents(r_refdef.vieworg, cl.worldmodel);
                if (contents != CONTENTS_EMPTY && contents != CONTENTS_SOLID)
                {
                        r_refdef.fov_x *= (sin(cl.time * 4.7) * 0.015 + 0.985);
@@ -880,10 +899,9 @@ void SHOWLMP_decodeshow(void)
 void SHOWLMP_drawall(void)
 {
        int i;
-       if (cl.worldmodel)
-               for (i = 0;i < SHOWLMP_MAXLABELS;i++)
-                       if (showlmp[i].isactive)
-                               DrawQ_Pic(showlmp[i].x, showlmp[i].y, showlmp[i].pic, 0, 0, 1, 1, 1, 1, 0);
+       for (i = 0;i < SHOWLMP_MAXLABELS;i++)
+               if (showlmp[i].isactive)
+                       DrawQ_Pic(showlmp[i].x, showlmp[i].y, showlmp[i].pic, 0, 0, 1, 1, 1, 1, 0);
 }
 
 void SHOWLMP_clear(void)
@@ -929,6 +947,7 @@ void CL_SetupScreenSize(void)
        SCR_CalcRefdef();
 }
 
+extern void R_Shadow_EditLights_DrawSelectedLightProperties(void);
 void CL_UpdateScreen(void)
 {
        if (!scr_initialized || !con_initialized || vid_hidden)
@@ -939,7 +958,7 @@ void CL_UpdateScreen(void)
        else
                cl_avidemo_frame = 0;
 
-       if (cl.worldmodel)
+       if (cls.signon == SIGNONS)
                R_TimeReport("other");
 
        CL_SetupScreenSize();
@@ -949,11 +968,11 @@ void CL_UpdateScreen(void)
        V_UpdateBlends();
        V_CalcRefdef ();
 
-       if (cl.worldmodel)
+       if (cls.signon == SIGNONS)
                R_TimeReport("setup");
 
        //FIXME: force menu if nothing else to look at?
-       //if (key_dest == key_game && !cl.worldmodel && cls.state == ca_disconnected)
+       //if (key_dest == key_game && cls.signon != SIGNONS && cls.state == ca_disconnected)
 
        if (scr_drawloading)
        {
@@ -962,24 +981,25 @@ void CL_UpdateScreen(void)
        }
        else
        {
-               if (cl.worldmodel)
+               if (cls.signon == SIGNONS)
                {
                        SCR_DrawNet ();
                        SCR_DrawTurtle ();
                        SCR_DrawPause ();
                        Sbar_Draw();
+                       SHOWLMP_drawall();
+                       SCR_CheckDrawCenterString();
                }
-               SCR_CheckDrawCenterString();
-               SHOWLMP_drawall();
                ui_draw();
                CL_DrawVideo();
                M_Draw();
-               if (cl.worldmodel)
+               if (cls.signon == SIGNONS)
                {
                        R_TimeReport("2d");
                        R_TimeReport_End();
                        R_TimeReport_Start();
                }
+               R_Shadow_EditLights_DrawSelectedLightProperties();
        }
        SCR_DrawConsole();