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 <[email protected]> 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 _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

