Transició a surface acabada. Ja compila
This commit is contained in:
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user