afegits els presets de shaders
This commit is contained in:
@@ -81,12 +81,12 @@ namespace GlobalInputs {
|
||||
if (ss) consumed = true;
|
||||
ss_prev = ss;
|
||||
|
||||
// F7 — Canviar shader (PostFX ↔ CrtPi)
|
||||
// F7 — Canviar tipus de shader (PostFX ↔ CrtPi)
|
||||
bool next_shader = JI_KeyPressed(Options::keys_gui.next_shader);
|
||||
if (next_shader && !next_shader_prev) {
|
||||
Screen::get()->nextShaderPreset();
|
||||
char msg[32];
|
||||
snprintf(msg, sizeof(msg), "SHADER: %s", Screen::get()->getActiveShaderName());
|
||||
Screen::get()->nextShaderType();
|
||||
char msg[64];
|
||||
snprintf(msg, sizeof(msg), "%s: %s", Screen::get()->getActiveShaderName(), Screen::get()->getCurrentPresetName());
|
||||
Overlay::showNotification(msg);
|
||||
}
|
||||
if (next_shader) consumed = true;
|
||||
@@ -95,8 +95,10 @@ namespace GlobalInputs {
|
||||
// F8 — Pròxim preset del shader actiu
|
||||
bool next_preset = JI_KeyPressed(Options::keys_gui.next_shader_preset);
|
||||
if (next_preset && !next_preset_prev) {
|
||||
// TODO: ciclar presets quan estiguen implementats (YAML)
|
||||
Overlay::showNotification("PRESET: DEFAULT");
|
||||
Screen::get()->nextPreset();
|
||||
char msg[64];
|
||||
snprintf(msg, sizeof(msg), "PRESET: %s", Screen::get()->getCurrentPresetName());
|
||||
Overlay::showNotification(msg);
|
||||
}
|
||||
if (next_preset) consumed = true;
|
||||
next_preset_prev = next_preset;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user