double r_timereport_temp = 0, r_timereport_current = 0, r_timereport_start = 0;
int r_speeds_longestitem = 0;
-void R_TimeReport(const char *desc)
+void R_TimeReport(char *desc)
{
char tempbuf[256];
int length;
return;
CHECKGLERROR
- if (r_speeds.integer == 2 && qglFinish)
+ if (r_speeds.integer == 2)
qglFinish();
CHECKGLERROR
r_timereport_temp = r_timereport_current;
"%7i lightmap updates (%7i pixels)\n"
"%4i lights%4i clears%4i scissored%7i light%7i shadow%7i dynamic\n"
"rendered%6i meshes%8i triangles bloompixels%8i copied%8i drawn\n"
-"updated%5i indexbuffers%8i bytes%5i vertexbuffers%8i bytes\n"
"%s"
, loc ? "Location: " : "", loc ? loc->name : ""
, r_refdef.stats.renders, r_refdef.view.origin[0], r_refdef.view.origin[1], r_refdef.view.origin[2], r_refdef.view.forward[0], r_refdef.view.forward[1], r_refdef.view.forward[2]
, r_refdef.stats.lightmapupdates, r_refdef.stats.lightmapupdatepixels
, r_refdef.stats.lights, r_refdef.stats.lights_clears, r_refdef.stats.lights_scissored, r_refdef.stats.lights_lighttriangles, r_refdef.stats.lights_shadowtriangles, r_refdef.stats.lights_dynamicshadowtriangles
, r_refdef.stats.meshes, r_refdef.stats.meshes_elements / 3, r_refdef.stats.bloom_copypixels, r_refdef.stats.bloom_drawpixels
-, r_refdef.stats.indexbufferuploadcount, r_refdef.stats.indexbufferuploadsize, r_refdef.stats.vertexbufferuploadcount, r_refdef.stats.vertexbufferuploadsize
, r_speeds_timestring);
memset(&r_refdef.stats, 0, sizeof(r_refdef.stats));
buffer1 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 4);
buffer2 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * (scr_screenshot_alpha.integer ? 4 : 3));
- if (SCR_ScreenShot (filename, buffer1, buffer2, 0, 0, vid.width, vid.height, false, false, false, jpeg, png, true, scr_screenshot_alpha.integer != 0))
+ if (SCR_ScreenShot (filename, buffer1, buffer2, 0, 0, vid.width, vid.height, false, false, false, jpeg, png, true, scr_screenshot_alpha.integer))
Con_Printf("Wrote %s\n", filename);
else
{
Con_Printf("Unable to write %s\n", filename);
if(jpeg || png)
{
- if(SCR_ScreenShot (filename, buffer1, buffer2, 0, 0, vid.width, vid.height, false, false, false, false, false, true, scr_screenshot_alpha.integer != 0))
+ if(SCR_ScreenShot (filename, buffer1, buffer2, 0, 0, vid.width, vid.height, false, false, false, false, false, true, scr_screenshot_alpha.integer))
{
strlcpy(filename + strlen(filename) - 3, "tga", 4);
Con_Printf("Wrote %s\n", filename);
CHECKGLERROR
// speed is critical here, so do saving as directly as possible
- GL_ReadPixelsBGRA(x, y, vid.width, vid.height, cls.capturevideo.screenbuffer);
-
+ qglReadPixels (x, y, vid.width, vid.height, GL_BGRA, GL_UNSIGNED_BYTE, cls.capturevideo.screenbuffer);CHECKGLERROR
SCR_ScaleDownBGRA (cls.capturevideo.screenbuffer, vid.width, vid.height, cls.capturevideo.outbuffer, width, height);
cls.capturevideo.videoframes(newframestepframenum - cls.capturevideo.framestepframe);
struct envmapinfo_s
{
float angles[3];
- const char *name;
+ char *name;
qboolean flipx, flipy, flipdiagonaly;
}
envmapinfo[12] =
int indices[4] = {0,1,2,3}; // BGRA
qboolean ret;
- GL_ReadPixelsBGRA(x, y, width, height, buffer1);
+ CHECKGLERROR
+ qglReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_BYTE, buffer1);CHECKGLERROR
if(gammacorrect && (scr_screenshot_gammaboost.value != 1 || WANT_SCREENSHOT_HWGAMMA))
{
extern void R_UpdateFogColor(void);
void R_ClearScreen(qboolean fogcolor)
{
- float clearcolor[4];
// clear to black
- Vector4Clear(clearcolor);
+ CHECKGLERROR
if (fogcolor)
{
R_UpdateFogColor();
- VectorCopy(r_refdef.fogcolor, clearcolor);
+ qglClearColor(r_refdef.fogcolor[0],r_refdef.fogcolor[1],r_refdef.fogcolor[2],0);CHECKGLERROR
+ }
+ else
+ {
+ qglClearColor(0,0,0,0);CHECKGLERROR
+ }
+ qglClearDepth(1);CHECKGLERROR
+ if (vid.stencil)
+ {
+ // LordHavoc: we use a stencil centered around 128 instead of 0,
+ // to avoid clamping interfering with strange shadow volume
+ // drawing orders
+ qglClearStencil(128);CHECKGLERROR
}
- // clear depth is 1.0
- // LordHavoc: we use a stencil centered around 128 instead of 0,
- // to avoid clamping interfering with strange shadow volume
- // drawing orders
// clear the screen
- GL_Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | (vid.stencil ? GL_STENCIL_BUFFER_BIT : 0), clearcolor, 1.0f, 128);
+ GL_Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | (vid.stencil ? GL_STENCIL_BUFFER_BIT : 0));
+ // set dithering mode
+ if (gl_dither.integer)
+ {
+ qglEnable(GL_DITHER);CHECKGLERROR
+ }
+ else
+ {
+ qglDisable(GL_DITHER);CHECKGLERROR
+ }
}
qboolean CL_VM_UpdateView (void);
loadingscreentexture_h = vid.height / (float) h;
}
- loadingscreentexture = R_LoadTexture2D(r_main_texturepool, "loadingscreentexture", w, h, NULL, TEXTYPE_COLORBUFFER, TEXF_RENDERTARGET | TEXF_FORCENEAREST | TEXF_CLAMP, -1, NULL);
+ loadingscreentexture = R_LoadTexture2D(r_main_texturepool, "loadingscreentexture", w, h, NULL, TEXTYPE_COLORBUFFER, TEXF_FORCENEAREST | TEXF_CLAMP, -1, NULL);
R_Mesh_CopyToTexture(loadingscreentexture, 0, 0, 0, 0, vid.width, vid.height);
loadingscreentexture_vertex3f[2] = loadingscreentexture_vertex3f[5] = loadingscreentexture_vertex3f[8] = loadingscreentexture_vertex3f[11] = 0;
GL_DepthRange(0, 1);
GL_PolygonOffset(0, 0);
GL_DepthTest(false);
+ R_Mesh_VertexPointer(verts, 0, 0);
+ R_Mesh_ColorPointer(colors, 0, 0);
R_Mesh_ResetTextureState();
+ R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1);
verts[2] = verts[5] = verts[8] = verts[11] = 0;
verts[0] = verts[9] = 0;
verts[1] = verts[4] = vid_conheight.integer - scr_loadingscreen_barheight.value;
sscanf(scr_loadingscreen_barcolor.string, "%f %f %f", &colors[8], &colors[9], &colors[10]); colors[11] = 1;
sscanf(scr_loadingscreen_barcolor.string, "%f %f %f", &colors[12], &colors[13], &colors[14]); colors[15] = 1;
- R_Mesh_PrepareVertices_Generic_Arrays(4, verts, colors, NULL);
- R_SetupShader_Generic(NULL, NULL, GL_MODULATE, 1);
- R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, NULL, 0, polygonelement3s, NULL, 0);
+ R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, polygonelement3s, 0, 0);
// make sure everything is cleared, including the progress indicator
if(loadingscreenheight < 8)
// release mouse grab while loading
if (!vid.fullscreen)
VID_SetMouse(false, false, false);
-// CHECKGLERROR
- r_refdef.draw2dstage = true;
+ CHECKGLERROR
R_Viewport_InitOrtho(&viewport, &identitymatrix, 0, 0, vid.width, vid.height, 0, 0, vid_conwidth.integer, vid_conheight.integer, -10, 100, NULL);
R_SetViewport(&viewport);
- GL_ColorMask(1,1,1,1);
+ //qglDisable(GL_SCISSOR_TEST);CHECKGLERROR
+ //qglDepthMask(1);CHECKGLERROR
+ qglColorMask(1,1,1,1);CHECKGLERROR
+ qglClearColor(0,0,0,0);CHECKGLERROR
// when starting up a new video mode, make sure the screen is cleared to black
if (clear)
- GL_Clear(GL_COLOR_BUFFER_BIT, NULL, 1.0f, 0);
+ qglClear(GL_COLOR_BUFFER_BIT);CHECKGLERROR
R_Textures_Frame();
R_Mesh_Start();
R_EntityMatrix(&identitymatrix);
static void SCR_DrawLoadingScreen (qboolean clear)
{
// we only need to draw the image if it isn't already there
+ GL_Color(1,1,1,1);
GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GL_DepthRange(0, 1);
GL_PolygonOffset(0, 0);
GL_DepthTest(false);
- R_Mesh_ResetTextureState();
- GL_Color(1,1,1,1);
+ R_Mesh_ColorPointer(NULL, 0, 0);
if(loadingscreentexture)
{
- R_Mesh_PrepareVertices_Generic_Arrays(4, loadingscreentexture_vertex3f, NULL, loadingscreentexture_texcoord2f);
+ R_Mesh_VertexPointer(loadingscreentexture_vertex3f, 0, 0);
+ R_Mesh_ResetTextureState();
R_SetupShader_Generic(loadingscreentexture, NULL, GL_MODULATE, 1);
- R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, NULL, 0, polygonelement3s, NULL, 0);
+ R_Mesh_TexCoordPointer(0, 2, loadingscreentexture_texcoord2f, 0, 0);
+ R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, polygonelement3s, 0, 0);
}
- R_Mesh_PrepareVertices_Generic_Arrays(4, loadingscreenpic_vertex3f, NULL, loadingscreenpic_texcoord2f);
+ R_Mesh_VertexPointer(loadingscreenpic_vertex3f, 0, 0);
+ R_Mesh_ResetTextureState();
R_SetupShader_Generic(loadingscreenpic->tex, NULL, GL_MODULATE, 1);
- R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, NULL, 0, polygonelement3s, NULL, 0);
+ R_Mesh_TexCoordPointer(0, 2, loadingscreenpic_texcoord2f, 0, 0);
+ R_Mesh_Draw(0, 4, 0, 2, polygonelement3i, polygonelement3s, 0, 0);
SCR_DrawLoadingStack();
}
R_Mesh_Finish();
// refresh
VID_Finish();
+ // however this IS necessary on Windows Vista
+ qglFinish();
}
void SCR_UpdateLoadingScreen (qboolean clear)
}
else
{
- if (qglDrawBuffer)
- qglDrawBuffer(GL_BACK);
+ qglDrawBuffer(GL_BACK);
SCR_DrawLoadingScreen(clear);
}
SCR_DrawLoadingScreen_SharedFinish(clear);
double rendertime1;
float conwidth, conheight;
float f;
- r_viewport_t viewport;
Sbar_ShowFPS_Update();
if (!scr_initialized || !con_initialized || !scr_refresh.integer)
return; // not initialized yet
- if(gamemode == GAME_NEXUIZ)
+ if(gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC)
{
// play a bit with the palette (experimental)
palette_rgb_pantscolormap[15][0] = (unsigned char) (128 + 127 * sin(cl.time / exp(1.0f) + 0.0f*M_PI/3.0f));
}
if (vid_hidden)
- {
- VID_Finish();
return;
- }
rendertime1 = Sys_DoubleTime();
SCR_SetUpToDrawConsole();
- if (qglDrawBuffer)
- {
- CHECKGLERROR
- qglDrawBuffer(GL_BACK);CHECKGLERROR
- // set dithering mode
- if (gl_dither.integer)
- {
- qglEnable(GL_DITHER);CHECKGLERROR
- }
- else
- {
- qglDisable(GL_DITHER);CHECKGLERROR
- }
- }
-
- R_Viewport_InitOrtho(&viewport, &identitymatrix, 0, 0, vid.width, vid.height, 0, 0, vid_conwidth.integer, vid_conheight.integer, -10, 100, NULL);
- R_SetViewport(&viewport);
- GL_ScissorTest(false);
- GL_ColorMask(1,1,1,1);
- GL_DepthMask(true);
-
+ CHECKGLERROR
+ qglDrawBuffer(GL_BACK);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
R_ClearScreen(false);
r_refdef.view.clear = false;
r_refdef.view.isoverlay = false;
}
}
+ CHECKGLERROR
if (R_Stereo_Active())
{
matrix4x4_t originalmatrix = r_refdef.view.matrix;
}
else
SCR_DrawScreen();
+ CHECKGLERROR
SCR_CaptureVideo();
- if (qglFlush)
- qglFlush(); // FIXME: should we really be using qglFlush here?
-
// quality adjustment according to render time
+ CHECKGLERROR
+ qglFlush(); // FIXME: should we really be using qglFlush here?
cl_updatescreen_rendertime += ((Sys_DoubleTime() - rendertime1) - cl_updatescreen_rendertime) * bound(0, cl_minfps_fade.value, 1);
if (cl_minfps.value > 0 && cl_updatescreen_rendertime > 0 && !cls.timedemo && (!cls.capturevideo.active || !cls.capturevideo.realtime))
cl_updatescreen_quality = 1 / (cl_updatescreen_rendertime * cl_minfps.value);