cvar_t scr_showpause = {"showpause","1"};
cvar_t scr_printspeed = {"scr_printspeed","8"};
cvar_t showfps = {"showfps", "0", true};
+cvar_t r_render = {"r_render", "1"};
extern cvar_t crosshair;
scr_fullupdate = 0; // force a background redraw
vid.recalc_refdef = 0;
-// force the status bar to redraw
-// Sbar_Changed ();
-
//========================================
// bound viewsize
//============================================================================
+void gl_screen_start()
+{
+ scr_ram = Draw_PicFromWad ("ram");
+ scr_net = Draw_PicFromWad ("net");
+ scr_turtle = Draw_PicFromWad ("turtle");
+}
+
+void gl_screen_shutdown()
+{
+}
+
/*
==================
SCR_Init
==================
*/
-void SCR_Init (void)
+void GL_Screen_Init (void)
{
Cvar_RegisterVariable (&scr_fov);
Cvar_RegisterVariable (&scr_centertime);
Cvar_RegisterVariable (&scr_printspeed);
Cvar_RegisterVariable (&showfps);
+ Cvar_RegisterVariable (&r_render);
+#ifdef NORENDER
+ r_render.value = 0;
+#endif
//
// register our commands
Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
- scr_ram = Draw_PicFromWad ("ram");
- scr_net = Draw_PicFromWad ("net");
- scr_turtle = Draw_PicFromWad ("turtle");
-
scr_initialized = true;
+
+ R_RegisterModule("GL_Screen", gl_screen_start, gl_screen_shutdown);
}
if (scr_conlines < scr_con_current)
{
- scr_con_current -= scr_conspeed.value*host_frametime;
+ scr_con_current -= scr_conspeed.value*host_realframetime;
if (scr_conlines > scr_con_current)
scr_con_current = scr_conlines;
}
else if (scr_conlines > scr_con_current)
{
- scr_con_current += scr_conspeed.value*host_frametime;
+ scr_con_current += scr_conspeed.value*host_realframetime;
if (scr_conlines < scr_con_current)
scr_con_current = scr_conlines;
}
==============================================================================
*/
-typedef struct _TargaHeader {
- unsigned char id_length, colormap_type, image_type;
- unsigned short colormap_index, colormap_length;
- unsigned char colormap_size;
- unsigned short x_origin, y_origin, width, height;
- unsigned char pixel_size, attributes;
-} TargaHeader;
-
-
-/*
+/*
==================
SCR_ScreenShot_f
==================
-*/
+*/
void SCR_ScreenShot_f (void)
{
byte *buffer;
- char pcxname[80];
+ char filename[80];
char checkname[MAX_OSPATH];
- int i, c, temp;
+ int i;
//
// find a file name to save it to
//
- strcpy(pcxname,"dp0000.tga");
+ strcpy(filename,"dp0000.tga");
for (i=0 ; i<=9999 ; i++)
{
- pcxname[2] = (i/1000)%10 + '0';
- pcxname[3] = (i/ 100)%10 + '0';
- pcxname[4] = (i/ 10)%10 + '0';
- pcxname[5] = (i/ 1)%10 + '0';
- sprintf (checkname, "%s/%s", com_gamedir, pcxname);
+ 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
}
return;
}
+ buffer = qmalloc(glwidth*glheight*3);
+ glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, buffer);
+ Image_WriteTGARGB_preflipped(filename, glwidth, glheight, buffer);
- buffer = malloc(glwidth*glheight*3 + 18);
- memset (buffer, 0, 18);
- buffer[2] = 2; // uncompressed type
- buffer[12] = glwidth&255;
- buffer[13] = glwidth>>8;
- buffer[14] = glheight&255;
- buffer[15] = glheight>>8;
- buffer[16] = 24; // pixel size
-
- glReadPixels (glx, gly, glwidth, glheight, GL_RGB, GL_UNSIGNED_BYTE, buffer+18 );
-
- // swap rgb to bgr
- c = 18+glwidth*glheight*3;
- for (i=18 ; i<c ; i+=3)
- {
- temp = buffer[i];
- buffer[i] = buffer[i+2];
- buffer[i+2] = temp;
- }
- COM_WriteFile (pcxname, buffer, glwidth*glheight*3 + 18 );
-
- free (buffer);
- Con_Printf ("Wrote %s\n", pcxname);
-}
+ qfree(buffer);
+ Con_Printf ("Wrote %s\n", filename);
+}
//=============================================================================
scr_drawloading = true;
scr_fullupdate = 0;
-// Sbar_Changed ();
SCR_UpdateScreen ();
scr_drawloading = false;
===============
SCR_BringDownConsole
-Brings the console down and fades the palettes back to normal
+Brings the console down and fades the blends back to normal
================
*/
void SCR_BringDownConsole (void)
for (i=0 ; i<20 && scr_conlines != scr_con_current ; i++)
SCR_UpdateScreen ();
- cl.cshifts[0].percent = 0; // no area contents palette on next frame
- VID_SetPalette (host_basepal);
+ cl.cshifts[0].percent = 0; // no area contents blend on next frame
}
+void DrawCrosshair(int num);
void GL_Set2D (void);
extern void SHOWLMP_drawall();
extern cvar_t contrast;
extern cvar_t brightness;
extern cvar_t gl_lightmode;
+extern cvar_t r_speeds2;
void GL_BrightenScreen()
{
float f;
+ if (!r_render.value)
+ return;
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
f = brightness.value = bound(1.0f, brightness.value, 5.0f);
This is called every frame, and can also be called explicitly to flush
text to the screen.
-WARNING: be very careful calling this from elsewhere, because the refresh
-needs almost the entire 256k of stack space!
+LordHavoc: due to my rewrite of R_WorldNode, it no longer takes 256k of stack space :)
==================
*/
extern cvar_t gl_vertexarrays;
extern qboolean gl_arrays;
void GL_Finish();
-int c_nodes;
void SCR_UpdateScreen (void)
{
double time1 = 0, time2;
if (r_speeds.value)
- {
time1 = Sys_FloatTime ();
- c_brush_polys = 0;
- c_alias_polys = 0;
- c_nodes = 0;
- }
if (!gl_arrays)
gl_vertexarrays.value = 0;
if (vid.recalc_refdef)
SCR_CalcRefdef ();
- glClearColor(0,0,0,0);
- glClear (GL_COLOR_BUFFER_BIT); // LordHavoc: clear the screen (around the view as well)
+ if (r_render.value)
+ {
+ glClearColor(0,0,0,0);
+ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // LordHavoc: clear the screen (around the view as well)
+ }
//
// do 3D refresh drawing, and then update the screen
else
{
if (crosshair.value)
- Draw_Character (r_refdef.vrect.x + r_refdef.vrect.width/2, r_refdef.vrect.y + r_refdef.vrect.height/2, '+');
+ DrawCrosshair(crosshair.value - 1);
SCR_DrawRam ();
SCR_DrawNet ();
char temp[32];
int calc;
newtime = Sys_FloatTime();
- calc = (int) (100.0 / (newtime - currtime));
- sprintf(temp, "% 4i.%02i fps", calc / 100, calc % 100);
+ calc = (int) ((1.0 / (newtime - currtime)) + 0.5);
+ sprintf(temp, "%4i fps", calc);
currtime = newtime;
- Draw_String(vid.width - (12*8), 0, temp, 9999);
+ Draw_String(vid.width - (8*8), vid.height - sb_lines - 8, temp, 9999);
}
- V_UpdatePalette ();
+ if (r_speeds2.value)
+ {
+ extern char r_speeds2_string1[81], r_speeds2_string2[81], r_speeds2_string3[81], r_speeds2_string4[81], r_speeds2_string5[81], r_speeds2_string6[81];
+ Draw_String(0, vid.height - sb_lines - 48, r_speeds2_string1, 80);
+ Draw_String(0, vid.height - sb_lines - 40, r_speeds2_string2, 80);
+ Draw_String(0, vid.height - sb_lines - 32, r_speeds2_string3, 80);
+ Draw_String(0, vid.height - sb_lines - 24, r_speeds2_string4, 80);
+ Draw_String(0, vid.height - sb_lines - 16, r_speeds2_string5, 80);
+ Draw_String(0, vid.height - sb_lines - 8, r_speeds2_string6, 80);
+ }
+
+ V_UpdateBlends ();
GL_BrightenScreen();
if (r_speeds.value)
{
time2 = Sys_FloatTime ();
- Con_Printf ("%3i ms %4i wpoly %4i epoly %4i transpoly %4i BSPnodes\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys, currenttranspoly, c_nodes);
+ Con_Printf ("%3i ms %4i wpoly %4i epoly %4i transpoly %4i lightpoly %4i BSPnodes %4i BSPleafs %4i BSPfaces %4i models %4i bmodels %4i sprites %4i particles %3i dlights\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys, currenttranspoly, c_light_polys, c_nodes, c_leafs, c_faces, c_models, c_bmodels, c_sprites, c_particles, c_dlights);
}
GL_EndRendering ();
}
-// for profiling, this is seperated
+// for profiling, this is separated
void GL_Finish()
{
+ if (!r_render.value)
+ return;
glFinish ();
}