diff --git a/src/AcDream.App/Rendering/ClipFrame.cs b/src/AcDream.App/Rendering/ClipFrame.cs index eb4c700c..1231a9d6 100644 --- a/src/AcDream.App/Rendering/ClipFrame.cs +++ b/src/AcDream.App/Rendering/ClipFrame.cs @@ -155,12 +155,13 @@ public sealed class ClipFrame : IDisposable /// /// Append one clip region (becomes the next slot index) from a - /// . Only the convex-plane case is supported in - /// U.3 — Count > 0 packs that many planes; Count == 0 packs a - /// no-clip region (pass-all). The scissor / nothing-visible fallbacks that - /// can carry are deferred to U.4 (which will draw - /// the AABB box or skip the cell on the CPU side, not via this slot). Returns - /// the new slot's index. + /// : Count > 0 packs that many planes; + /// Count == 0 packs a no-clip region (pass-all) — that is the + /// whole contract for both of 's empty states + /// (nothing visible is decided by the caller before it appends; a plane + /// overflow draws unclipped, over-include). There is no scissor and no + /// AABB anywhere on this path (S3 landing hygiene, H1). Returns the new + /// slot's index. /// public int AppendSlot(ClipPlaneSet set) { diff --git a/src/AcDream.App/Rendering/WorldPassSurface.cs b/src/AcDream.App/Rendering/WorldPassSurface.cs index f7d56d59..dc28ba59 100644 --- a/src/AcDream.App/Rendering/WorldPassSurface.cs +++ b/src/AcDream.App/Rendering/WorldPassSurface.cs @@ -56,13 +56,19 @@ internal interface IWorldPassSurface /// /// Vulkan activates every element the shader declares and has no /// enable, so this is a no-op there — and that is safe rather than a - /// divergence: only portal_depth.vert writes gl_ClipDistance - /// in the world pass now (S3 landing hygiene, H4 — S3 chunk 4 fix round 2 - /// (L3) deleted the sky and terrain shaders' own declaration of the block - /// this contract used to also publish; see 's - /// doc). It still writes 1.0 ("keep everything") into every slot - /// past its active count, so a frame with no clip planes clips nothing on - /// either backend (plan §5.5.14 item 4). + /// divergence. Two shader families still write gl_ClipDistance in + /// the world pass: portal_depth.vert (the exit seals and punch fans, + /// planes handed per draw) and the mesh/particle vertex shaders + /// (mesh_modern, mesh_atmospheric, mesh_detail, + /// particle, particle_mesh), which read the per-cell + /// clip-region table this contract publishes through + /// . The walk feeds every ordinary part and + /// every particle slot 0 (no clip), so in the walk path that table is + /// dormant; the sky and terrain shaders no longer declare any clip block + /// at all (S3 chunk 4 fix round 2, L3). Every writer sets 1.0 + /// ("keep everything") in each slot past its active count, so a frame + /// with no clip planes clips nothing on either backend (plan §5.5.14 + /// item 4). /// void EnableClipDistances();