Fix: m'havia carregat el shakeEffect() de la pantalla quan havia shaders, i de paso he vist que el que tenbia fet shakejava també les notificacions i els menus de debug. Ale, ja està tot arreglaet.
Fix: tampoc estava netejant la pantalla, pensava que no feia falta, pero quan SDL replena de negre la finestra en pantalla completa, havia gorrinades
This commit is contained in:
@@ -805,7 +805,7 @@ void Director::shutdownSystem(bool shouldShutdown)
|
||||
system("sudo shutdown -h +0.1");
|
||||
#elif __linux__
|
||||
// Apaga el sistema en Linux
|
||||
system("shutdown -h +0.1");
|
||||
system("sleep 5; shutdown -h now");
|
||||
#else
|
||||
// Sistema operativo no compatible
|
||||
#error "Sistema operativo no soportado"
|
||||
|
||||
@@ -78,6 +78,7 @@ void Screen::clean(Color color)
|
||||
void Screen::start()
|
||||
{
|
||||
SDL_SetRenderTarget(renderer_, game_canvas_);
|
||||
clean();
|
||||
}
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
@@ -89,23 +90,25 @@ void Screen::render()
|
||||
// Dibuja efectos y elementos sobre el game_canvas_
|
||||
renderFlash();
|
||||
renderAttenuate();
|
||||
renderShake();
|
||||
OnScreenHelp::get()->render();
|
||||
renderInfo();
|
||||
Notifier::get()->render();
|
||||
|
||||
// Restablece el objetivo de renderizado al buffer de pantalla predeterminado
|
||||
SDL_SetRenderTarget(renderer_, nullptr);
|
||||
|
||||
// Renderiza el contenido del game_canvas_ o aplica shaders según configuración
|
||||
// Renderiza el contenido del game_canvas_
|
||||
renderScreen();
|
||||
}
|
||||
|
||||
// Selecciona y ejecuta el método de renderizado adecuado basado en la configuración de shaders
|
||||
// Renderiza el contenido del game_canvas_
|
||||
void Screen::renderScreen()
|
||||
{
|
||||
// Restablece el objetivo de renderizado al buffer de pantalla predeterminado
|
||||
SDL_SetRenderTarget(renderer_, nullptr);
|
||||
|
||||
#ifdef NO_SHADERS
|
||||
// Actualiza la pantalla con el contenido del game_canvas_
|
||||
presentGameCanvas();
|
||||
// Actualiza la pantalla con el contenido del buffer de renderizado
|
||||
SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr);
|
||||
SDL_RenderPresent(renderer_);
|
||||
#else
|
||||
if (options.video.shaders)
|
||||
{
|
||||
@@ -114,8 +117,9 @@ void Screen::renderScreen()
|
||||
}
|
||||
else
|
||||
{
|
||||
// Actualiza la pantalla con el contenido del game_canvas_
|
||||
presentGameCanvas();
|
||||
// Actualiza la pantalla con el contenido del buffer de renderizado
|
||||
SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr);
|
||||
SDL_RenderPresent(renderer_);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -311,6 +315,33 @@ void Screen::renderAttenuate()
|
||||
}
|
||||
}
|
||||
|
||||
// Aplica el efecto de agitar la pantalla
|
||||
void Screen::renderShake()
|
||||
{
|
||||
if (shake_effect_.enabled)
|
||||
{
|
||||
// Guarda el renderizador actual para dejarlo despues como estaba
|
||||
auto current_target = SDL_GetRenderTarget(renderer_);
|
||||
|
||||
// Crea una textura temporal
|
||||
auto temp_texture = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
|
||||
|
||||
// Vuelca game_canvas_ a la textura temporal
|
||||
SDL_SetRenderTarget(renderer_, temp_texture);
|
||||
SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr);
|
||||
|
||||
// Vuelca textura temporal a game_canvas_
|
||||
SDL_SetRenderTarget(renderer_, game_canvas_);
|
||||
SDL_RenderCopy(renderer_, temp_texture, &src_rect_, &dst_rect_);
|
||||
|
||||
// Elimina la textura temporal
|
||||
SDL_DestroyTexture(temp_texture);
|
||||
|
||||
// Restaura el renderizador de destino original
|
||||
SDL_SetRenderTarget(renderer_, current_target);
|
||||
}
|
||||
}
|
||||
|
||||
// Activa / desactiva los shaders
|
||||
void Screen::toggleShaders()
|
||||
{
|
||||
@@ -405,18 +436,3 @@ SDL_Point Screen::getNewPosition()
|
||||
|
||||
return new_pos;
|
||||
}
|
||||
|
||||
// Actualiza la pantalla con el contenido del game_canvas_
|
||||
void Screen::presentGameCanvas()
|
||||
{
|
||||
// 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_);
|
||||
|
||||
// Actualiza la pantalla con el contenido del buffer de renderizado
|
||||
SDL_RenderPresent(renderer_);
|
||||
}
|
||||
@@ -98,6 +98,9 @@ private:
|
||||
// Atenua la pantalla
|
||||
void renderAttenuate();
|
||||
|
||||
// Aplica el efecto de agitar la pantalla
|
||||
void renderShake();
|
||||
|
||||
// Calcula los frames por segundo
|
||||
void updateFPS();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user