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

09-06 06:11