#pragma once #include #include #include namespace extra2d { /** * @brief OpenGL 着色器实现 */ class GLShader : public RHIShader { public: explicit GLShader(const ShaderDesc& desc); ~GLShader() override; bool compile(); void destroy(); ShaderType getType() const override { return ShaderType::Vertex; } // 返回 Vertex 表示这是一个程序着色器 bool isCompiled() const override; std::string getCompileLog() const override; bool isValid() const override; void bind() const; void unbind() const; void setUniform(const std::string& name, float value); void setUniform(const std::string& name, const Vec2& value); void setUniform(const std::string& name, const Vec3& value); void setUniform(const std::string& name, const Color& value); void setUniform(const std::string& name, const Mat4& value); const ShaderDesc& getDesc() const { return desc_; } GLuint getGLProgram() const { return program_; } private: ShaderDesc desc_; GLuint shader_; GLuint program_; std::string compileLog_; bool compiled_; }; } // namespace extra2d