63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <string>
|
|
|
|
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 auto init(SDL_Window* window,
|
|
SDL_Texture* texture,
|
|
const std::string& vertex_source,
|
|
const std::string& fragment_source) -> bool = 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 Sube píxeles ARGB8888 desde la CPU al backend de shaders
|
|
* Usado por SDL3GPUShader para evitar pasar por SDL_Texture
|
|
*/
|
|
virtual void uploadPixels(const Uint32* /*pixels*/, int /*width*/, int /*height*/) {}
|
|
|
|
/**
|
|
* @brief Verifica si el backend está usando aceleración por hardware
|
|
* @return true si usa aceleración (OpenGL/Metal/Vulkan)
|
|
*/
|
|
[[nodiscard]] virtual auto isHardwareAccelerated() const -> bool = 0;
|
|
};
|
|
|
|
} // namespace Rendering
|