Transició a surface acabada. Ja compila

This commit is contained in:
2025-03-04 12:30:19 +01:00
parent c4033e3663
commit 05f91b2a94
31 changed files with 376 additions and 1078 deletions

View File

@@ -46,24 +46,24 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
adjustWindowSize();
// Define el color del borde para el modo de pantalla completa
border_color_ = {0x00, 0x00, 0x00};
border_color_ = 1;
// Establece el modo de escalado
SDL_RenderSetIntegerScale(renderer_, options.video.integer_scale ? SDL_TRUE : SDL_FALSE);
// Crea la textura donde se vuelcan las surfaces
surface_texture_ = createTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, options.game.width, options.game.height);
// Crea la textura donde se dibujan los graficos del juego
game_texture_ = createTexture(renderer, options.game.width, options.game.height);
game_texture_ = createTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, options.game.width, options.game.height);
// Crea la textura donde se dibuja el borde que rodea el area de juego
border_texture_ = createTexture(renderer, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
setBorderColor(border_color_);
border_texture_ = createTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
// Crea la surface donde se vuelcan los datos
surface_ = std::make_shared<Surface>(nullptr, options.game.width, options.game.height);
surface_->loadPalette(Asset::get()->get("zx-spectrum-8x.gif"));
// Crea la surface donde se dibujan los graficos del juego
game_surface_ = std::make_shared<Surface>(nullptr, options.game.width, options.game.height);
game_surface_->loadPalette(Asset::get()->get("zx-spectrum-8x.gif"));
// Crea la surface donde se dibujan los graficos del juego
border_surface_ = std::make_shared<Surface>(nullptr, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
border_surface_->loadPalette(Asset::get()->get("zx-spectrum-8x.gif"));
// Establece el modo de video
setVideoMode(options.video.mode);
@@ -76,22 +76,21 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
// Destructor
Screen::~Screen()
{
SDL_DestroyTexture(surface_texture_);
SDL_DestroyTexture(game_texture_);
SDL_DestroyTexture(border_texture_);
}
// Limpia la pantalla
void Screen::clean(Color color)
void Screen::clear(Color color)
{
SDL_SetRenderDrawColor(renderer_, color.r, color.g, color.b, 0xFF);
SDL_RenderClear(renderer_);
}
// Limpia la pantalla
void Screen::clean(Uint8 index)
void Screen::clear(Uint8 index)
{
surface_->clear(index);
game_surface_->clear(index);
}
// Prepara para empezar a dibujar en la textura de juego
@@ -101,14 +100,11 @@ void Screen::start()
setRenderSurfaceData(nullptr);
}
// Prepara para empezar a dibujar en la textura del borde
void Screen::startDrawOnBorder() { SDL_SetRenderTarget(renderer_, border_texture_); }
// Vuelca el contenido del renderizador en pantalla
void Screen::render()
{
// Copia la surface a game_texture_
surface_->copyToTexture(renderer_, game_texture_);
game_surface_->copyToTexture(renderer_, game_texture_);
// Renderiza sobre gameCanvas los overlays
renderNotifications();
@@ -206,7 +202,7 @@ void Screen::setBorderColor(Uint8 color)
border_color_ = color;
auto temp = SDL_GetRenderTarget(renderer_);
SDL_SetRenderTarget(renderer_, border_texture_);
SDL_SetRenderDrawColor(renderer_, border_color_.r, border_color_.g, border_color_.b, 0xFF);
SDL_SetRenderDrawColor(renderer_, color, color, color, 0xFF);
SDL_RenderClear(renderer_);
SDL_SetRenderTarget(renderer_, temp);
}
@@ -238,7 +234,7 @@ void Screen::gameCanvasToBorderCanvas()
{
auto temp = SDL_GetRenderTarget(renderer_);
SDL_SetRenderTarget(renderer_, border_texture_);
SDL_RenderCopy(renderer_, game_texture_, nullptr, &game_texture_rect_);
SDL_RenderCopy(renderer_, game_texture_, nullptr, &game_rect_);
SDL_SetRenderTarget(renderer_, temp);
}
@@ -262,7 +258,7 @@ void Screen::renderPresent()
}
else
{
SDL_RenderCopy(renderer_, game_texture_, nullptr, &game_texture_rect_);
SDL_RenderCopy(renderer_, game_texture_, nullptr, &game_rect_);
}
SDL_RenderPresent(renderer_);
}
@@ -316,7 +312,7 @@ void Screen::adjustWindowSize()
// Ajusta game_canvas_rect_
void Screen::adjustGameCanvasRect()
{
game_texture_rect_ = {
game_rect_ = {
options.video.border.enabled ? options.video.border.width : 0,
options.video.border.enabled ? options.video.border.height : 0,
options.game.width,
@@ -358,5 +354,5 @@ void Screen::resetShaders()
// Establece el renderizador para las surfaces
void Screen::setRenderSurfaceData(std::shared_ptr<Surface> surface)
{
(surface) ? surface_->redirectSurfaceDataTo(surface) : surface_->restoreOriginalSurfaceData();
(surface) ? game_surface_->redirectSurfaceDataTo(surface) : game_surface_->restoreOriginalSurfaceData();
}