millores en els presets
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user