ShaderBase.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef SHADERBASE_H
  2. #define SHADERBASE_H
  3. #include "GL/gl.h"
  4. #include <QList>
  5. #include <QOpenGLTexture>
  6. #include <QOpenGLShader>
  7. class QString;
  8. class QImage;
  9. class ShaderBase
  10. {
  11. public:
  12. ShaderBase();
  13. virtual ~ShaderBase();
  14. /* 初始化形状 */
  15. virtual GLuint initShape() = 0;
  16. /* 绘制图形 */
  17. virtual void drawShape() = 0;
  18. /* 初始化Shader,第一个是定点着色器,第二个是片段着色器 */
  19. virtual bool loadShaderCode(const QString &vertexShaderFile, const QString &fragmentShaderFile);
  20. /* 编译着色器程序 */
  21. virtual bool compileShader();
  22. /* 初始化纹理,返回值是生成的纹理ID */
  23. virtual bool createTexture(const QString &imageFile, const QString uniformName);
  24. /* 清空纹理 */
  25. virtual void clearTexture();
  26. /* 使用着色器 */
  27. virtual void useShader();
  28. protected:
  29. /* 打印OpenGL错误 */
  30. void printGLerror(const std::string functionName);
  31. protected:
  32. // QOpenGLShader* m_vertexShaderObj = nullptr; /* 顶点着色器对象 */
  33. // QOpenGLShader* m_fragmentShaderObj = nullptr; /* 片段着色器对象 */
  34. QByteArray m_vertexShaderCode; /* 顶点着色器文件 */
  35. QByteArray m_fragmentShaderCode; /* 片段着色器文件 */
  36. QOpenGLShaderProgram* m_shaderProgramObj = nullptr; /* 着色器程序对象 */
  37. // QMap<QString, QOpenGLTexture*> m_mapTexture; /* uniform和纹理的映射 */
  38. QList<QPair<QString, QOpenGLTexture*>> m_listTexture; /* uniform和纹理的映射 */
  39. };
  40. #endif // SHADERBASE_H