Ich habe viel Zeit damit verbracht, herauszufinden, OSG Speicherverwaltung. Ich habe eine Szene Graph mit mehreren Kindern (eigentlich eine LOD basierend auf einem Octree).OpenSceneGraph Speicherverbrauch beim Zurücksetzen der Szene
Allerdings, wenn ich meine Szene zurücksetzen müssen (Ich möchte nur alle Knoten von de Szene wischen und auch das Gedächtnis wischen), verwende ich
// 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);
, bevor ich dies tun, ich alle meine Knoten überprüfen mit einem NodeVisitor-Muster und fand heraus, dass ALLE meine Knoten den Referenzzähler 1 haben, dh nachdem ich sie aus der Szene gelöscht habe, erwarte ich, dass mein Speicher freigegeben wird. Dies geschieht jedoch nicht: Meine Szene wird tatsächlich zurückgesetzt, alle Knoten verschwinden aus dem Viewer, aber der Speicher bleibt belegt.
Dennoch, wenn ich eine andere Szene zu meinem Betrachter laden, wird der Speicher neu geschrieben irgendwie (dh die Speichernutzung nicht erhöht, daher gibt es keinen Speicherverlust, sondern verwendete Speicher ist immer die gleiche)
I kann dieses Verhalten nicht haben, da ich die Speichernutzung genau kontrollieren muss. Wie kann ich das machen?
Vielen Dank für Ihre Hinweise. Kannst du mir noch etwas mehr über die folgenden Dinge erzählen: Wie aktiviere ich osgDB-Optionen, um den Cache zu deaktivieren? Wie zerstöre ich speziell die Ansichten und GLC-Texte? – manatttta