Qt-在没有QGLWidget的情况下创建OpenGL上下文

我正在研究需要在多个窗口上进行OpenGL绘制的Qt 4应用程序。为此,我有一个Scene对象,该对象可以处理我的所有对象,并且可以在有界的opengl上下文中进行绘制,条件是该对象与在我所有视图/窗口之前创建的主上下文共享其显示列表。

我的问题是创建此“主要上下文”。目前,我发现的唯一解决方案是创建一个qglwidget,将其添加到任何窗口中,并使用其gl上下文来初始化场景并创建其他上下文。

我想在创建任何小部件之前自行创建QGLContext。因为我的场景需要初始化缓冲区和其他GL东西。 我发现这种方法很丑陋,我想它是另一个选择,但我在互联网上找不到它。

我尝试过这个:

QGLPixelBuffer *oui = new QGLPixelBuffer(1,1);
QGLContext *context = new QGLContext(QGLFormat::defaultFormat(),oui);
context->create();
context->makeCurrent();
_scene = new Scene(context);

但这会导致这种美丽的段错误:

Thread 1 "Visu" received signal SIGSEGV,Segmentation fault.
0x00c2dd55 in QX11Info::screen() const () from /usr/lib/libQtGui.so.4
(gdb) bt
#0  0x00c2dd55 in QX11Info::screen() const () from /usr/lib/libQtGui.so.4
#1  0x004d8a6f in QGLContext::tryVisual(QGLFormat const&,int) () from /usr/lib/libQtOpenGL.so.4
#2  0x004d5913 in QGLContext::chooseVisual() () from /usr/lib/libQtOpenGL.so.4
#3  0x004d94a4 in QGLContext::chooseContext(QGLContext const*) () from /usr/lib/libQtOpenGL.so.4
#4  0x0045cbb0 in QGLContext::create(QGLContext const*) () from /usr/lib/libQtOpenGL.so.4
#5  0x082452a4 in Visu::Initialiser (this=0x84c9150) at Src/Visu.cpp:73
#6  0x0826ac7f in main (argc=1,argv=0xbffff3b4) at Src/Main.cpp:99

我几乎可以肯定这是由于涂漆装置造成的。但是我找不到如何获得正确的绘画设备。

为了帮助您了解这是我现在正在做的事情:

View *view = View::createView(0,0);
View *secondary = View::createView(0,view); // second parameter is the sharing widget
layout->addWidget(view,0); // without this it crash because the context is not valid
const_cast<QGLContext *>(view->context())->makeCurrent();
scene = new Scene(const_cast<QGLContext *>(view->context()));
view->setScene(scene);
secondary->setScene(scene);
qq273836707 回答:Qt-在没有QGLWidget的情况下创建OpenGL上下文

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3161079.html

大家都在问