diff --git a/ClassicalSharp/Map/ChunkMeshBuilder.FloodFill.cs b/ClassicalSharp/Map/ChunkMeshBuilder.FloodFill.cs index a16664f96..8c0de23a4 100644 --- a/ClassicalSharp/Map/ChunkMeshBuilder.FloodFill.cs +++ b/ClassicalSharp/Map/ChunkMeshBuilder.FloodFill.cs @@ -1,4 +1,5 @@ // ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT +#if OCCLUSION using System; using ClassicalSharp.GraphicsAPI; @@ -92,4 +93,5 @@ namespace ClassicalSharp { if( tZ0 && tZ1 ) solidZ = false; } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ClassicalSharp/Map/ChunkMeshBuilder.cs b/ClassicalSharp/Map/ChunkMeshBuilder.cs index dd4500f69..dbb5511c4 100644 --- a/ClassicalSharp/Map/ChunkMeshBuilder.cs +++ b/ClassicalSharp/Map/ChunkMeshBuilder.cs @@ -108,15 +108,18 @@ namespace ClassicalSharp { } public void GetDrawInfo( int x, int y, int z, ref ChunkPartInfo[] normalParts, - ref ChunkPartInfo[] translucentParts, ref byte occlusionFlags ) { + ref ChunkPartInfo[] translucentParts ) { if( !BuildChunk( x, y, z ) ) return; for( int i = 0; i < arraysCount; i++ ) { SetPartInfo( drawInfoNormal[i], i, ref normalParts ); SetPartInfo( drawInfoTranslucent[i], i, ref translucentParts ); } + #if OCCLUSION + // , ref byte occlusionFlags if( normalParts != null || translucentParts != null ) - occlusionFlags = 0;//(byte)ComputeOcclusion(); + occlusionFlags = (byte)ComputeOcclusion(); + #endif } Vector3 minBB, maxBB; @@ -163,8 +166,10 @@ namespace ClassicalSharp { int xMax = Math.Min( width, x1 + chunkSize ); int yMax = Math.Min( height, y1 + chunkSize ); int zMax = Math.Min( length, z1 + chunkSize ); + #if OCCLUSION + int flags = ComputeOcclusion(); + #endif #if DEBUG_OCCLUSION - int flags = ComputeOcclusion(); FastColour col = new FastColour( 60, 60, 60, 255 ); if( (flags & 1) != 0 ) col.R = 255; // x if( (flags & 4) != 0 ) col.G = 255; // y diff --git a/ClassicalSharp/Rendering/MapRenderer.Occlusion.cs b/ClassicalSharp/Rendering/MapRenderer.Occlusion.cs index 4d08015ce..647fe05f5 100644 --- a/ClassicalSharp/Rendering/MapRenderer.Occlusion.cs +++ b/ClassicalSharp/Rendering/MapRenderer.Occlusion.cs @@ -1,4 +1,5 @@ // ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT +#if OCCLUSION using System; using ClassicalSharp.GraphicsAPI; using OpenTK; @@ -269,4 +270,4 @@ namespace ClassicalSharp.Renderers { } } } - +#endif \ No newline at end of file diff --git a/ClassicalSharp/Rendering/MapRenderer.Rendering.cs b/ClassicalSharp/Rendering/MapRenderer.Rendering.cs index af166c24b..6dfbd53f9 100644 --- a/ClassicalSharp/Rendering/MapRenderer.Rendering.cs +++ b/ClassicalSharp/Rendering/MapRenderer.Rendering.cs @@ -25,7 +25,9 @@ namespace ClassicalSharp.Renderers { } api.AlphaTest = false; api.Texturing = false; + #if DEBUG_OCCLUSION DebugPickedPos(); + #endif } // Render translucent(liquid) blocks. These 'blend' into other blocks. @@ -70,7 +72,11 @@ namespace ClassicalSharp.Renderers { void RenderNormalBatch( int batch ) { for( int i = 0; i < chunks.Length; i++ ) { ChunkInfo info = chunks[i]; + #if OCCLUSION if( info.NormalParts == null || !info.Visible || info.Occluded ) continue; + #else + if( info.NormalParts == null || !info.Visible ) continue; + #endif ChunkPartInfo part = info.NormalParts[batch]; if( part.IndicesCount == 0 ) continue; @@ -92,7 +98,11 @@ namespace ClassicalSharp.Renderers { void RenderTranslucentBatch( int batch ) { for( int i = 0; i < chunks.Length; i++ ) { ChunkInfo info = chunks[i]; + #if OCCLUSION if( info.TranslucentParts == null || !info.Visible || info.Occluded ) continue; + #else + if( info.TranslucentParts == null || !info.Visible ) continue; + #endif ChunkPartInfo part = info.TranslucentParts[batch]; if( part.IndicesCount == 0 ) continue; @@ -104,7 +114,11 @@ namespace ClassicalSharp.Renderers { void RenderTranslucentBatchDepthPass( int batch ) { for( int i = 0; i < chunks.Length; i++ ) { ChunkInfo info = chunks[i]; + #if OCCLUSION if( info.TranslucentParts == null || !info.Visible || info.Occluded ) continue; + #else + if( info.TranslucentParts == null || !info.Visible ) continue; + #endif ChunkPartInfo part = info.TranslucentParts[batch]; if( part.IndicesCount == 0 ) continue; diff --git a/ClassicalSharp/Rendering/MapRenderer.cs b/ClassicalSharp/Rendering/MapRenderer.cs index cc54f6851..966bcb162 100644 --- a/ClassicalSharp/Rendering/MapRenderer.cs +++ b/ClassicalSharp/Rendering/MapRenderer.cs @@ -14,10 +14,12 @@ namespace ClassicalSharp.Renderers { class ChunkInfo { public ushort CentreX, CentreY, CentreZ; - public bool Visible = true, Occluded = false; - public bool Visited = false, Empty = false; + public bool Visible = true, Empty = false; public bool DrawLeft, DrawRight, DrawFront, DrawBack, DrawBottom, DrawTop; + #if OCCLUSION + public bool Visited = false, Occluded = false; public byte OcclusionFlags, OccludedFlags, DistanceFlags; + #endif public ChunkPartInfo[] NormalParts; public ChunkPartInfo[] TranslucentParts; @@ -189,8 +191,10 @@ namespace ClassicalSharp.Renderers { void DeleteChunk( ChunkInfo info ) { info.Empty = false; + #if OCCLUSION info.OcclusionFlags = 0; info.OccludedFlags = 0; + #endif DeleteData( ref info.NormalParts ); DeleteData( ref info.TranslucentParts ); } @@ -343,7 +347,7 @@ namespace ClassicalSharp.Renderers { void BuildChunk( ChunkInfo info, ref int chunkUpdates ) { game.ChunkUpdates++; builder.GetDrawInfo( info.CentreX - 8, info.CentreY - 8, info.CentreZ - 8, - ref info.NormalParts, ref info.TranslucentParts, ref info.OcclusionFlags ); + ref info.NormalParts, ref info.TranslucentParts ); if( info.NormalParts == null && info.TranslucentParts == null ) { info.Empty = true;