samedi 26 juin 2010

OpenSceneGraph et cache

C'est tout bête, et pourtant il m'a fallu tâtonner un petit peu. Par défaut, OSG recharge chaque ressource en un nœud complétement séparé, même si le fichier est le même. Changer mes 100 gratte-ciel identiques prenait donc environ 10 secondes, et faisait grimper la mémoire à 600 megs.

Perte de temps, perte de mémoire, et c'est exactement pour cela qu'il existe l'objet "osgDB::ReaderWriter::Options". Voyez plutôt:


osg::ref_ptr<osgDB::ReaderWriter::Options>
cachingOptions(new osgDB::ReaderWriter::Options);
cachingOptions->setObjectCacheHint
(osgDB::ReaderWriter::Options::CACHE_ALL);

...

osg::Node * node =
osgDB::readNodeFile("truc.osg", cachingOptions.get());


Et voilà comment passer de 10 secondes à un chargement presque instantané, et de 600 à 280 megs. Facile!

Aucun commentaire: