X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cl_screen.c;h=86081c27ae17dc093f2f27e26a88e736cf42ed21;hp=74f00efcfb47369159cafdcea18c8cf8f3bc6f68;hb=01179863ff1eb63c5ff88c7019f9b3869ecbf2ff;hpb=fc312c111c0afaa2e4879bfd24c9183003c82edc diff --git a/cl_screen.c b/cl_screen.c index 74f00efc..86081c27 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -1,5 +1,6 @@ #include "quakedef.h" +#include "cl_video.h" cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"}; cvar_t scr_fov = {CVAR_SAVE, "fov","90"}; // 10 - 170 @@ -20,9 +21,7 @@ float scr_conlines; // lines of console to display int clearconsole; int clearnotify; -//qboolean scr_disabled_for_loading; qboolean scr_drawloading = false; -//float scr_disabled_time; static qbyte menuplyr_pixels[4096]; @@ -142,18 +141,6 @@ void SCR_CheckDrawCenterString (void) SCR_DrawCenterString (); } -/* -============== -SCR_DrawRam -============== -*/ -void SCR_DrawRam (void) -{ -// if (!scr_showram.integer) -// return; -// DrawQ_Pic (32, 0, "ram", 0, 0, 1, 1, 1, 1, 0); -} - /* ============== SCR_DrawTurtle @@ -232,9 +219,6 @@ void SCR_DrawLoading (void) { cachepic_t *pic; - //if (!scr_drawloading) - // return; - pic = Draw_CachePic ("gfx/loading.lmp"); DrawQ_Pic ((vid.conwidth - pic->width)/2, (vid.conheight - pic->height)/2, "gfx/loading.lmp", 0, 0, 1, 1, 1, 1, 0); } @@ -253,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; } /* @@ -313,42 +302,10 @@ void SCR_BeginLoadingPlaque (void) S_StopAllSounds (true); -// if (cls.state != ca_connected) -// return; -// if (cls.signon != SIGNONS) -// return; - -// redraw with no console and the loading plaque -// Con_ClearNotify (); -// scr_centertime_off = 0; -// scr_con_current = 0; - scr_drawloading = true; CL_UpdateScreen (); scr_drawloading = true; CL_UpdateScreen (); - //scr_drawloading = false; - -// scr_disabled_for_loading = true; -// scr_disabled_time = realtime; -} - -/* -=============== -SCR_EndLoadingPlaque - -================ -*/ -void SCR_EndLoadingPlaque (void) -{ - /* - if (!scr_drawloading) - return; - -// scr_disabled_for_loading = false; - scr_drawloading = false; - Con_ClearNotify (); - */ } //============================================================================= @@ -395,27 +352,22 @@ 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) { speedstringcount = 0; AngleVectors (r_refdef.viewangles, vpn, NULL, NULL); - //sprintf(r_speeds_string, "org:'%c%6.2f %c%6.2f %c%6.2f' ang:'%c%3.0f %c%3.0f %c%3.0f' dir:'%c%2.3f %c%2.3f %c%2.3f'\n%6i walls %6i dlitwalls %7i modeltris %7i meshtris\nBSP: %6i faces %6i nodes %6i leafs\n%4i models %4i bmodels %4i sprites %5i particles %3i dlights\n", - // r_refdef.vieworg[0] < 0 ? '-' : ' ', fabs(r_refdef.vieworg[0]), r_refdef.vieworg[1] < 0 ? '-' : ' ', fabs(r_refdef.vieworg[1]), r_refdef.vieworg[2] < 0 ? '-' : ' ', fabs(r_refdef.vieworg[2]), - // r_refdef.viewangles[0] < 0 ? '-' : ' ', fabs(r_refdef.viewangles[0]), r_refdef.viewangles[1] < 0 ? '-' : ' ', fabs(r_refdef.viewangles[1]), r_refdef.viewangles[2] < 0 ? '-' : ' ', fabs(r_refdef.viewangles[2]), - // vpn[0] < 0 ? '-' : ' ', fabs(vpn[0]), vpn[1] < 0 ? '-' : ' ', fabs(vpn[1]), vpn[2] < 0 ? '-' : ' ', fabs(vpn[2]), 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; @@ -425,7 +377,8 @@ void R_TimeReport_Start(void) c_bmodels = 0; c_sprites = 0; c_particles = 0; - // c_dlights = 0; + c_meshs = 0; + c_meshelements = 0; r_timereport_start = Sys_DoubleTime(); } @@ -443,7 +396,7 @@ void R_TimeReport_End(void) for (i = 0;r_speeds_string[i];i++) if (r_speeds_string[i] == '\n') lines++; - y = vid.conheight - sb_lines - lines * 8/* - 8*/; + y = vid.conheight - sb_lines - lines * 8; i = j = 0; DrawQ_Fill(0, y, vid.conwidth, lines * 8, 0, 0, 0, 0.5, 0); while (r_speeds_string[i]) @@ -530,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); @@ -553,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; @@ -571,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); @@ -599,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); @@ -619,34 +572,41 @@ void DrawQ_Fill (float x, float y, float w, float h, float red, float green, flo r_refdef.drawqueuesize += dq->size; } -//only used for the player color selection menu -void DrawQ_PicTranslate (int x, int y, char *picname, qbyte *translation) +void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags) { - int i, c; - unsigned int trans[4096]; - cachepic_t *pic; - - pic = Draw_CachePic(picname); - if (pic == NULL) - return; - - c = pic->width * pic->height; - if (c > 4096) - { - Con_Printf("DrawQ_PicTranslate: image larger than 4k buffer\n"); + int size; + void *p; + drawqueue_t *dq; + drawqueuemesh_t *m; + size = sizeof(*dq); + size += sizeof(drawqueuemesh_t); + 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) return; - } - - for (i = 0;i < c;i++) - trans[i] = d_8to24table[translation[menuplyr_pixels[i]]]; - - // FIXME: this is renderer stuff? - R_UpdateTexture (pic->tex, (qbyte *)trans); - - DrawQ_Pic(x, y, picname, 0, 0, 1, 1, 1, 1, 0); + dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize); + dq->size = size; + dq->command = DRAWQUEUE_MESH; + dq->flags = flags; + dq->color = 0; + dq->x = 0; + dq->y = 0; + dq->scalex = 0; + dq->scaley = 0; + p = (void *)(dq + 1); + m = p;(qbyte *)p += sizeof(drawqueuemesh_t); + m->numtriangles = mesh->numtriangles; + m->numvertices = mesh->numvertices; + m->texture = mesh->texture; + 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; } - /* ==================== CalcFov @@ -729,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); @@ -745,20 +705,15 @@ SCR_ScreenShot_f */ void SCR_ScreenShot_f (void) { - int i; + static int i = 0; char filename[16]; char checkname[MAX_OSPATH]; // // find a file name to save it to // - strcpy(filename, "dp0000.tga"); - - for (i=0 ; i<=9999 ; i++) + for (; i<=9999 ; i++) { - filename[2] = (i/1000)%10 + '0'; - filename[3] = (i/ 100)%10 + '0'; - filename[4] = (i/ 10)%10 + '0'; - filename[5] = (i/ 1)%10 + '0'; + sprintf (filename, "dp%04i.tga", i); sprintf (checkname, "%s/%s", com_gamedir, filename); if (Sys_FileTime(checkname) == -1) break; // file doesn't exist @@ -930,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) @@ -981,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) @@ -989,7 +943,8 @@ void CL_UpdateScreen(void) else cl_avidemo_frame = 0; - R_TimeReport("other"); + if (cls.signon == SIGNONS) + R_TimeReport("other"); CL_SetupScreenSize(); @@ -998,38 +953,39 @@ void CL_UpdateScreen(void) V_UpdateBlends(); V_CalcRefdef (); - R_TimeReport("setup"); - - SCR_DrawRam (); - 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(); } - - 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(); } @@ -1038,3 +994,4 @@ void CL_Screen_NewMap(void) { SHOWLMP_clear(); } +