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");
|
system("sudo shutdown -h +0.1");
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
// Apaga el sistema en Linux
|
// Apaga el sistema en Linux
|
||||||
system("shutdown -h +0.1");
|
system("sleep 5; shutdown -h now");
|
||||||
#else
|
#else
|
||||||
// Sistema operativo no compatible
|
// Sistema operativo no compatible
|
||||||
#error "Sistema operativo no soportado"
|
#error "Sistema operativo no soportado"
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ void Screen::clean(Color color)
|
|||||||
void Screen::start()
|
void Screen::start()
|
||||||
{
|
{
|
||||||
SDL_SetRenderTarget(renderer_, game_canvas_);
|
SDL_SetRenderTarget(renderer_, game_canvas_);
|
||||||
|
clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vuelca el contenido del renderizador en pantalla
|
// Vuelca el contenido del renderizador en pantalla
|
||||||
@@ -89,23 +90,25 @@ void Screen::render()
|
|||||||
// Dibuja efectos y elementos sobre el game_canvas_
|
// Dibuja efectos y elementos sobre el game_canvas_
|
||||||
renderFlash();
|
renderFlash();
|
||||||
renderAttenuate();
|
renderAttenuate();
|
||||||
|
renderShake();
|
||||||
OnScreenHelp::get()->render();
|
OnScreenHelp::get()->render();
|
||||||
renderInfo();
|
renderInfo();
|
||||||
Notifier::get()->render();
|
Notifier::get()->render();
|
||||||
|
|
||||||
// Restablece el objetivo de renderizado al buffer de pantalla predeterminado
|
// Renderiza el contenido del game_canvas_
|
||||||
SDL_SetRenderTarget(renderer_, nullptr);
|
|
||||||
|
|
||||||
// Renderiza el contenido del game_canvas_ o aplica shaders según configuración
|
|
||||||
renderScreen();
|
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()
|
void Screen::renderScreen()
|
||||||
{
|
{
|
||||||
|
// Restablece el objetivo de renderizado al buffer de pantalla predeterminado
|
||||||
|
SDL_SetRenderTarget(renderer_, nullptr);
|
||||||
|
|
||||||
#ifdef NO_SHADERS
|
#ifdef NO_SHADERS
|
||||||
// Actualiza la pantalla con el contenido del game_canvas_
|
// Actualiza la pantalla con el contenido del buffer de renderizado
|
||||||
presentGameCanvas();
|
SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr);
|
||||||
|
SDL_RenderPresent(renderer_);
|
||||||
#else
|
#else
|
||||||
if (options.video.shaders)
|
if (options.video.shaders)
|
||||||
{
|
{
|
||||||
@@ -114,8 +117,9 @@ void Screen::renderScreen()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Actualiza la pantalla con el contenido del game_canvas_
|
// Actualiza la pantalla con el contenido del buffer de renderizado
|
||||||
presentGameCanvas();
|
SDL_RenderCopy(renderer_, game_canvas_, nullptr, nullptr);
|
||||||
|
SDL_RenderPresent(renderer_);
|
||||||
}
|
}
|
||||||
#endif
|
#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
|
// Activa / desactiva los shaders
|
||||||
void Screen::toggleShaders()
|
void Screen::toggleShaders()
|
||||||
{
|
{
|
||||||
@@ -405,18 +436,3 @@ SDL_Point Screen::getNewPosition()
|
|||||||
|
|
||||||
return new_pos;
|
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
|
// Atenua la pantalla
|
||||||
void renderAttenuate();
|
void renderAttenuate();
|
||||||
|
|
||||||
|
// Aplica el efecto de agitar la pantalla
|
||||||
|
void renderShake();
|
||||||
|
|
||||||
// Calcula los frames por segundo
|
// Calcula los frames por segundo
|
||||||
void updateFPS();
|
void updateFPS();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user