]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
implemented r_refdef.view.isoverlay state, this corresponds to the
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 25 Mar 2008 02:32:43 +0000 (02:32 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 25 Mar 2008 02:32:43 +0000 (02:32 +0000)
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

cl_screen.c
client.h
clvm_cmds.c
gl_rmain.c

index f5e72b21cefe01a4d503e486fdd18292bbc9bdae..d3794fb6dfe6f09fccddad52e14ba5d1cbb6f764 100644 (file)
@@ -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)
index b71c26394c3d723e837bb21b6f9133e394af0fea..0401a27735690b0307e95c0aae219ef4600b95c9 100644 (file)
--- 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,
index 6c8c47ed6a6174109224aa6d8ba480d955d367a2..3924e6d1a56976a5e6e11739affc1369cccf950a 100644 (file)
@@ -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;
index f0cedbc698ea79eef6d538a9ca8884804881b4e9..658858daa3687618a1f8ca42833e5ed3e458024b 100644 (file)
@@ -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;