我花了很多時間試圖找出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