我在Google上搜索后发现,可以使用qml在单独的线程上进行绘制。 http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html
但这不是我所需要的。如何在没有qml的情况下使用常见的qt小部件在单独的线程中渲染?
答案 0 :(得分:0)
如果您的QWidget
继承自QOpenglWidget,您可以致电
this->makeCurrent();
但是我个人更喜欢使用more efficient健壮的方法来封装OpenGL上下文,方法是使用QWindow并在那里配置所有OpenGL相关设置:
这里是一个例子:
bool MyOpenGLWindow::Create()
{
this->requestActivate();
if(!glContext)
{
glContext= new QOpenGLContext(this);
QSurfaceFormat fmt = requestedFormat();
int maj = fmt.majorVersion();
int min = fmt.minorVersion();
glContext->setFormat( requestedFormat());
glContext->create();
if(glContext->isValid() == false)
{
QString str;
str.sprintf("Failed to create GL:%i.%i context",maj,min);
return false;
}
}
glContext->makeCurrent(this);
//after this line you can work with OpenGL
initializeOpenGLFunctions();
glDisable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
//etc...
现在,请记住,每次在线程中生成(或移动现有的)此类的实例时,都必须将上下文设置为当前。