[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