我花了很多时间试图找出OSG的内存管理。 我有一个场景图有几个孩子(实际上是一个基于八叉树的LOD)。OpenSceneGraph在重置场景时的内存使用情况
然而,当我需要重置我的场景(我只是想擦去德场景中的所有节点,也消除了内存),我用
// Clear main osg::Group root node
m_rootNode->removeChildren(0, m_rootNode->getNumChildren());
m_rootNode->dirtyBound();
// Clear Main view scene data from osg::Viewer
m_viewer->setSceneData(nullptr);
之前,我做这个,我检查我的所有节点使用NodeVisitor模式,发现所有节点的引用计数为1,即从场景中清除它们后,我希望我的内存被释放。但是,这不会发生:我的场景实际上被重置,所有节点都从查看器中消失,但内存仍然被占用。
然而,当我加载另一个场景给我的观众,内存被莫名其妙地改写(即,内存使用量没有增加,因此不存在内存泄漏,但使用的内存始终是相同的)
我不能有这种行为,因为我需要严密控制内存使用情况。我怎样才能做到这一点?
谢谢你的提示。你可以给我一些额外的见解:如何实际调用osgDB选项来停用缓存?我如何特别销毁视图和GLContexts? – manatttta