acdream/tests/AcDream.App.Tests/Rendering/Wb/DirectionalShadowTerrainPreparedDrawTests.cs

75 lines
2.8 KiB
C#

using AcDream.App.Rendering;
namespace AcDream.App.Tests.Rendering.Wb;
public sealed class DirectionalShadowTerrainPreparedDrawTests
{
[Fact]
public void Product_ContainsEveryResidentRangeWithoutVisibilityClassification()
{
var product = new DirectionalShadowTerrainPreparedDraws();
Assert.True(product.TryBegin(frameSequence: 10, estimatedCommands: 3));
DirectionalShadowTerrainRange[] resident =
[
new(FirstIndex: 0, IndexCount: 384),
new(FirstIndex: 384, IndexCount: 384),
new(FirstIndex: 768, IndexCount: 384),
];
foreach (DirectionalShadowTerrainRange range in resident)
product.Add(in range);
product.Complete(frameSequence: 10);
Assert.Equal(3, product.Commands.Length);
Assert.Equal(0u, product.Commands[0].FirstIndex);
Assert.Equal(384u, product.Commands[1].FirstIndex);
Assert.Equal(768u, product.Commands[2].FirstIndex);
Assert.All(
product.Commands.ToArray(),
static command =>
{
Assert.Equal(384u, command.Count);
Assert.Equal(1u, command.InstanceCount);
Assert.Equal(0, command.BaseVertex);
});
}
[Fact]
public void SameFrame_AllCascadesReuseOneTerrainBuild()
{
var product = new DirectionalShadowTerrainPreparedDraws();
Assert.True(product.TryBegin(frameSequence: 1, estimatedCommands: 1));
var range = new DirectionalShadowTerrainRange(100, 24);
product.Add(in range);
product.Complete(frameSequence: 1);
long retained = product.RetainedScratchBytes;
Assert.False(product.TryBegin(frameSequence: 1, estimatedCommands: 500));
Assert.Equal(1ul, product.BuildSequence);
Assert.Equal(retained, product.RetainedScratchBytes);
Assert.Single(product.Commands.ToArray());
}
[Fact]
public void NextFrame_RebuildsIntoRetainedStorage()
{
var product = new DirectionalShadowTerrainPreparedDraws();
Assert.True(product.TryBegin(frameSequence: 1, estimatedCommands: 2));
var first = new DirectionalShadowTerrainRange(10, 3);
var second = new DirectionalShadowTerrainRange(20, 6);
product.Add(in first);
product.Add(in second);
product.Complete(frameSequence: 1);
long retained = product.RetainedScratchBytes;
Assert.True(product.TryBegin(frameSequence: 2, estimatedCommands: 1));
product.Add(in second);
product.Complete(frameSequence: 2);
Assert.Equal(2ul, product.BuildSequence);
Assert.Equal(retained, product.RetainedScratchBytes);
Assert.Single(product.Commands.ToArray());
Assert.Equal(20u, product.Commands[0].FirstIndex);
}
}