PlayerGLWidget.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "PlayerGLWidget.h"
  2. #include "spdlog/spdlog.h"
  3. #include <qopenglext.h>
  4. #include <QVariant>
  5. #include <QDateTime>
  6. PlayerGLWidget::PlayerGLWidget(QWidget *parent) : QOpenGLWidget(parent)
  7. {
  8. }
  9. PlayerGLWidget::~PlayerGLWidget()
  10. {
  11. }
  12. void PlayerGLWidget::initializeGL()
  13. {
  14. /* 初始化OpenGL函数,OpenGL的函数是在运行时才确定函数指针的 */
  15. initializeOpenGLFunctions();
  16. m_shaderObj = new ShaderRect();
  17. m_VAO1 = m_shaderObj->initShape(); // 初始化形状
  18. if(m_VAO1 == 0)
  19. {
  20. SPDLOG_ERROR("初始化形状失败");
  21. return;
  22. }
  23. /* 初始化着色器 */
  24. QString vertexShaderFile = ":/shader/vertexShader.glsl";
  25. QString fragmentShaderFile = ":/shader/fragmentShader.glsl";
  26. if (!m_shaderObj->loadShaderCode(vertexShaderFile, fragmentShaderFile))
  27. {
  28. SPDLOG_ERROR("加载着色器代码失败");
  29. return;
  30. }
  31. /* 编译着色器 */
  32. m_shaderObj->compileShader();
  33. /* 创建纹理 */
  34. QString imageFile1 = QString(":/Image/image/1.jpg");
  35. QString imageFile2 = QString(":/Image/image/awesomeface.png");
  36. if (!m_shaderObj->createTexture(imageFile1, "ourTexture1"))
  37. {
  38. SPDLOG_ERROR("创建纹理失败");
  39. return;
  40. }
  41. if (!m_shaderObj->createTexture(imageFile2, "ourTexture2"))
  42. {
  43. SPDLOG_ERROR("创建纹理失败");
  44. return;
  45. }
  46. }
  47. void PlayerGLWidget::resizeGL(int w, int h)
  48. {
  49. }
  50. void PlayerGLWidget::paintGL()
  51. {
  52. /* glClearColor函数是一个状态设置函数,而glClear函数则是一个状态使用的函数,
  53. * 它使用了当前的状态来获取应该清除为的颜色。 */
  54. glClearColor(0.1f, 0.3f, 0.3f, 1.0f);
  55. glClear(GL_COLOR_BUFFER_BIT);
  56. m_shaderObj->useShader(); // 使用着色器
  57. m_shaderObj->drawShape(); // 绘制图形
  58. }