feat(shaders): sistema de shaders runtime amb presets externs
- Afegir GpuShaderPreset i ShaderManager per carregar shaders des de data/shaders/ - Implementar preset ntsc-md-rainbows (2 passos: encode + decode MAME NTSC) - Render loop multi-pass per shaders externs (targets intermedis R16G16B16A16_FLOAT) - cycleShader(): cicla OFF→PostFX natius→shaders externs amb tecla X - --shader <nom> per arrancar directament amb un preset extern - CMake auto-descubreix i compila data/shaders/**/*.vert/.frag → .spv - HUD F1 mostra 'Shader: <nom>' quan hi ha shader extern actiu Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,8 +19,10 @@
|
||||
#include "gpu/gpu_ball_buffer.hpp" // for GpuBallBuffer, BallGPUData
|
||||
#include "gpu/gpu_context.hpp" // for GpuContext
|
||||
#include "gpu/gpu_pipeline.hpp" // for GpuPipeline
|
||||
#include "gpu/gpu_shader_preset.hpp" // for NTSCParams, GpuShaderPreset
|
||||
#include "gpu/gpu_sprite_batch.hpp" // for GpuSpriteBatch
|
||||
#include "gpu/gpu_texture.hpp" // for GpuTexture
|
||||
#include "gpu/shader_manager.hpp" // for ShaderManager
|
||||
#include "input/input_handler.hpp" // for InputHandler
|
||||
#include "scene/scene_manager.hpp" // for SceneManager
|
||||
#include "shapes_mgr/shape_manager.hpp" // for ShapeManager
|
||||
@@ -82,6 +84,11 @@ class Engine {
|
||||
void setInitialPostFX(int mode);
|
||||
void setPostFXParamOverrides(float vignette, float chroma);
|
||||
|
||||
// External shader presets (loaded from data/shaders/)
|
||||
void cycleShader();
|
||||
void setInitialShader(const std::string& name);
|
||||
std::string getActiveShaderName() const;
|
||||
|
||||
// Modo kiosko
|
||||
void setKioskMode(bool enabled) { kiosk_mode_ = enabled; }
|
||||
bool isKioskMode() const { return kiosk_mode_; }
|
||||
@@ -130,6 +137,7 @@ class Engine {
|
||||
float getPostFXVignette() const { return postfx_uniforms_.vignette_strength; }
|
||||
float getPostFXChroma() const { return postfx_uniforms_.chroma_strength; }
|
||||
float getPostFXScanline() const { return postfx_uniforms_.scanline_strength; }
|
||||
bool isExternalShaderActive() const { return active_shader_ != nullptr; }
|
||||
|
||||
private:
|
||||
// === Componentes del sistema (Composición) ===
|
||||
@@ -184,6 +192,12 @@ class Engine {
|
||||
float postfx_override_vignette_ = -1.f; // -1 = sin override
|
||||
float postfx_override_chroma_ = -1.f;
|
||||
|
||||
// External shader system
|
||||
std::unique_ptr<ShaderManager> shader_manager_;
|
||||
GpuShaderPreset* active_shader_ = nullptr; // null = native PostFX
|
||||
int active_shader_idx_ = -1; // index into shader_manager_->names()
|
||||
std::string initial_shader_name_; // set before initialize()
|
||||
|
||||
// Sistema de zoom dinámico
|
||||
int current_window_zoom_ = DEFAULT_WINDOW_ZOOM;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user