<div dir="ltr">Hi Daniel,<div>I don't understand why your modification to addPrimitiveSet() resolves your issue with the openflight plugin, as it's called before the proper array bindings have been set (src\osgPlugins\OpenFlight\GeometryRecords.cpp line 601)</div><div>Can your problem be avoided by changing</div><div>if (geometry->getColorArray()) geometry->getColorArray()->setBinding(osg::Array::BIND_PER_VERTEX);</div><div>to</div><div>if (geometry->getColorArray()) 

<span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">geometry->setColorArray(<span> </span></span><span style="font-size:small;text-decoration-style:initial;text-decoration-color:initial;background-color:rgb(255,255,255);float:none;display:inline">geometry->getColorArray(),</span><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>osg::Array::BIND_PER_VERTEX);</span>

<br></div><div>and</div><div>if (geometry->getNormalArray()) geometry->getNormalArray()->setBinding(osg::Array::BIND_PER_VERTEX);<br></div><div>by</div><div>if (geometry->getNormalArray()) geometry->setNormalArray(

<span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">geometry->getNormalArray(),</span>

osg::Array::BIND_PER_VERTEX);<br></div><div><br></div><div>(both changes appear two times in 

<span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">src\osgPlugins\OpenFlight\GeometryRecords.cpp</span>

 )</div><div>Regards, Laurens.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 11, 2018 at 3:37 PM, Daniel Emminizer, Code 5773 <span dir="ltr"><<a href="mailto:dan.emminizer@nrl.navy.mil" target="_blank">dan.emminizer@nrl.navy.mil</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Robert,<br>
<br>
I am back from travel and looking at this again.  Didn't get a response on last set of questions about this crash.  Sorry to distract from the Vulkan work -- it sounds interesting, and I'm watching your progress there excitedly.<br>
<br>
<br>
Core problem seems to be that Array::setBinding() can change after Geometry::set*Array().  Geometry::set*Array() is responsible for calling addVertexBufferObjectIfRequire<wbr>d(), and doesn't have enough information to correctly do so.<br>
<br>
During the draw traversal, as a result, the Array::getBinding() flag does not match the VBO state in Geometry.<br>
<br>
One solution is to create the VBO as needed (using addVertexBufferObjectIfRequire<wbr>d) sometime between the start of cull phase and before the Geometry::drawImplementation()<wbr>.  But drawImplementation() is const, and not a place where this can happen.<br>
<br>
<br>
Another possible solution that might help is to modify Geometry::setPrimitiveSet() and addPrimitiveSet() to call addVertexBufferObjectIfRequire<wbr>d() on the various arrays.  I prototyped this solution locally and it resolved the issue in the FLT loader.  I know it's not perfect, but most places I've seen that would trigger this bug have defined an array binding by the time a primitive set is added.<br>
<br>
Should I submit a PR for this approach?  It keeps binary compatibility and is fairly straightforward, and helps my immediate crash out of FLT and most of the other use cases I've encountered.<br>
<span class="im HOEnZb"><br>
Thanks,<br>
<br>
 - Dan<br>
<br>
<br>
<br>
> -----Original Message-----<br>
</span><span class="im HOEnZb">> From: Daniel Emminizer, Code 5773<br>
> Sent: Monday, June 04, 2018 8:45 AM<br>
> To: OpenSceneGraph Users<br>
</span><div class="HOEnZb"><div class="h5">> Subject: RE: [osg-users] VBO Bug with 3.6.1 and Normal Arrays<br>
> <br>
> Hi Robert,<br>
> <br>
> The file you sent is identical to the one I sent.  Was that intentional?  You also<br>
> mention Cessna; do you have the examples mixed up perhaps?<br>
> <br>
> The bug will manifest if the geometry's normal array (and presumably fog,<br>
> colors, etc) are set before the array binding type is set.  It's entirely possible<br>
> to have correctly loaded models.  I only ran across this because the<br>
> OpenFlight loader sets the binding late.<br>
> <br>
> <br>
> This bug prints on console:<br>
> <br>
> Warning: detected OpenGL error 'invalid operation' at after<br>
> drawable.compileGLObjects() call in GLObjectsVisitor::apply(osg::<wbr>Drawable&<br>
> drawable)<br>
> <br>
> <br>
> No change in error message with with OSG_GL_ERROR_CHECKING=on.  No<br>
> change in error message with --ro, with --reset, or with --ro --reset.<br>
> <br>
> I am building OSG 3.6.1 (and tried OpenSceneGraph-3.6) in core profile on<br>
> Windows 10.  Video card data is:<br>
> <br>
> Vendor = NVIDIA Corporation<br>
> Renderer = NVS 510/PCIe/SSE2<br>
> Version = 3.3.0 NVIDIA 388.19<br>
> GLSL Version = 330<br>
> <br>
> <br>
> Responses from me will be slow this week; my email access will be spotty.<br>
> <br>
> Hope this helps.  Thanks,<br>
> <br>
>  - Dan<br>
> <br>
> <br>
> <br>
> > -----Original Message-----<br>
> > From: osg-users [mailto:<a href="mailto:osg-users-bounces@lists.openscenegraph.org">osg-users-bounces@<wbr>lists.openscenegraph.org</a>] On<br>
> > Behalf Of Robert Osfield<br>
> > Sent: Sunday, June 03, 2018 6:11 AM<br>
> > To: OpenSceneGraph Users<br>
> > Subject: Re: [osg-users] VBO Bug with 3.6.1 and Normal Arrays<br>
> ><br>
</div></div><div class="HOEnZb"><div class="h5">> > Hi Dan,<br>
> ><br>
> > On 1 June 2018 at 16:01, Daniel Emminizer, Code 5773<br>
> > <<a href="mailto:dan.emminizer@nrl.navy.mil">dan.emminizer@nrl.navy.mil</a>> wrote:<br>
> > > Attached is a demo of the problem that generates a console warning.<br>
> > More complex scenes can cause crashes.  The red triangle has the problem,<br>
> > but the green one does not.<br>
> ><br>
> > I have built the example, and to help with test have changed the #ifdef<br>
> > blocks to ones that check arguments.read("--ro") for the RealizerOperation<br>
> > usage and "--reset" for the<br>
> > resetVertexAttributeAlias.   Attached is the modified file.<br>
> ><br>
> > If you run the test with --ro and have it use the custom RealizerOperation I<br>
> > see a completely red cessna.  If I used --ro and --reset I see multi-colour<br>
> > (blue, red etc) one, if I run without any options I see the multi-colour one.<br>
> ><br>
> > I don't see any command line warnings though.  I'm testing under Kubuntu<br>
> > with OSG-3.6 branch, my drive info is:<br>
> ><br>
> > OpenGL vendor string: NVIDIA Corporation OpenGL renderer string:<br>
> GeForce<br>
> > GTX 760/PCIe/SSE2 OpenGL core profile version string: 4.5.0 NVIDIA<br>
> 384.111<br>
> > OpenGL core profile shading language version string: 4.50 NVIDIA<br>
> ><br>
> > I don't yet have any idea what is going wrong, it's obviously very odd that<br>
> the<br>
> > custom RealizeOperation is having an effect when it does nothing itself.<br>
> ><br>
> > Before I start diving deeper I'd like to know what others are seeing with<br>
> > these different combinations and if any errors are being printed in the<br>
> > console, if so what are they.  Also let us know the OSG version and<br>
> driver/OS<br>
> > details.<br>
> ><br>
> > Robert.<br>
</div></div><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.<wbr>openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.<wbr>org/listinfo.cgi/osg-users-<wbr>openscenegraph.org</a><br>
</div></div></blockquote></div><br></div>