From 2194b7ecf45654648316aa683834e48788279b71 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Wed, 18 Mar 2026 12:06:46 -0400 Subject: [PATCH] Update m_Do window viewport immediately on Aurora window resize The framebuffer size flows into Aurora as follows: Into JUTVideo: AURORA_WINDOW_RESIZED handler -> mDoGph_gInf_c::setWindowSize -> JUTVideo::setWindowSize From JUTVideo -> dComIfG_play_c: fpcCt_Handler -> phase_4 -> dComIfGp_setWindow From dComIfGp_play_c -> Aurora: mDoGph_Painter -> drawDepth2 -> GXSetTexCopySrc -> GXCopyTex -> aurora::gfx::resolve_pass (called by GXCopyTex) The trouble is that 1) phase_4 is only called when creating a new scene/room, and 2) even when it is called, mDoGph_Painter is executed before fpcCt_Handler in the main loop so the new size isn't visible to aurora::gfx::resolve_pass until one frame after it's set. This causes a crash due to the original size being passed to CopyTextureToTexture despite the destination framebuffer now being smaller. As a workaround, we just cut out the whole middleman section and call dComIfGp_setWindow immediately when we receive a resize event. This way the new size is immediately visible to Aurora. --- src/m_Do/m_Do_graphic.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 58345ef864..481bf8efff 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -680,6 +680,7 @@ void mDoGph_gInf_c::setWideZoomLightProjection(Mtx& m) { #if TARGET_PC void mDoGph_gInf_c::setWindowSize(AuroraWindowSize const& size) { JUTVideo::getManager()->setWindowSize(size); + dComIfGp_setWindow(0, 0.0f, 0.0f, getWidth(), getHeight(), 0.0f, 1.0f, 0, 2); mFader->mBox.set(0, 0, getWidth(), getHeight()); } #endif