Qt OpenGL小部件在调整大小之前不显示三角形

Qt OpenGL小部件在调整大小之前不显示三角形,qt,opengl,Qt,Opengl,我不熟悉OpenGL编程,也不熟悉Qt。在教程之后,我使用以下代码在OpenGL小部件中创建了两个三角形: mainwindow.cpp void MainWindow::initializeGL() { qDebug("initializing"); GLfloat verticies[] = { +0.0f, +0.0f, +1.0f, +1.0f, -1.0f, +1.0f, -1.0f, -1.0f,

我不熟悉OpenGL编程,也不熟悉Qt。在教程之后,我使用以下代码在OpenGL小部件中创建了两个三角形:

mainwindow.cpp

void MainWindow::initializeGL() {
    qDebug("initializing");

    GLfloat verticies[] = {
        +0.0f, +0.0f,
        +1.0f, +1.0f,
        -1.0f, +1.0f,
        -1.0f, -1.0f,
        +1.0f, -1.0f
    };

    GLuint vertexBufferID;
    glGenBuffers(1, &vertexBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verticies), verticies, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);

    GLushort indices[] = {
        0, 1, 2,
        0, 3, 4
    };

    GLuint indexBufferID;
    glGenBuffers(1, &indexBufferID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    glClearColor(0, 0, 0, 1);
}

void MainWindow::paintGL() {
    qDebug("painting");

    //glViewport(0, 0, width(), height());
    glClear(GL_COLOR_BUFFER_BIT);

    //glDrawArrays(GL_TRIANGLES, 0, 6);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
}
奇怪的是,这段代码工作正常,但只有在我调整窗口大小时才会显示:

调整大小之前:

调整大小后:

初始化和绘制都会在调整大小之前输出到控制台,以便调用它们

调整大小会导致三角形显示吗


如果有什么不同的话,我使用的是MacOSX小牛

默认情况下,自动交换应处于启用状态,以便在绘制后更新屏幕。为了确定,您可以在离开PaintGL之前调用swapBuffers吗?

默认情况下,应启用自动交换功能,以便在PaintGL之后更新屏幕。为了确定,您能在离开PaintGL之前打个swapBuffers电话吗?

使用它可能会很有用

glViewPort(0, 0, width(), height()); 

使用它可能有用

glViewPort(0, 0, width(), height()); 
我添加了行swapBuffers;直到最后。同样的行为。我添加了行swapBuffers;直到最后。同样的行为。