<div dir="ltr">Hi Christian,<div><br></div><div>I can't spot a problem with a quick read through, copy and paste code in isolation isn't sufficient to spot what might be wrong.</div><div><br></div><div>As a general note the OSG ref counting is extremely robust, hammered by many thousands of developers in over a decade of it's existence, it's unlikely that that this will be the source of what or what may not be a leak.</div><div><br></div><div>While ref counting is robust when used correctly there are ways to cause problems - creating circular references in the scene graph is one example, another is retaining a ref_ptr<> to objects globally but not keeping track of these, another is code where ref/unref() is called manually without them being properly balanced.</div><div><br></div><div>If you want assistance from the community perhaps the best way would be to create a small example that illustrates the problem.  It might be that you spot the error in your code just doing this, but if then a nice succinct example that others can review and test first hand will provide the best means of getting to the bottom of the problem.</div><div><br></div><div>Robert.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 25 June 2015 at 17:42, Christian Kunz <span dir="ltr"><<a href="mailto:christian.kunz83@gmail.com" target="_blank">christian.kunz83@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
I have a big memory leak in my application.<br>
<br>
Generally I have n Spheres I put in my scene. When I add a Sphere a Drawable is added to the scene, when I remove it, it disapears. So the ref_ptr system is working good here.<br>
<br>
Now I want to connect all the Spheres with osg::PrimitiveSet::LINE_STRIP. That also works fine. The thing is, that the position of the Spheres are dynamically changing and it can be<br>
that new ones appear, etc. So what I do is to just draw the LINE_STRIP every Frame new.<br>
<br>
<br>
<br>
First I clear the old vertices array then iterate over my Spheres and add there positions:<br>
<br>
<br>
Code:<br>
<br>
 _verticesLines->resize(0);<br>
<br>
//****for( ... iterate over Spheres and fill vertices array<br>
_verticesLines->push_back(osg::Vec3(tmpTrackpoint.x, tmpTrackpoint.y, tmpTrackpoint.z+1));<br>
<br>
<br>
<br>
So all the x, y, z positions of my spheres are now in the vertices array.<br>
<br>
<br>
Code:<br>
<br>
<br>
int iCountPrimitives=_geometryLines->getNumPrimitiveSets();<br>
<br>
_geometryLines->removePrimitiveSet(0, iCountPrimitives);<br>
<br>
 if(sizeTrackList>1)<br>
{<br>
_geometryLines->setVertexArray(_verticesLines);<br>
<br>
// set the colors as before, plus using the aobve<br>
osg::Vec4Array* colors = new osg::Vec4Array;<br>
colors->push_back(osg::Vec4(0.7f,0.7f,0.7f,1.0f));<br>
_geometryLines->setColorArray(colors);<br>
_geometryLines->setColorBinding(osg::Geometry::BIND_OVERALL);<br>
<br>
// set the normal in the same way color.<br>
osg::Vec3Array* normals = new osg::Vec3Array;<br>
normals->push_back(osg::Vec3(0.0f,-1.0f,0.0f));<br>
_geometryLines->setNormalArray(normals);<br>
_geometryLines->setNormalBinding(osg::Geometry::BIND_OVERALL);<br>
<br>
osg::ref_ptr<osg::DrawArrays> drawArray = new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,0,sizeTrackList);<br>
_geometryLines->addPrimitiveSet(drawArray);<br>
<br>
_geodeLines->addDrawable(_geometryLines);<br>
<br>
<br>
<br>
<br>
Then I simply add a new DrawArrays instance to the geometry and before that I`m removing any other DrawArray from the geometry.<br>
The problem with that is, that the count of LINE_STRIPS increases with every frame. so the last DrawArray is not deleted and stays in memory.<br>
At this point I tried a lot and I don´t understand why the DrawArray objects are not destroyed.<br>
<br>
osg::ref_ptr<osg::DrawArrays> drawArray = new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,0,sizeTrackList); -> so drawArray is of type osg::ref_ptr,<br>
when I remove it from the osg::Geometry "geometryLines" it is not referenced by any node and should be destroyed?<br>
<br>
Am i´m seeing this wrong? What would be a proper solution to solve this memory leak? How can I destroy the last DrawArrays instance so that memory is not leaking?<br>
<br>
<br>
...<br>
<br>
Thanks for your help...<br>
<br>
Cheers,<br>
Christian<br>
<br>
------------------<br>
Read this topic online here:<br>
<a href="http://forum.openscenegraph.org/viewtopic.php?p=64195#64195" rel="noreferrer" target="_blank">http://forum.openscenegraph.org/viewtopic.php?p=64195#64195</a><br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">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><br></div>