Re: [osg-users] Remove all LOD children

170 views
Skip to first unread message
Message has been deleted

Alberto Luaces

unread,
May 13, 2016, 9:59:03 AM5/13/16
to osg-...@lists.openscenegraph.org
Bruno Oliveira writes:

> At some point I want to completely wipe out my scene. How can I delete
> all nodes?

If you want to wipe a node and all its descendants, just delete the
parent node. That is what reference counting is all about.

--
Alberto

_______________________________________________
osg-users mailing list
osg-...@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Message has been deleted

Alberto Luaces

unread,
May 13, 2016, 10:16:41 AM5/13/16
to osg-...@lists.openscenegraph.org
Bruno,

if you read the source code, you will see that the LOD uses the same
scheme for storing nodes as a Group: just a vector of ref_ptr that will
be unallocated when destroyed.

Maybe you can place some breakpoints at the destructors on the debugger
and see what is happening.

Bruno Oliveira writes:

> Thank you for your answer. However, since I'm using a LOD, I think it
> is not properly removing my data. At least the memory is still
> allocated.
> If I manually iterate over all nodes and delete them by myself, some
> memory is freed, but not all!
Message has been deleted

Alberto Luaces

unread,
May 13, 2016, 11:23:55 AM5/13/16
to osg-...@lists.openscenegraph.org
I think some facts must be made clear:

* You cannot control when the OpenGL driver releases the memory it
claimed in a previous instant.

* You cannot control when the operating system claims back the memory
pages that a process requested, and in addition, many times it is
simply not possible to do it due to memory fragmentation.

* At most, what you can do is to check that your program is not leaking
memory with a special tool, as the one I recommended (valgrind for
CPUs, other tools for GPUs).

System memory tools are completely unreliable for this specific purpose.

Bruno Oliveira writes:

> I tried removing the children with m_rootNode->removeChildren(0,
> m_rootNode->getNumChildren());
> but this results in some memory being still allocated.
>
> After that, I move the mouse around a bit in the clean scene, and the
> memory starts being freed. However, It never gets to the initial
> value, there is always some memory floating around.
>
> 2016-05-13 15:16 GMT+01:00 Alberto Luaces
> <alu...@udc.es>:
Message has been deleted

Sebastian Messerschmidt

unread,
May 14, 2016, 4:35:12 AM5/14/16
to OpenSceneGraph Users
Am 13.05.2016 um 17:28 schrieb Bruno Oliveira:
I checked with valgrind, and effectively I did not find any memory leak.

The OS System Monitor (Ubuntu, as I said) consistently presents double the memory valgrind does (e.g., System Monitor says the app is using 2Gb, while valgrind states it is 1GB).

My data (a point cloud) is actually 1GB (binary format). I thought the 2GB came from OSG or OpenGL driver keeping a copy of my data for some reason.
Yes, because it is totally up to the driver to release this memory. This should not worry, since this memory is not lost or anything. It is simply reserved by the driver for possible future allocations and it will be swapped by the OS if not used.
I haven't seen any problems wiht OSG's memory use so far if the reference pointers are used in the correct way.

Cheers
Sebastian
Reply all
Reply to author
Forward
0 new messages