Я потратил много времени, пытаясь понять управление памятью 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, то есть после освобождения их от сцены я ожидаю, что моя память будет освобождена. Однако этого не происходит: моя сцена фактически сброшена, все узлы исчезают из зрителя, но память остается занятой.
Тем не менее, когда я загрузить другую сцену моего зрителя, память переписывается каким-то образом (то есть, использование памяти не увеличивается, следовательно, нет никакой утечки памяти, но используемая память всегда одинакова)
I не может иметь такого поведения, так как мне нужно тщательно контролировать использование памяти. Как я могу это сделать?
Благодарим вас за советы. Можете ли вы дать мне дополнительную информацию о следующем: как мне называть osgDB опции деактивировать кеш? Как я могу уничтожить представления и GLContexts специально? – manatttta