Resource: afegida pantalla de progres de càrrega

Screen: Afegit objecte de text propi per a la clase
This commit is contained in:
2025-06-10 22:08:17 +02:00
parent 02b111e4fd
commit cabee86ee0
7 changed files with 160 additions and 128 deletions

View File

@@ -53,18 +53,22 @@ Screen::Screen()
// Inicializa variables
adjustRenderLogicalSize();
// Muestra la ventana
show();
// Inicializa los shaders
initShaders(); // Se ha de ejecutar con la ventana visible
initShaders();
// Crea el objeto de texto
createText();
#ifdef DEBUG
debug_info_.text = text_;
setDebugInfoEnabled(true);
#endif
}
// Destructor
Screen::~Screen()
{
SDL_DestroyTexture(game_canvas_);
SDL_DestroyRenderer(renderer_);
SDL_DestroyWindow(window_);
}
@@ -239,18 +243,19 @@ void Screen::renderInfo()
// Carga el contenido del archivo GLSL
void Screen::loadShaders()
{
const std::string GLSL_FILE = param.game.game_area.rect.h == 256 ? "crtpi_256.glsl" : "crtpi_240.glsl";
std::ifstream f(Asset::get()->get(GLSL_FILE).c_str());
shader_source_ = std::string((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
if (shader_source_.empty())
{
const std::string GLSL_FILE = param.game.game_area.rect.h == 256 ? "crtpi_256.glsl" : "crtpi_240.glsl";
std::ifstream f(Asset::get()->get(GLSL_FILE).c_str());
shader_source_ = std::string((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
}
}
// Inicializa los shaders
void Screen::initShaders()
{
if (shader_source_.empty())
{
loadShaders();
}
show(); // Se ha de ejecutar con la ventana visible
loadShaders();
shader::init(window_, game_canvas_, shader_source_);
}
@@ -401,20 +406,27 @@ void Screen::getDisplayInfo()
}
}
// Activa / desactiva el escalado entero
// Alterna entre activar y desactivar el escalado entero
void Screen::toggleIntegerScale()
{
options.video.integer_scale = !options.video.integer_scale;
SDL_SetRenderLogicalPresentation(Screen::get()->getRenderer(), param.game.width, param.game.height, options.video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
}
// Activa / desactiva el vsync
// Alterna entre activar y desactivar el V-Sync
void Screen::toggleVSync()
{
options.video.v_sync = !options.video.v_sync;
SDL_SetRenderVSync(renderer_, options.video.v_sync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
}
// Establece el estado del V-Sync
void Screen::setVSync(bool enabled)
{
options.video.v_sync = enabled;
SDL_SetRenderVSync(renderer_, enabled ? 1 : SDL_RENDERER_VSYNC_DISABLED);
}
// Obtiene los punteros a los singletones
void Screen::getSingletons()
{
@@ -429,4 +441,11 @@ void Screen::applySettings()
SDL_SetRenderLogicalPresentation(Screen::get()->getRenderer(), param.game.width, param.game.height, options.video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
adjustWindowSize();
setFullscreenMode();
}
// Crea el objeto de texto
void Screen::createText()
{
auto texture = std::make_shared<Texture>(getRenderer(), Asset::get()->get("aseprite.png"));
text_ = std::make_unique<Text>(texture, Asset::get()->get("aseprite.txt"));
}