#pragma once #include #include namespace Rendering { /** * @brief Interfaz abstracta para backends de renderizado con shaders * * Esta interfaz define el contrato que todos los backends de shaders * deben cumplir (OpenGL, Metal, Vulkan, etc.) */ class ShaderBackend { public: virtual ~ShaderBackend() = default; /** * @brief Inicializa el backend de shaders * @param window Ventana SDL * @param texture Textura de backbuffer a la que aplicar shaders * @param vertex_source Código fuente del vertex shader * @param fragment_source Código fuente del fragment shader * @return true si la inicialización fue exitosa */ virtual bool init(SDL_Window* window, SDL_Texture* texture, const std::string& vertex_source, const std::string& fragment_source) = 0; /** * @brief Renderiza la textura con los shaders aplicados */ virtual void render() = 0; /** * @brief Establece el tamaño de la textura como parámetro del shader * @param width Ancho de la textura * @param height Alto de la textura */ virtual void setTextureSize(float width, float height) = 0; /** * @brief Limpia y libera recursos del backend */ virtual void cleanup() = 0; /** * @brief Verifica si el backend está usando aceleración por hardware * @return true si usa aceleración (OpenGL/Metal/Vulkan) */ virtual bool isHardwareAccelerated() const = 0; }; } // namespace Rendering