acdream/tests/AcDream.App.Tests/Rendering/Packs/PackSettingsUniformsTests.cs

117 lines
4.2 KiB
C#

using AcDream.App.Rendering.Packs;
using AcDream.App.Tests.Rendering.Gpu;
using AcDream.Plugin.Abstractions.Rendering;
using AcDream.UI.Abstractions.Panels.Settings;
namespace AcDream.App.Tests.Rendering.Packs;
public sealed class PackSettingsUniformsTests
{
[Fact]
public void WriterResolvesPresetThenEncodesEveryV1ScalarKindInvariantly()
{
RenderPackDescriptor descriptor = BuiltInAtmosphericRenderPack.Descriptor with
{
Settings =
[
Setting("float", RenderSettingKind.Float, "1.25"),
Setting("integer", RenderSettingKind.Integer, "12"),
Setting("bool-false", RenderSettingKind.Boolean, "false"),
Setting("bool-true", RenderSettingKind.Boolean, "true"),
Setting("choice", RenderSettingKind.Choice, "low", ["low", "medium", "high"]),
Setting("invalid-integer", RenderSettingKind.Integer, "1.5"),
Setting("invalid-float", RenderSettingKind.Float, "1,5"),
],
};
RenderQualityPreset preset = descriptor.QualityPresets[0] with
{
SettingOverrides =
[
new RenderQualitySettingOverride("float", "2.5"),
new RenderQualitySettingOverride("integer", "-7"),
new RenderQualitySettingOverride("bool-false", "true"),
new RenderQualitySettingOverride("choice", "high"),
],
};
PackSettingsUniforms values = PackSettingsUniforms.Create(descriptor, preset);
Assert.Equal(2.5f, values[0]);
Assert.Equal(-7f, values[1]);
Assert.Equal(1f, values[2]);
Assert.Equal(1f, values[3]);
Assert.Equal(2f, values[4]);
Assert.Equal(0f, values[5]);
Assert.Equal(0f, values[6]);
Assert.Equal(0f, values[63]);
}
[Fact]
public void DescriptorValidatorRejectsMoreThanSixtyFourSettings()
{
RenderSettingDeclaration[] settings = Enumerable.Range(0, 65)
.Select(index => Setting($"setting-{index}", RenderSettingKind.Float, "0"))
.ToArray();
RenderPackDescriptor descriptor = BuiltInAtmosphericRenderPack.Descriptor with
{
Settings = settings,
};
var device = new RecordingGpuDevice();
RenderPackValidationResult result = RenderPackValidator.ValidateDescriptor(
descriptor,
RenderPackCapabilityResolver.Resolve(device.Capabilities));
Assert.False(result.Success);
Assert.Contains("64-setting", result.Reason, StringComparison.Ordinal);
}
[Fact]
public void User_value_wins_preset_and_default_in_b8_and_built_in_cpu_settings()
{
RenderPackDescriptor descriptor = BuiltInAtmosphericRenderPack.Descriptor;
RenderQualityPreset preset = descriptor.QualityPresets[0] with
{
SettingOverrides =
[
new RenderQualitySettingOverride("exposure", "1.25"),
new RenderQualitySettingOverride("bloom-strength", "0.25"),
],
};
var overrides = new RenderPackSettingOverrides(
new Dictionary<string, string>
{
["EXPOSURE"] = "1.75",
});
PackSettingsUniforms uniforms = PackSettingsUniforms.Create(
descriptor,
preset,
overrides);
AtmosphericPostProcessSettings cpu = AtmosphericPostProcessSettings.FromDescriptor(
descriptor,
preset,
overrides);
int exposureIndex = descriptor.Settings.ToList().FindIndex(value => value.Id == "exposure");
int bloomIndex = descriptor.Settings.ToList().FindIndex(value => value.Id == "bloom-strength");
Assert.Equal(1.75f, uniforms[exposureIndex]);
Assert.Equal(0.25f, uniforms[bloomIndex]);
Assert.Equal(1.75f, cpu.Exposure);
Assert.Equal(0.25f, cpu.BloomStrength);
}
private static RenderSettingDeclaration Setting(
string id,
RenderSettingKind kind,
string defaultValue,
IReadOnlyList<string>? choices = null) => new(
id,
id,
kind,
defaultValue,
Minimum: null,
Maximum: null,
Step: null,
choices ?? []);
}