Hi John, What you're trying to do is really nice, any chance you'll share the code ? It could make a cool OSG and QT example.
Cheers, On Thu, Oct 28, 2010 at 10:16 AM, Robert Osfield <[email protected]>wrote: > Hi John, > > My guess is that the OSG is setting some OpenGL state that is being > inherited into the Qt GL drawing code. > > Mixing OSG and other GL code is a little tricky as the OSG uses lazy > state updating to provide efficient use of OpenGL/graphics card, this > lazy state updating means that the OSG assumes the state is the same > going into it a new frame as it was when it left it. The OSG also can > modify the current OpenGL state and leave it in that state, as it has > the knowledge of what the state is so can get it back to the state it > needs on the next frame. The osg::State object associate with each > GraphicsContext is what the OSG uses to track and apply the state. > > The use of lazy state updating means that you need to avoid other > OpenGL code changing the GL state without the osg::State knowing about > it. The two ways to achieve this is to use glPushAttrib/glPopAttrib > around the non OSG GL code, or to use the osg::State::haveApplied*() > methods to tell the OSG that the non OSG GL code has modified a > particular part of OpenGL state. The other issue, and the particular > one you are most obviously facing is that the OSG is modifying the > state and the non OSG GL code doesn't know about this so doesn't reset > it. Two approaches you could take would be to use the > glPushAttrib/glPopAtttrib around the OSG calls, or use a StateSet at > the top of the scene graph - or the master camera's StateSet, to set > the state into a known state, and make sure that this is applied to > the osg::State right after the viewer.frame() call. > > Robert. > > On Wed, Oct 27, 2010 at 9:45 PM, John Doves <[email protected]> wrote: > > Hello, > > I'm having some problem with rendering osg scene into Qt application. I'm > setup osgViewer in single thirded and embedding: > > > > > > Code: > > viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded ); > > viewer->setUpViewerAsEmbeddedInWindow(0,0, 1024, 768); > > > > > > > > > > and rendering in QGraphicsScene class with: > > > > > > Code: > > painter->beginNativePainting(); > > > > glPushMatrix(); > > viewer->frame(); > > glPopMatrix(); > > > > painter->endNativePainting(); > > > > > > > > > > With simple models it rendered ok but when i use models with particles > this rendered with artefacts on Qt widgets. I'm attached two screenshots. > Maybe i must save states before frame() and restore when done? > > > > Thank you! > > > > Cheers, > > John > > > > ------------------ > > Read this topic online here: > > http://forum.openscenegraph.org/viewtopic.php?p=33155#33155 > > > > > > > > > > _______________________________________________ > > osg-users mailing list > > [email protected] > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > -- Serge Lages http://www.tharsis-software.com
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

