cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2"};
cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
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"};
cvar_t cl_capturevideo_rawrgb = {0, "cl_capturevideo_rawrgb", "0"};
cvar_t cl_capturevideo_rawyv12 = {0, "cl_capturevideo_rawyv12", "0"};
qboolean scr_initialized; // ready to draw
float scr_con_current;
-float scr_conlines; // lines of console to display
extern int con_vislines;
if (count < 3)
return;
- DrawQ_Pic (0, 0, "gfx/turtle.lmp", 0, 0, 1, 1, 1, 1, 0);
+ DrawQ_Pic (0, 0, "gfx/turtle", 0, 0, 1, 1, 1, 1, 0);
}
/*
if (cls.demoplayback)
return;
- DrawQ_Pic (64, 0, "gfx/net.lmp", 0, 0, 1, 1, 1, 1, 0);
+ DrawQ_Pic (64, 0, "gfx/net", 0, 0, 1, 1, 1, 1, 0);
}
/*
if (!cl.paused)
return;
- pic = Draw_CachePic ("gfx/pause.lmp");
- DrawQ_Pic ((vid.conwidth - pic->width)/2, (vid.conheight - pic->height)/2, "gfx/pause.lmp", 0, 0, 1, 1, 1, 1, 0);
+ pic = Draw_CachePic ("gfx/pause", true);
+ DrawQ_Pic ((vid.conwidth - pic->width)/2, (vid.conheight - pic->height)/2, "gfx/pause", 0, 0, 1, 1, 1, 1, 0);
}
*/
void SCR_SetUpToDrawConsole (void)
{
+ // lines of console to display
+ float conlines;
+
Con_CheckResize ();
if (key_dest == key_game && cls.signon != SIGNONS && scr_conforcewhiledisconnected.integer)
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;
}
/*
*/
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
{
*/
void SCR_BeginLoadingPlaque (void)
{
- S_StopAllSounds ();
+ Host_StartVideo();
+ S_StopAllSounds();
SCR_UpdateLoadingScreen();
}
int length;
int t;
- if (!r_timereport_active)
+ if (!r_timereport_active || r_showtrispass)
return;
r_timereport_temp = r_timereport_current;
}
}
-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;
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;
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();
}
Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
Cvar_RegisterVariable (&scr_screenshot_gamma);
Cvar_RegisterVariable (&cl_capturevideo);
+ Cvar_RegisterVariable (&cl_capturevideo_sound);
Cvar_RegisterVariable (&cl_capturevideo_fps);
Cvar_RegisterVariable (&cl_capturevideo_rawrgb);
Cvar_RegisterVariable (&cl_capturevideo_rawyv12);
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)
memset(&mesh, 0, sizeof(mesh));
if (picname && picname[0])
{
- pic = Draw_CachePic(picname);
+ pic = Draw_CachePic(picname, false);
if (width == 0)
width = pic->width;
if (height == 0)
static int cl_capturevideo_frame = 0;
static qbyte *cl_capturevideo_buffer = NULL;
static qfile_t *cl_capturevideo_videofile = NULL;
-static qfile_t *cl_capturevideo_soundfile = NULL;
+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;
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);
*/
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);
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)
{
cl_capturevideo_videofile = NULL;
}
- cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false);
-
- // wave header will be filled out when video ends
- memset(out, 0, 44);
- FS_Write (cl_capturevideo_soundfile, out, 44);
+ if (cl_capturevideo_sound.integer)
+ {
+ cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false, true);
+ // wave header will be filled out when video ends
+ memset(out, 0, 44);
+ FS_Write (cl_capturevideo_soundfile, out, 44);
+ }
+ else
+ cl_capturevideo_soundfile = NULL;
}
void SCR_CaptureVideo_EndVideo(void)
void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate)
{
+ if (!cl_capturevideo_soundfile)
+ return;
cl_capturevideo_soundrate = rate;
if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < 4 * length)
{
Con_Printf("You can not change the video framerate while recording a video.\n");
Cvar_SetValueQuick(&cl_capturevideo_fps, cl_capturevideo_framerate);
}
- newframenum = (Sys_DoubleTime() - cl_capturevideo_starttime) * cl_capturevideo_framerate;
+ if (cl_capturevideo_soundfile)
+ {
+ // preserve sound sync by duplicating frames when running slow
+ newframenum = (Sys_DoubleTime() - cl_capturevideo_starttime) * cl_capturevideo_framerate;
+ }
+ else
+ newframenum = cl_capturevideo_frame + 1;
// if falling behind more than one second, stop
if (newframenum - cl_capturevideo_frame > (int)ceil(cl_capturevideo_framerate))
{