fix(rendering): publish scene deltas at update boundary

Move the ordinary shadow-scene drain out of the conditional spatial reconciler and into an explicit final update-frame commit phase. This publishes deltas after streaming, network, teleport, camera, and conditional reconciles even while world simulation is quiesced.

Release gate: 3,733 App tests / 3 skips; 8,217 complete-solution tests / 5 skips.

Co-Authored-By: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-24 23:00:31 +02:00
parent 91463db551
commit 9fab1feb46
7 changed files with 57 additions and 9 deletions

View file

@ -238,15 +238,13 @@ internal sealed class LiveSpatialPresentationReconciler : ILiveSpatialReconcileP
private readonly ParticleHookSink _particleSink;
private readonly LiveEntityLightController _lights;
private readonly ILiveRenderProjectionSink? _renderProjections;
private readonly RenderSceneShadowRuntime? _renderSceneShadow;
public LiveSpatialPresentationReconciler(
EntityEffectController entityEffects,
EquippedChildRenderController equippedChildren,
ParticleHookSink particleSink,
LiveEntityLightController lights,
ILiveRenderProjectionSink? renderProjections = null,
RenderSceneShadowRuntime? renderSceneShadow = null)
ILiveRenderProjectionSink? renderProjections = null)
{
_entityEffects = entityEffects ?? throw new ArgumentNullException(nameof(entityEffects));
_equippedChildren = equippedChildren
@ -254,7 +252,6 @@ internal sealed class LiveSpatialPresentationReconciler : ILiveSpatialReconcileP
_particleSink = particleSink ?? throw new ArgumentNullException(nameof(particleSink));
_lights = lights ?? throw new ArgumentNullException(nameof(lights));
_renderProjections = renderProjections;
_renderSceneShadow = renderSceneShadow;
}
public void Reconcile()
@ -264,6 +261,5 @@ internal sealed class LiveSpatialPresentationReconciler : ILiveSpatialReconcileP
_renderProjections?.SynchronizeActiveSources();
_particleSink.RefreshAttachedEmitters();
_lights.Refresh();
_renderSceneShadow?.DrainUpdateBoundary();
}
}