#include "PlayerGLWidget.h" #include "spdlog/spdlog.h" #include #include #include PlayerGLWidget::PlayerGLWidget(QWidget *parent) : QOpenGLWidget(parent) { } PlayerGLWidget::~PlayerGLWidget() { } void PlayerGLWidget::initializeGL() { /* 初始化OpenGL函数,OpenGL的函数是在运行时才确定函数指针的 */ initializeOpenGLFunctions(); m_shaderObj = new ShaderRect(); m_VAO1 = m_shaderObj->initShape(); // 初始化形状 if(m_VAO1 == 0) { SPDLOG_ERROR("初始化形状失败"); return; } /* 初始化着色器 */ QString vertexShaderFile = ":/shader/vertexShader.glsl"; QString fragmentShaderFile = ":/shader/fragmentShader.glsl"; if (!m_shaderObj->loadShaderCode(vertexShaderFile, fragmentShaderFile)) { SPDLOG_ERROR("加载着色器代码失败"); return; } /* 编译着色器 */ m_shaderObj->compileShader(); /* 创建纹理 */ QString imageFile1 = QString(":/Image/image/1.jpg"); QString imageFile2 = QString(":/Image/image/awesomeface.png"); if (!m_shaderObj->createTexture(imageFile1, "ourTexture1")) { SPDLOG_ERROR("创建纹理失败"); return; } if (!m_shaderObj->createTexture(imageFile2, "ourTexture2")) { SPDLOG_ERROR("创建纹理失败"); return; } } void PlayerGLWidget::resizeGL(int w, int h) { } void PlayerGLWidget::paintGL() { /* glClearColor函数是一个状态设置函数,而glClear函数则是一个状态使用的函数, * 它使用了当前的状态来获取应该清除为的颜色。 */ glClearColor(0.1f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); m_shaderObj->useShader(); // 使用着色器 m_shaderObj->drawShape(); // 绘制图形 }