From 5a8747cc4b7e955ea128c18edb2ea831c0d9b1a0 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 5 Mar 2025 19:41:55 +0100 Subject: [PATCH] val! ja pinta coses en altres surfaces --- source/loading_screen.cpp | 8 ++------ source/screen.cpp | 6 +++++- source/screen.h | 3 ++- source/surface.cpp | 9 +++++---- source/title.cpp | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/source/loading_screen.cpp b/source/loading_screen.cpp index 583a0a8..67566a2 100644 --- a/source/loading_screen.cpp +++ b/source/loading_screen.cpp @@ -24,13 +24,8 @@ LoadingScreen::LoadingScreen() color_loading_screen_sprite_(std::make_shared(color_loading_screen_surface_, 0, 0, color_loading_screen_surface_->getWidth(), color_loading_screen_surface_->getHeight())), screen_surface_(std::make_shared(Screen::get()->getRendererSurface(), options.game.width, options.game.height)) { - // Cambia el destino de las surfaces - mono_loading_screen_surface_->setSurfaceDest(screen_surface_); - color_loading_screen_surface_->setSurfaceDest(screen_surface_); - // Configura la superficie donde se van a pintar los sprites - screen_surface_->setColor(0, 0xFF000000); - screen_surface_->clear(0); + screen_surface_->clear(stringToColor("white")); // Inicializa variables options.section.section = Section::LOADING_SCREEN; @@ -141,6 +136,7 @@ void LoadingScreen::updateCounter() // Dibuja la pantalla de carga void LoadingScreen::renderLoad() { + Screen::get()->setRendererSurface(screen_surface_); loading_first_part_ ? mono_loading_screen_sprite_->render(1, stringToColor("black")) : color_loading_screen_sprite_->render(); } diff --git a/source/screen.cpp b/source/screen.cpp index 0965099..36dcbd8 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -82,6 +82,8 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer) border_surface_ = std::make_shared(nullptr, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2); border_surface_->loadPalette(palettes_.front()); + renderer_surface_ = std::make_shared>(game_surface_); + // Establece el modo de video setVideoMode(options.video.mode); @@ -379,7 +381,9 @@ void Screen::resetShaders() // Establece el renderizador para las surfaces void Screen::setRendererSurface(std::shared_ptr surface) { - (surface) ? game_surface_->setSurfaceDest(surface) : game_surface_->setSurfaceDest(nullptr); + (surface) ? + renderer_surface_ = std::make_shared>(surface): + renderer_surface_ = std::make_shared>(game_surface_); } // Cambia la paleta diff --git a/source/screen.h b/source/screen.h index df218bf..c04a0a3 100644 --- a/source/screen.h +++ b/source/screen.h @@ -32,6 +32,7 @@ private: SDL_Texture *border_texture_; // Textura donde se dibuja el borde del juego std::shared_ptr game_surface_; // Surface principal para manejar game_surface_data_ std::shared_ptr border_surface_; // Surface para pintar el el borde de la pantalla + std::shared_ptr> renderer_surface_; // Variables int window_width_; // Ancho de la pantalla o ventana @@ -138,7 +139,7 @@ public: // Getters SDL_Renderer *getRenderer() { return renderer_; } - std::shared_ptr getRendererSurface() { return game_surface_; } + std::shared_ptr getRendererSurface() { return (*renderer_surface_); } // Cambia la paleta void nextPalette(); diff --git a/source/surface.cpp b/source/surface.cpp index b5bcf74..e0f8b21 100644 --- a/source/surface.cpp +++ b/source/surface.cpp @@ -8,6 +8,7 @@ #include // for runtime_error #include // for vector #include "asset.h" // for Asset +#include "screen.h" #include "gif.h" // for LoadGif, LoadPalette // Constructor @@ -183,7 +184,7 @@ void Surface::drawLine(int x1, int y1, int x2, int y2, Uint8 color) // Copia una región de la superficie de origen a la de destino void Surface::render(int dx, int dy, int sx, int sy, int w, int h) { - auto surface_data = surface_dest_->getSurfaceData(); + auto surface_data = Screen::get()->getRendererSurface()->getSurfaceData(); // Limitar la región para evitar accesos fuera de rango w = std::min(w, surface_data_->width - sx); @@ -207,7 +208,7 @@ void Surface::render(int dx, int dy, int sx, int sy, int w, int h) // Copia una región de la superficie de origen a la de destino void Surface::render(int x, int y, SDL_Rect *srcRect, SDL_RendererFlip flip) { - auto surface_data = surface_dest_->getSurfaceData(); + auto surface_data = Screen::get()->getRendererSurface()->getSurfaceData(); // Determina la región de origen (clip) a renderizar int sx = (srcRect) ? srcRect->x : 0; @@ -247,7 +248,7 @@ void Surface::render(int x, int y, SDL_Rect *srcRect, SDL_RendererFlip flip) // Copia una región de la superficie de origen a la de destino void Surface::render(SDL_Rect *srcRect, SDL_Rect *dstRect, SDL_RendererFlip flip) { - auto surface_data = surface_dest_->getSurfaceData(); + auto surface_data = Screen::get()->getRendererSurface()->getSurfaceData(); // Si srcRect es nullptr, tomar toda la superficie fuente int sx = (srcRect) ? srcRect->x : 0; @@ -303,7 +304,7 @@ void Surface::render(SDL_Rect *srcRect, SDL_Rect *dstRect, SDL_RendererFlip flip // Copia una región de la SurfaceData de origen a la SurfaceData de destino reemplazando un color por otro void Surface::renderWithColorReplace(int x, int y, Uint8 source_color, Uint8 target_color, SDL_Rect *srcRect, SDL_RendererFlip flip) { - auto surface_data = surface_dest_->getSurfaceData(); + auto surface_data = Screen::get()->getRendererSurface()->getSurfaceData(); // Determina la región de origen (clip) a renderizar int sx = (srcRect) ? srcRect->x : 0; diff --git a/source/title.cpp b/source/title.cpp index c6c61f2..d1a24a1 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -316,7 +316,7 @@ void Title::fillSurface() Screen::get()->setRendererSurface(bg_surface_); // Rellena la textura de color - Screen::get()->clearSurface(4); + bg_surface_->clear(1); // Pinta el gráfico del titulo a partir del sprite title_logo_sprite_->render();