millores en els presets

This commit is contained in:
2026-03-21 14:12:11 +01:00
parent 6996b3a82a
commit 23863c02a6
11 changed files with 125 additions and 48 deletions

View File

@@ -448,32 +448,13 @@ auto loadData(const std::string& filepath) -> std::vector<uint8_t> {
// Carga el contenido de los archivos GLSL
void Screen::loadShaders() {
// Obtener nombres de fichero desde el preset actual (o usar fallback)
std::string preset_vertex = "crtpi_vertex.glsl";
std::string preset_fragment = "crtpi_fragment.glsl";
if (!Options::postfx_presets.empty()) {
const auto& preset = Options::postfx_presets[static_cast<size_t>(Options::current_postfx_preset)];
if (!preset.vertex.empty()) {
preset_vertex = preset.vertex;
}
if (!preset.fragment.empty()) {
preset_fragment = preset.fragment;
}
}
if (vertex_shader_source_.empty()) {
// Detectar si necesitamos OpenGL ES (Raspberry Pi)
// Intentar cargar versión ES primero si existe (reemplaza .glsl por _es.glsl)
std::string vertex_es = preset_vertex;
auto pos = vertex_es.rfind(".glsl");
if (pos != std::string::npos) {
vertex_es.insert(pos, "_es");
}
auto data = loadData(Resource::List::get()->get(vertex_es));
// Intentar cargar versión ES primero si existe
auto data = loadData(Resource::List::get()->get("crtpi_vertex_es.glsl"));
if (data.empty()) {
// Si no existe versión ES, usar versión Desktop
data = loadData(Resource::List::get()->get(preset_vertex));
data = loadData(Resource::List::get()->get("crtpi_vertex.glsl"));
std::cout << "Usando shaders OpenGL Desktop 3.3\n";
} else {
std::cout << "Usando shaders OpenGL ES 3.0 (Raspberry Pi)\n";
@@ -485,16 +466,10 @@ void Screen::loadShaders() {
}
if (fragment_shader_source_.empty()) {
// Intentar cargar versión ES primero si existe
std::string fragment_es = preset_fragment;
auto pos = fragment_es.rfind(".glsl");
if (pos != std::string::npos) {
fragment_es.insert(pos, "_es");
}
auto data = loadData(Resource::List::get()->get(fragment_es));
auto data = loadData(Resource::List::get()->get("crtpi_fragment_es.glsl"));
if (data.empty()) {
// Si no existe versión ES, usar versión Desktop
data = loadData(Resource::List::get()->get(preset_fragment));
data = loadData(Resource::List::get()->get("crtpi_fragment.glsl"));
}
if (!data.empty()) {
@@ -503,6 +478,14 @@ void Screen::loadShaders() {
}
}
// Aplica los parámetros del preset actual al backend de shaders
void Screen::applyCurrentPostFXPreset() {
if (shader_backend_ && !Options::postfx_presets.empty()) {
const auto& p = Options::postfx_presets[static_cast<size_t>(Options::current_postfx_preset)];
shader_backend_->setPostFXParams(p.vignette, p.scanlines, p.chroma);
}
}
// Inicializa los shaders
void Screen::initShaders() {
if (!Options::video.postfx) {
@@ -525,6 +508,8 @@ void Screen::initShaders() {
}
shader_backend_->init(window_, tex, vertex_shader_source_, fragment_shader_source_);
#endif
applyCurrentPostFXPreset();
}
// Obtiene información sobre la pantalla