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

@ -430,6 +430,7 @@ internal sealed class ArchRenderScene : IRenderScene, IRenderSceneQuerySource
_world.Set(entry.Entity, record.Material);
_world.Set(entry.Entity, record.DegradeState);
_world.Set(entry.Entity, record.Source);
_world.Set(entry.Entity, record.EntityPayload);
OrDirty(
entry.Entity,
record.Id,
@ -528,6 +529,7 @@ internal sealed class ArchRenderScene : IRenderScene, IRenderSceneQuerySource
record.OwnerIncarnation,
record.DirtyMask,
record.Source,
record.EntityPayload,
tag);
private void WriteRecord(
@ -546,6 +548,7 @@ internal sealed class ArchRenderScene : IRenderScene, IRenderSceneQuerySource
_world.Set(entity, record.OwnerIncarnation);
_world.Set(entity, record.DirtyMask);
_world.Set(entity, record.Source);
_world.Set(entity, record.EntityPayload);
}
private RenderProjectionRecord ReadRecord(in SceneEntry entry) =>
@ -563,7 +566,8 @@ internal sealed class ArchRenderScene : IRenderScene, IRenderSceneQuerySource
_world.Get<RenderDegradeState>(entry.Entity),
_world.Get<RenderSortKey>(entry.Entity),
_world.Get<RenderDirtyMask>(entry.Entity),
_world.Get<RenderSourceMetadata>(entry.Entity));
_world.Get<RenderSourceMetadata>(entry.Entity),
_world.Get<RenderEntityPayload>(entry.Entity));
private void Destroy(in SceneEntry entry)
{