phase(N.5) Task 11: translucency partition contract test
Locks in Decision 2 (Opaque + ClipMap → opaque indirect; AlphaBlend + Additive + InvAlpha → transparent indirect). Catches future refactors that drift the partition — silent visual regression otherwise (groups rendered in the wrong pass with the wrong blend state). Adds public static IsOpaquePublic shim on WbDrawDispatcher; the underlying IsOpaque stays private. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f533414edf
commit
cfe1ca3151
2 changed files with 32 additions and 0 deletions
|
|
@ -643,6 +643,13 @@ public sealed unsafe class WbDrawDispatcher : IDisposable
|
||||||
return new IndirectLayoutResult(opaqueCount, transparentCount, opaqueCount * DrawCommandStride);
|
return new IndirectLayoutResult(opaqueCount, transparentCount, opaqueCount * DrawCommandStride);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Public test shim for <see cref="IsOpaque"/>. Locks in the N.5 Decision 2
|
||||||
|
/// translucency partition: Opaque + ClipMap → opaque indirect; AlphaBlend +
|
||||||
|
/// Additive + InvAlpha → transparent indirect.
|
||||||
|
/// </summary>
|
||||||
|
public static bool IsOpaquePublic(TranslucencyKind t) => IsOpaque(t);
|
||||||
|
|
||||||
private static bool IsOpaque(TranslucencyKind t)
|
private static bool IsOpaque(TranslucencyKind t)
|
||||||
=> t == TranslucencyKind.Opaque || t == TranslucencyKind.ClipMap;
|
=> t == TranslucencyKind.Opaque || t == TranslucencyKind.ClipMap;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
using AcDream.App.Rendering.Wb;
|
||||||
|
using AcDream.Core.Meshing;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace AcDream.Core.Tests.Rendering.Wb;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Locks in the N.5 translucency partition contract (spec Decision 2).
|
||||||
|
/// If the partition drifts, the dispatcher's opaque + transparent indirect
|
||||||
|
/// passes will silently render the wrong groups in the wrong pass — visible
|
||||||
|
/// regression that's hard to spot in code review.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class WbDrawDispatcherTranslucencyTests
|
||||||
|
{
|
||||||
|
[Theory]
|
||||||
|
[InlineData(TranslucencyKind.Opaque, true)]
|
||||||
|
[InlineData(TranslucencyKind.ClipMap, true)]
|
||||||
|
[InlineData(TranslucencyKind.AlphaBlend, false)]
|
||||||
|
[InlineData(TranslucencyKind.Additive, false)]
|
||||||
|
[InlineData(TranslucencyKind.InvAlpha, false)]
|
||||||
|
public void IsOpaque_PartitionsByKind(TranslucencyKind kind, bool expected)
|
||||||
|
{
|
||||||
|
Assert.Equal(expected, WbDrawDispatcher.IsOpaquePublic(kind));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue