int clearconsole;
int clearnotify;
-qboolean scr_disabled_for_loading;
-//qboolean scr_drawloading;
+//qboolean scr_disabled_for_loading;
+qboolean scr_drawloading = false;
//float scr_disabled_time;
-static byte menuplyr_pixels[4096];
+static qbyte menuplyr_pixels[4096];
+
+void DrawCrosshair(int num);
+void V_CalcRefdef (void);
+static void SCR_ScreenShot_f (void);
+static void R_Envmap_f (void);
+
+// backend
+void R_ClearScreen(void);
/*
===============================================================================
SCR_DrawLoading
==============
*/
-/*
void SCR_DrawLoading (void)
{
cachepic_t *pic;
- if (!scr_drawloading)
- return;
+ //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);
}
-*/
================
*/
-/*
void SCR_BeginLoadingPlaque (void)
{
+ if (scr_drawloading)
+ return;
+
S_StopAllSounds (true);
// if (cls.state != ca_connected)
// scr_con_current = 0;
scr_drawloading = true;
- SCR_UpdateScreen ();
+ CL_UpdateScreen ();
+ scr_drawloading = true;
+ CL_UpdateScreen ();
+ //scr_drawloading = false;
// scr_disabled_for_loading = true;
// scr_disabled_time = realtime;
}
-*/
/*
===============
================
*/
-/*
void SCR_EndLoadingPlaque (void)
{
+ /*
+ if (!scr_drawloading)
+ return;
+
// scr_disabled_for_loading = false;
scr_drawloading = false;
Con_ClearNotify ();
+ */
}
-*/
//=============================================================================
while (1);
}
-void DrawCrosshair(int num);
-
char r_speeds_string[1024];
int speedstringcount, r_timereport_active;
double r_timereport_temp = 0, r_timereport_current = 0, r_timereport_start = 0;
Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
+ Cmd_AddCommand ("screenshot",SCR_ScreenShot_f);
+ Cmd_AddCommand ("envmap", R_Envmap_f);
scr_initialized = true;
}
//only used for the player color selection menu
-void DrawQ_PicTranslate (int x, int y, char *picname, byte *translation)
+void DrawQ_PicTranslate (int x, int y, char *picname, qbyte *translation)
{
int i, c;
unsigned int trans[4096];
trans[i] = d_8to24table[translation[menuplyr_pixels[i]]];
// FIXME: this is renderer stuff?
- R_UpdateTexture (pic->tex, (byte *)trans);
+ R_UpdateTexture (pic->tex, (qbyte *)trans);
DrawQ_Pic(x, y, picname, 0, 0, 1, 1, 1, 1, 0);
}
r_refdef.x = bound(0, r_refdef.x, vid.realwidth - r_refdef.width) + vid.realx;
r_refdef.y = bound(0, r_refdef.y, vid.realheight - r_refdef.height) + vid.realy;
- r_refdef.fov_x = scr_fov.value;
+ // LordHavoc: viewzoom (zoom in for sniper rifles, etc)
+ r_refdef.fov_x = scr_fov.value * cl.viewzoom;
r_refdef.fov_y = CalcFov (r_refdef.fov_x, r_refdef.width, r_refdef.height);
if (cl.worldmodel)
}
}
+/*
+==================
+SCR_ScreenShot_f
+==================
+*/
+void SCR_ScreenShot_f (void)
+{
+ int i;
+ 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++)
+ {
+ 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 (checkname, "%s/%s", com_gamedir, filename);
+ if (Sys_FileTime(checkname) == -1)
+ break; // file doesn't exist
+ }
+ if (i==10000)
+ {
+ Con_Printf ("SCR_ScreenShot_f: Couldn't create a TGA file\n");
+ return;
+ }
-void V_CalcRefdef (void);
+ SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight);
+ Con_Printf ("Wrote %s\n", filename);
+}
+
+/*
+===============
+R_Envmap_f
+
+Grab six views for environment mapping tests
+===============
+*/
+struct
+{
+ float angles[3];
+ char *name;
+}
+envmapinfo[6] =
+{
+ {{ 0, 0, 0}, "ft"},
+ {{ 0, 90, 0}, "rt"},
+ {{ 0, 180, 0}, "bk"},
+ {{ 0, 270, 0}, "lf"},
+ {{-90, 90, 0}, "up"},
+ {{ 90, 90, 0}, "dn"}
+};
+
+static void R_Envmap_f (void)
+{
+ int j, size;
+ char filename[256], basename[256];
+
+ if (Cmd_Argc() != 3)
+ {
+ Con_Printf ("envmap <basename> <size>: save out 6 cubic environment map images, usable with loadsky, note that size must one of 128, 256, 512, or 1024 and can't be bigger than your current resolution\n");
+ return;
+ }
+
+ strcpy(basename, Cmd_Argv(1));
+ size = atoi(Cmd_Argv(2));
+ if (size != 128 && size != 256 && size != 512 && size != 1024)
+ {
+ Con_Printf("envmap: size must be one of 128, 256, 512, or 1024\n");
+ return;
+ }
+ if (size > vid.realwidth || size > vid.realheight)
+ {
+ Con_Printf("envmap: your resolution is not big enough to render that size\n");
+ return;
+ }
+
+ envmap = true;
+
+ r_refdef.x = 0;
+ r_refdef.y = 0;
+ r_refdef.width = size;
+ r_refdef.height = size;
+
+ r_refdef.fov_x = 90;
+ r_refdef.fov_y = 90;
+
+ for (j = 0;j < 6;j++)
+ {
+ sprintf(filename, "env/%s%s.tga", basename, envmapinfo[j].name);
+ VectorCopy(envmapinfo[j].angles, r_refdef.viewangles);
+ R_ClearScreen();
+ R_RenderView ();
+ SCR_ScreenShot(filename, vid.realx, vid.realy, size, size);
+ }
+
+ envmap = false;
+}
//=============================================================================
void SHOWLMP_decodehide(void)
{
int i;
- byte *lmplabel;
+ qbyte *lmplabel;
lmplabel = MSG_ReadString();
for (i = 0;i < SHOWLMP_MAXLABELS;i++)
if (showlmp[i].isactive && strcmp(showlmp[i].label, lmplabel) == 0)
void SHOWLMP_decodeshow(void)
{
int i, k;
- byte lmplabel[256], picname[256];
+ qbyte lmplabel[256], picname[256];
float x, y;
strcpy(lmplabel,MSG_ReadString());
strcpy(picname, MSG_ReadString());
showlmp[i].isactive = false;
}
-void CL_UpdateScreen(void)
+void CL_SetupScreenSize(void)
{
static float old2dresolution = -1;
- if (scr_disabled_for_loading)
- return;
-
- if (!scr_initialized || !con_initialized)
- return; // not initialized yet
-
- R_TimeReport("other");
-
VID_GetWindowSize (&vid.realx, &vid.realy, &vid.realwidth, &vid.realheight);
VID_UpdateGamma(false);
// determine size of refresh window
SCR_CalcRefdef();
+}
+
+void CL_UpdateScreen(void)
+{
+ if (!scr_initialized || !con_initialized)
+ return; // not initialized yet
+
+
+ R_TimeReport("other");
+
+ CL_SetupScreenSize();
DrawQ_Clear();
ui_draw();
+ if (scr_drawloading)
+ {
+ scr_drawloading = false;
+ SCR_DrawLoading();
+ }
+
R_TimeReport("2d");
// add r_speeds text to queue