我有一个QOpenGLWidget的子类,如下所示:
class MyWidget : public QOpenGLWidget
{
...
virtual void initializeGL();
virtual void resizeGL( int width, int height );
virtual void paintGL();
void SetWireframe( bool value );
};
选中复选框后,主窗口将调用SetWireframe函数。
根据我的理解,我需要在我的GL函数调用之前使上下文保持最新状态,如果它们不在initializeGL,resizeGL和paintGL之内。
void MyWidget::SetWireframe( bool value )
{
makeCurrent();
if( value )
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
else
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
doneCurrent();
}
如果没有makeCurrent(),glPolygonMode似乎在主窗口上而不在我的小部件上,但没有这个调用就什么也没做。如何使它工作?
(如果重要的话,我使用GLEW而不是QGLFunctions)
编辑:当存储值变量并在paintGL()中设置线框状态时,它正在工作,但我想让它正常工作(使用SetWireframe)。