X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_screen.c;h=13d8a52c86ee07b94339fd1a6cb2c6483279f7dd;hb=a845e9f59600c6443cfca0517d9c30ee9f0904b9;hp=5bd91ecd57027659142e72c4d194ddc7e1484976;hpb=2457049d5c465507f01ec1317153f4e261b69924;p=xonotic%2Fdarkplaces.git diff --git a/cl_screen.c b/cl_screen.c index 5bd91ecd..13d8a52c 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -17,10 +17,13 @@ cvar_t scr_showpause = {CVAR_SAVE, "showpause","1"}; 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 scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"}; cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"}; cvar_t cl_avidemo = {0, "cl_avidemo", "0"}; +cvar_t r_textshadow = {0, "r_textshadow", "0"}; +cvar_t r_letterbox = {0, "r_letterbox", "0"}; int jpeg_supported = false; @@ -32,6 +35,8 @@ float scr_conlines; // lines of console to display int clearconsole; int clearnotify; +extern int con_vislines; + qboolean scr_drawloading = false; void DrawCrosshair(int num); @@ -292,6 +297,7 @@ void SCR_DrawConsole (void) } else { + con_vislines = 0; if (key_dest == key_game || key_dest == key_message) Con_DrawNotify (); // only draw notify in game } @@ -308,7 +314,7 @@ void SCR_BeginLoadingPlaque (void) if (scr_drawloading) return; - S_StopAllSounds (true); + S_StopAllSounds (); scr_drawloading = true; CL_UpdateScreen (); @@ -471,9 +477,12 @@ void CL_Screen_Init(void) Cvar_RegisterVariable (&scr_printspeed); Cvar_RegisterVariable (&vid_conwidth); Cvar_RegisterVariable (&vid_conheight); + Cvar_RegisterVariable (&vid_pixelaspect); Cvar_RegisterVariable (&scr_screenshot_jpeg); Cvar_RegisterVariable (&scr_screenshot_jpeg_quality); Cvar_RegisterVariable (&cl_avidemo); + Cvar_RegisterVariable (&r_textshadow); + Cvar_RegisterVariable (&r_letterbox); Cmd_AddCommand ("sizeup",SCR_SizeUp_f); Cmd_AddCommand ("sizedown",SCR_SizeDown_f); @@ -494,7 +503,7 @@ void DrawQ_Pic(float x, float y, char *picname, float width, float height, float DrawQ_SuperPic(x,y,picname,width,height,0,0,red,green,blue,alpha,1,0,red,green,blue,alpha,0,1,red,green,blue,alpha,1,1,red,green,blue,alpha,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) +void DrawQ_String_Real(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; @@ -533,6 +542,14 @@ void DrawQ_String(float x, float y, const char *string, int maxlen, float scalex r_refdef.drawqueuesize += dq->size; } +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) +{ + 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); +} + void DrawQ_Fill (float x, float y, float w, float h, float red, float green, float blue, float alpha, int flags) { DrawQ_SuperPic(x,y,NULL,w,h,0,0,red,green,blue,alpha,1,0,red,green,blue,alpha,0,1,red,green,blue,alpha,1,1,red,green,blue,alpha,flags); @@ -655,15 +672,25 @@ SCR_ScreenShot_f */ void SCR_ScreenShot_f (void) { - int shotnumber; + static int shotnumber; + static char oldname[MAX_QPATH]; char base[MAX_QPATH]; char filename[MAX_QPATH]; + qbyte *buffer1; + qbyte *buffer2; + qbyte *buffer3; qboolean jpeg = (scr_screenshot_jpeg.integer != 0); sprintf (base, "screenshots/%s", scr_screenshot_name.string); - + + if (strcmp (oldname, scr_screenshot_name.string)) + { + sprintf(oldname, "%s", scr_screenshot_name.string); + shotnumber = 0; + } + // find a file name to save it to - for (shotnumber=0;shotnumber < 1000000;shotnumber++) + for (;shotnumber < 1000000;shotnumber++) if (!FS_SysFileExists(va("%s/%s%06d.tga", fs_gamedir, base, shotnumber)) && !FS_SysFileExists(va("%s/%s%06d.jpg", fs_gamedir, base, shotnumber))) break; if (shotnumber >= 1000000) @@ -672,15 +699,21 @@ void SCR_ScreenShot_f (void) return; } - if (jpeg) - sprintf(filename, "%s%06d.jpg", base, shotnumber); - else - sprintf(filename, "%s%06d.tga", base, shotnumber); + sprintf(filename, "%s%06d.%s", base, shotnumber, jpeg ? "jpg" : "tga"); - if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg)) + buffer1 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3); + buffer2 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3); + buffer3 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3 + 18); + + if (SCR_ScreenShot (filename, buffer1, buffer2, buffer3, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg)) Con_Printf("Wrote %s\n", filename); else Con_Printf("unable to write %s\n", filename); + + Mem_Free (buffer1); + Mem_Free (buffer2); + Mem_Free (buffer3); + shotnumber++; } @@ -688,20 +721,42 @@ static int cl_avidemo_frame = 0; void SCR_CaptureAVIDemo(void) { + static qbyte *avi_buffer1 = NULL; + static qbyte *avi_buffer2 = NULL; + static qbyte *avi_buffer3 = NULL; char filename[32]; qboolean jpeg = (scr_screenshot_jpeg.integer != 0); - if (jpeg) - sprintf(filename, "video/dp%06d.jpg", cl_avidemo_frame); - else - sprintf(filename, "video/dp%06d.tga", cl_avidemo_frame); + if (!cl_avidemo.integer) + { + if (avi_buffer1 != NULL) + { + Mem_Free (avi_buffer1); + Mem_Free (avi_buffer2); + Mem_Free (avi_buffer3); + avi_buffer1 = NULL; + avi_buffer2 = NULL; + avi_buffer3 = NULL; + } + cl_avidemo_frame = 0; + return; + } - if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg)) + if (avi_buffer1 == NULL) + { + avi_buffer1 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3); + avi_buffer2 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3); + avi_buffer3 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3 + 18); + } + + sprintf(filename, "video/dp%06d.%s", cl_avidemo_frame, jpeg ? "jpg" : "tga"); + + if (SCR_ScreenShot(filename, avi_buffer1, avi_buffer2, avi_buffer3, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg)) cl_avidemo_frame++; else { Cvar_SetValueQuick(&cl_avidemo, 0); - Con_Printf("avi saving failed on frame %i, out of disk space? stopping avi demo catpure.\n", cl_avidemo_frame); + Con_Printf("avi saving failed on frame %i, out of disk space? stopping avi demo capture.\n", cl_avidemo_frame); cl_avidemo_frame = 0; } } @@ -740,6 +795,9 @@ static void R_Envmap_f (void) { int j, size; char filename[256], basename[256]; + qbyte *buffer1; + qbyte *buffer2; + qbyte *buffer3; if (Cmd_Argc() != 3) { @@ -770,6 +828,10 @@ static void R_Envmap_f (void) r_refdef.fov_x = 90; r_refdef.fov_y = 90; + buffer1 = Mem_Alloc(tempmempool, size * size * 3); + buffer2 = Mem_Alloc(tempmempool, size * size * 3); + buffer3 = Mem_Alloc(tempmempool, size * size * 3 + 18); + for (j = 0;j < 12;j++) { sprintf(filename, "env/%s%s.tga", basename, envmapinfo[j].name); @@ -778,9 +840,13 @@ static void R_Envmap_f (void) R_Mesh_Start(); R_RenderView(); R_Mesh_Finish(); - SCR_ScreenShot(filename, vid.realx, vid.realy + vid.realheight - (r_refdef.y + r_refdef.height), size, size, envmapinfo[j].flipx, envmapinfo[j].flipy, envmapinfo[j].flipdiagonaly, false); + SCR_ScreenShot(filename, buffer1, buffer2, buffer3, vid.realx, vid.realy + vid.realheight - (r_refdef.y + r_refdef.height), size, size, envmapinfo[j].flipx, envmapinfo[j].flipy, envmapinfo[j].flipdiagonaly, false); } + Mem_Free (buffer1); + Mem_Free (buffer2); + Mem_Free (buffer3); + envmap = false; } @@ -902,10 +968,7 @@ void CL_UpdateScreen(void) if (!scr_initialized || !con_initialized || vid_hidden) return; // not initialized yet - if (cl_avidemo.integer) - SCR_CaptureAVIDemo(); - else - cl_avidemo_frame = 0; + SCR_CaptureAVIDemo(); if (cls.signon == SIGNONS) R_TimeReport("other"); @@ -932,7 +995,8 @@ void CL_UpdateScreen(void) SCR_DrawNet (); SCR_DrawTurtle (); SCR_DrawPause (); - Sbar_Draw(); + if (!r_letterbox.value) + Sbar_Draw(); SHOWLMP_drawall(); SCR_CheckDrawCenterString(); }