acdream/src/AcDream.App/Rendering/Wb
Erik cd1cdee0e5 fix(render) #443: private viewports take the ring transform path
The paperdoll was visible only in portal space. Root cause: the classic
WbDrawDispatcher.Draw path appended its transforms into the SHARED world
transform frame (WorldTransformFrameArena.Append) with a non-zero base
instance, but the default mesh shaders index every parallel per-instance
array - clip slots, light sets, indoor, OPACITY, selection lighting,
detail category - zero-based; only the packed world submission's shader
convention subtracts the shared-arena prefix. With a world frame active
the doll drew all instances at per-instance opacity 0 into a cleared
target: counted draws, blank pixels, deterministic. Portal space worked
because no world transform frame is active there, so the same code took
the ring path with base 0. The private viewports are the only production
consumers of the classic path, hiding the defect everywhere else.

Fix: WbDrawDispatcher.NextClassicDrawIsPrivatePass - the private
viewport renderer marks its draw and WriteWorldTransformSection routes
private passes onto the plain ring path unconditionally (self-contained
render state: the private pass owns its own camera, lighting, and
target, and must not depend on the world frame's pose address space).

Also landed, each independently justified:
- Per-GPU-flight-slot private targets (PrivateViewportFlightTargets),
  restoring the pre-f6fe0f2a design: that revert's claim that frame
  submission order protects the single target's write->sample transition
  is not guaranteed across Vulkan command buffers. Per-slot completed
  scenes fix the cleared-sibling-after-reveal wart the old attempt had.
- Paperdoll resource preparation moved to the frame resource phase
  (IPrivateEntityViewportResourcePreparation) before world draws consume
  the bounded composite-upload budget.
- The presenter redresses on every dirty edge (an appearance-equal clone
  can pin retired readiness across generations; the renderer's two-phase
  promote keeps the last completed image visible during replacement),
  publishes only non-zero handles, and clears the viewport exactly once
  at the explicit character-session boundary.

Verified live on the clean build: doll visible in the NORMAL world,
visible through portal space, and still visible after arrival - the
exact reported repro cycle. 26 paperdoll/private-viewport/preparation
tests plus 60 renderer-suite tests pass; owner visual gate pending.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-29 16:51:32 +02:00
..
AnimatedEntityState.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Building.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
BuildingLoader.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
BuildingRegistry.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CachedBatch.cs fix(render): correct foliage-wind classification, receiver/caster desync, and frame binding (Campaign VM VM6 review) 2026-08-23 01:54:36 +02:00
CompositeWarmupEntitySource.cs perf(streaming): scope reveal warmup spatially 2026-07-25 04:39:48 +02:00
ContiguousRangeAllocator.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
DebugRenderSettings.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DrawElementsIndirectCommand.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EntityClassificationCache.cs feat(render): Campaign V slice V4t-2 — the world texture stack crosses to GpuTextureSlot 2026-07-28 12:43:50 +02:00
EntitySpawnAdapter.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EnvCellLandblockBuild.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EnvCellLandblockPublication.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EnvCellMeshPreparationScheduler.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EnvCellRenderer.cs fix #435 (part 1): delete 17 probes that outlived their closed investigations 2026-08-24 11:41:20 +02:00
EnvCellRenderer.Rhi.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
EnvCellSceneryInstance.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EnvCellVisibilitySnapshot.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
FoliageWindClassification.cs refactor(render): one group-creation seam, required foliage key field, first-frame wind snap (Campaign VM VM6 review 3) 2026-08-23 03:03:56 +02:00
GeometryUtils.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
GlobalMeshBuffer.cs perf(render) #429: allocation-exact streamed-mesh completion 2026-08-24 09:14:00 +02:00
GpuMemoryTracker.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
GpuRetiredRangeAllocator.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
GroupKey.cs refactor(render): one group-creation seam, required foliage key field, first-frame wind snap (Campaign VM VM6 review 3) 2026-08-23 03:03:56 +02:00
IEntityTextureLifetime.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
IMeshPipelineDevice.cs feat(render): Vulkan campaign V11 step 3 — drop the GL packages and shaders 2026-07-29 02:58:15 +02:00
InstanceData.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
IWbMeshAdapter.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockSpawnAdapter.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
MeshUploadCaches.cs fix(streaming): prepare quiesced destination entities 2026-07-24 20:21:57 +02:00
MeshUploadFrameBudget.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
ModernRenderData.cs feat(render): Vulkan campaign V11 step 2 — delete the OpenGL backend 2026-07-29 02:19:53 +02:00
ObjectMeshManager.cs perf(render) #429: allocation-exact streamed-mesh completion 2026-08-24 09:14:00 +02:00
PackedProjectionClassificationCache.cs perf(rendering): retain packed classification 2026-07-25 02:46:40 +02:00
RetryableResourceReleaseLedger.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
SceneData.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TextureAtlasManager.cs feat(render): Vulkan campaign V11 step 3 — drop the GL packages and shaders 2026-07-29 02:58:15 +02:00
TextureAtlasSlotAllocator.cs feat(render): unify physical residency accounting 2026-07-24 16:20:48 +02:00
TextureFormatExtensions.cs feat(render): Vulkan campaign V11 step 3 — drop the GL packages and shaders 2026-07-29 02:58:15 +02:00
WbDrawDispatcher.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
WbDrawDispatcher.DirectionalShadowReceivers.cs fix(render): shadow-gated-off receiver frames light from the authored sun again (Campaign VM VM6 review 5) 2026-08-23 03:58:41 +02:00
WbDrawDispatcher.DirectionalShadows.cs fix #429: allocation-free shadow topology rebuild + churn-frame pipelining 2026-08-24 09:16:58 +02:00
WbDrawDispatcher.PackedOracle.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
WbDrawDispatcher.Rhi.cs fix(render) #443: private viewports take the ring transform path 2026-08-29 16:51:32 +02:00
WbFrustum.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
WbMeshAdapter.cs fix #435 (part 1): delete 17 probes that outlived their closed investigations 2026-08-24 11:41:20 +02:00
WbRenderPass.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
WbTextureResolutionPolicy.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
WorldTextureArray.cs feat(render): Vulkan campaign V11 step 3 — drop the GL packages and shaders 2026-07-29 02:58:15 +02:00
WorldTransformFrameArena.cs feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00