#ifndef SHADERBASE_H #define SHADERBASE_H #include "GL/gl.h" #include #include #include class QString; class QImage; class ShaderBase { public: ShaderBase(); virtual ~ShaderBase(); /* 初始化形状 */ virtual GLuint initShape() = 0; /* 绘制图形 */ virtual void drawShape() = 0; /* 初始化Shader,第一个是定点着色器,第二个是片段着色器 */ virtual bool loadShaderCode(const QString &vertexShaderFile, const QString &fragmentShaderFile); /* 编译着色器程序 */ virtual bool compileShader(); /* 初始化纹理,返回值是生成的纹理ID */ virtual bool createTexture(const QString &imageFile, const QString uniformName); /* 初始化纹理,直接传入图片 */ virtual bool createTexture(const QImage &image, const QString uniformName); /* 清空纹理 */ virtual void clearTexture(); /* 使用着色器 */ virtual void useShader(); protected: /* 打印OpenGL错误 */ void printGLerror(const std::string functionName); protected: QByteArray m_vertexShaderCode; /* 顶点着色器文件 */ QByteArray m_fragmentShaderCode; /* 片段着色器文件 */ QOpenGLShaderProgram* m_shaderProgramObj = nullptr; /* 着色器程序对象 */ QList> m_listTexture; /* uniform和纹理的映射 */ }; #endif // SHADERBASE_H