feat: add face-culled chunk mesher behind IChunkMesher
This commit is contained in:
55
VoxelEngine.Tests/ChunkMesherTests.cs
Normal file
55
VoxelEngine.Tests/ChunkMesherTests.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using VoxelEngine.World;
|
||||
using Xunit;
|
||||
|
||||
namespace VoxelEngine.Tests;
|
||||
|
||||
public class ChunkMesherTests
|
||||
{
|
||||
private const int FloatsPerFace = 36; // 6 verts * 6 floats
|
||||
|
||||
private static int FaceCount(float[] mesh) => mesh.Length / FloatsPerFace;
|
||||
|
||||
[Fact]
|
||||
public void EmptyChunk_ProducesNoFaces()
|
||||
{
|
||||
var mesh = new ChunkMesher().Build(new Chunk(), new BlockRegistry());
|
||||
Assert.Empty(mesh);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SingleBlockSurroundedByAir_Produces6Faces()
|
||||
{
|
||||
var chunk = new Chunk();
|
||||
chunk[8, 8, 8] = 1; // stone
|
||||
|
||||
var mesh = new ChunkMesher().Build(chunk, new BlockRegistry());
|
||||
|
||||
Assert.Equal(6, FaceCount(mesh));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FullySolidChunk_ProducesOnlyOuterShell()
|
||||
{
|
||||
var chunk = new Chunk();
|
||||
for (int x = 0; x < Chunk.Size; x++)
|
||||
for (int y = 0; y < Chunk.Size; y++)
|
||||
for (int z = 0; z < Chunk.Size; z++)
|
||||
chunk[x, y, z] = 1; // stone
|
||||
|
||||
var mesh = new ChunkMesher().Build(chunk, new BlockRegistry());
|
||||
|
||||
// 6 sides * 16 * 16 visible faces
|
||||
Assert.Equal(6 * Chunk.Size * Chunk.Size, FaceCount(mesh));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EveryVertexHasSixFloats()
|
||||
{
|
||||
var chunk = new Chunk();
|
||||
chunk[0, 0, 0] = 1;
|
||||
|
||||
var mesh = new ChunkMesher().Build(chunk, new BlockRegistry());
|
||||
|
||||
Assert.Equal(0, mesh.Length % 6);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user