migra postfx a aee_arcade i elimina supersampling/downsampling

This commit is contained in:
2026-05-17 11:05:06 +02:00
parent 11eec8f222
commit bd5683d498
28 changed files with 3374 additions and 8026 deletions
+38 -82
View File
@@ -25,14 +25,20 @@ namespace Options {
GamepadManager gamepad_manager; // Opciones de mando para cada jugador
Keyboard keyboard; // Opciones para el teclado
PendingChanges pending_changes; // Opciones que se aplican al cerrar
std::vector<PostFXPreset> postfx_presets = {
{.name = "CRT", .vignette = 0.15F, .scanlines = 0.7F, .chroma = 0.2F, .mask = 0.5F, .gamma = 0.1F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "NTSC", .vignette = 0.4F, .scanlines = 0.5F, .chroma = 0.2F, .mask = 0.3F, .gamma = 0.3F, .curvature = 0.0F, .bleeding = 0.6F, .flicker = 0.0F},
{.name = "Curved", .vignette = 0.5F, .scanlines = 0.6F, .chroma = 0.1F, .mask = 0.4F, .gamma = 0.4F, .curvature = 0.8F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "Scanlines", .vignette = 0.0F, .scanlines = 0.8F, .chroma = 0.0F, .mask = 0.0F, .gamma = 0.0F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "Subtle", .vignette = 0.3F, .scanlines = 0.4F, .chroma = 0.05F, .mask = 0.0F, .gamma = 0.2F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "CRT Live", .vignette = 0.15F, .scanlines = 0.6F, .chroma = 0.3F, .mask = 0.3F, .gamma = 0.1F, .curvature = 0.0F, .bleeding = 0.4F, .flicker = 0.8F},
};
namespace {
auto defaultPostFXPresets() -> std::vector<PostFXPreset> {
return {
{.name = "CRT", .vignette = 0.6F, .scanlines = 0.7F, .chroma = 0.15F, .mask = 0.6F, .gamma = 0.8F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "NTSC", .vignette = 0.4F, .scanlines = 0.5F, .chroma = 0.2F, .mask = 0.4F, .gamma = 0.5F, .curvature = 0.0F, .bleeding = 0.6F, .flicker = 0.0F},
{.name = "Curved", .vignette = 0.5F, .scanlines = 0.6F, .chroma = 0.1F, .mask = 0.5F, .gamma = 0.7F, .curvature = 0.8F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "Scanlines", .vignette = 0.0F, .scanlines = 0.8F, .chroma = 0.0F, .mask = 0.0F, .gamma = 0.0F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "Subtle", .vignette = 0.3F, .scanlines = 0.4F, .chroma = 0.05F, .mask = 0.0F, .gamma = 0.3F, .curvature = 0.0F, .bleeding = 0.0F, .flicker = 0.0F},
{.name = "CRT Live", .vignette = 0.5F, .scanlines = 0.6F, .chroma = 0.3F, .mask = 0.3F, .gamma = 0.4F, .curvature = 0.0F, .bleeding = 0.4F, .flicker = 0.8F},
};
}
} // namespace
std::vector<PostFXPreset> postfx_presets = defaultPostFXPresets();
std::string postfx_file_path;
std::vector<CrtPiPreset> crtpi_presets;
std::string crtpi_file_path;
@@ -94,6 +100,9 @@ namespace Options {
parseField(p, "curvature", preset.curvature);
parseField(p, "bleeding", preset.bleeding);
parseField(p, "flicker", preset.flicker);
parseField(p, "scan_dark_ratio", preset.scan_dark_ratio);
parseField(p, "scan_dark_floor", preset.scan_dark_floor);
parseField(p, "scan_edge_soft", preset.scan_edge_soft);
postfx_presets.push_back(preset);
}
}
@@ -130,6 +139,10 @@ namespace Options {
return false;
}
if (postfx_presets.empty()) {
postfx_presets = defaultPostFXPresets();
}
std::ofstream file(postfx_file_path);
if (!file.is_open()) {
std::cout << "Error: " << postfx_file_path << " can't be opened for writing" << '\n';
@@ -146,73 +159,27 @@ namespace Options {
file << "# curvature: CRT barrel distortion\n";
file << "# bleeding: NTSC horizontal colour bleeding\n";
file << "# flicker: phosphor CRT flicker ~50 Hz (0.0 = off, 1.0 = max)\n";
file << "# scan_dark_ratio: fracció obscura dins de cada fila lògica (1/3 ≈ 0.333)\n";
file << "# scan_dark_floor: brillantor mínima de la subfila fosca\n";
file << "# scan_edge_soft: 0 = step dur, 1 = transició d'1 píxel físic (estil crtpi)\n";
file << "\n";
file << "presets:\n";
file << " - name: \"CRT\"\n";
file << " vignette: 0.15\n";
file << " scanlines: 0.7\n";
file << " chroma: 0.2\n";
file << " mask: 0.5\n";
file << " gamma: 0.1\n";
file << " curvature: 0.0\n";
file << " bleeding: 0.0\n";
file << " flicker: 0.0\n";
file << " - name: \"NTSC\"\n";
file << " vignette: 0.4\n";
file << " scanlines: 0.5\n";
file << " chroma: 0.2\n";
file << " mask: 0.3\n";
file << " gamma: 0.3\n";
file << " curvature: 0.0\n";
file << " bleeding: 0.6\n";
file << " flicker: 0.0\n";
file << " - name: \"Curved\"\n";
file << " vignette: 0.5\n";
file << " scanlines: 0.6\n";
file << " chroma: 0.1\n";
file << " mask: 0.4\n";
file << " gamma: 0.4\n";
file << " curvature: 0.8\n";
file << " bleeding: 0.0\n";
file << " flicker: 0.0\n";
file << " - name: \"Scanlines\"\n";
file << " vignette: 0.0\n";
file << " scanlines: 0.8\n";
file << " chroma: 0.0\n";
file << " mask: 0.0\n";
file << " gamma: 0.0\n";
file << " curvature: 0.0\n";
file << " bleeding: 0.0\n";
file << " flicker: 0.0\n";
file << " - name: \"Subtle\"\n";
file << " vignette: 0.3\n";
file << " scanlines: 0.4\n";
file << " chroma: 0.05\n";
file << " mask: 0.0\n";
file << " gamma: 0.2\n";
file << " curvature: 0.0\n";
file << " bleeding: 0.0\n";
file << " flicker: 0.0\n";
file << " - name: \"CRT Live\"\n";
file << " vignette: 0.15\n";
file << " scanlines: 0.6\n";
file << " chroma: 0.3\n";
file << " mask: 0.3\n";
file << " gamma: 0.1\n";
file << " curvature: 0.0\n";
file << " bleeding: 0.4\n";
file << " flicker: 0.8\n";
for (const auto& preset : postfx_presets) {
file << " - name: \"" << preset.name << "\"\n";
file << " vignette: " << preset.vignette << "\n";
file << " scanlines: " << preset.scanlines << "\n";
file << " chroma: " << preset.chroma << "\n";
file << " mask: " << preset.mask << "\n";
file << " gamma: " << preset.gamma << "\n";
file << " curvature: " << preset.curvature << "\n";
file << " bleeding: " << preset.bleeding << "\n";
file << " flicker: " << preset.flicker << "\n";
file << " scan_dark_ratio: " << preset.scan_dark_ratio << "\n";
file << " scan_dark_floor: " << preset.scan_dark_floor << "\n";
file << " scan_edge_soft: " << preset.scan_edge_soft << "\n";
}
file.close();
// Cargar los presets recién escritos
postfx_presets.clear();
postfx_presets.push_back({"CRT", 0.15F, 0.7F, 0.2F, 0.5F, 0.1F, 0.0F, 0.0F, 0.0F});
postfx_presets.push_back({"NTSC", 0.4F, 0.5F, 0.2F, 0.3F, 0.3F, 0.0F, 0.6F, 0.0F});
postfx_presets.push_back({"Curved", 0.5F, 0.6F, 0.1F, 0.4F, 0.4F, 0.8F, 0.0F, 0.0F});
postfx_presets.push_back({"Scanlines", 0.0F, 0.8F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F});
postfx_presets.push_back({"Subtle", 0.3F, 0.4F, 0.05F, 0.0F, 0.2F, 0.0F, 0.0F, 0.0F});
postfx_presets.push_back({"CRT Live", 0.15F, 0.6F, 0.3F, 0.3F, 0.1F, 0.0F, 0.4F, 0.8F});
video.shader.current_postfx_preset = 0;
return true;
@@ -376,13 +343,6 @@ namespace Options {
video.shader.current_shader = (shader_name == "crtpi") ? Rendering::ShaderType::CRTPI : Rendering::ShaderType::POSTFX;
}
}
if (vid.contains("supersampling")) {
const auto& ss_node = vid["supersampling"];
parseField(ss_node, "enabled", video.supersampling.enabled);
parseField(ss_node, "linear_upscale", video.supersampling.linear_upscale);
parseField(ss_node, "downscale_algo", video.supersampling.downscale_algo);
}
}
void loadAudioFromYaml(const fkyaml::node& yaml) {
@@ -564,10 +524,6 @@ namespace Options {
file << " postfx_preset: \"" << postfx_name << "\"\n";
file << " crtpi_preset: \"" << crtpi_name << "\"\n";
}
file << " supersampling:\n";
file << " enabled: " << boolToString(video.supersampling.enabled) << "\n";
file << " linear_upscale: " << boolToString(video.supersampling.linear_upscale) << "\n";
file << " downscale_algo: " << video.supersampling.downscale_algo << "\n";
file << "\n";
// AUDIO