From 90b3db8f067746f1c34b9975e8ca95bc3bbcc400 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 5 Jan 2025 13:07:20 +0100 Subject: [PATCH] El atenuat de pantalla torna a funcionar. Fade feia dos SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_NONE); que mai tornava a restaurar --- source/fade.cpp | 8 +++++++- source/screen.cpp | 26 ++++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/source/fade.cpp b/source/fade.cpp index 7639dd3..cb0b20c 100644 --- a/source/fade.cpp +++ b/source/fade.cpp @@ -132,9 +132,11 @@ void Fade::update() { if (counter_ % fade_random_squares_delay_ == 0) { - // Dibuja sobre el backbuffer_ + // Cambia el renderizador al backbuffer_ y modifica sus opciones auto temp = SDL_GetRenderTarget(renderer_); SDL_SetRenderTarget(renderer_, backbuffer_); + SDL_BlendMode blend_mode; + SDL_GetRenderDrawBlendMode(renderer_, &blend_mode); SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_NONE); SDL_SetRenderDrawColor(renderer_, r_, g_, b_, a_); @@ -147,6 +149,7 @@ void Fade::update() } // Deja el renderizador como estaba + SDL_SetRenderDrawBlendMode(renderer_, blend_mode); SDL_SetRenderTarget(renderer_, temp); } @@ -169,6 +172,8 @@ void Fade::update() // Dibuja sobre el backbuffer_ auto temp = SDL_GetRenderTarget(renderer_); SDL_SetRenderTarget(renderer_, backbuffer_); + SDL_BlendMode blend_mode; + SDL_GetRenderDrawBlendMode(renderer_, &blend_mode); SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_NONE); SDL_SetRenderDrawColor(renderer_, r_, g_, b_, a_); @@ -179,6 +184,7 @@ void Fade::update() } // Deja el renderizador como estaba + SDL_SetRenderDrawBlendMode(renderer_, blend_mode); SDL_SetRenderTarget(renderer_, temp); // Modifica el tamaño de los rectangulos diff --git a/source/screen.cpp b/source/screen.cpp index 48cb842..3a0a62b 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -86,7 +86,7 @@ void Screen::start() void Screen::render() { // Actualiza el contador de FPS - fps_counter_++; + ++fps_counter_; // Actualiza y dibuja el efecto de flash en la pantalla renderFlash(); @@ -108,12 +108,14 @@ void Screen::render() SDL_SetRenderTarget(renderer_, nullptr); // Borra el contenido previo - SDL_SetRenderDrawColor(renderer_, border_color_.r, border_color_.g, border_color_.b, 0xFF); - SDL_RenderClear(renderer_); + // SDL_SetRenderDrawColor(renderer_, border_color_.r, border_color_.g, border_color_.b, 0xFF); + // SDL_RenderClear(renderer_); // Copia la textura de juego en el renderizador en la posición adecuada if (shake_effect_.enabled) + { SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr); + } SDL_RenderCopy(renderer_, game_canvas_, &src_rect_, &dst_rect_); // Muestra por pantalla el renderizador @@ -121,13 +123,19 @@ void Screen::render() #else if (options.video.shaders) { + // Dibuja sobre la textura de shaders SDL_SetRenderTarget(renderer_, shader_canvas_); - SDL_SetRenderDrawColor(renderer_, 0x00, 0x00, 0x00, 0xFF); - SDL_RenderClear(renderer_); + + // Copia la textura de juego en el renderizador en la posición adecuada if (shake_effect_.enabled) + { + // Esta copia es para evitar que se vea negro por los laterales SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr); + } SDL_RenderCopy(renderer_, game_canvas_, &src_rect_, &dst_rect_); SDL_SetRenderTarget(renderer_, nullptr); + + // Muestra por pantalla el renderizador shader::render(); } else @@ -141,7 +149,10 @@ void Screen::render() // Copia la textura de juego en el renderizador en la posición adecuada if (shake_effect_.enabled) - SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr); // Esta copia es para evitar que se vea negro por los laterales + { + // Esta copia es para evitar que se vea negro por los laterales + SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr); + } SDL_RenderCopy(renderer_, game_canvas_, &src_rect_, &dst_rect_); // Muestra por pantalla el renderizador @@ -394,6 +405,9 @@ void Screen::renderInfo() // Contador de service_pressed_counter if (const int counter = globalInputs::service_pressed_counter; counter > 0) dbg_print(0, 8, std::to_string(counter).c_str(), 255, 0, 255); + + const std::string atten = attenuate_effect_ ? "ATTEN YES" : "ATTEN NO"; + dbg_print(0, 16, atten.c_str(), 255, 0, 0); } }