cvar_t gl_mesh_maxverts = {0, "gl_mesh_maxverts", "1024"};
cvar_t gl_mesh_floatcolors = {0, "gl_mesh_floatcolors", "1"};
cvar_t gl_mesh_drawrangeelements = {0, "gl_mesh_drawrangeelements", "1"};
+cvar_t gl_delayfinish = {CVAR_SAVE, "gl_delayfinish", "0"};
cvar_t r_render = {0, "r_render", "1"};
cvar_t gl_dither = {CVAR_SAVE, "gl_dither", "1"}; // whether or not to use dithering
break;
#endif
#ifdef GL_TABLE_TOO_LARGE
- case GL_TABLE_TOO_LARGE:
+ case GL_TABLE_TOO_LARGE:
Con_Printf("GL_TABLE_TOO_LARGE at %s:%i\n", filename, linenumber);
break;
#endif
Cvar_RegisterVariable(&r_render);
Cvar_RegisterVariable(&gl_dither);
Cvar_RegisterVariable(&gl_lockarrays);
+ Cvar_RegisterVariable(&gl_delayfinish);
#ifdef NORENDER
Cvar_SetValue("r_render", 0);
#endif
// set up viewpoint
qglMatrixMode(GL_PROJECTION);CHECKGLERROR
+ qglLoadIdentity();CHECKGLERROR
// pyramid slopes
xmax = zNear * tan(fovx * M_PI / 360.0);
ymax = zNear * tan(fovy * M_PI / 360.0);
// set up viewpoint
qglMatrixMode(GL_PROJECTION);CHECKGLERROR
+ qglLoadIdentity();CHECKGLERROR
// set view pyramid
nudge = 1.0 - 1.0 / (1<<23);
m[ 0] = 1.0 / tan(fovx * M_PI / 360.0);
// set up viewpoint
qglMatrixMode(GL_PROJECTION);CHECKGLERROR
+ qglLoadIdentity();CHECKGLERROR
qglOrtho(x1, x2, y2, y1, zNear, zFar);
qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
GL_SetupView_Orientation_Identity();
qboolean SCR_ScreenShot(char *filename, int x, int y, int width, int height)
{
qboolean ret;
- int i;
+ int i, j;
qbyte *buffer;
if (!r_render.integer)
// LordHavoc: compensate for v_overbrightbits when using hardware gamma
if (v_hwgamma.integer)
+ {
for (i = 0;i < width * height * 3;i++)
- buffer[i] <<= v_overbrightbits.integer;
+ {
+ j = buffer[i] << v_overbrightbits.integer;
+ buffer[i] = (qbyte) (bound(0, j, 255));
+ }
+ }
ret = Image_WriteTGARGB_preflipped(filename, width, height, buffer);
*/
void SCR_UpdateScreen (void)
{
- VID_Finish ();
+ if (gl_delayfinish.integer)
+ {
+ VID_Finish ();
- R_TimeReport("finish");
+ R_TimeReport("finish");
+ }
if (r_textureunits.integer > gl_textureunits)
Cvar_SetValueQuick(&r_textureunits, gl_textureunits);
// draw 2D stuff
R_DrawQueue();
- // tell driver to commit it's partially full geometry queue to the rendering queue
- // (this doesn't wait for the commands themselves to complete)
- qglFlush();
+ if (gl_delayfinish.integer)
+ {
+ // tell driver to commit it's partially full geometry queue to the rendering queue
+ // (this doesn't wait for the commands themselves to complete)
+ qglFlush();
+ }
+ else
+ {
+ VID_Finish ();
+
+ R_TimeReport("finish");
+ }
}