acdream/tests/AcDream.Core.Tests/Rendering
Erik 9ebb206086 fix(#79/#93): mesh-empty hydration gate was dropping light-only fixtures
Root-caused via dat-truth inspection, not inference: the A7.L1 visible-
cell scoping fix (previous commit) had zero visual effect because the
Town Network fountain room (cell 0x00070144) registers ZERO lights of
its own — confirmed directly against the dat, not assumed. The room's
one dat-authored fixture, Setup 0x02000365 (a ceiling light 5m above the
fountain, warm color, intensity 100), has a single visual part that is a
#136-class runtime-hidden marker. Flattened mesh ref count: 0. GameWindow
's per-stab hydration loop treated meshRefs.Count==0 as "doesn't exist"
and dropped the whole entity before the Setup's Lights were ever read —
so a mesh-less "light attach point" fixture, a normal AC dat authoring
pattern, could never register. Retail's light registration (add_light,
CEnvCell::UnPack) is architecturally independent of a fixture's own mesh
visibility.

Fix: track the stab's Setup.Lights.Count alongside meshRefs during
hydration; keep the entity (with empty MeshRefs — nothing to draw, still
something to light) whenever either is nonzero. Extracted the decision
into EntityHydrationRules.ShouldKeepEntity (pure, unit-tested) since
GameWindow's hydration loop isn't independently testable. Confirmed no
downstream consumer assumes MeshRefs.Count >= 1 (WbDrawDispatcher already
guards on it before any indexing).

Core 2666+2skip / App 741+2skip / UI 425 / Net 385 green. Apparatus:
Issue93TownNetworkFountainRoomLightInspectionTests (dat-truth dump,
reusable for other rooms in this class).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 11:11:16 +02:00
..
Vfx refactor(physics #145): Slice 1 — rename Frame->CellFrame to avoid DatReaderWriter.Types.Frame collision 2026-06-21 10:34:36 +02:00
Wb #119 ROOT CAUSE: interior-id X-byte collision + player-landblock cache hints = cross-entity batch serving 2026-06-11 21:43:45 +02:00
CameraDiagnosticsTests.cs fix(render): Phase A8.F — camera sweep uses retail moverFlags 0x5c (PathClipped hard-stop) 2026-05-29 19:11:53 +02:00
CellGraphRootTests.cs test(render): Stage 3 T3.4 — CellGraphRootTests (6 tests) 2026-06-02 15:37:19 +02:00
ChaseCameraTests.cs feat(app): Phase B.2 — ChaseCamera (third-person follow camera) 2026-04-12 14:26:20 +02:00
FrustumCullerTests.cs feat(app): Phase A.2 — FrustumCuller + FrustumPlanes (Gribb-Hartmann) 2026-04-12 08:49:17 +02:00
Issue93TownNetworkFountainRoomLightInspectionTests.cs fix(#79/#93): mesh-empty hydration gate was dropping light-only fixtures 2026-07-09 11:11:16 +02:00
Issue176177DungeonSeamInspectionTests.cs feat(lighting): SelectForCell (all dynamic lights per EnvCell) + #176 handoff — residual is a runtime z-fight 2026-07-06 13:55:16 +02:00
RenderingDiagnosticsTests.cs #119 decisive probe: ACDREAM_DUMP_ENTITY one-shot entity dump (H-A/H-B/H-C discriminator) 2026-06-11 21:01:08 +02:00
RenderingDiagnosticsVisibilityTests.cs feat(render): Phase U.2d — ACDREAM_PROBE_VIS visibility probe in RenderingDiagnostics 2026-05-30 17:11:02 +02:00
TextureCacheBindlessTests.cs phase(N.5) Task 3: TextureCache bindless GetOrUpload + parallel cache 2026-05-08 19:53:10 +02:00
TranslucencyFadeManagerTests.cs feat(#188): fading-wall + sliding-door translucency; hold open past animation settle 2026-07-09 09:17:50 +02:00
TranslucencyHookSinkTests.cs feat(#188): fading-wall + sliding-door translucency; hold open past animation settle 2026-07-09 09:17:50 +02:00