#pragma once #include #include #include #include #include #include "gpu_shader_preset.hpp" // ============================================================================ // ShaderManager — discovers and manages runtime shader presets under // a root directory (e.g., data/shaders/). // // Each subdirectory with a preset.ini is treated as a shader preset. // ============================================================================ class ShaderManager { public: // Scan root_dir for preset subdirectories (each must contain preset.ini). void scan(const std::string& root_dir); // Available preset names (e.g. {"ntsc-md-rainbows"}). const std::vector& names() const { return names_; } // Load and return a preset (cached). Returns null on failure. GpuShaderPreset* load(SDL_GPUDevice* device, const std::string& name, SDL_GPUTextureFormat swapchain_fmt, int w, int h); // Recreate intermediate render targets on resolution change. void onResize(SDL_GPUDevice* device, SDL_GPUTextureFormat swapchain_fmt, int w, int h); void destroyAll(SDL_GPUDevice* device); private: std::string root_dir_; std::vector names_; std::map dirs_; std::map> loaded_; };