[iortcw] 60/152: All: Rend2: Speed up surface merging

Simon McVittie smcv at debian.org
Fri Sep 8 10:40:00 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 dfb114b62a06701111a0a0390373d24fcdea6414
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date:   Sat May 21 15:55:07 2016 -0400

    All: Rend2: Speed up surface merging
---
 MP/code/rend2/tr_bsp.c | 29 +++++++++++------------------
 SP/code/rend2/tr_bsp.c | 29 +++++++++++------------------
 2 files changed, 22 insertions(+), 36 deletions(-)

diff --git a/MP/code/rend2/tr_bsp.c b/MP/code/rend2/tr_bsp.c
index 7461051..155ebc9 100644
--- a/MP/code/rend2/tr_bsp.c
+++ b/MP/code/rend2/tr_bsp.c
@@ -2353,12 +2353,6 @@ static void R_CreateWorldVaos(void)
 		// -1 represents 0, -2 represents 1, and so on
 		s_worldData.viewSurfaces = ri.Hunk_Alloc(sizeof(*s_worldData.viewSurfaces) * s_worldData.nummarksurfaces, h_low);
 
-		// copy view surfaces into mark surfaces
-		for (i = 0; i < s_worldData.nummarksurfaces; i++)
-		{
-			s_worldData.viewSurfaces[i] = s_worldData.marksurfaces[i];
-		}
-
 		// actually merge surfaces
 		mergedSurf = s_worldData.mergedSurfaces;
 		for(firstSurf = lastSurf = surfacesSorted; firstSurf < surfacesSorted + numSortedSurfaces; firstSurf = lastSurf)
@@ -2419,23 +2413,22 @@ static void R_CreateWorldVaos(void)
 			mergedSurf->cubemapIndex  =  (*firstSurf)->cubemapIndex;
 			mergedSurf->shader        =  (*firstSurf)->shader;
 
-			// redirect view surfaces to this surf
+			// change surfacesViewCount[] from leaf index to viewSurface index - 1 so we can redirect later
+			// subtracting 2 (viewSurface index - 1) to avoid collision with -1 (no leaf)
 			for (currSurf = firstSurf; currSurf < lastSurf; currSurf++)
-				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -2;
-
-			for (k = 0; k < s_worldData.nummarksurfaces; k++)
-			{
-				if (s_worldData.surfacesViewCount[s_worldData.marksurfaces[k]] == -2)
-					s_worldData.viewSurfaces[k] = -((int)(mergedSurf - s_worldData.mergedSurfaces) + 1);
-			}
-
-			for (currSurf = firstSurf; currSurf < lastSurf; currSurf++)
-				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -1;
+				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -((int)(mergedSurf - s_worldData.mergedSurfaces)) - 2;
 
 			mergedSurf++;
 		}
 
-		ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n", 
+		// direct viewSurfaces to merged and unmerged surfaces
+		for (i = 0; i < s_worldData.nummarksurfaces; i++)
+		{
+			int viewSurfaceIndex = s_worldData.surfacesViewCount[s_worldData.marksurfaces[i]] + 1;
+			s_worldData.viewSurfaces[i] = (viewSurfaceIndex < 0) ? viewSurfaceIndex : s_worldData.marksurfaces[i];
+		}
+
+		ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n",
 			numSortedSurfaces, numMergedSurfaces, numUnmergedSurfaces);
 	}
 
diff --git a/SP/code/rend2/tr_bsp.c b/SP/code/rend2/tr_bsp.c
index 73d89da..5289f3d 100644
--- a/SP/code/rend2/tr_bsp.c
+++ b/SP/code/rend2/tr_bsp.c
@@ -2341,12 +2341,6 @@ static void R_CreateWorldVaos(void)
 		// -1 represents 0, -2 represents 1, and so on
 		s_worldData.viewSurfaces = ri.Hunk_Alloc(sizeof(*s_worldData.viewSurfaces) * s_worldData.nummarksurfaces, h_low);
 
-		// copy view surfaces into mark surfaces
-		for (i = 0; i < s_worldData.nummarksurfaces; i++)
-		{
-			s_worldData.viewSurfaces[i] = s_worldData.marksurfaces[i];
-		}
-
 		// actually merge surfaces
 		mergedSurf = s_worldData.mergedSurfaces;
 		for(firstSurf = lastSurf = surfacesSorted; firstSurf < surfacesSorted + numSortedSurfaces; firstSurf = lastSurf)
@@ -2407,23 +2401,22 @@ static void R_CreateWorldVaos(void)
 			mergedSurf->cubemapIndex  =  (*firstSurf)->cubemapIndex;
 			mergedSurf->shader        =  (*firstSurf)->shader;
 
-			// redirect view surfaces to this surf
+			// change surfacesViewCount[] from leaf index to viewSurface index - 1 so we can redirect later
+			// subtracting 2 (viewSurface index - 1) to avoid collision with -1 (no leaf)
 			for (currSurf = firstSurf; currSurf < lastSurf; currSurf++)
-				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -2;
-
-			for (k = 0; k < s_worldData.nummarksurfaces; k++)
-			{
-				if (s_worldData.surfacesViewCount[s_worldData.marksurfaces[k]] == -2)
-					s_worldData.viewSurfaces[k] = -((int)(mergedSurf - s_worldData.mergedSurfaces) + 1);
-			}
-
-			for (currSurf = firstSurf; currSurf < lastSurf; currSurf++)
-				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -1;
+				s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -((int)(mergedSurf - s_worldData.mergedSurfaces)) - 2;
 
 			mergedSurf++;
 		}
 
-		ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n", 
+		// direct viewSurfaces to merged and unmerged surfaces
+		for (i = 0; i < s_worldData.nummarksurfaces; i++)
+		{
+			int viewSurfaceIndex = s_worldData.surfacesViewCount[s_worldData.marksurfaces[i]] + 1;
+			s_worldData.viewSurfaces[i] = (viewSurfaceIndex < 0) ? viewSurfaceIndex : s_worldData.marksurfaces[i];
+		}
+
+		ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n",
 			numSortedSurfaces, numMergedSurfaces, numUnmergedSurfaces);
 	}
 

-- 
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