From d01e9ca2e61d3e4fcb14b6a86d4d8ebd24e0b802 Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 29 Jul 2021 17:51:35 +0100 Subject: [PATCH] Use owning refs in some places Avoid explicit deletes of ref-counted SGMaterialCache --- simgear/scene/model/model.cxx | 3 +-- simgear/scene/tgdb/SGOceanTile.cxx | 3 +-- simgear/scene/tgdb/SGTileGeometryBin.hxx | 6 +++--- simgear/scene/tgdb/obj.cxx | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/simgear/scene/model/model.cxx b/simgear/scene/model/model.cxx index 7ca4d858..cd2fc8f1 100644 --- a/simgear/scene/model/model.cxx +++ b/simgear/scene/model/model.cxx @@ -355,9 +355,8 @@ ref_ptr instantiateMaterialEffects(osg::Node* modelGroup, if (options->getMaterialLib()) { const SGGeod loc = SGGeod(options->getLocation()); - SGMaterialCache* matcache = options->getMaterialLib()->generateMatCache(loc, options); + osg::ref_ptr matcache = options->getMaterialLib()->generateMatCache(loc, options); SGMaterial* mat = matcache->find(options->getMaterialName()); - delete matcache; if (mat) { effect = new SGPropertyNode(); diff --git a/simgear/scene/tgdb/SGOceanTile.cxx b/simgear/scene/tgdb/SGOceanTile.cxx index bbaef02c..7ee877eb 100644 --- a/simgear/scene/tgdb/SGOceanTile.cxx +++ b/simgear/scene/tgdb/SGOceanTile.cxx @@ -280,9 +280,8 @@ osg::Node* SGOceanTile(const SGBucket& b, SGMaterialLib *matlib, int latPoints, double tex_width = 1000.0; // find Ocean material in the properties list - SGMaterialCache* matcache = matlib->generateMatCache(b.get_center(), 0); + osg::ref_ptr matcache = matlib->generateMatCache(b.get_center(), 0); SGMaterial* mat = matcache->find( "Ocean" ); - delete matcache; if ( mat != NULL ) { // set the texture width and height values for this diff --git a/simgear/scene/tgdb/SGTileGeometryBin.hxx b/simgear/scene/tgdb/SGTileGeometryBin.hxx index 7e862ff8..a75ecce3 100644 --- a/simgear/scene/tgdb/SGTileGeometryBin.hxx +++ b/simgear/scene/tgdb/SGTileGeometryBin.hxx @@ -274,13 +274,13 @@ public: return true; } - osg::Node* getSurfaceGeometry(SGMaterialCache* matcache, bool useVBOs) const + osg::ref_ptr getSurfaceGeometry(SGMaterialCache* matcache, bool useVBOs) const { if (materialTriangleMap.empty()) return 0; - EffectGeode* eg = NULL; - osg::Group* group = (materialTriangleMap.size() > 1 ? new osg::Group : NULL); + osg::ref_ptr eg = NULL; + osg::ref_ptr group = (materialTriangleMap.size() > 1 ? new osg::Group : NULL); if (group) { group->setName("surfaceGeometryGroup"); } diff --git a/simgear/scene/tgdb/obj.cxx b/simgear/scene/tgdb/obj.cxx index 095cb7a6..b76055cf 100644 --- a/simgear/scene/tgdb/obj.cxx +++ b/simgear/scene/tgdb/obj.cxx @@ -120,7 +120,7 @@ SGLoadBTG(const std::string& path, const simgear::SGReaderWriterOptions* options if (!tileGeometryBin->insertSurfaceGeometry(tile, matcache)) return NULL; - osg::Node* node = tileGeometryBin->getSurfaceGeometry(matcache, useVBOs); + osg::ref_ptr node = tileGeometryBin->getSurfaceGeometry(matcache, useVBOs); if (node) { // Get base node stateset