filtre nearest o linear per al pipeline sdl

This commit is contained in:
2026-04-15 11:10:00 +02:00
parent 5ef278ce70
commit 8bab2da2ed
6 changed files with 69 additions and 8 deletions

View File

@@ -94,7 +94,7 @@ Screen::Screen()
// Crea la textura de destino
game_canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
SDL_SetTextureScaleMode(game_canvas_, SDL_SCALEMODE_NEAREST);
SDL_SetTextureScaleMode(game_canvas_, Options::video.scale_mode);
// Inicializar buffer de píxeles para SDL3GPU
pixel_buffer_.resize(static_cast<size_t>(param.game.width) * static_cast<size_t>(param.game.height));
@@ -670,6 +670,25 @@ void Screen::toggleVSync() {
}
}
// Aplica Options::video.scale_mode a la textura del canvas de juego
void Screen::applyFilter() {
SDL_SetTextureScaleMode(game_canvas_, Options::video.scale_mode);
}
// Alterna el modo de filtrado entre nearest y linear
void Screen::toggleFilter() {
Options::video.scale_mode = (Options::video.scale_mode == SDL_SCALEMODE_NEAREST)
? SDL_SCALEMODE_LINEAR
: SDL_SCALEMODE_NEAREST;
applyFilter();
}
// Devuelve true si el backend SDL3GPU está activo y con aceleración hardware
auto Screen::isHardwareAccelerated() -> bool {
auto* self = Screen::get();
return self != nullptr && self->shader_backend_ && self->shader_backend_->isHardwareAccelerated();
}
// Establece el estado del V-Sync
void Screen::setVSync(bool enabled) {
Options::video.vsync = enabled;

View File

@@ -49,6 +49,8 @@ class Screen {
static void nextPostFXPreset(); // Avanza al siguiente preset PostFX
static void nextCrtPiPreset(); // Avanza al siguiente preset CrtPi
static void toggleSupersampling(); // Alterna supersampling
void toggleFilter(); // Alterna SDL_SCALEMODE_NEAREST ↔ SDL_SCALEMODE_LINEAR
void applyFilter(); // Aplica Options::video.scale_mode a game_canvas_
void toggleIntegerScale();
void toggleVSync(); // Alterna entre activar y desactivar el V-Sync
void setVSync(bool enabled); // Establece el estado del V-Sync
@@ -59,7 +61,8 @@ class Screen {
void show() { SDL_ShowWindow(window_); } // Muestra la ventana
void hide() { SDL_HideWindow(window_); } // Oculta la ventana
void getSingletons(); // Obtiene los punteros a los singletones
[[nodiscard]] static auto getVSync() -> bool { return Options::video.vsync; } // Obtiene el valor de V-Sync
[[nodiscard]] static auto getVSync() -> bool { return Options::video.vsync; } // Obtiene el valor de V-Sync
[[nodiscard]] static auto isHardwareAccelerated() -> bool; // True si SDL3GPU está activo
[[nodiscard]] auto getText() const -> std::shared_ptr<Text> { return text_; } // Obtiene el puntero al texto de Screen
// --- Display Monitor getters ---