<div dir="ltr"><div>Hi Plamen,</div><div><br></div><div>It sounds like Qt's bad habit of changing OpenGL state for it's own purposes and not resetting that afterwards is the cause your problems.  Unless you specifcally need Qt to create your graphics widow and UI I would recommend not  using it, the built in windowing support that the OSG provides will be better suited for the purpose.  <br></div><div><br></div><div>If you have to use Qt then you'll need to tell the OSG what state can't be trusted and needs to be reapplied. I would suggest putting the state dirty calls into the code prior to calling the OSG's frame,  Where best to place this will depend upon how you've integrate the OSG.  Your own workaround will be doing a form of dirty and probably why it works.  There are other methods for dirtying state in osg::State, just search for dirty in the State header.<br></div><div><br></div><div>Robert.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 24 Jun 2019 at 11:39, Plamen Terziev <<a href="mailto:plspace@abv.bg">plspace@abv.bg</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Robert,<br>
<br>
Sorry for the late reply and thank your for your answer.<br>
<br>
I've checked the OSG source and I saw that OSG manages the OpenGL state itself and that's why if someone (in my case Qt) changes the state then OSG does not know that the state has changed. <br>
<br>
This seems to not be a bug in OSG at all. <br>
<br>
What I am doing is to call at the end of each frame the following:<br>
<br>
<br>
Code:<br>
<br>
auto state = m_osg->getCamera()->getGraphicsContext()->getState();<br>
state->lazyDisablingOfVertexAttributes();<br>
state->applyDisablingOfVertexAttributes();<br>
<br>
<br>
<br>
<br>
So the next frame OSG enables and binds the vertex attributes which fixes the issue.<br>
<br>
I am not sure my code for invalidating the state is correct. Is there any better way to do this?<br>
<br>
My end goal is to tell OSG that what the OpenGL state is different and to invalidate its state.<br>
<br>
Also I've added Mapbox as a OSG drawable node and after Mapbox node renders then the next nodes do not render anymore. Seems that Mapbox is also changing some OpenGL state and OSG is not aware of this.<br>
<br>
Is there a way to tell OSG to invalidate the state between 2 nodes rendering? I am aware for the performance hit here by calling extra gl calls but this will fix my issues.<br>
<br>
Also is it possible to opt out the entire OSG state management so each frame to really make the OpenGL calls?<br>
<br>
------------------<br>
Read this topic online here:<br>
<a href="http://forum.openscenegraph.org/viewtopic.php?p=76322#76322" rel="noreferrer" target="_blank">http://forum.openscenegraph.org/viewtopic.php?p=76322#76322</a><br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</blockquote></div>