[iortcw] 77/497: All: Rend2: Use areamask and leaf cluster for PVS when VIS is missing

2017-09-08 Thread Simon McVittie
This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.42d
in repository iortcw.

commit 536b5829c1a379e56f16adc0d1d21296cc494a03
Author: m4n4t4...@gmail.com 

Date:   Thu Mar 20 11:48:26 2014 +

All: Rend2: Use areamask and leaf cluster for PVS when VIS is missing
---
 MP/code/rend2/tr_bsp.c   |  2 --
 MP/code/rend2/tr_local.h |  2 --
 MP/code/rend2/tr_world.c | 45 +
 SP/code/rend2/tr_bsp.c   |  2 --
 SP/code/rend2/tr_local.h |  2 --
 SP/code/rend2/tr_world.c | 45 +
 6 files changed, 26 insertions(+), 72 deletions(-)

diff --git a/MP/code/rend2/tr_bsp.c b/MP/code/rend2/tr_bsp.c
index 71c4406..db88eb1 100644
--- a/MP/code/rend2/tr_bsp.c
+++ b/MP/code/rend2/tr_bsp.c
@@ -604,8 +604,6 @@ static void R_LoadVisibility( lump_t *l ) {
byte*buf;
 
len = ( s_worldData.numClusters + 63 ) & ~63;
-   s_worldData.novis = ri.Hunk_Alloc( len, h_low );
-   memset( s_worldData.novis, 0xff, len );
 
len = l->filelen;
if ( !len ) {
diff --git a/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h
index 7f31447..f7f49f0 100644
--- a/MP/code/rend2/tr_local.h
+++ b/MP/code/rend2/tr_local.h
@@ -1287,8 +1287,6 @@ typedef struct {
int clusterBytes;
const byte  *vis;   // may be passed in by CM_LoadMap to save 
space
 
-   byte*novis; // clusterBytes of 0xff
-
char*entityString;
char*entityParsePoint;
 } world_t;
diff --git a/MP/code/rend2/tr_world.c b/MP/code/rend2/tr_world.c
index 5d19564..98e9b25 100644
--- a/MP/code/rend2/tr_world.c
+++ b/MP/code/rend2/tr_world.c
@@ -735,7 +735,7 @@ R_ClusterPVS
 */
 static const byte *R_ClusterPVS( int cluster ) {
if ( !tr.world->vis || cluster < 0 || cluster >= tr.world->numClusters 
) {
-   return tr.world->novis;
+   return NULL;
}
 
return tr.world->vis + cluster * tr.world->clusterBytes;
@@ -772,29 +772,21 @@ static void R_MarkLeaves( void ) {
 
for(i = 0; i < MAX_VISCOUNTS; i++)
{
-   if(tr.visClusters[i] == cluster)
+   // if the areamask or r_showcluster was modified, invalidate 
all visclusters
+   // this caused doors to open into undrawn areas
+   if (tr.refdef.areamaskModified || r_showcluster->modified)
{
-   //tr.visIndex = i;
-   break;
+   tr.visClusters[i] = -2;
}
-   }
-
-   // if r_showcluster was just turned on, remark everything
-   if(i != MAX_VISCOUNTS && !tr.refdef.areamaskModified && 
!r_showcluster->modified)// && !r_dynamicBspOcclusionCulling->modified)
-   {
-   if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && 
r_showcluster->integer)
+   else if(tr.visClusters[i] == cluster)
{
-   ri.Printf(PRINT_ALL, "found cluster:%i  area:%i  
index:%i\n", cluster, leaf->area, i);
+   if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && 
r_showcluster->integer)
+   {
+   ri.Printf(PRINT_ALL, "found cluster:%i  area:%i 
 index:%i\n", cluster, leaf->area, i);
+   }
+   tr.visIndex = i;
+   return;
}
-   tr.visIndex = i;
-   return;
-   }
-
-   // if the areamask was modified, invalidate all visclusters
-   // this caused doors to open into undrawn areas
-   if (tr.refdef.areamaskModified)
-   {
-   memset(tr.visClusters, -2, sizeof(tr.visClusters));
}
 
tr.visIndex = (tr.visIndex + 1) % MAX_VISCOUNTS;
@@ -808,17 +800,6 @@ static void R_MarkLeaves( void ) {
}
}
 
-   // set all nodes to visible if there is no vis
-   // this caused some levels to simply not render
-   if (r_novis->integer || !tr.world->vis || tr.visClusters[tr.visIndex] 
== -1) {
-   for ( i = 0 ; i < tr.world->numnodes ; i++ ) {
-   if ( tr.world->nodes[i].contents != CONTENTS_SOLID ) {
-   tr.world->nodes[i].visCounts[tr.visIndex] = 
tr.visCounts[tr.visIndex];
-   }
-   }
-   return;
-   }
-
vis = R_ClusterPVS(tr.visClusters[tr.visIndex]);
 
for ( i = 0,leaf = tr.world->nodes ; i < tr.world->numnodes ; i++, 
leaf++ ) {
@@ -828,7 +809,7 @@ static void R_MarkLeaves( void ) {
}
 
// check general pvs
-   if ( !( vis[cluster >> 3] & ( 1 << ( cluster & 7 ) ) ) ) {
+   if ( vis && !(vis[cluster>>3] & (1<<(cluster&7))) ) {
continue;
}
 
diff --git a/SP/code/rend2/tr_bsp.c b/SP/code/rend2/tr_bsp.c
index 70b46b4..

[iortcw] 77/497: All: Rend2: Use areamask and leaf cluster for PVS when VIS is missing

2016-09-21 Thread Simon McVittie
This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.42d
in repository iortcw.

commit 536b5829c1a379e56f16adc0d1d21296cc494a03
Author: m4n4t4...@gmail.com 

Date:   Thu Mar 20 11:48:26 2014 +

All: Rend2: Use areamask and leaf cluster for PVS when VIS is missing
---
 MP/code/rend2/tr_bsp.c   |  2 --
 MP/code/rend2/tr_local.h |  2 --
 MP/code/rend2/tr_world.c | 45 +
 SP/code/rend2/tr_bsp.c   |  2 --
 SP/code/rend2/tr_local.h |  2 --
 SP/code/rend2/tr_world.c | 45 +
 6 files changed, 26 insertions(+), 72 deletions(-)

diff --git a/MP/code/rend2/tr_bsp.c b/MP/code/rend2/tr_bsp.c
index 71c4406..db88eb1 100644
--- a/MP/code/rend2/tr_bsp.c
+++ b/MP/code/rend2/tr_bsp.c
@@ -604,8 +604,6 @@ static void R_LoadVisibility( lump_t *l ) {
byte*buf;
 
len = ( s_worldData.numClusters + 63 ) & ~63;
-   s_worldData.novis = ri.Hunk_Alloc( len, h_low );
-   memset( s_worldData.novis, 0xff, len );
 
len = l->filelen;
if ( !len ) {
diff --git a/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h
index 7f31447..f7f49f0 100644
--- a/MP/code/rend2/tr_local.h
+++ b/MP/code/rend2/tr_local.h
@@ -1287,8 +1287,6 @@ typedef struct {
int clusterBytes;
const byte  *vis;   // may be passed in by CM_LoadMap to save 
space
 
-   byte*novis; // clusterBytes of 0xff
-
char*entityString;
char*entityParsePoint;
 } world_t;
diff --git a/MP/code/rend2/tr_world.c b/MP/code/rend2/tr_world.c
index 5d19564..98e9b25 100644
--- a/MP/code/rend2/tr_world.c
+++ b/MP/code/rend2/tr_world.c
@@ -735,7 +735,7 @@ R_ClusterPVS
 */
 static const byte *R_ClusterPVS( int cluster ) {
if ( !tr.world->vis || cluster < 0 || cluster >= tr.world->numClusters 
) {
-   return tr.world->novis;
+   return NULL;
}
 
return tr.world->vis + cluster * tr.world->clusterBytes;
@@ -772,29 +772,21 @@ static void R_MarkLeaves( void ) {
 
for(i = 0; i < MAX_VISCOUNTS; i++)
{
-   if(tr.visClusters[i] == cluster)
+   // if the areamask or r_showcluster was modified, invalidate 
all visclusters
+   // this caused doors to open into undrawn areas
+   if (tr.refdef.areamaskModified || r_showcluster->modified)
{
-   //tr.visIndex = i;
-   break;
+   tr.visClusters[i] = -2;
}
-   }
-
-   // if r_showcluster was just turned on, remark everything
-   if(i != MAX_VISCOUNTS && !tr.refdef.areamaskModified && 
!r_showcluster->modified)// && !r_dynamicBspOcclusionCulling->modified)
-   {
-   if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && 
r_showcluster->integer)
+   else if(tr.visClusters[i] == cluster)
{
-   ri.Printf(PRINT_ALL, "found cluster:%i  area:%i  
index:%i\n", cluster, leaf->area, i);
+   if(tr.visClusters[i] != tr.visClusters[tr.visIndex] && 
r_showcluster->integer)
+   {
+   ri.Printf(PRINT_ALL, "found cluster:%i  area:%i 
 index:%i\n", cluster, leaf->area, i);
+   }
+   tr.visIndex = i;
+   return;
}
-   tr.visIndex = i;
-   return;
-   }
-
-   // if the areamask was modified, invalidate all visclusters
-   // this caused doors to open into undrawn areas
-   if (tr.refdef.areamaskModified)
-   {
-   memset(tr.visClusters, -2, sizeof(tr.visClusters));
}
 
tr.visIndex = (tr.visIndex + 1) % MAX_VISCOUNTS;
@@ -808,17 +800,6 @@ static void R_MarkLeaves( void ) {
}
}
 
-   // set all nodes to visible if there is no vis
-   // this caused some levels to simply not render
-   if (r_novis->integer || !tr.world->vis || tr.visClusters[tr.visIndex] 
== -1) {
-   for ( i = 0 ; i < tr.world->numnodes ; i++ ) {
-   if ( tr.world->nodes[i].contents != CONTENTS_SOLID ) {
-   tr.world->nodes[i].visCounts[tr.visIndex] = 
tr.visCounts[tr.visIndex];
-   }
-   }
-   return;
-   }
-
vis = R_ClusterPVS(tr.visClusters[tr.visIndex]);
 
for ( i = 0,leaf = tr.world->nodes ; i < tr.world->numnodes ; i++, 
leaf++ ) {
@@ -828,7 +809,7 @@ static void R_MarkLeaves( void ) {
}
 
// check general pvs
-   if ( !( vis[cluster >> 3] & ( 1 << ( cluster & 7 ) ) ) ) {
+   if ( vis && !(vis[cluster>>3] & (1<<(cluster&7))) ) {
continue;
}
 
diff --git a/SP/code/rend2/tr_bsp.c b/SP/code/rend2/tr_bsp.c
index 70b46b4..