#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 bool initTextures() = 0; /* 绘制图形 */ virtual void drawShape() = 0; /* 初始化Shader,第一个是定点着色器,第二个是片段着色器 */ virtual bool loadShaderCode(const QString &vertexShaderFile, const QString &fragmentShaderFile); /* 编译着色器程序 */ virtual bool compileShader(); /* 创建纹理,可以显式的指定纹理单元编号,返回纹理单元编号,创建失败则返回的是-1 */ virtual int createTexture(const QString uniformName, int textureUnit = -1); /* 清空纹理 */ 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和纹理的映射 */ QMap> m_mapTexture; /* uniform和纹理的映射,int是第几个,与 GL_TEXTURE0 相对应 */ }; #endif // SHADERBASE_H