feat(postfx): debug HUD mostra PostFX, overrides persistents al ciclar, --postfx sense valor

- HUD (F1) afegeix línia PostFX: OFF o PostFX: <preset> [V:x.xx C:x.xx S:x.xx]
- applyPostFXPreset reaaplica overrides de CLI per preservar-los en ciclar amb X
- setPostFXParamOverrides guarda els valors en membres privats per persistència
- --postfx sense valor ja no dona error i utilitza complet (preset 3) per defecte

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-20 12:20:30 +01:00
parent d76c7f75a2
commit e3f29c864b
4 changed files with 64 additions and 3 deletions

View File

@@ -21,7 +21,9 @@ void printHelp() {
std::cout << " --custom-balls <n> Activa escenario custom (tecla 9) con N pelotas\n";
std::cout << " --skip-benchmark Salta el benchmark y usa el máximo de bolas (50000)\n";
std::cout << " --max-balls <n> Limita el máximo de bolas en modos DEMO/DEMO_LITE\n";
std::cout << " --postfx <efecto> Arrancar con PostFX activo: vinyeta, scanlines, cromatica, complet\n";
std::cout << " --postfx [efecto] Arrancar con PostFX activo (default: complet): vinyeta, scanlines, cromatica, complet\n";
std::cout << " --vignette <float> Sobreescribir vignette_strength (activa PostFX si no hay --postfx)\n";
std::cout << " --chroma <float> Sobreescribir chroma_strength (activa PostFX si no hay --postfx)\n";
std::cout << " --help Mostrar esta ayuda\n\n";
std::cout << "Ejemplos:\n";
std::cout << " vibe3_physics # 320x240 zoom 3 (ventana 960x720)\n";
@@ -47,6 +49,8 @@ int main(int argc, char* argv[]) {
bool skip_benchmark = false;
int max_balls_override = 0;
int initial_postfx = -1;
float override_vignette = -1.f;
float override_chroma = -1.f;
AppMode initial_mode = AppMode::SANDBOX; // Modo inicial (default: SANDBOX)
// Parsear argumentos
@@ -127,7 +131,8 @@ int main(int argc, char* argv[]) {
} else if (strcmp(argv[i], "--skip-benchmark") == 0) {
skip_benchmark = true;
} else if (strcmp(argv[i], "--postfx") == 0) {
if (i + 1 < argc) {
// Si no hay valor o el siguiente arg es otra opción, defaultear a complet
if (i + 1 < argc && argv[i + 1][0] != '-') {
std::string fx = argv[++i];
if (fx == "vinyeta") {
initial_postfx = 0;
@@ -142,7 +147,20 @@ int main(int argc, char* argv[]) {
return -1;
}
} else {
std::cerr << "Error: --postfx requiere un valor\n";
initial_postfx = 3; // default: complet
}
} else if (strcmp(argv[i], "--vignette") == 0) {
if (i + 1 < argc) {
override_vignette = (float)atof(argv[++i]);
} else {
std::cerr << "Error: --vignette requiere un valor\n";
return -1;
}
} else if (strcmp(argv[i], "--chroma") == 0) {
if (i + 1 < argc) {
override_chroma = (float)atof(argv[++i]);
} else {
std::cerr << "Error: --chroma requiere un valor\n";
return -1;
}
} else if (strcmp(argv[i], "--max-balls") == 0) {
@@ -182,6 +200,12 @@ int main(int argc, char* argv[]) {
if (initial_postfx >= 0)
engine.setInitialPostFX(initial_postfx);
if (override_vignette >= 0.f || override_chroma >= 0.f) {
if (initial_postfx < 0)
engine.setInitialPostFX(0);
engine.setPostFXParamOverrides(override_vignette, override_chroma);
}
if (!engine.initialize(width, height, zoom, fullscreen, initial_mode)) {
std::cout << "¡Error al inicializar el engine!" << std::endl;
return -1;