diff --git a/source/core/rendering/sdl_manager.cpp b/source/core/rendering/sdl_manager.cpp index 47c5416..6d4d587 100644 --- a/source/core/rendering/sdl_manager.cpp +++ b/source/core/rendering/sdl_manager.cpp @@ -173,10 +173,17 @@ void SDLManager::applyZoom(float new_zoom) { } void SDLManager::updateViewport() { - // Cálculo de letterbox: el juego se renderiza a 1280×720 lógicos, pero - // la swapchain tiene el tamaño físico de la ventana. Aplicamos un viewport - // centrado con la proporción 16:9 para preservar aspect ratio. - float scale = zoom_factor_; + // Càlcul de letterbox: el joc es renderitza a 1280×720 lògics, però la + // swapchain té la mida física de la finestra. Apliquem un viewport + // centrat amb aspect-fit (omple un eix, lletrabox a l'altre). + // + // IMPORTANT: l'escala del viewport es deriva de la mida física actual, + // NO del zoom_factor_. El zoom_factor_ només dimensiona la finestra en + // mode windowed (F1/F2). Si l'enllacéssim, en fullscreen el viewport + // quedaria capat per max_zoom_ (display-100px) i no ompliria la pantalla. + float scale_w = static_cast(current_width_) / Defaults::Game::WIDTH; + float scale_h = static_cast(current_height_) / Defaults::Game::HEIGHT; + float scale = std::min(scale_w, scale_h); int scaled_width = static_cast(std::round(Defaults::Game::WIDTH * scale)); int scaled_height = static_cast(std::round(Defaults::Game::HEIGHT * scale));