75 lines
2.8 KiB
C#
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);
|
|
}
|
|
}
|