Qt 5.3 OpenGL - 使用核心配置文件绘制顶点缓冲区对象

时间:2014-06-02 21:21:31

标签: c++ qt opengl compatibility

我使用Qt 5.3创建QWindow来做一些基本的渲染工作。 QWindow声明如下:

 class OpenGLWindow : public QWindow, protected QOpenGLFunctions_3_3_Core
 {
     Q_OBJECT
     ...
 }

它在构造函数中初始化:

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();
    ...
}

这就是渲染代码:

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);
}

我正在尝试使用顶点和片段着色器绘制一个简单的三角形。问题是在设置核心配置文件时三角形没有显示出来。只有当我将OpenGL版本设置为2.0或使用兼容性配置文件时,它才显示出来。从我的观点来看,这没有任何意义,因为我根本没有使用固定功能。我错过了什么?

0 个答案:

没有答案