acdream/src/AcDream.App/Rendering
Erik 8e91805206 feat(D.2b): Step-0 chrome sprites confirmed + direct-RenderSurface upload path
Step-0 prove-out result: retail UI chrome sprites are RenderSurface objects
(0x06xxxxxx) that must be decoded DIRECTLY, not via the Surface->SurfaceTexture
chain GetOrUpload uses for world materials (which produced 1x1 magenta/garbage).
Added TextureCache.GetOrUploadRenderSurface(id, out w, out h) — Portal/HighRes
TryGet<RenderSurface> -> DecodeRenderSurface(palette:null) -> upload, separately
cached. This is the path UI chrome + (later) dat fonts use.

Confirmed the universal floating-window bevel is an 8-piece border + center fill:
  center  0x06004CC2 (48x48)
  edges   0x060074BF/C1 (10x5 horiz)  0x060074C0/C2 (5x10 vert)
  corners 0x060074C3..C6 (5x5)
Recorded in RetailChromeSprites.cs (edge/corner->position mapping is a best
guess pending the LayoutDesc 0x21000040 parse; visually confirmed at panel
render). The memory-note ids were right; only the decode path was wrong.

Temporary prove-out harness (added to GameWindow.OnRender) removed. proveout*.log
gitignored.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 16:32:27 +02:00
..
Shaders feat(D.2b): textured-sprite path in TextRenderer + UV-rect DrawSprite 2026-06-14 14:28:29 +02:00
Sky refactor(sky): replace per-frame wrap-mode mutation with persistent samplers 2026-04-29 08:08:26 +02:00
Vfx feat(vfx #C.1.5b): activator handles dat-hydrated entities + per-part transforms 2026-05-12 00:02:16 +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
BitmapFont.cs feat(ui): debug overlay + refined input controls 2026-04-17 18:45:38 +02:00
CameraController.cs feat(camera): InputAction + DebugVM surface for retail chase camera 2026-05-18 20:04:34 +02:00
CellVisibility.cs feat(render): Phase 3 (Step A) — outdoor-root seeds full-screen OutsideView 2026-06-07 19:06:13 +02:00
ChaseCamera.cs fix(render): re-land near plane 0.1m (retail Render::znear) — #110 resolved, closes the §4 corner see-through; close #105/#110 2026-06-10 12:14:00 +02:00
ClipFrame.cs feat(render): Phase U.4 — unified gated draw pass (indoor root) 2026-05-30 17:59:21 +02:00
ClipFrameAssembler.cs feat(render): indoor render WORKS — terminating portal flood + every-cell seal + look-in FPS 2026-06-07 10:14:43 +02:00
ClipPlaneSet.cs feat(render): indoor render WORKS — terminating portal flood + every-cell seal + look-in FPS 2026-06-07 10:14:43 +02:00
DebugLineRenderer.cs feat(ui): debug overlay + refined input controls 2026-04-17 18:45:38 +02:00
FlyCamera.cs fix(render): re-land near plane 0.1m (retail Render::znear) — #110 resolved, closes the §4 corner see-through; close #105/#110 2026-06-10 12:14:00 +02:00
FrustumCuller.cs feat(app): Phase A.2 — FrustumCuller + FrustumPlanes (Gribb-Hartmann) 2026-04-12 08:49:17 +02:00
GameWindow.cs #119: entity bounds from dat vertex data - works for every case, not just multi-part 2026-06-11 22:39:05 +02:00
ICamera.cs feat(app): extract ICamera interface from OrbitCamera 2026-04-10 20:24:29 +02:00
ICameraCollisionProbe.cs feat(A): wire SweepEye to the verbatim update_viewer (start-cell + fallbacks) 2026-06-05 11:10:32 +02:00
IndoorDrawPlan.cs feat(render): IndoorDrawPlan.ShellPass — every visible cell, no drawable filter (R1) 2026-06-06 21:59:26 +02:00
InteriorEntityPartition.cs #118: outdoor dynamics draw in the outside stage under interior roots - the house-exit clip+vanish was the SEAL z-killing the player 2026-06-11 16:49:29 +02:00
OrbitCamera.cs fix(render): re-land near plane 0.1m (retail Render::znear) — #110 resolved, closes the §4 corner see-through; close #105/#110 2026-06-10 12:14:00 +02:00
OutdoorCellNode.cs feat(render): R-A2 — per-building floods (the flap fix) 2026-06-08 18:44:43 +02:00
ParticleRenderer.cs feat(render): indoor render WORKS — terminating portal flood + every-cell seal + look-in FPS 2026-06-07 10:14:43 +02:00
PhysicsCameraCollisionProbe.cs diag(camera): add F6 in/out eye to [flap-sweep] probe 2026-06-09 08:09:10 +02:00
PortalDepthMaskRenderer.cs #117: depth-gate the aperture punch - stencil mark+punch (z-buffered equivalent of retail's painter's order) 2026-06-11 16:05:48 +02:00
PortalProjection.cs knife-edge port: polyClipFinish W=0 eye-plane clip + degenerate-view propagation; EyeInsidePortalOpening rescue DELETED 2026-06-11 21:44:23 +02:00
PortalView.cs knife-edge port: polyClipFinish W=0 eye-plane clip + degenerate-view propagation; EyeInsidePortalOpening rescue DELETED 2026-06-11 21:44:23 +02:00
PortalVisibilityBuilder.cs knife-edge port: polyClipFinish W=0 eye-plane clip + degenerate-view propagation; EyeInsidePortalOpening rescue DELETED 2026-06-11 21:44:23 +02:00
RetailChaseCamera.cs fix(render): re-land near plane 0.1m (retail Render::znear) — #110 resolved, closes the §4 corner see-through; close #105/#110 2026-06-10 12:14:00 +02:00
RetailPViewRenderer.cs #121: dynamics-owner particle pass - world portals visible again; re-gate ledger in ISSUES 2026-06-11 17:36:58 +02:00
SamplerCache.cs refactor(sky): replace per-frame wrap-mode mutation with persistent samplers 2026-04-29 08:08:26 +02:00
SceneLightingUboBinding.cs feat(render): Phase G.1/G.2 — SceneLighting UBO + sky renderer + shader integration 2026-04-19 10:39:48 +02:00
ScreenPolygonClip.cs feat(render): Phase A8.F — ScreenPolygonClip 2D convex-polygon intersection 2026-05-29 11:37:30 +02:00
Shader.cs feat(ui): debug overlay + refined input controls 2026-04-17 18:45:38 +02:00
TerrainAtlas.cs feat(A.5 T22.5): wire QualityPreset into renderer + streaming (commit 2/2) 2026-05-10 08:43:06 +02:00
TerrainModernRenderer.cs docs(render): Phase W Stage 4 — verify ceiling-sealed / terrain-viewpoint / GL-state + ParentCellId 2026-06-02 16:24:23 +02:00
TextRenderer.cs feat(D.2b): textured-sprite path in TextRenderer + UV-rect DrawSprite 2026-06-14 14:28:29 +02:00
TextureCache.cs feat(D.2b): Step-0 chrome sprites confirmed + direct-RenderSurface upload path 2026-06-14 16:32:27 +02:00
ViewconeCuller.cs T3 (BR-5): viewconeCheck port - per-view sphere culling for statics/dynamics/particles, weather player-gate, unattached outdoor emitters 2026-06-11 12:56:48 +02:00