[iortcw] 13/152: All: Rework the flares code / Add depth check for surface flare visibility
Simon McVittie
smcv at debian.org
Fri Sep 8 10:39:38 UTC 2017
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to annotated tag 1.5a
in repository iortcw.
commit 99b4b2bb687ff4a51f41d6223d883bb5dba6898c
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date: Sun Jan 17 14:24:05 2016 -0500
All: Rework the flares code / Add depth check for surface flare visibility
---
MP/code/rend2/tr_flares.c | 35 ++++++++++++++++++++++++++++++++---
MP/code/renderer/tr_flares.c | 21 ++++++++++++++++++---
SP/code/rend2/tr_flares.c | 35 ++++++++++++++++++++++++++++++++---
SP/code/renderer/tr_flares.c | 21 ++++++++++++++++++---
4 files changed, 100 insertions(+), 12 deletions(-)
diff --git a/MP/code/rend2/tr_flares.c b/MP/code/rend2/tr_flares.c
index dad093f..d4f6a5c 100644
--- a/MP/code/rend2/tr_flares.c
+++ b/MP/code/rend2/tr_flares.c
@@ -340,19 +340,48 @@ RB_TestFlare
==================
*/
void RB_TestFlare( flare_t *f ) {
- qboolean visible;
- float fade;
+ float depth;
+ qboolean visible;
+ float fade;
+ float screenZ;
+ FBO_t *oldFbo;
backEnd.pc.c_flareTests++;
+ // doing a readpixels is as good as doing a glFinish(), so
+ // don't bother with another sync
+ glState.finishCalled = qfalse;
+
+ // if we're doing multisample rendering, read from the correct FBO
+ oldFbo = glState.currentFBO;
+ if (tr.msaaResolveFbo)
+ {
+ FBO_Bind(tr.msaaResolveFbo);
+ }
+
+ // read back the z buffer contents
+ qglReadPixels( f->windowX, f->windowY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
+
+ // if we're doing multisample rendering, switch to the old FBO
+ if (tr.msaaResolveFbo)
+ {
+ FBO_Bind(oldFbo);
+ }
+
+ screenZ = backEnd.viewParms.projectionMatrix[14] /
+ ( ( 2*depth - 1 ) * backEnd.viewParms.projectionMatrix[11] - backEnd.viewParms.projectionMatrix[10] );
+
visible = f->cgvisible;
+ if ( -f->eyeZ - -screenZ > 24 )
+ visible = qfalse;
+
if ( visible ) {
if ( !f->visible ) {
f->visible = qtrue;
f->fadeTime = backEnd.refdef.time - 1;
}
- fade = ( ( backEnd.refdef.time - f->fadeTime ) / 1000.0f ) * r_flareFade->value;
+ fade = ( ( backEnd.refdef.time - f->fadeTime ) /1000.0f ) * r_flareFade->value;
} else {
if ( f->visible ) {
f->visible = qfalse;
diff --git a/MP/code/renderer/tr_flares.c b/MP/code/renderer/tr_flares.c
index 460324e..4aae1be 100644
--- a/MP/code/renderer/tr_flares.c
+++ b/MP/code/renderer/tr_flares.c
@@ -340,19 +340,34 @@ RB_TestFlare
==================
*/
void RB_TestFlare( flare_t *f ) {
- qboolean visible;
- float fade;
+ float depth;
+ qboolean visible;
+ float fade;
+ float screenZ;
backEnd.pc.c_flareTests++;
+ // doing a readpixels is as good as doing a glFinish(), so
+ // don't bother with another sync
+ glState.finishCalled = qfalse;
+
+ // read back the z buffer contents
+ qglReadPixels( f->windowX, f->windowY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
+
+ screenZ = backEnd.viewParms.projectionMatrix[14] /
+ ( ( 2*depth - 1 ) * backEnd.viewParms.projectionMatrix[11] - backEnd.viewParms.projectionMatrix[10] );
+
visible = f->cgvisible;
+ if ( -f->eyeZ - -screenZ > 24 )
+ visible = qfalse;
+
if ( visible ) {
if ( !f->visible ) {
f->visible = qtrue;
f->fadeTime = backEnd.refdef.time - 1;
}
- fade = ( ( backEnd.refdef.time - f->fadeTime ) / 1000.0f ) * r_flareFade->value;
+ fade = ( ( backEnd.refdef.time - f->fadeTime ) /1000.0f ) * r_flareFade->value;
} else {
if ( f->visible ) {
f->visible = qfalse;
diff --git a/SP/code/rend2/tr_flares.c b/SP/code/rend2/tr_flares.c
index f88fdc7..8eaf01b 100644
--- a/SP/code/rend2/tr_flares.c
+++ b/SP/code/rend2/tr_flares.c
@@ -342,19 +342,48 @@ RB_TestFlare
==================
*/
void RB_TestFlare( flare_t *f ) {
- qboolean visible;
- float fade;
+ float depth;
+ qboolean visible;
+ float fade;
+ float screenZ;
+ FBO_t *oldFbo;
backEnd.pc.c_flareTests++;
+ // doing a readpixels is as good as doing a glFinish(), so
+ // don't bother with another sync
+ glState.finishCalled = qfalse;
+
+ // if we're doing multisample rendering, read from the correct FBO
+ oldFbo = glState.currentFBO;
+ if (tr.msaaResolveFbo)
+ {
+ FBO_Bind(tr.msaaResolveFbo);
+ }
+
+ // read back the z buffer contents
+ qglReadPixels( f->windowX, f->windowY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
+
+ // if we're doing multisample rendering, switch to the old FBO
+ if (tr.msaaResolveFbo)
+ {
+ FBO_Bind(oldFbo);
+ }
+
+ screenZ = backEnd.viewParms.projectionMatrix[14] /
+ ( ( 2*depth - 1 ) * backEnd.viewParms.projectionMatrix[11] - backEnd.viewParms.projectionMatrix[10] );
+
visible = (qboolean)( f->flags & 1 );
+ if ( -f->eyeZ - -screenZ > 24 )
+ visible = qfalse;
+
if ( visible ) {
if ( !f->visible ) {
f->visible = qtrue;
f->fadeTime = backEnd.refdef.time - 1;
}
- fade = ( ( backEnd.refdef.time - f->fadeTime ) / 1000.0f ) * r_flareFade->value;
+ fade = ( ( backEnd.refdef.time - f->fadeTime ) /1000.0f ) * r_flareFade->value;
} else {
if ( f->visible ) {
f->visible = qfalse;
diff --git a/SP/code/renderer/tr_flares.c b/SP/code/renderer/tr_flares.c
index 40f31b5..36b8c8e 100644
--- a/SP/code/renderer/tr_flares.c
+++ b/SP/code/renderer/tr_flares.c
@@ -342,19 +342,34 @@ RB_TestFlare
==================
*/
void RB_TestFlare( flare_t *f ) {
- qboolean visible;
- float fade;
+ float depth;
+ qboolean visible;
+ float fade;
+ float screenZ;
backEnd.pc.c_flareTests++;
+ // doing a readpixels is as good as doing a glFinish(), so
+ // don't bother with another sync
+ glState.finishCalled = qfalse;
+
+ // read back the z buffer contents
+ qglReadPixels( f->windowX, f->windowY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
+
+ screenZ = backEnd.viewParms.projectionMatrix[14] /
+ ( ( 2*depth - 1 ) * backEnd.viewParms.projectionMatrix[11] - backEnd.viewParms.projectionMatrix[10] );
+
visible = (qboolean)( f->flags & 1 );
+ if ( -f->eyeZ - -screenZ > 24 )
+ visible = qfalse;
+
if ( visible ) {
if ( !f->visible ) {
f->visible = qtrue;
f->fadeTime = backEnd.refdef.time - 1;
}
- fade = ( ( backEnd.refdef.time - f->fadeTime ) / 1000.0f ) * r_flareFade->value;
+ fade = ( ( backEnd.refdef.time - f->fadeTime ) /1000.0f ) * r_flareFade->value;
} else {
if ( f->visible ) {
f->visible = qfalse;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git
More information about the Pkg-games-commits
mailing list