acdream/tests/AcDream.App.Tests/Rendering/RetailDetailTextureContractTests.cs

90 lines
3 KiB
C#

using System.Numerics;
using AcDream.App.Rendering;
using AcDream.App.Rendering.Gpu;
namespace AcDream.App.Tests.Rendering;
public sealed class RetailDetailTextureContractTests
{
private static readonly TerrainAtlas.RetailDetailTextureBinding Available = new(
new GpuTextureSlot(7),
Tiling: 4f,
SurfaceTextureId: 0x05001787,
RenderSurfaceId: 0x06006D58,
Width: 256,
Height: 256);
[Fact]
public void ExistingBuildingDetailSettingIsTheLivePassGate()
{
Assert.False(RetailDetailTextureContract.ShouldRender(false, Available));
Assert.True(RetailDetailTextureContract.ShouldRender(true, Available));
Assert.False(RetailDetailTextureContract.ShouldRender(true, default));
}
[Fact]
public void OpaqueDetailUsesDepthEqualityWhileTransparentDetailDoesNot()
{
Assert.Equal(
GpuCompareOp.Equal,
RetailDetailTextureContract.DetailDepthCompare(transparent: false));
Assert.Equal(
GpuCompareOp.LessOrEqual,
RetailDetailTextureContract.DetailDepthCompare(transparent: true));
}
[Theory]
[InlineData(0f, 1f)]
[InlineData(10f, 1f)]
[InlineData(30f, 0.5f)]
[InlineData(50f, 0f)]
[InlineData(80f, 0f)]
public void DistanceFadeUsesPositiveViewDepthInMetres(
float depthMetres,
float expected)
{
Assert.Equal(
expected,
RetailDetailTextureContract.FadeForPositiveViewDepthMetres(depthMetres),
precision: 5);
}
[Fact]
public void FadeZeroIsExactNoOpAndNeutralRgbEqualsAlpha()
{
var brighteningSample = new Vector4(0.459f, 0.459f, 0.459f, 0.282f);
Assert.Equal(
Vector3.One,
RetailDetailTextureContract.FramebufferFactor(brighteningSample, fade: 0f));
var neutral = new Vector4(0.4f, 0.4f, 0.4f, 0.4f);
Vector3 neutralFactor = RetailDetailTextureContract.FramebufferFactor(neutral, fade: 1f);
Assert.Equal(1f, neutralFactor.X, precision: 5);
Assert.Equal(1f, neutralFactor.Y, precision: 5);
Assert.Equal(1f, neutralFactor.Z, precision: 5);
}
[Fact]
public void RetailBlendPreservesMeasuredBrightening()
{
var measured = new Vector4(0.459f, 0.459f, 0.459f, 0.282f);
Vector3 factor = RetailDetailTextureContract.FramebufferFactor(measured, fade: 1f);
Assert.Equal(1.177f, factor.X, precision: 5);
Assert.Equal(1.177f, factor.Y, precision: 5);
Assert.Equal(1.177f, factor.Z, precision: 5);
}
[Fact]
public void EnabledDerethCategoryTextureKeepsItsMeasuredBrightening()
{
var derethCategory = new Vector4(0.165f, 0.165f, 0.165f, 0.132f);
Vector3 factor = RetailDetailTextureContract.FramebufferFactor(
derethCategory,
fade: 1f);
Assert.Equal(1.033f, factor.X, precision: 5);
Assert.Equal(1.033f, factor.Y, precision: 5);
Assert.Equal(1.033f, factor.Z, precision: 5);
}
}