diff --git a/source/engine.cpp b/source/engine.cpp index 24f8537..aca76a0 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -927,6 +927,9 @@ void Engine::toggleRealFullscreen() { // Actualizar tamaño de pantalla para boids (wrapping boundaries) boid_manager_->updateScreenSize(current_screen_width_, current_screen_height_); + // Actualizar ShapeManager con nueva resolución (siempre, independientemente del modo actual) + shape_manager_->updateScreenSize(current_screen_width_, current_screen_height_); + // Actualizar AppLogo con nueva resolución if (app_logo_) { app_logo_->updateScreenSize(current_screen_width_, current_screen_height_); @@ -960,6 +963,9 @@ void Engine::toggleRealFullscreen() { scene_manager_->updateScreenSize(current_screen_width_, current_screen_height_); scene_manager_->changeScenario(scene_manager_->getCurrentScenario(), current_mode_); + // Actualizar ShapeManager con resolución restaurada (siempre, independientemente del modo actual) + shape_manager_->updateScreenSize(current_screen_width_, current_screen_height_); + // Actualizar AppLogo con resolución restaurada if (app_logo_) { app_logo_->updateScreenSize(current_screen_width_, current_screen_height_); @@ -973,6 +979,23 @@ void Engine::toggleRealFullscreen() { } } +void Engine::handlePostFXCycle() { + static constexpr float presets[5][3] = { + {1.5f, 0.0f, 0.0f}, {1.5f, 0.0f, 0.8f}, + {1.5f, 1.0f, 0.0f}, {1.5f, 1.0f, 0.8f}, + {0.0f, 0.0f, 0.0f} + }; + static constexpr const char* names[5] = { + "PostFX: Vinyeta", "PostFX: Scanlines", + "PostFX: Cromàtica", "PostFX: Complet", "PostFX: Desactivat" + }; + postfx_effect_mode_ = (postfx_effect_mode_ + 1) % 5; + postfx_uniforms_.vignette_strength = presets[postfx_effect_mode_][0]; + postfx_uniforms_.chroma_strength = presets[postfx_effect_mode_][1]; + postfx_uniforms_.scanline_strength = presets[postfx_effect_mode_][2]; + showNotificationForAction(names[postfx_effect_mode_]); +} + void Engine::toggleIntegerScaling() { // Solo permitir cambio si estamos en modo fullscreen normal (F3) if (!fullscreen_enabled_) { @@ -1310,11 +1333,21 @@ void Engine::recreateOffscreenTexture() { SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM); } - // Recreate software surface to match new screen size + // Recreate renderer de software (DESTRUIR renderer PRIMER, després surface) + if (ui_renderer_) { SDL_DestroyRenderer(ui_renderer_); ui_renderer_ = nullptr; } + if (ui_surface_) { SDL_DestroySurface(ui_surface_); ui_surface_ = nullptr; } + ui_surface_ = SDL_CreateSurface(current_screen_width_, current_screen_height_, SDL_PIXELFORMAT_RGBA32); if (ui_surface_) { - SDL_DestroySurface(ui_surface_); - ui_surface_ = SDL_CreateSurface(current_screen_width_, current_screen_height_, - SDL_PIXELFORMAT_RGBA32); + ui_renderer_ = SDL_CreateSoftwareRenderer(ui_surface_); + } + // Re-inicialitzar components UI amb nou renderer + if (ui_renderer_ && ui_manager_) { + ui_manager_->initialize(ui_renderer_, theme_manager_.get(), + current_screen_width_, current_screen_height_, // physical + base_screen_width_, base_screen_height_); // logical (font size based on base) + } + if (ui_renderer_ && app_logo_) { + app_logo_->initialize(ui_renderer_, current_screen_width_, current_screen_height_); } }