123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #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 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<QPair<QString, QOpenGLTexture*>> m_listTexture; /* uniform和纹理的映射 */
- };
- #endif // SHADERBASE_H
|