Extra2D/include/renderer/rhi/opengl/gl_shader.h

46 lines
1.2 KiB
C++

#pragma once
#include <renderer/rhi/rhi.h>
#include <glad/glad.h>
#include <string>
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