ShaderBase.h 1.6 KB

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