afegits els presets de shaders

This commit is contained in:
2026-04-04 19:57:04 +02:00
parent 2a774f777f
commit eb3f449a1e
6 changed files with 268 additions and 21 deletions

View File

@@ -187,10 +187,9 @@ void Screen::toggleStretchFilter() {
}
}
void Screen::nextShaderPreset() {
void Screen::nextShaderType() {
if (!shader_backend_ || !shader_backend_->isHardwareAccelerated()) return;
// Cicla entre PostFX i CrtPi
if (shader_backend_->getActiveShader() == Rendering::ShaderType::POSTFX) {
shader_backend_->setActiveShader(Rendering::ShaderType::CRTPI);
applyCurrentCrtPiPreset();
@@ -200,6 +199,32 @@ void Screen::nextShaderPreset() {
}
}
void Screen::nextPreset() {
if (!shader_backend_ || !shader_backend_->isHardwareAccelerated()) return;
if (shader_backend_->getActiveShader() == Rendering::ShaderType::POSTFX) {
if (Options::postfx_presets.empty()) return;
Options::current_postfx_preset = (Options::current_postfx_preset + 1) % static_cast<int>(Options::postfx_presets.size());
applyCurrentPostFXPreset();
} else {
if (Options::crtpi_presets.empty()) return;
Options::current_crtpi_preset = (Options::current_crtpi_preset + 1) % static_cast<int>(Options::crtpi_presets.size());
applyCurrentCrtPiPreset();
}
}
auto Screen::getCurrentPresetName() const -> const char* {
if (!shader_backend_ || !shader_backend_->isHardwareAccelerated()) return "---";
if (shader_backend_->getActiveShader() == Rendering::ShaderType::POSTFX) {
if (Options::current_postfx_preset < static_cast<int>(Options::postfx_presets.size()))
return Options::postfx_presets[Options::current_postfx_preset].name.c_str();
} else {
if (Options::current_crtpi_preset < static_cast<int>(Options::crtpi_presets.size()))
return Options::crtpi_presets[Options::current_crtpi_preset].name.c_str();
}
return "---";
}
void Screen::setActiveShader(Rendering::ShaderType type) {
if (shader_backend_) {
shader_backend_->setActiveShader(type);
@@ -207,24 +232,38 @@ void Screen::setActiveShader(Rendering::ShaderType type) {
}
void Screen::applyCurrentPostFXPreset() {
if (!shader_backend_) return;
// Preset per defecte "CRT" — futur: carregar des de YAML
if (!shader_backend_ || Options::postfx_presets.empty()) return;
const auto& preset = Options::postfx_presets[Options::current_postfx_preset];
Rendering::PostFXParams p;
p.vignette = 0.4F;
p.scanlines = 0.5F;
p.chroma = 0.1F;
p.mask = 0.0F;
p.gamma = 0.0F;
p.curvature = 0.0F;
p.bleeding = 0.0F;
p.flicker = 0.0F;
p.vignette = preset.vignette;
p.scanlines = preset.scanlines;
p.chroma = preset.chroma;
p.mask = preset.mask;
p.gamma = preset.gamma;
p.curvature = preset.curvature;
p.bleeding = preset.bleeding;
p.flicker = preset.flicker;
shader_backend_->setPostFXParams(p);
}
void Screen::applyCurrentCrtPiPreset() {
if (!shader_backend_) return;
// Preset per defecte — futur: carregar des de YAML
if (!shader_backend_ || Options::crtpi_presets.empty()) return;
const auto& preset = Options::crtpi_presets[Options::current_crtpi_preset];
Rendering::CrtPiParams p;
p.scanline_weight = preset.scanline_weight;
p.scanline_gap_brightness = preset.scanline_gap_brightness;
p.bloom_factor = preset.bloom_factor;
p.input_gamma = preset.input_gamma;
p.output_gamma = preset.output_gamma;
p.mask_brightness = preset.mask_brightness;
p.curvature_x = preset.curvature_x;
p.curvature_y = preset.curvature_y;
p.mask_type = preset.mask_type;
p.enable_scanlines = preset.enable_scanlines;
p.enable_multisample = preset.enable_multisample;
p.enable_gamma = preset.enable_gamma;
p.enable_curvature = preset.enable_curvature;
p.enable_sharper = preset.enable_sharper;
shader_backend_->setCrtPiParams(p);
}

View File

@@ -28,7 +28,9 @@ class Screen {
void toggleAspectRatio();
void toggleIntegerScale();
void toggleStretchFilter();
void nextShaderPreset();
void nextShaderType(); // Cicla PostFX ↔ CrtPi (F7)
void nextPreset(); // Cicla presets del shader actiu (F8)
[[nodiscard]] auto getCurrentPresetName() const -> const char*;
void setActiveShader(Rendering::ShaderType type);
void applyCurrentPostFXPreset();
void applyCurrentCrtPiPreset();