acdream/tests/AcDream.App.Tests
Erik c2cb83d11f perf(render): gate EnvCellRenderer visibility-snapshot rebuilds on real input changes (2026-07-24 audit review)
PrepareRenderBatches rebuilt the full EnvCell visibility snapshot every
frame any indoor/building root was resolved: a Parallel.ForEach dispatch
over every GpuReady EnvCell landblock (with per-landblock locks), a fresh
outer dictionary plus one fresh inner dictionary per visible cell, a new
snapshot object, and a complete transparency rescan - all while standing
perfectly still. The NeedsPrepare flag existed since Phase A8 as the
intended rebuild gate but was never read by production code.

This wires the gate on the snapshot's actual inputs:
- landblock commits/removals (the existing NeedsPrepare flag),
- the visible-cell filter (content-compared; the caller reuses one
  scratch HashSet across frames),
- the trim window (center/radius),
- mesh render-data availability - new
  ObjectMeshManager.RenderDataAvailabilityVersion, bumped at publish,
  pending-release hide, release completion, and teardown, because the
  snapshot bakes per-cell transparency from TryGetRenderData and a
  late-arriving transparent shell must reclassify its cell,
- the camera: eye position under a 1 mm ABSOLUTE epsilon (swallows the
  documented ~36 um rest jitter, dirties on any real movement; the VP
  translation row scales with AC's ~5e4 world coordinates where a
  relative tolerance would mask sub-meter motion) plus rows 1-3 of
  view*projection (position-independent rotation x projection) under
  relative 1e-5.

Skipping is pool-safe: RenderCore re-anchors _poolIndex to the active
snapshot's PostPreparePoolIndex on every call, so consecutive Renders
without an intervening Prepare reuse scratch lists past the snapshot's
owned region exactly as within-frame passes already do. The empty-filter
branch is now also idempotent instead of allocating a fresh empty
snapshot per frame. Render still receives the current frame's
view-projection every frame (the U.4 stale-matrix rule) - only the
snapshot rebuild is gated.

Pixels must be identical; needs the standard user visual pass (dungeon +
town-near-buildings) before the change is considered accepted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 11:49:40 +02:00
..
Audio refactor(app): compose content effects and audio startup 2026-07-22 15:36:05 +02:00
Combat refactor(app): complete session startup composition 2026-07-22 18:49:31 +02:00
Composition test(app): add canonical connected soak snapshots 2026-07-22 20:01:06 +02:00
Diagnostics test(app): make canonical soak comparisons workload-aware 2026-07-22 20:13:29 +02:00
Input feat(input): assess world objects on right click 2026-07-24 05:42:28 +02:00
Interaction feat(input): assess world objects on right click 2026-07-24 05:42:28 +02:00
Net refactor(net): own live session composition 2026-07-22 10:36:06 +02:00
Physics fix(runtime): restore interaction completion ownership 2026-07-23 05:51:51 +02:00
Plugins feat(D.2b): IUiRegistry plugin UI surface + buffered drain into UiHost 2026-06-14 17:46:37 +02:00
Rendering perf(render): gate EnvCellRenderer visibility-snapshot rebuilds on real input changes (2026-07-24 audit review) 2026-07-24 11:49:40 +02:00
Settings refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
Spells fix(ui): restore modern spell formula presentation 2026-07-24 07:08:47 +02:00
Streaming refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
Studio feat(studio): #156 #157 mockup desktop and font resolver 2026-06-26 12:56:05 +02:00
UI fix(ui): keep spell components in authored foreground 2026-07-24 08:08:29 +02:00
World fix(runtime): restore interaction completion ownership 2026-07-23 05:51:51 +02:00
AcDream.App.Tests.csproj fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
BoundedTestDatCollection.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
FramePhaseTestDoubles.cs refactor(runtime): extract the live object frame 2026-07-22 00:42:26 +02:00
FrameProfilerReportTests.cs fix #225: stabilize render pacing and frame CPU 2026-07-19 06:29:30 +02:00
FrameStatsBufferTests.cs fix(pipeline): MP0 - profiler toggle-path hygiene + Max() seed (review follow-up) 2026-07-05 19:26:28 +02:00
RuntimeDatAccessArchitectureTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
RuntimeDatCollectionFactoryTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
RuntimeOptionsRetailUiTests.cs test(runtime): add deterministic world gate artifacts 2026-07-20 22:37:16 +02:00
RuntimeOptionsTests.cs refactor(render): extract world frame preparation 2026-07-22 05:54:00 +02:00