我使用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或使用兼容性配置文件时,它才显示出来。从我的观点来看,这没有任何意义,因为我根本没有使用固定功能。我错过了什么?