This is a bit tricky, because the smart pointer is actually used only for delayed deletion, and no users of the object are involved.
This code could probably be replaced with a pool allocator that flushes the entire pool after rendering is complete, to improve performance. --- common/gal/opengl/opengl_gal.cpp | 10 +++++----- include/gal/opengl/opengl_gal.h | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp index 330e390..7729d0c 100644 --- a/common/gal/opengl/opengl_gal.cpp +++ b/common/gal/opengl/opengl_gal.cpp @@ -1167,15 +1167,15 @@ void CALLBACK CombineCallback( GLdouble coords[3], GLdouble* vertex_data[4], GLfloat weight[4], GLdouble** dataOut, void* aData ) { - GLdouble* vertex = new GLdouble[3]; + std::unique_ptr<GLdouble[]> vertex( new GLdouble[3] ); OPENGL_GAL::TessParams* param = static_cast<OPENGL_GAL::TessParams*>( aData ); - // Save the pointer so we can delete it later - param->intersectPoints.push_back( boost::shared_array<GLdouble>( vertex ) ); + memcpy( vertex.get(), coords, 3 * sizeof(GLdouble) ); - memcpy( vertex, coords, 3 * sizeof(GLdouble) ); + *dataOut = vertex.get(); - *dataOut = vertex; + // Save the pointer so we can delete it later + param->intersectPoints.emplace_back( std::move( vertex ) ); } diff --git a/include/gal/opengl/opengl_gal.h b/include/gal/opengl/opengl_gal.h index 37ec5d8..42be14a 100644 --- a/include/gal/opengl/opengl_gal.h +++ b/include/gal/opengl/opengl_gal.h @@ -40,7 +40,6 @@ #include <wx/glcanvas.h> #include <map> -#include <boost/smart_ptr/shared_array.hpp> #include <memory> #ifndef CALLBACK @@ -244,7 +243,7 @@ public: VERTEX_MANAGER* vboManager; /// Intersect points, that have to be freed after tessellation - std::deque< boost::shared_array<GLdouble> >& intersectPoints; + std::deque< std::unique_ptr<GLdouble[]> >& intersectPoints; } TessParams; protected: @@ -288,7 +287,7 @@ private: /// The tessellator GLUtesselator* tesselator; /// Storage for intersecting points - std::deque< boost::shared_array<GLdouble> > tessIntersects; + std::deque< std::unique_ptr<GLdouble[]> > tessIntersects; /** * @brief Draw a quad for the line.
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp