#pragma once #include #include namespace extra2d { // 前向声明 class GLShader; /** * @brief OpenGL 管线实现 */ class GLPipeline : public RHIPipeline { public: explicit GLPipeline(const PipelineDesc& desc); ~GLPipeline() override; bool create(); void destroy(); void bind() override; void unbind() override; ShaderHandle getVertexShader() const override; ShaderHandle getFragmentShader() const override; const VertexLayout& getVertexLayout() const override; bool isValid() const override; const PipelineDesc& getDesc() const { return desc_; } GLuint getGLVAO() const { return vao_; } // 获取 shader program ID(用于设置 uniform) GLuint getGLProgram() const { return shaderProgram_; } // 设置 shader program ID(在创建时调用) void setGLProgram(GLuint program) { shaderProgram_ = program; } private: PipelineDesc desc_; GLuint vao_; GLuint shaderProgram_ = 0; }; } // namespace extra2d