Qt 5.3 OpenGL - vertex buffer object drawing using the core profile
- by user3700881
Im using Qt 5.3 to create a QWindow to do some basic rendering stuff. The QWindow is declared like this:
 class OpenGLWindow : public QWindow, protected QOpenGLFunctions_3_3_Core
 {
     Q_OBJECT
     ...
 }
It is initialized in the constructor:
OpenGLWindow::OpenGLWindow(QWindow *parent) : QWindow(parent)
{
    QSurfaceFormat format;
    format.setVersion(3,3);
    format.setProfile(QSurfaceFormat::CoreProfile);
    this->setSurfaceType(OpenGLSurface);
    this->setFormat(format);
    this->create();
    _context = new QOpenGLContext;
    _context->setFormat(format);
    _context->create();
    _context->makeCurrent(this);
    this->initializeOpenGLFunctions();
    ...
}
And that's the rendering code:
void OpenGLWindow::render()
{
    if(!isExposed())
        return;
    _context->makeCurrent(this);
    glClear(GL_COLOR_BUFFER_BIT);
    glUseProgram(_shaderProgram);
    glBindBuffer(GL_ARRAY_BUFFER, _positionBufferObject);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glDisableVertexAttribArray(0);
    glUseProgram(0);
    _context->swapBuffers(this);
}
I am trying to draw a simple triangle using a vertex and fragment shader. The problem is that the triangle is not showing up when the core profile is set. Only when I set the OpenGL version to 2.0 or when I use the compatibility profile, it shows up. From my point of view that doesn't make any sense because I am not using fixed functionality at all. What am I missing?