Do backface determination and distance calculation for chunks in a single pass.

This commit is contained in:
UnknownShadow200 2016-08-23 14:43:48 +10:00
parent ae379a85c0
commit 777d3a829b

View File

@ -17,21 +17,14 @@ namespace ClassicalSharp.Renderers {
ChunkInfo[] chunks = game.MapRenderer.chunks;
int[] distances = updater.distances;
updater.chunkPos = newChunkPos;
for( int i = 0; i < distances.Length; i++ ) {
ChunkInfo info = chunks[i];
distances[i] = Utils.DistanceSquared( info.CentreX, info.CentreY, info.CentreZ,
updater.chunkPos.X, updater.chunkPos.Y, updater.chunkPos.Z );
}
// NOTE: Over 5x faster compared to normal comparison of IComparer<ChunkInfo>.Compare
if( distances.Length > 1 )
QuickSort( distances, chunks, 0, chunks.Length - 1 );
Vector3I pPos = newChunkPos;
updater.chunkPos = pPos;
for( int i = 0; i < chunks.Length; i++ ) {
ChunkInfo info = chunks[i];
distances[i] = Utils.DistanceSquared( info.CentreX, info.CentreY, info.CentreZ,
pPos.X, pPos.Y, pPos.Z );
int dX1 = (info.CentreX - 8) - pPos.X, dX2 = (info.CentreX + 8) - pPos.X;
int dY1 = (info.CentreY - 8) - pPos.Y, dY2 = (info.CentreY + 8) - pPos.Y;
int dZ1 = (info.CentreZ - 8) - pPos.Z, dZ2 = (info.CentreZ + 8) - pPos.Z;
@ -44,6 +37,10 @@ namespace ClassicalSharp.Renderers {
info.DrawBottom = !(dY1 <= 0 && dY2 <= 0);
info.DrawTop = !(dY1 >= 0 && dY2 >= 0);
}
// NOTE: Over 5x faster compared to normal comparison of IComparer<ChunkInfo>.Compare
if( distances.Length > 1 )
QuickSort( distances, chunks, 0, chunks.Length - 1 );
updater.ResetUsedFlags();
//SimpleOcclusionCulling();
}