revert(render): BR-2 depth discipline - the gate proved #108 is MEMBERSHIP, not depth
Visual gate (2026-06-11) on the seal+punch build, then on the punch-reverted build, isolated the truth: - With the punch wired: #108 (cellar grass-sweep) gone BUT the player/NPCs go transparent by exactly their overlap with any doorway viewed from outside (the far-Z punch erases the depth of dynamic objects standing in the aperture, so the interior paints over them). - With ONLY the punch reverted (seal+full-clear kept): characters render correctly AND #108 is BACK. The punch is wired for OUTDOOR roots + the look-in path ONLY; it never runs on a clean interior (cellar) frame. For it to have suppressed #108, the cellar-transition frames must render through the OUTDOOR root -> the player is being classified OUTDOOR mid-cellar (the known #112/#106 cellar membership ping-pong). So: - #108 is a MEMBERSHIP bug (render is downstream of membership); the punch was MASKING it, harmfully. Re-attributed to the membership track. - The interior-root SEAL addresses a case that is NOT #108 (confirmed: #108 isn't an interior-root frame), so it has no verified visible effect yet. Per no-workarounds + verify-before-layering: reverted ALL of BR-2's depth machinery (seal, punch, the per-slice->full-clear swap) to the pre-BR-2 baseline (restored from6cba950). The phantom-site probe (6cba950) is kept. PortalDepthMaskRenderer.cs is KEPT as a RESERVED, unwired primitive (it is verified-correct; the depth discipline will be rebuilt during BR-3 with dynamics-after-interior ordering, where it can be verified against the shell-chop deletion). What survives from this session's execution: BR-1 (already-equivalent,695eca2) stands. #108 moves to membership. BR-2 to be re-approached under BR-3 with correct ordering. No net production behavior change vs6cba950. Suites: build green, App 226 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
4ac547f6eb
commit
88be519ec0
3 changed files with 29 additions and 96 deletions
|
|
@ -231,16 +231,8 @@ public sealed class RetailPViewRenderer
|
|||
ctx.DrawLandscapeSlice(new RetailPViewLandscapeSliceContext(slice, partition.Outdoor));
|
||||
}
|
||||
|
||||
// BR-2: retail clears the FULL depth buffer ONCE between the outside
|
||||
// stage and the interior stage (PView::DrawCells, Ghidra 0x005a4840 —
|
||||
// Clear gated on portalsDrawnCount; the exact gate semantics is a plan
|
||||
// open question, staged here as "any outside slice drawn"), then
|
||||
// re-stamps every outside-leading portal's TRUE depth (the seals,
|
||||
// DrawExitPortalMasks below). The old per-slice scissored AABB clear
|
||||
// was the wrong shape (AABB ⊇ aperture polygon) and had no seal after
|
||||
// it — the #108 mechanism.
|
||||
if (clipAssembly.OutsideViewSlices.Length > 0)
|
||||
ctx.ClearDepthForInterior?.Invoke();
|
||||
foreach (var slice in clipAssembly.OutsideViewSlices)
|
||||
ctx.ClearDepthSlice?.Invoke(slice);
|
||||
|
||||
UseIndoorMembershipOnlyRouting();
|
||||
}
|
||||
|
|
@ -583,12 +575,7 @@ public sealed class RetailPViewDrawContext : IRetailPViewCellDrawContext
|
|||
IReadOnlyDictionary<uint, WorldEntity>? AnimatedById)> LandblockEntries { get; init; }
|
||||
public required Action<uint> SetTerrainClipUbo { get; init; }
|
||||
public required Action<RetailPViewLandscapeSliceContext> DrawLandscapeSlice { get; init; }
|
||||
|
||||
/// <summary>BR-2: one full-buffer depth clear between the outside stage and the
|
||||
/// interior stage (retail PView::DrawCells, Ghidra 0x005a4840). Null for outdoor
|
||||
/// roots — outdoors the interiors must depth-test against terrain + exteriors and
|
||||
/// appear only through real apertures (the BR-2 commit-2 punch).</summary>
|
||||
public Action? ClearDepthForInterior { get; init; }
|
||||
public Action<ClipViewSlice>? ClearDepthSlice { get; init; }
|
||||
public Action<RetailPViewCellSliceContext>? DrawExitPortalMasks { get; init; }
|
||||
public Action<RetailPViewCellSliceContext>? DrawCellParticles { get; init; }
|
||||
public Action<RetailPViewFrameResult>? EmitDiagnostics { get; init; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue