acdream/tests/AcDream.App.Tests/Rendering
Erik 9aaf97e785 Revert "Campaign V slice V4a" - it lost world multisampling
This reverts ceec3bc4. Two independent reasons, either sufficient.

The rendering regression. The slice deleted TextRenderGlStateScope, which
saved GL_MULTISAMPLE and GL_SAMPLE_ALPHA_TO_COVERAGE on entry, disabled them
for the text pass, and restored them on exit (TextRenderGlStateScope.cs:111-112
and 153-154 at the parent commit). Its replacement bakes that state into the
text pipeline but nothing restores it, and GlGpuPassEncoder.Dispose does not
either. Every world renderer is still raw GL at this point in the campaign, so
from the first UI frame onward the world drew with multisampling disabled.

The offline pixel gate caught it: 1,791 of 563,200 compared pixels differed,
0.318% against a 0.001 threshold. The commit message attributed this to
wall-clock-driven ambient animation shifting phase, and committed through the
failure. That explanation does not survive its own control: capturing twice at
the reverted-to commit differs by 19 pixels and twice at the slice's own commit
by 8, while base-versus-head differs by 1,791 - a 224x gap that no shared-noise
source explains. An amplified difference image settles it visually: the changed
pixels are the silhouette edges of every tree, building and rock, with terrain
interiors, water and the entire UI untouched. That is the signature of losing
edge antialiasing, not of animated sprites.

This is the exact failure mode two existing memory notes already warn about -
a mid-frame renderer must set every GL state it uses rather than inherit it,
and issue #52's lesson that a rendering migration must audit per-pass GL state
before declaring itself done.

The scope. The brief was three small leaf renderers plus additive frame-
lifecycle wiring, roughly ten files. The commit changed 334 files with 3,665
insertions and 3,845 deletions, including 323 public-to-internal visibility
conversions across the App assembly, 55 test files, two retired conformance
tests, and a self-described temporary escape hatch for bridging raw-GL viewport
textures. Even without the regression, that is not separable into the part
worth keeping and the part worth dropping.

Reverting rather than patching because the good work here - the RHI frame
lifecycle wiring and a genuine render-state-cache staleness fix - is small
enough to redo cleanly against a tightened spec, while untangling it from 300+
files of unrelated churn is not.

Post-revert: Release build clean, App suite back to 3,843 passed / 3 skipped,
offline pixel gate passing at 19 differing pixels.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:29:28 +02:00
..
Gpu Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
Residency feat(diagnostics): complete residency pressure ledger 2026-07-24 16:40:17 +02:00
Vfx refactor(runtime): own canonical entity and object lifetime 2026-07-26 05:54:46 +02:00
Wb feat(render): Campaign V slice V2a - mesh path texture-index migration 2026-07-27 15:51:26 +02:00
ArchRenderSceneTests.cs Reapply "perf(rendering): draw retained frame product" 2026-07-25 08:36:11 +02:00
AttachmentUpdateOrderTests.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
BoundedUnownedResourceCacheTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
BuildingGroupScratchTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
CameraCollisionIndoorTests.cs T6 (BR-7) C3: per-cell shadow architecture - flood registration, building channel, per-cell query; b3ce505 stopgap DELETED (closes #99) 2026-06-11 14:37:50 +02:00
CameraCollisionUpdateViewerTests.cs feat(A): wire SweepEye to the verbatim update_viewer (start-cell + fallbacks) 2026-06-05 11:10:32 +02:00
CameraControllerTests.cs refactor(runtime): extract local teleport and player mode 2026-07-22 02:50:15 +02:00
CameraFrameControllerTests.cs refactor(camera): extract the update frame 2026-07-22 03:08:58 +02:00
CellViewDedupTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
CellVisibilityCommitTests.cs fix(streaming): commit EnvCell landblocks atomically (#214) 2026-07-13 18:45:24 +02:00
CellVisibilityFromRootTests.cs refactor(render): Stage 3 T3.1 — delete FindCameraCell AABB grace-frame fallback 2026-06-02 15:36:47 +02:00
CellVisibilityPortalPolygonsTests.cs fix(streaming): commit EnvCell landblocks atomically (#214) 2026-07-13 18:45:24 +02:00
ClipFrameAssemblerTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
ClipFrameLayoutTests.cs feat(render): Phase U.3 — GPU clip-plane gate (gl_ClipDistance), no-clip default 2026-05-30 17:27:30 +02:00
ClipFrameUploadTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
ClipPlaneSetTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
CompositeTextureArrayCachePolicyTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
CornerFloodReplayTests.cs fix(streaming): commit EnvCell landblocks atomically (#214) 2026-07-13 18:45:24 +02:00
CreatureAppraisalPresentationTests.cs feat(ui): port retail creature appraisal presentation 2026-07-23 12:55:24 +02:00
CurrentRenderSceneOracleTests.cs perf(runtime): remove measured steady allocations 2026-07-25 17:50:30 +02:00
DebugVmRenderFactsPublisherTests.cs refactor(render): extract frame presentation diagnostics 2026-07-22 05:02:31 +02:00
DevToolsFramePresenterTests.cs refactor(runtime): move session lifetime and ordered transport 2026-07-25 19:39:24 +02:00
DevToolsRuntimeSourcesTests.cs refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
DisplayFramePacingControllerTests.cs fix(rendering): survive display topology handoff 2026-07-25 13:15:24 +02:00
DollCameraTests.cs fix(D.2b): Slice 2 — retail-exact doll pose, camera + heading (visual gate) 2026-06-25 13:16:27 +02:00
DollEntityBuilderTests.cs feat(D.2b): Slice 2 — DollEntityBuilder (player Setup+ObjDesc -> doll WorldEntity) 2026-06-23 09:07:02 +02:00
DynamicBufferCapacityTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
EntityClipTests.cs fix(render): R1 — repurpose the ParentCellId==null cell-gate bypass (#78) 2026-06-02 20:10:26 +02:00
EntityPhysicsHostTests.cs refactor(world): canonicalize live physics host ownership 2026-07-21 14:05:34 +02:00
EquippedChildProjectionWithdrawalTests.cs fix(interaction): restore retail loot placement and world-drop projection 2026-07-27 00:03:15 +02:00
FixedEntityTextureOwnerLeaseTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
FramebufferResizeControllerTests.cs refactor(app): compose settings and developer tools 2026-07-22 16:11:34 +02:00
FramePacingControllerTests.cs fix #225: stabilize render pacing and frame CPU 2026-07-19 06:29:30 +02:00
FramePacingPolicyTests.cs fix #225: stabilize render pacing and frame CPU 2026-07-19 06:29:30 +02:00
GameWindowLifetimeTests.cs refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
GameWindowRenderLeafCompositionTests.cs perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
GameWindowSlice8BoundaryTests.cs refactor(runtime): cut graphical host over to canonical root 2026-07-26 19:06:09 +02:00
GlBindlessHandleTableTests.cs feat(render): Campaign V slice V2a - mesh path texture-index migration 2026-07-27 15:51:26 +02:00
GlTextureOwnershipTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
GpuFrameFlightControllerTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
GpuResourceRetirementTransactionTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
GpuRetiredTerrainSlotAllocatorTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
HostQuiescenceGateTests.cs refactor(app): own native window callback lifetime 2026-07-22 09:59:10 +02:00
HouseExitWalkReplayTests.cs refactor(render): extract typed retail pview passes 2026-07-22 06:40:09 +02:00
IndoorDrawPlanTests.cs feat(render): IndoorDrawPlan.ShellPass — every visible cell, no drawable filter (R1) 2026-06-06 21:59:26 +02:00
InteriorEntityPartitionTests.cs T1 (fused BR-2/3): retail frame order - dynamics last, punch+seal, shell chop deleted 2026-06-11 11:16:27 +02:00
Issue95DungeonFloodDiagnosticTests.cs test(#95): headless dungeon-flood diagnostic — measure visible-cell count on 0x0007 2026-06-13 18:52:00 +02:00
Issue113DrawingBspFilterTests.cs fix(render): #113 root cause #2 - GfxObj meshes draw only DrawingBSP-referenced polys (the REAL phantom staircase) 2026-06-10 20:52:52 +02:00
Issue113MeetingHallFloodTests.cs fix(streaming): commit EnvCell landblocks atomically (#214) 2026-07-13 18:45:24 +02:00
Issue120ReciprocalPingPongTests.cs #119-residual: tower-ascent harness pins the roof-lip flood gap; barrel claim RETRACTED (user axiom: not in retail) 2026-06-11 18:34:45 +02:00
Issue124LookInSeedRegionTests.cs fix #124: interior-root building look-ins as a landscape-stage sub-pass 2026-06-12 15:59:29 +02:00
Issue127FloodFlipReplayTests.cs close #127 (user-gated + desk pin): distant-building flood flap died with the W=0 clip port 2026-06-13 10:03:33 +02:00
Issue129PunchBiasTests.cs fix #129: cap the punch mark bias's eye-space reach (was unbounded at distance) 2026-06-12 13:38:59 +02:00
Issue130DoorwayStripTests.cs fix #130 (the real strip): drawn-shell lift vs draw-space portal consumers 2026-06-12 14:28:16 +02:00
Issue131SetupProbeTests.cs fix #131 (root cause 4, structurally forced): look-in cells draw their DYNAMICS - the town portal is a server object in the hall's porch cell 2026-06-12 20:52:34 +02:00
Issue177StairDescentCameraFloodTests.cs park #177: retail cdb trace DISPROVES the portal-flood theory 2026-07-07 08:43:21 +02:00
Issue181CameraParkStabilityTests.cs diag #181: root-cause chain complete - flapping cell 0x0181, wall-press excitation, and the REAL defect: camera-flood-scoped light application 2026-07-06 21:04:34 +02:00
Issue181VisFlapReplayTests.cs diag #181 (refined): 0x0181's region is a zero-area sliver; the amplifier is per-drawn-cell state shifting with the cell list, not light-pool scoping 2026-07-06 21:46:49 +02:00
Issue181WallPressEquilibriumTests.cs port #181: retail viewer step subdivision (calc_num_steps 0x0050a0b0) - radius-anchored steps + remainder final step + viewer-exempt small-offset abort 2026-07-06 22:30:37 +02:00
Issue176177FacilityHubFloodReplayTests.cs docs+test #176/#177: 12 mechanisms refuted, apparatus shipped, probe protocol staged 2026-07-05 21:20:03 +02:00
LinuxMonotonicFramePacingWaiterTests.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
LinuxPlatformBoundaryTests.cs feat(linux): add graphical platform services 2026-07-27 11:54:59 +02:00
LiveAppearanceAnimationTests.cs refactor(runtime): own canonical entity and object lifetime 2026-07-26 05:54:46 +02:00
LiveEntityAnimationPresenterTests.cs refactor(runtime): own canonical entity and object lifetime 2026-07-26 05:54:46 +02:00
LiveEntityAnimationSchedulerTests.cs refactor(runtime): own projectile simulation 2026-07-26 14:17:42 +02:00
LiveEntityCreateSupersessionRecoveryTests.cs refactor(runtime): own canonical entity and object lifetime 2026-07-26 05:54:46 +02:00
LiveRenderProjectionJournalTests.cs refactor(runtime): own canonical entity and object lifetime 2026-07-26 05:54:46 +02:00
NdcScissorRectTests.cs fix #130: doorway-slice scissor cut the aperture's top/right pixel row 2026-06-12 13:31:43 +02:00
OrderedResourceTeardownTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
OutdoorCellNodeTests.cs feat(render): R-A2 — per-building floods (the flap fix) 2026-06-08 18:44:43 +02:00
OwnerScopedResourceRegistryTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PaperdollFramePresenterTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
ParticleBindlessInstanceTests.cs feat(render): Campaign V slice V2c - particle texture-index migration 2026-07-27 16:02:59 +02:00
ParticleEmitterRetirementTrackerTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PhysicsCameraCollisionProbeTests.cs feat(A): wire SweepEye to the verbatim update_viewer (start-cell + fallbacks) 2026-06-05 11:10:32 +02:00
PortalProjectionTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PortalTunnelAssetTests.cs feat(headless): share immutable gameplay content 2026-07-27 09:00:48 +02:00
PortalViewTests.cs feat(render): Phase A8.F — ViewPolygon + CellView clip-region data model 2026-05-29 11:30:28 +02:00
PortalVisibilityBuilderTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
PortalVisibilityRobustnessTests.cs feat(render): R-A2 — per-building floods (the flap fix) 2026-06-08 18:44:43 +02:00
PrivatePresentationRendererTests.cs feat(ui): port retail creature appraisal presentation 2026-07-23 12:55:24 +02:00
RendererResourceDisposalLedgerTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
RenderFrameDiagnosticsControllerTests.cs perf(diagnostics): expose prepared asset source counters 2026-07-24 15:16:32 +02:00
RenderFrameGlStateControllerTests.cs refactor(render): extract world scene frame owner 2026-07-22 07:22:09 +02:00
RenderFrameOrchestratorTests.cs perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
RenderFramePreparationControllerTests.cs refactor(render): compose render frame orchestrator 2026-07-22 08:03:49 +02:00
RenderFrameProductTests.cs feat(rendering): pack scene dispatcher inputs 2026-07-25 00:44:58 +02:00
RenderFrameRecoveryIntegrationTests.cs perf(diag): complete trustworthy Slice A capture tooling 2026-07-24 12:46:51 +02:00
RenderFrameResourceControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RenderFrameRouteOwnerSelectorTests.cs refactor(rendering): prepare retained particle routing 2026-07-25 08:45:18 +02:00
RenderInstanceCandidateTests.cs refactor(rendering): isolate dispatcher candidate values 2026-07-25 01:06:57 +02:00
RenderSceneArchitectureTests.cs feat(rendering): contain incremental render scene 2026-07-24 21:42:42 +02:00
RenderScenePViewFrameProductTests.cs Reapply "perf(rendering): draw retained frame product" 2026-07-25 08:36:11 +02:00
RenderSceneShadowRuntimeTests.cs perf(rendering): retain packed classification 2026-07-25 02:46:40 +02:00
ResourceCleanupGroupTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ResourceShutdownTransactionTests.cs refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
RetailAlphaQueueTests.cs perf(render): bound animation and alpha scratch residency 2026-07-24 16:34:28 +02:00
RetailChaseCameraTests.cs fix(world): match retail portal passage and exit warp 2026-07-15 22:14:21 +02:00
RetailParticleGeometryClassifierTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
RetailPViewPassExecutorTests.cs perf(rendering): retire production entity partition 2026-07-25 10:50:57 +02:00
RetailSelectionAssetTests.cs feat(headless): share immutable gameplay content 2026-07-27 09:00:48 +02:00
RetailSelectionLightingPulseTests.cs fix(interaction): bind selection to live incarnations 2026-07-21 07:07:58 +02:00
RetailSelectionSceneTests.cs fix(rendering): isolate world selection transactions 2026-07-24 22:31:15 +02:00
RetailStaticAnimatingObjectSchedulerTests.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
RollingTimingSampleWindowTests.cs refactor(render): extract frame presentation diagnostics 2026-07-22 05:02:31 +02:00
RuntimeResourceSlotTests.cs refactor(app): compose atomic frame roots 2026-07-22 19:02:08 +02:00
ScreenPolygonClipTests.cs feat(render): Phase A8.F — ScreenPolygonClip 2D convex-polygon intersection 2026-05-29 11:37:30 +02:00
ShaderProgramConstructionTests.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
SilkWindowCallbackBindingTests.cs fix(rendering): survive display topology handoff 2026-07-25 13:15:24 +02:00
SkyProjectionTests.cs fix(runtime): align portal and movement presentation 2026-07-17 08:48:27 +02:00
SpawnMotionInitializerTests.cs fix(animation): preserve wire motion on every spawn path 2026-07-12 14:27:44 +02:00
StandaloneBindlessTextureCacheTests.cs feat(render): unify physical residency accounting 2026-07-24 16:20:48 +02:00
StaticRenderProjectionJournalTests.cs fix(rendering): preserve exact scene traversal order 2026-07-25 02:03:58 +02:00
SyntheticEntityMeshReferenceOwnerTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
TerrainCullOrientationTests.cs fix #108-residual (root cause): terrain drew DOUBLE-SIDED - port retail landPolysDraw eye-side gate as terrain backface cull 2026-06-12 22:05:31 +02:00
TerrainDrawDiagnosticsControllerTests.cs refactor(render): extract typed retail pview passes 2026-07-22 06:40:09 +02:00
TerrainParticleCellVisibilityTests.cs perf(vfx): port retail particle visibility degradation 2026-07-17 15:27:36 +02:00
TerrainTextureTilingTableTests.cs fix(rendering): restore retail terrain texture tiling 2026-07-13 21:04:22 +02:00
TextRendererFailureSafetyTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TowerAscentReplayTests.cs #119-residual ROOT CAUSE: the +0.02 m render lift leaked into the portal-visibility graph - horizontal portals side-culled anyone standing on them 2026-06-11 19:26:06 +02:00
ViewconeCullerReuseTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
WorldRenderDiagnosticsTests.cs refactor(render): extract frame presentation diagnostics 2026-07-22 05:02:31 +02:00
WorldRenderFrameBuilderTests.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00
WorldRevealRenderResourceSchedulerTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
WorldSceneRendererTests.cs refactor(runtime): own teleport destination correlation 2026-07-26 17:52:34 +02:00