feat(render): resolució d'offscreen configurable via YAML

Separa el tamany lògic (1280×720) del render target offscreen. Llista
tancada de 5 presets 16:9 (720p/900p/1080p/1440p/2160p) llegida de
rendering.render_{width,height} amb fallback a 1280×720 si invàlida.
Inclou API resizeRenderTarget() preparada per al menú de servei futur.
This commit is contained in:
2026-05-21 08:46:22 +02:00
parent 4252f3327f
commit 5d1dae1d86
6 changed files with 150 additions and 17 deletions
+29 -1
View File
@@ -204,6 +204,8 @@ namespace ConfigYaml {
// Rendering
rendering.vsync = Defaults::Rendering::VSYNC_DEFAULT;
rendering.render_width = Defaults::Rendering::RENDER_WIDTH_DEFAULT;
rendering.render_height = Defaults::Rendering::RENDER_HEIGHT_DEFAULT;
// Version
version = std::string(Project::VERSION);
@@ -275,6 +277,28 @@ namespace ConfigYaml {
rendering.vsync = Defaults::Rendering::VSYNC_DEFAULT;
}
}
// Resolució de render: validem el parell (w, h) contra la llista
// tancada de presets 16:9. Si falla l'una o l'altra, fem fallback
// dels dos camps al default per mantenir un parell vàlid.
int candidate_w = rendering.render_width;
int candidate_h = rendering.render_height;
readField(rend, "render_width", candidate_w, Defaults::Rendering::RENDER_WIDTH_DEFAULT);
readField(rend, "render_height", candidate_h, Defaults::Rendering::RENDER_HEIGHT_DEFAULT);
if (Defaults::Rendering::isValidRenderResolution(candidate_w, candidate_h)) {
rendering.render_width = candidate_w;
rendering.render_height = candidate_h;
} else {
if (console) {
std::cerr << "Resolució de render invàlida al YAML ("
<< candidate_w << "x" << candidate_h
<< "), fallback a "
<< Defaults::Rendering::RENDER_WIDTH_DEFAULT << "x"
<< Defaults::Rendering::RENDER_HEIGHT_DEFAULT << '\n';
}
rendering.render_width = Defaults::Rendering::RENDER_WIDTH_DEFAULT;
rendering.render_height = Defaults::Rendering::RENDER_HEIGHT_DEFAULT;
}
}
}
@@ -501,7 +525,11 @@ namespace ConfigYaml {
file << "# RENDERITZACIÓ\n";
file << "rendering:\n";
file << " vsync: " << rendering.vsync << " # 0=disabled, 1=enabled\n\n";
file << " vsync: " << rendering.vsync << " # 0=disabled, 1=enabled\n";
file << " render_width: " << rendering.render_width
<< " # Presets 16:9: 1280, 1600, 1920, 2560, 3840 (fallback 1280)\n";
file << " render_height: " << rendering.render_height
<< " # Parell amb render_width (720, 900, 1080, 1440, 2160)\n\n";
// Guardar controls de jugadors
savePlayer1ControlsToYaml(file);