fix(rendering): synchronize hidden live projections
Inbound state continues while portal reveal blocks ordinary world simulation. Synchronize only the derived render projection after those hidden-frame network and command phases so the first revealed draw cannot observe a stale live transform, without advancing effects, particles, attachments, or lights.
This commit is contained in:
parent
528dec6072
commit
6a026c5ab0
6 changed files with 52 additions and 4 deletions
|
|
@ -25,6 +25,7 @@ internal sealed class RetailLiveFrameCoordinator : IRetailLiveFramePhase
|
|||
private readonly IPostNetworkCommandFramePhase _localPlayer;
|
||||
private readonly ILiveSpatialReconcilePhase _spatialReconciler;
|
||||
private readonly IWorldGenerationAvailability _availability;
|
||||
private readonly IRenderProjectionSyncPhase? _renderProjectionSync;
|
||||
|
||||
public RetailLiveFrameCoordinator(
|
||||
ILiveObjectFramePhase objects,
|
||||
|
|
@ -32,7 +33,8 @@ internal sealed class RetailLiveFrameCoordinator : IRetailLiveFramePhase
|
|||
ILiveSessionFramePhase session,
|
||||
IPostNetworkCommandFramePhase localPlayer,
|
||||
ILiveSpatialReconcilePhase spatialReconciler,
|
||||
IWorldGenerationAvailability? availability = null)
|
||||
IWorldGenerationAvailability? availability = null,
|
||||
IRenderProjectionSyncPhase? renderProjectionSync = null)
|
||||
{
|
||||
_objects = objects ?? throw new ArgumentNullException(nameof(objects));
|
||||
_worldState = worldState ?? throw new ArgumentNullException(nameof(worldState));
|
||||
|
|
@ -41,6 +43,7 @@ internal sealed class RetailLiveFrameCoordinator : IRetailLiveFramePhase
|
|||
_spatialReconciler = spatialReconciler
|
||||
?? throw new ArgumentNullException(nameof(spatialReconciler));
|
||||
_availability = availability ?? AlwaysAvailableWorldGeneration.Instance;
|
||||
_renderProjectionSync = renderProjectionSync;
|
||||
}
|
||||
|
||||
public void Tick(float deltaSeconds)
|
||||
|
|
@ -53,6 +56,8 @@ internal sealed class RetailLiveFrameCoordinator : IRetailLiveFramePhase
|
|||
_localPlayer.RunPostNetworkCommandPhase();
|
||||
if (_availability.IsWorldAvailable)
|
||||
_spatialReconciler.Reconcile();
|
||||
else
|
||||
_renderProjectionSync?.SynchronizeActiveSources();
|
||||
}
|
||||
|
||||
public static double NormalizeDeltaSeconds(double deltaSeconds) =>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue