T2 slice 3 (BR-4): draw-driven flood gating - per-building frustum pre-gate, 48m seed cap DELETED
Retail floods a building's interior exactly when its shell DRAWS and an aperture survives the view: DrawBuilding (Ghidra 0x0059f2a0) -> per-view viewconeCheck on the shell -> portal-BSP walk -> ConstructView(CBldPortal) side test + GetClip-vs-view + GetVisible. There is NO distance constant anywhere on that chain (verifier-confirmed, flood-gate-shape adjusted). Port: - GameWindow's outdoor-node gather: per-BUILDING frustum pre-gate on the aperture bounds (Building.PortalBounds - the tight flood-purposes equivalent of the shell viewconeCheck), iterating the per-landblock BuildingRegistries. Replaces the Chebyshev<=1 landblock cell-sweep. Also the proper fix for the 2026-06-07 'FPS drops when I look out' problem the Chebyshev hack approximated: dozens of AABB tests instead of an O(all loaded cells) portal sweep. - OutdoorBuildingSeedDistance 48f -> infinity (the binary visibility pop at ~48 m - the confirmed #109 mechanism candidate - is gone; admission is now the screen clip per portal, retail's GetClip gate). - The legacy clipRoot==null look-in path keeps its 48 m: it is T4 deletion scope; improving doomed code wastes effort. Closes the building-flood-seeding-48m-cutoff divergence (culling area, adjusted-confirmed). Suites: App 226 green (flood gates included). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
529dfcfee9
commit
88f3ce1fa0
2 changed files with 32 additions and 15 deletions
|
|
@ -26,7 +26,13 @@ public sealed class RetailPViewRenderer
|
|||
|
||||
// R-A2: per-building flood grouping, reused across frames (inner lists cleared each frame).
|
||||
private readonly Dictionary<uint, List<LoadedCell>> _buildingGroups = new();
|
||||
private const float OutdoorBuildingSeedDistance = 48f;
|
||||
|
||||
// T2 (BR-4): retail has NO distance constant on the flood-admission chain
|
||||
// (DrawBuilding → portal walk → ConstructView: viewconeCheck + side test +
|
||||
// GetClip + GetVisible only). The old 48 m seed cap is replaced by the
|
||||
// caller's per-building frustum pre-gate on aperture bounds (GameWindow's
|
||||
// gather); seeds themselves are unbounded.
|
||||
private const float OutdoorBuildingSeedDistance = float.PositiveInfinity;
|
||||
|
||||
public RetailPViewRenderer(
|
||||
GL gl,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue