From: havoc Date: Tue, 25 Mar 2008 02:32:43 +0000 (+0000) Subject: implemented r_refdef.view.isoverlay state, this corresponds to the X-Git-Tag: xonotic-v0.1.0preview~2294 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=aae58de542b8a29f9eb2e9979b78109348dd655f;p=xonotic%2Fdarkplaces.git implemented r_refdef.view.isoverlay state, this corresponds to the state of R_SetView VF_CLEARSCREEN and disables clearing and bloom when rendering overlays git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8234 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_screen.c b/cl_screen.c index f5e72b21..d3794fb6 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -1722,6 +1722,7 @@ static void R_Envmap_f (void) r_refdef.view.height = size; r_refdef.view.depth = 1; r_refdef.view.useperspective = true; + r_refdef.view.isoverlay = false; r_refdef.view.frustum_x = tan(90 * M_PI / 360.0); r_refdef.view.frustum_y = tan(90 * M_PI / 360.0); @@ -2188,6 +2189,7 @@ void CL_UpdateScreen(void) qglClearColor(0,0,0,0);CHECKGLERROR R_ClearScreen(false); r_refdef.view.clear = false; + r_refdef.view.isoverlay = false; r_refdef.view.quality = bound(cl_minfps_qualitymin.value, pow(cl_updatescreen_quality, cl_minfps_qualitypower.value) * cl_minfps_qualityscale.value, cl_minfps_qualitymax.value); if(scr_stipple.integer) diff --git a/client.h b/client.h index b71c2639..0401a277 100644 --- a/client.h +++ b/client.h @@ -1408,6 +1408,8 @@ typedef struct r_refdef_view_s // whether to call R_ClearScreen before rendering stuff qboolean clear; + // if true, don't clear or do any post process effects (bloom, etc) + qboolean isoverlay; // whether to draw r_showtris and such, this is only true for the main // view render, all secondary renders (HDR, mirrors, portals, cameras, diff --git a/clvm_cmds.c b/clvm_cmds.c index 6c8c47ed..3924e6d1 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -689,6 +689,7 @@ void VM_CL_R_ClearScene (void) r_refdef.view.ortho_x = scr_fov.value * (3.0 / 4.0) * (float)r_refdef.view.width / (float)r_refdef.view.height / vid_pixelheight.value; r_refdef.view.ortho_y = scr_fov.value * (3.0 / 4.0); r_refdef.view.clear = true; + r_refdef.view.isoverlay = false; // FIXME: restore cl.csqc_origin // FIXME: restore cl.csqc_angles cl.csqc_vidvars.drawworld = true; @@ -843,7 +844,7 @@ void VM_CL_R_SetView (void) r_refdef.view.useperspective = k != 0; break; case VF_CLEARSCREEN: - r_refdef.view.clear = k ? true : false; + r_refdef.view.isoverlay = !k; break; default: PRVM_G_FLOAT(OFS_RETURN) = 0; diff --git a/gl_rmain.c b/gl_rmain.c index f0cedbc6..658858da 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -3688,6 +3688,23 @@ R_RenderView */ void R_RenderView(void) { + if (r_refdef.view.isoverlay) + { + // TODO: FIXME: move this into its own backend function maybe? [2/5/2008 Andreas] + GL_Clear( GL_DEPTH_BUFFER_BIT ); + R_TimeReport("depthclear"); + + r_refdef.view.showdebug = false; + + r_waterstate.enabled = false; + r_waterstate.numwaterplanes = 0; + + R_RenderScene(false); + + CHECKGLERROR + return; + } + if (!r_refdef.scene.entities || r_refdef.view.width * r_refdef.view.height == 0/* || !r_refdef.scene.worldmodel*/) return; //Host_Error ("R_RenderView: NULL worldmodel"); @@ -3717,10 +3734,6 @@ void R_RenderView(void) R_ClearScreen(r_refdef.fogenabled); if (r_timereport_active) R_TimeReport("viewclear"); - } else { - // TODO: FIXME: move this into its own backend function maybe? [2/5/2008 Andreas] - GL_Clear( GL_DEPTH_BUFFER_BIT ); - R_TimeReport("depthclear"); } r_refdef.view.clear = true; @@ -4447,18 +4460,10 @@ void R_UpdateTextureInfo(const entity_render_t *ent, texture_t *t) t->currentmaterialflags = t->basematerialflags; t->currentalpha = ent->alpha; if (t->basematerialflags & MATERIALFLAG_WATERALPHA && (model->brush.supportwateralpha || r_novis.integer)) - { t->currentalpha *= r_wateralpha.value; - /* - * FIXME what is this supposed to do? - // if rendering refraction/reflection, disable transparency - if (r_waterstate.enabled && (t->currentalpha < 1 || (t->currentmaterialflags & MATERIALFLAG_ALPHA))) - t->currentmaterialflags |= MATERIALFLAG_WATERSHADER; - */ - } - if(t->basematerialflags & MATERIALFLAG_WATERSHADER && r_waterstate.enabled) + if(t->basematerialflags & MATERIALFLAG_WATERSHADER && r_waterstate.enabled && !r_refdef.view.isoverlay) t->currentalpha *= t->r_water_wateralpha; - if(!r_waterstate.enabled) + if(!r_waterstate.enabled || r_refdef.view.isoverlay) t->currentmaterialflags &= ~(MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION); if (!(ent->flags & RENDER_LIGHT)) t->currentmaterialflags |= MATERIALFLAG_FULLBRIGHT;