console_commands: cmdSs en subcomandes (size/upscale/downscale/on/off)

This commit is contained in:
2026-05-17 14:59:58 +02:00
parent b36740ad58
commit 724ac5f11d
+64 -48
View File
@@ -55,61 +55,77 @@ static auto boolToggle(
// ── Command handlers ───────────────────────────────────────────────────────── // ── Command handlers ─────────────────────────────────────────────────────────
// SS [ON|OFF|SIZE|UPSCALE [NEAREST|LINEAR]|DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3]] // SS [ON|OFF|SIZE|UPSCALE [NEAREST|LINEAR]|DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3]]
static auto cmdSs(const std::vector<std::string>& args) -> std::string { // NOLINT(readability-function-cognitive-complexity) // SS SIZE — dimensions de la textura supersampling activa
if (!Screen::get()->isHardwareAccelerated()) { return "No GPU acceleration"; } static auto cmdSsSize() -> std::string {
if (!Options::video.supersampling.enabled) { return "Supersampling is OFF: no texture"; }
const auto [w, h] = Screen::get()->getSsTextureSize();
if (w == 0) { return "SS texture: not active"; }
return "SS texture: " + std::to_string(w) + "x" + std::to_string(h);
}
// SS UPSCALE [NEAREST|LINEAR] — toggle o estableix mode upscale
static auto cmdSsUpscale(const std::vector<std::string>& args) -> std::string {
if (args.size() == 1) {
Screen::get()->setLinearUpscale(!Options::video.supersampling.linear_upscale);
return std::string("Upscale: ") + (Options::video.supersampling.linear_upscale ? "Linear" : "Nearest");
}
if (args[1] == "NEAREST") {
if (!Options::video.supersampling.linear_upscale) { return "Upscale already Nearest"; }
Screen::get()->setLinearUpscale(false);
return "Upscale: Nearest";
}
if (args[1] == "LINEAR") {
if (Options::video.supersampling.linear_upscale) { return "Upscale already Linear"; }
Screen::get()->setLinearUpscale(true);
return "Upscale: Linear";
}
return "usage: ss upscale [nearest|linear]";
}
// SS DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3] — consulta o estableix algorisme
static auto cmdSsDownscale(const std::vector<std::string>& args) -> std::string {
static const std::array<std::string_view, 3> DOWNSCALE_NAMES = {"Bilinear", "Lanczos2", "Lanczos3"}; static const std::array<std::string_view, 3> DOWNSCALE_NAMES = {"Bilinear", "Lanczos2", "Lanczos3"};
if (!args.empty() && args[0] == "SIZE") { if (args.size() == 1) {
if (!Options::video.supersampling.enabled) { return "Supersampling is OFF: no texture"; } return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(Options::video.supersampling.downscale_algo)]);
const auto [w, h] = Screen::get()->getSsTextureSize();
if (w == 0) { return "SS texture: not active"; }
return "SS texture: " + std::to_string(w) + "x" + std::to_string(h);
} }
if (!args.empty() && args[0] == "UPSCALE") { int algo = -1;
if (args.size() == 1) { if (args[1] == "BILINEAR") { algo = 0; }
Screen::get()->setLinearUpscale(!Options::video.supersampling.linear_upscale); if (args[1] == "LANCZOS2") { algo = 1; }
return std::string("Upscale: ") + (Options::video.supersampling.linear_upscale ? "Linear" : "Nearest"); if (args[1] == "LANCZOS3") { algo = 2; }
} if (algo == -1) { return "usage: ss downscale [bilinear|lanczos2|lanczos3]"; }
if (args[1] == "NEAREST") { if (Options::video.supersampling.downscale_algo == algo) {
if (!Options::video.supersampling.linear_upscale) { return "Upscale already Nearest"; } return std::string("Downscale already ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
Screen::get()->setLinearUpscale(false);
return "Upscale: Nearest";
}
if (args[1] == "LINEAR") {
if (Options::video.supersampling.linear_upscale) { return "Upscale already Linear"; }
Screen::get()->setLinearUpscale(true);
return "Upscale: Linear";
}
return "usage: ss upscale [nearest|linear]";
}
if (!args.empty() && args[0] == "DOWNSCALE") {
if (args.size() == 1) {
return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(Options::video.supersampling.downscale_algo)]);
}
int algo = -1;
if (args[1] == "BILINEAR") { algo = 0; }
if (args[1] == "LANCZOS2") { algo = 1; }
if (args[1] == "LANCZOS3") { algo = 2; }
if (algo == -1) { return "usage: ss downscale [bilinear|lanczos2|lanczos3]"; }
if (Options::video.supersampling.downscale_algo == algo) {
return std::string("Downscale already ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
}
Screen::get()->setDownscaleAlgo(algo);
return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
} }
Screen::get()->setDownscaleAlgo(algo);
return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
}
// SS ON — activa supersampling si encara no ho està
static auto cmdSsOn() -> std::string {
if (Options::video.supersampling.enabled) { return "Supersampling already ON"; }
Screen::get()->toggleSupersampling();
return "PostFX Supersampling ON";
}
// SS OFF — desactiva supersampling si encara està actiu
static auto cmdSsOff() -> std::string {
if (!Options::video.supersampling.enabled) { return "Supersampling already OFF"; }
Screen::get()->toggleSupersampling();
return "PostFX Supersampling OFF";
}
// SS — toggle (sense args) o dispatch a subcomandes
static auto cmdSs(const std::vector<std::string>& args) -> std::string {
if (!Screen::get()->isHardwareAccelerated()) { return "No GPU acceleration"; }
if (args.empty()) { if (args.empty()) {
Screen::get()->toggleSupersampling(); Screen::get()->toggleSupersampling();
return std::string("PostFX Supersampling ") + (Options::video.supersampling.enabled ? "ON" : "OFF"); return std::string("PostFX Supersampling ") + (Options::video.supersampling.enabled ? "ON" : "OFF");
} }
if (args[0] == "ON") { if (args[0] == "SIZE") { return cmdSsSize(); }
if (Options::video.supersampling.enabled) { return "Supersampling already ON"; } if (args[0] == "UPSCALE") { return cmdSsUpscale(args); }
Screen::get()->toggleSupersampling(); if (args[0] == "DOWNSCALE") { return cmdSsDownscale(args); }
return "PostFX Supersampling ON"; if (args[0] == "ON") { return cmdSsOn(); }
} if (args[0] == "OFF") { return cmdSsOff(); }
if (args[0] == "OFF") {
if (!Options::video.supersampling.enabled) { return "Supersampling already OFF"; }
Screen::get()->toggleSupersampling();
return "PostFX Supersampling OFF";
}
return "usage: ss [on|off|size|upscale [nearest|linear]|downscale [bilinear|lanczos2|lanczos3]]"; return "usage: ss [on|off|size|upscale [nearest|linear]|downscale [bilinear|lanczos2|lanczos3]]";
} }