私は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オプションを呼び出すと、キャッシュを非アクティブにするにはどうすればよいですか?ビューとGLContextを具体的にどのように破壊するのですか? – manatttta