为啥点击窗口外的地方或者窗口大小发生变化后,绘制好的图形会消失只剩下背景?
相关代码如下:
void OpenGLWidget::initializeGL()
{
    initializeOpenGLFunctions();
    f = QOpenGLContext::currentContext()->functions();
    f->glEnable(GL_DEPTH_TEST);
    //初始化着色器
    this->initializeShaders();
}
void OpenGLWidget::initializeShaders()
{
    this->m_ModelShader = new QOpenGLShaderProgram(this);
    if (!m_ModelShader->addShaderFromSourceFile(QOpenGLShader::Vertex, \
        ModelvertexShaderPath))
            qDebug() << "Failed to load Vert shader:" << m_ModelShader->log();
    if (!m_ModelShader->addShaderFromSourceFile(QOpenGLShader::Fragment, \
        ModelfragmentShaderPath))
            qDebug() << "Failed to load fragment shader:" << m_ModelShader->log();
    if (!m_ModelShader->link())
        std::cout << "ERROR: failed to link: " << m_ModelShader->log().toStdString();
    }
}
void OpenGLWidget::paintGL()
{
    f = QOpenGLContext::currentContext()->functions();
    f->glClearColor(0.0f, 0.5f, 0.7f, 1.0f);
    f->glEnable(GL_DEPTH_TEST);
    f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    this->DrawModelData();
    m_ModelShader->bind();
    this->setModelShaderMatrix();
      // 绘制
     m_VAO.bind();
     m_EBO.bind();
     f->glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);
      // 解绑着色器程序
      m_VAO.release();
      m_ModelShader->release();
      m_VAO.destroy();
      m_VBO.destroy();
      m_EBO.destroy();
      glDisable(GL_DEPTH_TEST);
}
void OpenGLWidget::DrawModelData()
{
  this->m_ModelShader->bind();
    /*--------------------------初始化------------------*/
    if (!m_VAO.create())
        std::cerr << "ERROR: faild to create vertex array object" << std::endl;
    if (!m_VBO.create())
        std::cerr << "ERROR: failed to create vertex buffer object" << std::endl;
    if (!m_EBO.create())
        std::cerr << "ERROR: failed to create index buffer object" << std::endl;
    /*-------------------顶点数组绑定------------------*/
    m_VAO.bind();
    if (!m_VBO.bind())
    {
        std::cerr << "ERROR: failed to bind vertex buffer object" << std::endl;
    }//将与该对象相关联的缓存绑定到当前OpenGL环境
    m_VBO.allocate(&meshes[0], meshes.size() * sizeof(Vertex));
    if (!m_EBO.bind())
    {
        std::cerr << "ERROR: failed to bind index buffer object" << std::endl;
    }
    m_EBO.allocate(&indices[0], sizeof(unsigned int) * indices.size());
    int vertexLocation = m_ModelShader->attributeLocation("aPos"); // 位置属性的位置为 0
    int normalLocation = m_ModelShader->attributeLocation("aNormal"); // 法线属性的位置为 1
    this->m_ModelShader->enableAttributeArray(vertexLocation);
    this->m_ModelShader->setAttributeBuffer(vertexLocation, GL_FLOAT, offsetof(Vertex, Position), 3, sizeof(Vertex));
    this->m_ModelShader->enableAttributeArray(normalLocation);
    this->m_ModelShader->setAttributeBuffer(normalLocation, GL_FLOAT, offsetof(Vertex, Normal), 3, sizeof(Vertex));
    m_VBO.release();
    m_EBO.release();
    m_VAO.release();
    m_ModelShader->release();
}