.changelog/2984.md
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.