ShaderBase.h 1.5 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 bool createTexture(const QImage &image, const QString uniformName);
  26. /* 清空纹理 */
  27. virtual void clearTexture();
  28. /* 使用着色器 */
  29. virtual void useShader();
  30. protected:
  31. /* 打印OpenGL错误 */
  32. void printGLerror(const std::string functionName);
  33. protected:
  34. QByteArray m_vertexShaderCode; /* 顶点着色器文件 */
  35. QByteArray m_fragmentShaderCode; /* 片段着色器文件 */
  36. QOpenGLShaderProgram* m_shaderProgramObj = nullptr; /* 着色器程序对象 */
  37. QList<QPair<QString, QOpenGLTexture*>> m_listTexture; /* uniform和纹理的映射 */
  38. };
  39. #endif // SHADERBASE_H