90 lines
3 KiB
C#
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);
|
|
}
|
|
}
|