cvar_t scr_zoomwindow_viewsizex = {CVAR_SAVE, "scr_zoomwindow_viewsizex", "20", "horizontal viewsize of zoom window"};
cvar_t scr_zoomwindow_viewsizey = {CVAR_SAVE, "scr_zoomwindow_viewsizey", "20", "vertical viewsize of zoom window"};
cvar_t scr_zoomwindow_fov = {CVAR_SAVE, "scr_zoomwindow_fov", "20", "fov of zoom window"};
+cvar_t scr_stipple = {0, "scr_stipple", "0", "interlacing-like stippling of the display"};
+cvar_t scr_refresh = {0, "scr_refresh", "1", "allows you to completely shut off rendering for benchmarking purposes"};
int jpeg_supported = false;
float size = 8;
char temp[256];
if (!cls.qw_downloadname[0])
+ {
+ cls.qw_downloadspeedrate = 0;
+ cls.qw_downloadspeedtime = realtime;
+ cls.qw_downloadspeedcount = 0;
return 0;
- dpsnprintf(temp, sizeof(temp), "Downloading %s ... %3i%%\n", cls.qw_downloadname, cls.qw_downloadpercent);
+ }
+ if (realtime >= cls.qw_downloadspeedtime + 1)
+ {
+ cls.qw_downloadspeedrate = cls.qw_downloadspeedcount;
+ cls.qw_downloadspeedtime = realtime;
+ cls.qw_downloadspeedcount = 0;
+ }
+ if (cls.protocol == PROTOCOL_QUAKEWORLD)
+ dpsnprintf(temp, sizeof(temp), "Downloading %s %3i%% (%i) at %i bytes/s\n", cls.qw_downloadname, cls.qw_downloadpercent, cls.qw_downloadmemorycursize, cls.qw_downloadspeedrate);
+ else
+ dpsnprintf(temp, sizeof(temp), "Downloading %s %3i%% (%i/%i) at %i bytes/s\n", cls.qw_downloadname, cls.qw_downloadpercent, cls.qw_downloadmemorycursize, cls.qw_downloadmemorymaxsize, cls.qw_downloadspeedrate);
len = (int)strlen(temp);
x = (vid_conwidth.integer - len*size) / 2;
y = vid_conheight.integer - size - offset;
Host_StartVideo();
S_StopAllSounds();
- SCR_UpdateLoadingScreen();
+ SCR_UpdateLoadingScreen(false);
}
//=============================================================================
Cvar_RegisterVariable(&scr_zoomwindow_viewsizex);
Cvar_RegisterVariable(&scr_zoomwindow_viewsizey);
Cvar_RegisterVariable(&scr_zoomwindow_fov);
+ Cvar_RegisterVariable(&scr_stipple);
+ Cvar_RegisterVariable(&scr_refresh);
Cmd_AddCommand ("sizeup",SCR_SizeUp_f, "increase view size (increases viewsize cvar)");
Cmd_AddCommand ("sizedown",SCR_SizeDown_f, "decrease view size (decreases viewsize cvar)");
cursize = SCR_CaptureVideo_RIFF_GetPosition() - cls.capturevideo.riffstackstartoffset[0];
// if this would overflow the windows limit of 1GB per RIFF chunk, we need
// to close the current RIFF chunk and open another for future frames
- if (8 + cursize + framesize > 1<<30)
+ if (8 + cursize + framesize + cls.capturevideo.riffindexbuffer.cursize + 8 > 1<<30)
{
SCR_CaptureVideo_RIFF_Finish();
- while (cls.capturevideo.riffstacklevel > 0)
- SCR_CaptureVideo_RIFF_Pop();
// begin a new 1GB extended section of the AVI
SCR_CaptureVideo_RIFF_Push("RIFF", "AVIX");
SCR_CaptureVideo_RIFF_Push("LIST", "movi");
if(!CL_VM_UpdateView())
R_RenderView();
- else
- SCR_DrawConsole();
if (scr_zoomwindow.integer)
{
// draw 2D stuff
- //FIXME: force menu if nothing else to look at?
- //if (key_dest == key_game && cls.signon != SIGNONS && cls.state == ca_disconnected)
-
if (cls.signon == SIGNONS)
{
SCR_DrawNet ();
CL_DrawVideo();
R_Shadow_EditLights_DrawSelectedLightProperties();
- if(!csqc_loaded)
- SCR_DrawConsole();
+ SCR_DrawConsole();
SCR_DrawBrand();
R_TimeReport("meshfinish");
}
-void SCR_UpdateLoadingScreen (void)
+void SCR_UpdateLoadingScreen (qboolean clear)
{
float x, y;
cachepic_t *pic;
float vertex3f[12];
float texcoord2f[8];
// don't do anything if not initialized yet
- if (vid_hidden)
+ if (vid_hidden || !scr_refresh.integer)
return;
CHECKGLERROR
qglViewport(0, 0, vid.width, vid.height);CHECKGLERROR
//qglDisable(GL_SCISSOR_TEST);CHECKGLERROR
//qglDepthMask(1);CHECKGLERROR
qglColorMask(1,1,1,1);CHECKGLERROR
- //qglClearColor(0,0,0,0);CHECKGLERROR
- //qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
- //qglCullFace(GL_FRONT);CHECKGLERROR
+ qglClearColor(0,0,0,0);CHECKGLERROR
+ // when starting up a new video mode, make sure the screen is cleared to black
+ if (clear)
+ {
+ qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
+ }
//qglDisable(GL_CULL_FACE);CHECKGLERROR
//R_ClearScreen();
R_Textures_Frame();
texcoord2f[6] = 0;texcoord2f[7] = 1;
if (vid.stereobuffer)
{
- qglDrawBuffer(GL_BACK_LEFT);
+ qglDrawBuffer(GL_FRONT_LEFT);
R_Mesh_Draw(0, 4, 2, polygonelements);
- qglDrawBuffer(GL_BACK_RIGHT);
+ qglDrawBuffer(GL_FRONT_RIGHT);
R_Mesh_Draw(0, 4, 2, polygonelements);
}
else
{
- qglDrawBuffer(GL_BACK);
+ qglDrawBuffer(GL_FRONT);
R_Mesh_Draw(0, 4, 2, polygonelements);
}
R_Mesh_Finish();
// refresh
- VID_Finish(false);
+ // not necessary when rendering to GL_FRONT buffers
+ //VID_Finish(false);
}
void CL_UpdateScreen(void)
{
float conwidth, conheight;
- if (vid_hidden)
+ if (vid_hidden || !scr_refresh.integer)
return;
- if (!scr_initialized || !con_initialized || vid_hidden)
+ if (!scr_initialized || !con_initialized)
return; // not initialized yet
// don't allow cheats in multiplayer
qglClearColor(0,0,0,0);CHECKGLERROR
qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
+ if(scr_stipple.integer)
+ {
+ GLubyte stipple[128];
+ int i, s, width, parts;
+ static int frame = 0;
+ ++frame;
+
+ s = scr_stipple.integer;
+ parts = (s & 007);
+ width = (s & 070) >> 3;
+
+ qglEnable(GL_POLYGON_STIPPLE); // 0x0B42
+ for(i = 0; i < 128; ++i)
+ {
+ int line = i/4;
+ stipple[i] = (((line >> width) + frame) & ((1 << parts) - 1)) ? 0x00 : 0xFF;
+ }
+ qglPolygonStipple(stipple);
+ }
+ else
+ qglDisable(GL_POLYGON_STIPPLE);
+
if (r_timereport_active)
R_TimeReport("clear");