]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
Merged CL_RocketTrail2 into CL_RocketTrail.
[xonotic/darkplaces.git] / cl_screen.c
index 51ef135382b7a512e5ebf584b9087b4682e0109f..4ac0ff0983429f029a256329ad6a264e26733887 100644 (file)
@@ -17,10 +17,12 @@ 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"};
 
 int jpeg_supported = false;
 
@@ -32,6 +34,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 +296,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
        }
@@ -471,9 +476,11 @@ 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);
 
        Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
        Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
@@ -494,7 +501,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 +540,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);
@@ -661,6 +676,7 @@ void SCR_ScreenShot_f (void)
        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);
@@ -681,21 +697,20 @@ 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");
 
        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, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg))
+       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++;
 }
@@ -706,36 +721,35 @@ 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 (cl_avidemo.integer)
-       {
-               if (avi_buffer1 == NULL)
-               {
-                       avi_buffer1 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
-                       avi_buffer2 = Mem_Alloc(tempmempool, vid.realwidth * vid.realheight * 3);
-               }
-       }
-       else
+       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 (jpeg)
-               sprintf(filename, "video/dp%06d.jpg", cl_avidemo_frame);
-       else
-               sprintf(filename, "video/dp%06d.tga", cl_avidemo_frame);
+       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, vid.realx, vid.realy, vid.realwidth, vid.realheight, false, false, false, jpeg))
+       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
        {
@@ -781,6 +795,7 @@ static void R_Envmap_f (void)
        char filename[256], basename[256];
        qbyte *buffer1;
        qbyte *buffer2;
+       qbyte *buffer3;
 
        if (Cmd_Argc() != 3)
        {
@@ -813,6 +828,7 @@ static void R_Envmap_f (void)
 
        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++)
        {
@@ -822,11 +838,12 @@ static void R_Envmap_f (void)
                R_Mesh_Start();
                R_RenderView();
                R_Mesh_Finish();
-               SCR_ScreenShot(filename, buffer1, buffer2, 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;
 }