X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cl_screen.c;h=dc0418a19968096b6fdf22f8af521f61bf972817;hp=f048179490aea2ddbbbe36ca9e3c703fb68b5842;hb=6f4bdacc137d137d64882beb27d6dc0091de0f0e;hpb=6b1292df5635bf2dcefdb857cdd7bd3f2303d6af diff --git a/cl_screen.c b/cl_screen.c index f0481794..dc0418a1 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -34,7 +34,6 @@ int jpeg_supported = false; qboolean scr_initialized; // ready to draw float scr_con_current; -float scr_conlines; // lines of console to display extern int con_vislines; @@ -234,6 +233,9 @@ SCR_SetUpToDrawConsole */ void SCR_SetUpToDrawConsole (void) { + // lines of console to display + float conlines; + Con_CheckResize (); if (key_dest == key_game && cls.signon != SIGNONS && scr_conforcewhiledisconnected.integer) @@ -242,31 +244,29 @@ void SCR_SetUpToDrawConsole (void) key_consoleactive &= ~KEY_CONSOLEACTIVE_FORCED; // 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 + if (key_consoleactive & KEY_CONSOLEACTIVE_USER) + conlines = vid.conheight/2; // half screen else - scr_conlines = 0; // none visible + conlines = 0; // none visible if (scr_conspeed.value) { - if (scr_conlines < scr_con_current) + if (scr_con_current > conlines) { scr_con_current -= scr_conspeed.value*host_realframetime; - if (scr_conlines > scr_con_current) - scr_con_current = scr_conlines; + if (scr_con_current < conlines) + scr_con_current = conlines; } - else if (scr_conlines > scr_con_current) + else if (scr_con_current < conlines) { scr_con_current += scr_conspeed.value*host_realframetime; - if (scr_conlines < scr_con_current) - scr_con_current = scr_conlines; + if (scr_con_current > conlines) + scr_con_current = conlines; } } else - scr_con_current = scr_conlines; + scr_con_current = conlines; } /* @@ -276,7 +276,12 @@ SCR_DrawConsole */ void SCR_DrawConsole (void) { - if (scr_con_current) + if (key_consoleactive & KEY_CONSOLEACTIVE_FORCED) + { + // full screen + Con_DrawConsole (vid.conheight); + } + else if (scr_con_current) Con_DrawConsole (scr_con_current); else { @@ -340,9 +345,6 @@ 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; void R_TimeReport_Start(void) { r_timereport_active = r_speeds.integer && cls.signon == SIGNONS && cls.state == ca_connected; @@ -350,23 +352,14 @@ void R_TimeReport_Start(void) if (r_timereport_active) { speedstringcount = 0; - sprintf(r_speeds_string, - "org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\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_vieworigin[0], r_vieworigin[1], r_vieworigin[2], r_viewforward[0], r_viewforward[1], r_viewforward[2], - 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_meshelements / 3); - - 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); + 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; @@ -377,8 +370,23 @@ void R_TimeReport_Start(void) 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; r_timereport_start = Sys_DoubleTime(); } @@ -527,7 +535,7 @@ void DrawQ_String(float x, float y, const char *string, int maxlen, float scalex if (r_textshadow.integer) DrawQ_String_Real(x+scalex*0.25,y+scaley*0.25,string,maxlen,scalex,scaley,0,0,0,alpha*0.8,flags); - DrawQ_String_Real(x,y,string,maxlen,scalex,scaley,red,green,blue,alpha,flags); + DrawQ_String_Real(x,y,string,maxlen,scalex,scaley,red,green,blue,alpha,flags); } void DrawQ_Fill (float x, float y, float w, float h, float red, float green, float blue, float alpha, int flags) @@ -717,12 +725,12 @@ static qfile_t *cl_capturevideo_videofile = NULL; static qfile_t *cl_capturevideo_soundfile = NULL; static short cl_capturevideo_rgbtoyuvscaletable[3][3][256]; static unsigned char cl_capturevideo_yuvnormalizetable[3][256]; -static unsigned char cl_capturevideo_rgbgammatable[3][256]; +//static unsigned char cl_capturevideo_rgbgammatable[3][256]; void SCR_CaptureVideo_BeginVideo(void) { double gamma, g; - unsigned int i, j; + unsigned int i; qbyte out[44]; if (cl_capturevideo_active) return; @@ -735,13 +743,15 @@ void SCR_CaptureVideo_BeginVideo(void) cl_capturevideo_buffer = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * (3+3+3) + 18); gamma = 1.0/scr_screenshot_gamma.value; + /* for (i = 0;i < 256;i++) { - j = (unsigned char)bound(0, 255*pow(i/255.0, gamma), 255); + unsigned char j = (unsigned char)bound(0, 255*pow(i/255.0, gamma), 255); cl_capturevideo_rgbgammatable[0][i] = j; cl_capturevideo_rgbgammatable[1][i] = j; cl_capturevideo_rgbgammatable[2][i] = j; } + */ /* R = Y + 1.4075 * (Cr - 128); G = Y + -0.3455 * (Cb - 128) + -0.7169 * (Cr - 128); @@ -752,7 +762,7 @@ Cr = R * .500 + G * -.419 + B * -.0813 + 128.; */ for (i = 0;i < 256;i++) { - g = i;//255*pow(i/255.0, gamma); + g = 255*pow(i/255.0, gamma); // Y weights from RGB cl_capturevideo_rgbtoyuvscaletable[0][0][i] = (short)(g * 0.299); cl_capturevideo_rgbtoyuvscaletable[0][1][i] = (short)(g * 0.587); @@ -774,12 +784,12 @@ Cr = R * .500 + G * -.419 + B * -.0813 + 128.; if (cl_capturevideo_rawrgb.integer) { cl_capturevideo_format = CAPTUREVIDEOFORMAT_RAWRGB; - cl_capturevideo_videofile = FS_Open ("video/dpvideo.rgb", "wb", false); + cl_capturevideo_videofile = FS_Open ("video/dpvideo.rgb", "wb", false, true); } else if (cl_capturevideo_rawyv12.integer) { cl_capturevideo_format = CAPTUREVIDEOFORMAT_RAWYV12; - cl_capturevideo_videofile = FS_Open ("video/dpvideo.yv12", "wb", false); + cl_capturevideo_videofile = FS_Open ("video/dpvideo.yv12", "wb", false, true); } else if (scr_screenshot_jpeg.integer) { @@ -792,7 +802,7 @@ Cr = R * .500 + G * -.419 + B * -.0813 + 128.; cl_capturevideo_videofile = NULL; } - cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false); + cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false, true); // wave header will be filled out when video ends memset(out, 0, 44); @@ -1206,6 +1216,44 @@ void CL_UpdateScreen(void) if (!scr_initialized || !con_initialized || vid_hidden) return; // not initialized yet + // don't allow cheats in multiplayer + if (!cl.islocalgame && cl.worldmodel) + { + if (r_fullbright.integer != 0) + Cvar_Set ("r_fullbright", "0"); + if (r_ambient.value != 0) + Cvar_Set ("r_ambient", "0"); + } + + // bound viewsize + if (scr_viewsize.value < 30) + Cvar_Set ("viewsize","30"); + if (scr_viewsize.value > 120) + Cvar_Set ("viewsize","120"); + + // bound field of view + if (scr_fov.value < 1) + Cvar_Set ("fov","1"); + if (scr_fov.value > 170) + Cvar_Set ("fov","170"); + + // intermission is always full screen + if (cl.intermission) + sb_lines = 0; + else + { + if (scr_viewsize.value >= 120) + sb_lines = 0; // no status bar at all + else if (scr_viewsize.value >= 110) + sb_lines = 24; // no inventory + else + sb_lines = 24+16+8; + } + + r_refdef.colormask[0] = 1; + r_refdef.colormask[1] = 1; + r_refdef.colormask[2] = 1; + SCR_CaptureVideo(); if (cls.signon == SIGNONS)