qt的文档说:
当paintGL()时,你的小部件的OpenGL渲染上下文是最新的, 调用resizeGL()或initializeGL()。如果你需要打电话给 来自其他地方的标准OpenGL API函数(例如,在您的小部件中) 构造函数或在您自己的绘制函数中),您必须调用 makeCurrent()首先。
对于以下情况:
paintGL()
{
drawSomething();
}
...
drawSomething()
{
glClearColor()...
//many other gl calls...
}
我必须在drawSomething()
函数中使用makeCurrent。
如果我只进行QPainter调用而不是标准的OpenGL API函数。我必须使用makeCurrent吗?
答案 0 :(得分:2)
我必须在drawSomething()函数中使用makeCurrent。
如果仅从paintGL
调用该函数,则不会,因为Qt将调用paintGL
且上下文已经是当前的。
正如文档所说,只要你需要其他功能中的GL上下文当前,你就会需要它。
// called from other code, context may not be current
void MyGLWidget::setBackgroundColor(const QColor &color) {
makeCurrent();
glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF());
}
答案 1 :(得分:1)
正如文件所述:
当调用paintGL()...
时,渲染上下文变为当前状态
因此无需在paintGL调用的任何方法中调用makeCurrent
。使用QPainter时,也没有必要(顺便说一句:QPainter不一定使用OpenGL)。