Back to Provenance

2984

.changelog/2984.md

3.3.11.1 KB
Original Source

fix(vecx): hardware rendering mode shows correct full-screen content

Root cause: retro_get_system_av_info() in the VecX libretro core always returns the software base resolution (330×410) for base_width/base_height, even when hardware rendering is active and the actual GL viewport is 824×1024 (or whatever resolution is selected via vecx_res_hw).

This caused screenRect to return (0,0,330,410) in HW mode, so didRenderFrameOnAlternateThread copied only the top-left 330×410 pixels of the 2048×2048 IOSurface-backed Metal texture — capturing ≈16% of the rendered area. Vectrex vector graphics span the full 824×1024 viewport; the captured fragment contained little or no visible game content, producing a blank square.

Fix: Override screenRect in PVVecXCoreBridge (Video) to parse the actual HW render dimensions from VecxOptions.resolutionHW (e.g. "824x1024") when hardware rendering is active. This matches what the C core reads for its WIDTH/HEIGHT globals and ensures the full rendered frame is copied to inputTexture for display.