From fee878f292acd0630eda28f37b627423cfb6bb8f Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 26 May 2026 07:39:31 +0200 Subject: [PATCH] =?UTF-8?q?feat(render):=20Phase=20A8=20=E2=80=94=20Loaded?= =?UTF-8?q?Cell.PortalPolygons=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First slice of the indoor-cell visibility culling pipeline (#78). Adds PortalPolygons: List to LoadedCell, parallel-indexed to the existing Portals + ClipPlanes lists. Empty arrays for portals whose polygon could not be resolved. Field is populated in Task 2. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/AcDream.App/Rendering/CellVisibility.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/AcDream.App/Rendering/CellVisibility.cs b/src/AcDream.App/Rendering/CellVisibility.cs index bcca4ec..b4debbc 100644 --- a/src/AcDream.App/Rendering/CellVisibility.cs +++ b/src/AcDream.App/Rendering/CellVisibility.cs @@ -56,6 +56,20 @@ public sealed class LoadedCell /// Derived from portal polygon geometry during cell preparation. /// public List ClipPlanes = new(); + + /// + /// Portal polygon vertices in cell-local space, one Vector3[] per + /// entry in . Index i + /// in this list corresponds to index i in and + /// . An empty array means the portal's polygon + /// could not be resolved at load time (degenerate cell or missing + /// polygon entry). + /// + /// Used by the Phase A8 indoor-cell stencil pipeline to build a + /// per-frame triangle-fan mesh for portal silhouette masking. + /// + /// + public List PortalPolygons = new(); } ///