mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
8490d8b4cb
Render the genuine 16:9 FOV at correct proportions instead of squash-then-stretch, using a separate per-framebuffer wide surface so canonical PSX VRAM stays faithful (4:3 / non-opted games byte-identical; the wide canvas only exists when opted in). - Wide-aspect mode descriptor (off / squash / native-wide) in gpu.c; opt-in via [video] aspect_ratio. GTE fed the 4:3 ratio (identity, no squash) in native-wide; canonical draw_offset/draw_area left faithful (no VRAM widening, no wrap). - Separate wide present-surfaces (gpu_sw_renderer.c) keyed by back-buffer base: framebuffer prims mirrored at local x = vram_x - base_x + OFFSET; margins cleared via the frame-clear mirror; present reads the displayed buffer's surface 1:1. Eliminates the A/B bleed + flicker (and the segfault) of the shared-canvas attempt. gr_* vtable extended; GL backend reports unsupported -> canonical present until the GL port (task 8). - psx_ws_x_margin native-wide-aware (reuses the existing [widescreen.cull] emit). CONFIRMED a no-op for Tomba's edge objects: they spawn via a non-FUN_80022E44 path (the foreground classifier is already 16:9-safe). See handoff. - Draw-census extended with per-prim screen-X extent + back-buffer base for the native-wide void diagnosis; ws_nw TCP toggle; gpu_state ws.mode/nw_extra. - Controller: "auto"/"gamepad"/"controller" device = first available SDL pad. WIP checkpoint. SW compositor works: flicker fixed, faithful, terrain platform fills the wide frame. REMAINING: discrete foreground OBJECTS (rock pillar, tree branch, bushes) + the parallax backdrop are still culled at the 4:3 edge via a separate generation/spawn path (wtrace the OT display-list writers next); GL compositor port. Detail in NATIVE_WIDE_PLAN.md + the session handoff. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>