Я потратил много времени, пытаясь разобраться с управлением памятью в OSG. У меня есть граф сцены с несколькими дочерними элементами (на самом деле LOD на основе октодерева).
Однако, когда мне нужно сбросить мою сцену (я просто хочу стереть ВСЕ узлы из сцены, а также стереть память), я использую
// 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, т.е. после очистки их со сцены я ожидаю, что моя память освободится. Однако этого не происходит: моя сцена фактически сбрасывается, все узлы исчезают из просмотра, но память остается занятой.
Тем не менее, когда я загружаю другую сцену в свой просмотрщик, память каким-то образом перезаписывается (т. Е. Использование памяти не увеличивается, поэтому утечки памяти нет, но используемая память всегда одна и та же)
У меня не может быть такого поведения, так как мне нужно тщательно контролировать использование памяти. Как я могу это сделать?