From 10e14a3c21f66933052e135b7235db7a20ac2c53 Mon Sep 17 00:00:00 2001 From: elsid Date: Mon, 20 May 2024 16:52:50 +0200 Subject: [PATCH] Replace release by assigning nullptr release does not call a destructor if it's the last reference. This is not a right choice here. Even though the functions accept raw pointers they convert them into osg::ref_ptr. So it's ok to share the ownership. --- components/sceneutil/detourdebugdraw.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/components/sceneutil/detourdebugdraw.cpp b/components/sceneutil/detourdebugdraw.cpp index bd03c8383e..24d29b0b70 100644 --- a/components/sceneutil/detourdebugdraw.cpp +++ b/components/sceneutil/detourdebugdraw.cpp @@ -86,15 +86,16 @@ namespace SceneUtil void DebugDraw::end() { + const osg::ref_ptr drawArrays + = new osg::DrawArrays(mMode, 0, static_cast(mVertices->size())); + osg::ref_ptr geometry(new osg::Geometry); geometry->setStateSet(mStateSet); - geometry->setVertexArray(mVertices); - geometry->setColorArray(mColors, osg::Array::BIND_PER_VERTEX); - geometry->addPrimitiveSet(new osg::DrawArrays(mMode, 0, static_cast(mVertices->size()))); + geometry->addPrimitiveSet(drawArrays); + geometry->setVertexArray(std::exchange(mVertices, nullptr)); + geometry->setColorArray(std::exchange(mColors, nullptr), osg::Array::BIND_PER_VERTEX); mGroup.addChild(geometry); - mColors.release(); - mVertices.release(); } void DebugDraw::addVertex(osg::Vec3f&& position)