qt的文档说:
当paintGL()时,使小部件的OpenGL渲染上下文为当前状态,
调用resizeGL()或initializeGL()。如果您需要致电
其他地方的标准OpenGL API函数(例如,在小部件的
构造函数或您自己的绘画函数中),您必须调用
首先makeCurrent()。
对于以下情况:
paintGL()
{
drawSomething();
}
...
drawSomething()
{
glClearColor()...
//many other gl calls...
}
我必须在
drawSomething()
函数中使用makeCurrent吗?而且,如果我只调用QPainter代替标准的OpenGL API函数。我必须使用makeCurrent吗?
最佳答案
我必须在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());
}