feat(rendering): pack scene dispatcher inputs

Capture immutable presentation payloads in the render scene, flatten unique entity and mesh-part records into the borrowed frame arena, and compare every routed dispatcher input tuple without changing the production draw source.
This commit is contained in:
Erik 2026-07-25 00:44:58 +02:00
parent 720578592b
commit d8d9897376
13 changed files with 593 additions and 24 deletions

View file

@ -406,6 +406,41 @@ public sealed class CurrentRenderSceneOracleTests
}
}
[Fact]
public void SurfaceOverrideFingerprint_IsOrderIndependentAndContentExact()
{
var first = new Dictionary<uint, uint>
{
[0x0800_0002] = 0x0500_0012,
[0x0800_0001] = 0x0500_0011,
};
var reordered = new Dictionary<uint, uint>
{
[0x0800_0001] = 0x0500_0011,
[0x0800_0002] = 0x0500_0012,
};
var changed = new Dictionary<uint, uint>
{
[0x0800_0001] = 0x0500_0011,
[0x0800_0002] = 0x0500_0013,
};
RenderSceneHash128 expected =
CurrentRenderSceneOracle.CreateSurfaceOverrideFingerprint(first);
Assert.Equal(
expected,
CurrentRenderSceneOracle.CreateSurfaceOverrideFingerprint(
reordered));
Assert.NotEqual(
expected,
CurrentRenderSceneOracle.CreateSurfaceOverrideFingerprint(
changed));
Assert.NotEqual(
expected,
CurrentRenderSceneOracle.CreateSurfaceOverrideFingerprint(null));
}
private static CurrentRenderProjectionFingerprint CaptureSingle(
WorldEntity entity,
uint landblockId,