Hello Robert,
Thank you very much for your reply.
My thoughts exactly. But how do I save and restore the opengl state in
its entirety? I tried pushing/popping the modelview, projection and
even the texture matrices around calling viewer->frame(). I also
explicitly glGet'ed them and loaded them again after OSG was done in
case push/pops were not matched properly inside OSG.
What else is there to save in the opengl state?
Best regards,
Max Pfingsthorn
On 5 Sep 2008, at 17:40, "Robert Osfield" <[EMAIL PROTECTED]>
wrote:
Hi Max,
My guess is that Qt is changing OpenGL state which is not being
protected, and then you are mixing this with the OSG which assumes
that it has complete control over OpenGL state so gets messed up by
the QT changes to state, and also Qt OpenGL code is likely to be
messed up by the OSG changing state.
I don't know enough about the Qt's implementation here to really
provide my insight. Personally I'd rather keep Qt doing Windowing and
the OSG doing OpenGL. If you want to mix things then you'll need to
start playing games with push and popping OpenGL state when entering
the Qt OpenGl code path, and also resetting OpenGL state after leaving
the OSG section.
Robert.
On Fri, Sep 5, 2008 at 4:16 PM, Max Pfingsthorn
<[EMAIL PROTECTED]> wrote:
Dear users,
this problem has been with me for a while. I've even tried it with
other
graphics engines (Ogre) to no avail.
As shown in this toy project at Trolltech Labs
http://labs.trolltech.com/blogs/2008/06/27/accelerate-your-widgets-with-opengl/
I would like to show a scene in the background of a QGraphicsView
and I
was very happy that the ViewerQT class already was a QGLWidget.
However,
there seems to be something scaled wrong after I call viewer->frame
().
Attached are a few screenshots and the code I have so far. I'm
currently
running Ubuntu 8.04.1 and I'm using the OSG 2.2 binaries that came
with
it. Beware that you need at least Qt 4.4 to compile this code.
qt-osg-1.png and -2.png show how far I am at the moment. Number 2
shows
the problem with scaling the window. OSG shows the scene fine in the
background, but the widget I'd like to overlay is stretched. I
believe
the OpenGL version of QPainter draws in some normalized coordinates
and
the bounding box isn't properly updated. qt-osg-ok-1.png and -2.png
show
the same window sizes without calling viewer->frame(), and the
scaling
of the widget is ok. Just no scene in the background of course.
I've traced the problem to osgViewer::Renderer::cull_draw(). I
believe,
when the geometry of the view is set, something makes Qt stop drawing
correctly.
In the function which calls viewer->frame() (in
osgGraphicsView::drawBackground), I thought I save any sort of
relevant
OpenGL state, the projection matrix, model/view matrix, and even the
texture matrix. After the call the viewer->frame(), I restore them
again. Is there any other state that I might have overlooked which is
set in the renderer? Also, do you have any idea why the Qt widget
is not
drawn entirely sometimes? Could it have something do to with buffer
swaps?
Thank you all for your help in advance!
Best regards,
Max Pfingsthorn
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org