12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #ifndef SHADERBASE_H
- #define SHADERBASE_H
- #include "GL/gl.h"
- #include <QList>
- #include <QOpenGLTexture>
- #include <QOpenGLShader>
- 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<QPair<QString, QOpenGLTexture*>> m_listTexture; /* uniform和纹理的映射 */
- QMap<int, QPair<QString, QOpenGLTexture*>> m_mapTexture; /* uniform和纹理的映射,int是第几个,与 GL_TEXTURE0 相对应 */
- };
- #endif // SHADERBASE_H
|