X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_screen.c;h=86081c27ae17dc093f2f27e26a88e736cf42ed21;hb=279f0872533dc81f28514584be5e41481fc106da;hp=d66550984709680c57e980f1c577e7537b01adee;hpb=b37129d36872d2d42d861024433c34239b24f6a3;p=xonotic%2Fdarkplaces.git diff --git a/cl_screen.c b/cl_screen.c index d6655098..86081c27 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -237,32 +237,37 @@ void SCR_SetUpToDrawConsole (void) { Con_CheckResize (); -// decide on the height of the console - con_forcedup = !cl.worldmodel || cls.signon != SIGNONS; + if (key_dest == key_game && cls.signon != SIGNONS) + key_consoleactive |= KEY_CONSOLEACTIVE_FORCED; + else + key_consoleactive &= ~KEY_CONSOLEACTIVE_FORCED; - if (con_forcedup) - { - scr_conlines = vid.conheight; // full screen - scr_con_current = scr_conlines; - } - else if (key_dest == key_console) +// decide on the height of the console + 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 - if (scr_conlines < scr_con_current) + if (scr_conspeed.value) { - scr_con_current -= scr_conspeed.value*host_realframetime; - if (scr_conlines > scr_con_current) - scr_con_current = scr_conlines; - - } - else if (scr_conlines > scr_con_current) - { - scr_con_current += scr_conspeed.value*host_realframetime; if (scr_conlines < scr_con_current) - scr_con_current = scr_conlines; + { + scr_con_current -= scr_conspeed.value*host_realframetime; + if (scr_conlines > scr_con_current) + scr_con_current = scr_conlines; + + } + else if (scr_conlines > scr_con_current) + { + scr_con_current += scr_conspeed.value*host_realframetime; + if (scr_conlines < scr_con_current) + scr_con_current = scr_conlines; + } } + else + scr_con_current = scr_conlines; } /* @@ -347,7 +352,7 @@ void R_TimeReport(char *desc) 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) { @@ -355,15 +360,14 @@ 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 transmeshs%6i transtris%6i meshs%6i meshtris\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_transmeshs, c_transtris, c_meshs, c_meshtris); + c_alias_polys, c_meshs, c_meshelements / 3); - c_brush_polys = 0; c_alias_polys = 0; c_light_polys = 0; c_faces = 0; @@ -373,6 +377,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(); } @@ -477,10 +483,10 @@ 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 > MAX_DRAWQUEUE) + if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize) return; red = bound(0, red, 1); green = bound(0, green, 1); @@ -500,7 +506,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; @@ -518,7 +524,7 @@ void DrawQ_String(float x, float y, char *string, int maxlen, float scalex, floa if (x >= vid.conwidth || y >= vid.conheight || x < (-scalex * maxlen) || y < (-scaley)) return; size = sizeof(*dq) + ((len + 1 + 3) & ~3); - if (r_refdef.drawqueuesize + size > MAX_DRAWQUEUE) + if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize) return; red = bound(0, red, 1); green = bound(0, green, 1); @@ -546,7 +552,7 @@ void DrawQ_Fill (float x, float y, float w, float h, float red, float green, flo if (alpha < (1.0f / 255.0f)) return; size = sizeof(*dq) + 4; - if (r_refdef.drawqueuesize + size > MAX_DRAWQUEUE) + if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize) return; red = bound(0, red, 1); green = bound(0, green, 1); @@ -574,11 +580,11 @@ 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 > MAX_DRAWQUEUE) + if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize) return; dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize); dq->size = size; @@ -591,12 +597,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; } @@ -683,7 +689,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); @@ -879,10 +885,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) @@ -930,7 +935,7 @@ void CL_SetupScreenSize(void) void CL_UpdateScreen(void) { - if (!scr_initialized || !con_initialized) + if (!scr_initialized || !con_initialized || vid_hidden) return; // not initialized yet if (cl_avidemo.integer) @@ -938,7 +943,8 @@ void CL_UpdateScreen(void) else cl_avidemo_frame = 0; - R_TimeReport("other"); + if (cls.signon == SIGNONS) + R_TimeReport("other"); CL_SetupScreenSize(); @@ -947,39 +953,39 @@ void CL_UpdateScreen(void) V_UpdateBlends(); V_CalcRefdef (); - R_TimeReport("setup"); - - SCR_DrawNet (); - SCR_DrawTurtle (); - SCR_DrawPause (); - - Sbar_Draw(); - - SCR_CheckDrawCenterString(); - SHOWLMP_drawall(); - - SCR_DrawConsole(); + if (cls.signon == SIGNONS) + R_TimeReport("setup"); - ui_draw(); + //FIXME: force menu if nothing else to look at? + //if (key_dest == key_game && cls.signon != SIGNONS && cls.state == ca_disconnected) if (scr_drawloading) { scr_drawloading = false; SCR_DrawLoading(); } - - CL_DrawVideo(); - - R_TimeReport("2d"); - - // add r_speeds text to queue - R_TimeReport_End(); - - // start a new timing run - R_TimeReport_Start(); - - // make menu fade everything else on the screen - M_Draw(); + else + { + if (cls.signon == SIGNONS) + { + SCR_DrawNet (); + SCR_DrawTurtle (); + SCR_DrawPause (); + Sbar_Draw(); + SHOWLMP_drawall(); + SCR_CheckDrawCenterString(); + } + ui_draw(); + CL_DrawVideo(); + M_Draw(); + if (cls.signon == SIGNONS) + { + R_TimeReport("2d"); + R_TimeReport_End(); + R_TimeReport_Start(); + } + } + SCR_DrawConsole(); SCR_UpdateScreen(); }