#pragma once #include #include namespace extra2d { /** * @brief RHI 着色器接口 * * 抽象 GPU 着色器程序 */ class RHIShader { public: virtual ~RHIShader() = default; /** * @brief 获取着色器类型 * @return 着色器类型 */ virtual ShaderType getType() const = 0; /** * @brief 检查是否已编译 * @return 是否已编译 */ virtual bool isCompiled() const = 0; /** * @brief 获取编译日志 * @return 编译日志 */ virtual std::string getCompileLog() const = 0; /** * @brief 检查是否有效 * @return 是否有效 */ virtual bool isValid() const = 0; }; /** * @brief RHI 图形管线接口 * * 抽象 GPU 图形管线状态对象 (PSO) */ class RHIPipeline { public: virtual ~RHIPipeline() = default; /** * @brief 绑定管线 */ virtual void bind() = 0; /** * @brief 解绑管线 */ virtual void unbind() = 0; /** * @brief 获取顶点着色器 * @return 顶点着色器 */ virtual ShaderHandle getVertexShader() const = 0; /** * @brief 获取片段着色器 * @return 片段着色器 */ virtual ShaderHandle getFragmentShader() const = 0; /** * @brief 获取顶点布局 * @return 顶点布局 */ virtual const VertexLayout& getVertexLayout() const = 0; /** * @brief 检查是否有效 * @return 是否有效 */ virtual bool isValid() const = 0; }; } // namespace extra2d