[Interest] Sharing an OGL context with multiple QGLWidget using designer (or anything else)
Paulo Silva
paulo.jnkml at gmail.com
Tue Jun 19 19:53:36 CEST 2012
On Wed, Jun 20, 2012 at 2:50 AM, Paulo Silva <paulo.jnkml at gmail.com> wrote:
> Just an add-on, I also tried to use the constructor
>
> QGLWidget::QGLWidget ( QWidget * parent = 0, const QGLWidget *
> shareWidget = 0, Qt::WindowFlags f = 0 )
>
> and although I pass the first QGLWidget created to the preceding
I ment "subsequent" or following.
> widgets, the effect seems to be the same as passing "shareWidget = 0".
>
> http://doc.qt.nokia.com/4.7-snapshot/qglwidget.html#QGLWidget
> recommends looking at
> http://doc.qt.nokia.com/4.7-snapshot/opengl-textures.html
> But that is not very helpful since the glwidgets are created with
> "shareWidget = 0" here:
> http://doc.qt.nokia.com/4.7-snapshot/opengl-textures-window-cpp.html
>
> glWidgets[i][j] = new GLWidget(0, 0);
>
> and for each context we have the code:
> void GLWidget::initializeGL()
> {
> makeObject();
> (...)
> }
>
> which just loads every texture again for each widget:
> void GLWidget::makeObject()
> {
> (...)
>
> for (int j=0; j < 6; ++j) {
> textures[j] = bindTexture
> (QPixmap(QString(":/images/side%1.png").arg(j + 1)),
> GL_TEXTURE_2D);
> }
> (...)
> }
>
> Please correct me if I'm wrong.
>
> Thanks,
> Paulo
>
> On Tue, Jun 19, 2012 at 10:48 PM, Paulo Silva <paulo.jnkml at gmail.com> wrote:
>> Hi everyone,
>>
>> can I share an OGL context between two or more QGLWidgets, when the
>> interface is made using designer?.
>> Since I'm not creating the widgets myself, how can I take the context
>> of one of the widgets and share it with the other widgets?
>>
>> I tried to use static class members like:
>>
>> QGLContext* const MyClass::_shared_context(new QGLContext(QGLFormat()));
>> QGLWidget* MyClass::_shared_widget(0); // initialized to the first
>> widget created
>>
>> and tried to pass it to the constructor,
>>
>> MyClass(QWidget *parent):
>> QGLWidget(_shared_context, parent, _shared_widget),
>> {
>> static bool once(false);
>> if(not once) {
>> once = true;
>> _shared_widget = this;
>> } else {
>> assert(_shared_context == context());
>> // assert(isSharing()); this always fails
>> }
>> }
>>
>> But it does not seem to work as isSharing() returns false for all widgets.
>> Appart from that updateGL fails for all widgets but the first. The
>> others are just painted with the background color.
>> However they do share the same context, as the first assert holds.
>>
>> Is there a correct way of doing this? Any designer functionality?
>>
>> Thanks
>> Paulo
More information about the Interest
mailing list