checkpoint(render): preserve pre-overhaul investigation state

This commit is contained in:
Erik 2026-09-01 18:04:24 +02:00
parent e880860291
commit b3b7d922f1
45 changed files with 3168 additions and 619 deletions

View file

@ -207,7 +207,6 @@ internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
private Action _drawExitSeals = null!;
private readonly HashSet<uint> _singleCellScratch = new();
private readonly List<uint> _singleCellListScratch = new();
private readonly Dictionary<uint, int> _singleCellClipScratch = new(1);
internal WalkProductionLeafRenderer(
RetailPViewPassExecutor passes,
@ -244,26 +243,32 @@ internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
public void DrawTerrainSlice(int sliceIndex) =>
_passes.DrawWalkTerrainSlice(_frame, _clipAssembly, sliceIndex);
public void DrawCellShell(uint cellId, uint clipSlot)
public void DrawCellShell(uint cellId)
{
_singleCellClipScratch.Clear();
_singleCellClipScratch.Add(cellId, checked((int)clipSlot));
_passes.SetCellShellClipRouting(_singleCellClipScratch);
try
// Output-gated binary discriminator for the moving wall-textured
// triangles at the 0xF4180107/0112 floating stairs. Missing walls are
// intentional while enabled: this identifies the visual carrier and
// must not become a production admission rule.
if (AcDream.Core.Rendering.RenderingDiagnostics
.ProbeCathedralSkipFloatingStairCellShells
&& cellId is 0xF4180107u or 0xF4180112u)
{
_singleCellScratch.Clear();
_singleCellScratch.Add(cellId);
_passes.DrawOpaqueCellShells(_singleCellScratch);
if (_passes.CellHasTransparentShell(cellId))
{
_singleCellListScratch.Clear();
_singleCellListScratch.Add(cellId);
_passes.DrawTransparentCellShellsOrdered(_singleCellListScratch);
}
return;
}
finally
// Retail DrawEnvCell @0x0059F170 submits the prepared EnvCell mesh
// whole after stamping it drawn-this-frame. obj_view_set prepares
// legacy polygon/object tests, but the use_built_mesh branch calls
// D3DPolyRender::DrawMesh directly; it does not slice the shell mesh
// once per portal polygon.
_singleCellScratch.Clear();
_singleCellScratch.Add(cellId);
_passes.DrawOpaqueCellShells(_singleCellScratch);
if (_passes.CellHasTransparentShell(cellId))
{
_passes.SetCellShellClipRouting(null);
_singleCellListScratch.Clear();
_singleCellListScratch.Add(cellId);
_passes.DrawTransparentCellShellsOrdered(_singleCellListScratch);
}
}