X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cl_screen.c;h=d7baa8b2a1f3d727d54c940adc106cee994dd59e;hp=f9f4fe2219543442624467fb83b5bf1fbadd2507;hb=66ba61eab96c3f91e48a2768238c4096efbdb063;hpb=7ccb3fb85096674f7bde0d7323946b03c005272a diff --git a/cl_screen.c b/cl_screen.c index f9f4fe22..d7baa8b2 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -14,14 +14,15 @@ cvar_t scr_centertime = {0, "scr_centertime","2"}; cvar_t scr_showram = {CVAR_SAVE, "showram","1"}; cvar_t scr_showturtle = {CVAR_SAVE, "showturtle","0"}; cvar_t scr_showpause = {CVAR_SAVE, "showpause","1"}; +cvar_t scr_showbrand = {0, "showbrand","0"}; cvar_t scr_printspeed = {0, "scr_printspeed","8"}; cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640"}; cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480"}; -cvar_t vid_pixelaspect = {CVAR_SAVE, "vid_pixelaspect", "1"}; -cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"}; +cvar_t vid_pixelheight = {CVAR_SAVE, "vid_pixelheight", "1"}; +cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","1"}; cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"}; cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2"}; -cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"}; +// scr_screenshot_name is defined in fs.c cvar_t cl_capturevideo = {0, "cl_capturevideo", "0"}; cvar_t cl_capturevideo_sound = {0, "cl_capturevideo_sound", "0"}; cvar_t cl_capturevideo_fps = {0, "cl_capturevideo_fps", "30"}; @@ -161,7 +162,7 @@ CENTER PRINTING =============================================================================== */ -char scr_centerstring[1024]; +char scr_centerstring[MAX_INPUTLINE]; float scr_centertime_start; // for slow victory printing float scr_centertime_off; int scr_center_lines; @@ -199,6 +200,7 @@ void SCR_DrawCenterString (void) int l; int x, y; int remaining; + int color; // the finale prints the characters one at a time if (cl.intermission) @@ -209,11 +211,15 @@ void SCR_DrawCenterString (void) scr_erase_center = 0; start = scr_centerstring; + if (remaining < 1) + return; + if (scr_center_lines <= 4) y = vid_conheight.integer*0.35; else y = 48; + color = -1; do { // scan the width of the line @@ -225,7 +231,7 @@ void SCR_DrawCenterString (void) { if (remaining < l) l = remaining; - DrawQ_String(x, y, start, l, 8, 8, 1, 1, 1, 1, 0); + DrawQ_ColoredString(x, y, start, l, 8, 8, 1, 1, 1, 1, 0, &color); remaining -= l; if (remaining <= 0) return; @@ -328,9 +334,61 @@ void SCR_DrawPause (void) DrawQ_Pic ((vid_conwidth.integer - pic->width)/2, (vid_conheight.integer - pic->height)/2, "gfx/pause", 0, 0, 1, 1, 1, 1, 0); } +/* +============== +SCR_DrawBrand +============== +*/ +void SCR_DrawBrand (void) +{ + cachepic_t *pic; + float x, y; + + if (!scr_showbrand.value) + return; + pic = Draw_CachePic ("gfx/brand", true); + switch ((int)scr_showbrand.value) + { + case 1: // bottom left + x = 0; + y = vid_conheight.integer - pic->height; + break; + case 2: // bottom centre + x = (vid_conwidth.integer - pic->width) / 2; + y = vid_conheight.integer - pic->height; + break; + case 3: // bottom right + x = vid_conwidth.integer - pic->width; + y = vid_conheight.integer - pic->height; + break; + case 4: // centre right + x = vid_conwidth.integer - pic->width; + y = (vid_conheight.integer - pic->height) / 2; + break; + case 5: // top right + x = vid_conwidth.integer - pic->width; + y = 0; + break; + case 6: // top centre + x = (vid_conwidth.integer - pic->width) / 2; + y = 0; + break; + case 7: // top left + x = 0; + y = 0; + break; + case 8: // centre left + x = 0; + y = (vid_conheight.integer - pic->height) / 2; + break; + default: + return; + } + DrawQ_Pic (x, y, "gfx/brand", 0, 0, 1, 1, 1, 1, 0); +} //============================================================================= @@ -428,6 +486,7 @@ void R_TimeReport(char *desc) if (!r_timereport_active || r_showtrispass) return; + qglFinish(); r_timereport_temp = r_timereport_current; r_timereport_current = Sys_DoubleTime(); t = (int) ((r_timereport_current - r_timereport_temp) * 1000000.0); @@ -463,43 +522,17 @@ void R_TimeReport_Start(void) { speedstringcount = 0; sprintf(r_speeds_string + strlen(r_speeds_string), "org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\n", r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], r_viewforward[0], r_viewforward[1], r_viewforward[2]); - sprintf(r_speeds_string + strlen(r_speeds_string), "world:%6i faces%6i nodes%6i leafs%6i dlitwalls\n", c_faces, c_nodes, c_leafs, c_light_polys); - sprintf(r_speeds_string + strlen(r_speeds_string), "%5i models%5i bmodels%5i sprites%6i particles%4i dlights\n", c_models, c_bmodels, c_sprites, c_particles, c_dlights); - sprintf(r_speeds_string + strlen(r_speeds_string), "%6i modeltris%6i meshs%6i meshtris\n", c_alias_polys, c_meshs, c_meshelements / 3); - sprintf(r_speeds_string + strlen(r_speeds_string), "bloom %s: %i copies (%i pixels) %i draws (%i pixels)\n", c_bloom ? "active" : "inactive", c_bloomcopies, c_bloomcopypixels, c_bloomdraws, c_bloomdrawpixels); - sprintf(r_speeds_string + strlen(r_speeds_string), "realtime lighting:%4i lights%4i clears%4i scissored\n", c_rt_lights, c_rt_clears, c_rt_scissored); - sprintf(r_speeds_string + strlen(r_speeds_string), "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n", c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris); - sprintf(r_speeds_string + strlen(r_speeds_string), "precomputed: %6i shadowmeshes%6i shadowtris\n", c_rtcached_shadowmeshes, c_rtcached_shadowtris); - - c_alias_polys = 0; - c_light_polys = 0; - c_faces = 0; - c_nodes = 0; - c_leafs = 0; - c_models = 0; - c_bmodels = 0; - c_sprites = 0; - c_particles = 0; - c_dlights = 0; - c_meshs = 0; - c_meshelements = 0; - c_rt_lights = 0; - c_rt_clears = 0; - c_rt_scissored = 0; - c_rt_shadowmeshes = 0; - c_rt_shadowtris = 0; - c_rt_lightmeshes = 0; - c_rt_lighttris = 0; - c_rtcached_shadowmeshes = 0; - c_rtcached_shadowtris = 0; - c_bloom = 0; - c_bloomcopies = 0; - c_bloomcopypixels = 0; - c_bloomdraws = 0; - c_bloomdrawpixels = 0; + sprintf(r_speeds_string + strlen(r_speeds_string), "%5i entities%6i surfaces%6i triangles%5i leafs%5i portals%6i particles\n", renderstats.entities, renderstats.entities_surfaces, renderstats.entities_triangles, renderstats.world_leafs, renderstats.world_portals, renderstats.particles); + sprintf(r_speeds_string + strlen(r_speeds_string), "%4i lights%4i clears%4i scissored%7i light%7i shadow%7i dynamic\n", renderstats.lights, renderstats.lights_clears, renderstats.lights_scissored, renderstats.lights_lighttriangles, renderstats.lights_shadowtriangles, renderstats.lights_dynamicshadowtriangles); + if (renderstats.bloom) + sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles bloompixels%8i copied%8i drawn\n", renderstats.meshes, renderstats.meshes_elements / 3, renderstats.bloom_copypixels, renderstats.bloom_drawpixels); + else + sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles\n", renderstats.meshes, renderstats.meshes_elements / 3); r_timereport_start = Sys_DoubleTime(); } + + memset(&renderstats, 0, sizeof(renderstats)); } void R_TimeReport_End(void) @@ -567,11 +600,12 @@ void CL_Screen_Init(void) Cvar_RegisterVariable (&scr_showram); Cvar_RegisterVariable (&scr_showturtle); Cvar_RegisterVariable (&scr_showpause); + Cvar_RegisterVariable (&scr_showbrand); Cvar_RegisterVariable (&scr_centertime); Cvar_RegisterVariable (&scr_printspeed); Cvar_RegisterVariable (&vid_conwidth); Cvar_RegisterVariable (&vid_conheight); - Cvar_RegisterVariable (&vid_pixelaspect); + Cvar_RegisterVariable (&vid_pixelheight); Cvar_RegisterVariable (&scr_screenshot_jpeg); Cvar_RegisterVariable (&scr_screenshot_jpeg_quality); Cvar_RegisterVariable (&scr_screenshot_gamma); @@ -626,7 +660,7 @@ void DrawQ_String_Real(float x, float y, const char *string, int maxlen, float s green = bound(0, green, 1); blue = bound(0, blue, 1); alpha = bound(0, alpha, 1); - dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize); + dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize); dq->size = size; dq->command = DRAWQUEUE_STRING; dq->flags = flags; @@ -703,7 +737,7 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags) size += sizeof(float[4]) * mesh->num_vertices; if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize) return; - dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize); + dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize); dq->size = size; dq->command = DRAWQUEUE_MESH; dq->flags = flags; @@ -713,14 +747,14 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags) dq->scalex = 0; dq->scaley = 0; p = (void *)(dq + 1); - m = p;p = (qbyte*)p + sizeof(drawqueuemesh_t); + m = (drawqueuemesh_t *)p;p = (unsigned char*)p + sizeof(drawqueuemesh_t); m->num_triangles = mesh->num_triangles; m->num_vertices = mesh->num_vertices; m->texture = mesh->texture; - m->data_element3i = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (qbyte*)p + m->num_triangles * sizeof(int[3]); - m->data_vertex3f = p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (qbyte*)p + m->num_vertices * sizeof(float[3]); - m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (qbyte*)p + m->num_vertices * sizeof(float[2]); - m->data_color4f = p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (qbyte*)p + m->num_vertices * sizeof(float[4]); + m->data_element3i = (int *)p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (unsigned char*)p + m->num_triangles * sizeof(int[3]); + m->data_vertex3f = (float *)p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (unsigned char*)p + m->num_vertices * sizeof(float[3]); + m->data_texcoord2f = (float *)p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (unsigned char*)p + m->num_vertices * sizeof(float[2]); + m->data_color4f = (float *)p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (unsigned char*)p + m->num_vertices * sizeof(float[4]); r_refdef.drawqueuesize += dq->size; } @@ -732,7 +766,7 @@ void DrawQ_SetClipArea(float x, float y, float width, float height) Con_DPrint("DrawQueue full !\n"); return; } - dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize); + dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize); dq->size = sizeof(*dq); dq->command = DRAWQUEUE_SETCLIP; dq->x = x; @@ -753,7 +787,7 @@ void DrawQ_ResetClipArea(void) Con_DPrint("DrawQueue full !\n"); return; } - dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize); + dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize); dq->size = sizeof(*dq); dq->command = DRAWQUEUE_RESETCLIP; dq->x = 0; @@ -777,9 +811,9 @@ void SCR_ScreenShot_f (void) static char oldname[MAX_QPATH]; char base[MAX_QPATH]; char filename[MAX_QPATH]; - qbyte *buffer1; - qbyte *buffer2; - qbyte *buffer3; + unsigned char *buffer1; + unsigned char *buffer2; + unsigned char *buffer3; qboolean jpeg = (scr_screenshot_jpeg.integer != 0); sprintf (base, "screenshots/%s", scr_screenshot_name.string); @@ -802,9 +836,9 @@ void SCR_ScreenShot_f (void) sprintf(filename, "%s%06d.%s", base, shotnumber, jpeg ? "jpg" : "tga"); - buffer1 = Mem_Alloc(tempmempool, vid.width * vid.height * 3); - buffer2 = Mem_Alloc(tempmempool, vid.width * vid.height * 3); - buffer3 = Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18); + buffer1 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3); + buffer2 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3); + buffer3 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18); if (SCR_ScreenShot (filename, buffer1, buffer2, buffer3, 0, 0, vid.width, vid.height, false, false, false, jpeg, true)) Con_Printf("Wrote %s\n", filename); @@ -833,7 +867,7 @@ static double cl_capturevideo_starttime = 0; double cl_capturevideo_framerate = 0; static int cl_capturevideo_soundrate = 0; static int cl_capturevideo_frame = 0; -static qbyte *cl_capturevideo_buffer = NULL; +static unsigned char *cl_capturevideo_buffer = NULL; static qfile_t *cl_capturevideo_videofile = NULL; qfile_t *cl_capturevideo_soundfile = NULL; static short cl_capturevideo_rgbtoyuvscaletable[3][3][256]; @@ -844,7 +878,7 @@ void SCR_CaptureVideo_BeginVideo(void) { double gamma, g; unsigned int i; - qbyte out[44]; + unsigned char out[44]; if (cl_capturevideo_active) return; // soundrate is figured out on the first SoundFrame @@ -853,7 +887,7 @@ void SCR_CaptureVideo_BeginVideo(void) cl_capturevideo_framerate = bound(1, cl_capturevideo_fps.value, 1000); cl_capturevideo_soundrate = 0; cl_capturevideo_frame = 0; - cl_capturevideo_buffer = Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18); + cl_capturevideo_buffer = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18); gamma = 1.0/scr_screenshot_gamma.value; /* @@ -929,7 +963,7 @@ Cr = R * .500 + G * -.419 + B * -.0813 + 128.; void SCR_CaptureVideo_EndVideo(void) { int i, n; - qbyte out[44]; + unsigned char out[44]; if (!cl_capturevideo_active) return; cl_capturevideo_active = false; @@ -1082,7 +1116,7 @@ qboolean SCR_CaptureVideo_VideoFrame(int newframenum) } } -void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate) +void SCR_CaptureVideo_SoundFrame(unsigned char *bufstereo16le, size_t length, int rate) { if (!cl_capturevideo_soundfile) return; @@ -1141,7 +1175,7 @@ R_Envmap_f Grab six views for environment mapping tests =============== */ -struct +struct envmapinfo_s { float angles[3]; char *name; @@ -1167,10 +1201,10 @@ envmapinfo[12] = static void R_Envmap_f (void) { int j, size; - char filename[256], basename[256]; - qbyte *buffer1; - qbyte *buffer2; - qbyte *buffer3; + char filename[MAX_QPATH], basename[MAX_QPATH]; + unsigned char *buffer1; + unsigned char *buffer2; + unsigned char *buffer3; if (Cmd_Argc() != 3) { @@ -1198,12 +1232,12 @@ static void R_Envmap_f (void) r_refdef.width = size; r_refdef.height = size; - r_refdef.fov_x = 90; - r_refdef.fov_y = 90; + r_refdef.frustum_x = tan(90 * M_PI / 360.0); + r_refdef.frustum_y = tan(90 * M_PI / 360.0); - buffer1 = Mem_Alloc(tempmempool, size * size * 3); - buffer2 = Mem_Alloc(tempmempool, size * size * 3); - buffer3 = Mem_Alloc(tempmempool, size * size * 3 + 18); + buffer1 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3); + buffer2 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3); + buffer3 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3 + 18); for (j = 0;j < 12;j++) { @@ -1242,7 +1276,7 @@ showlmp_t showlmp[SHOWLMP_MAXLABELS]; void SHOWLMP_decodehide(void) { int i; - qbyte *lmplabel; + char *lmplabel; lmplabel = MSG_ReadString(); for (i = 0;i < SHOWLMP_MAXLABELS;i++) if (showlmp[i].isactive && strcmp(showlmp[i].label, lmplabel) == 0) @@ -1255,7 +1289,7 @@ void SHOWLMP_decodehide(void) void SHOWLMP_decodeshow(void) { int i, k; - qbyte lmplabel[256], picname[256]; + char lmplabel[256], picname[256]; float x, y; strlcpy (lmplabel,MSG_ReadString(), sizeof (lmplabel)); strlcpy (picname, MSG_ReadString(), sizeof (picname)); @@ -1408,6 +1442,8 @@ void CL_UpdateScreen(void) SCR_DrawConsole(); + SCR_DrawBrand(); + SCR_UpdateScreen(); }