[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48596] trunk/blender/extern/carve: fix for carve memory leak, update carve to hg bf36d92ff093
Campbell Barton
ideasman42 at gmail.com
Wed Jul 4 18:07:01 CEST 2012
Revision: 48596
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48596
Author: campbellbarton
Date: 2012-07-04 16:07:01 +0000 (Wed, 04 Jul 2012)
Log Message:
-----------
fix for carve memory leak, update carve to hg bf36d92ff093
reported: http://code.google.com/p/carve/issues/detail?id=33
Modified Paths:
--------------
trunk/blender/extern/carve/include/carve/csg.hpp
trunk/blender/extern/carve/include/carve/polyline_decl.hpp
trunk/blender/extern/carve/include/carve/rtree.hpp
trunk/blender/extern/carve/lib/csg_data.hpp
trunk/blender/extern/carve/lib/csg_detail.hpp
trunk/blender/extern/carve/lib/intersect.cpp
trunk/blender/extern/carve/patches/strict_flags.patch
Modified: trunk/blender/extern/carve/include/carve/csg.hpp
===================================================================
--- trunk/blender/extern/carve/include/carve/csg.hpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/include/carve/csg.hpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -174,34 +174,34 @@
void groupIntersections();
- void _generateVertexVertexIntersections(carve::mesh::MeshSet<3>::vertex_t *va,
- carve::mesh::MeshSet<3>::edge_t *eb);
- void generateVertexVertexIntersections(carve::mesh::MeshSet<3>::face_t *a,
- const std::vector<carve::mesh::MeshSet<3>::face_t *> &b);
+ void _generateVertexVertexIntersections(meshset_t::vertex_t *va,
+ meshset_t::edge_t *eb);
+ void generateVertexVertexIntersections(meshset_t::face_t *a,
+ const std::vector<meshset_t::face_t *> &b);
- void _generateVertexEdgeIntersections(carve::mesh::MeshSet<3>::vertex_t *va,
- carve::mesh::MeshSet<3>::edge_t *eb);
- void generateVertexEdgeIntersections(carve::mesh::MeshSet<3>::face_t *a,
- const std::vector<carve::mesh::MeshSet<3>::face_t *> &b);
+ void _generateVertexEdgeIntersections(meshset_t::vertex_t *va,
+ meshset_t::edge_t *eb);
+ void generateVertexEdgeIntersections(meshset_t::face_t *a,
+ const std::vector<meshset_t::face_t *> &b);
- void _generateEdgeEdgeIntersections(carve::mesh::MeshSet<3>::edge_t *ea,
- carve::mesh::MeshSet<3>::edge_t *eb);
- void generateEdgeEdgeIntersections(carve::mesh::MeshSet<3>::face_t *a,
- const std::vector<carve::mesh::MeshSet<3>::face_t *> &b);
+ void _generateEdgeEdgeIntersections(meshset_t::edge_t *ea,
+ meshset_t::edge_t *eb);
+ void generateEdgeEdgeIntersections(meshset_t::face_t *a,
+ const std::vector<meshset_t::face_t *> &b);
- void _generateVertexFaceIntersections(carve::mesh::MeshSet<3>::face_t *fa,
- carve::mesh::MeshSet<3>::edge_t *eb);
- void generateVertexFaceIntersections(carve::mesh::MeshSet<3>::face_t *a,
- const std::vector<carve::mesh::MeshSet<3>::face_t *> &b);
+ void _generateVertexFaceIntersections(meshset_t::face_t *fa,
+ meshset_t::edge_t *eb);
+ void generateVertexFaceIntersections(meshset_t::face_t *a,
+ const std::vector<meshset_t::face_t *> &b);
- void _generateEdgeFaceIntersections(carve::mesh::MeshSet<3>::face_t *fa,
- carve::mesh::MeshSet<3>::edge_t *eb);
- void generateEdgeFaceIntersections(carve::mesh::MeshSet<3>::face_t *a,
- const std::vector<carve::mesh::MeshSet<3>::face_t *> &b);
+ void _generateEdgeFaceIntersections(meshset_t::face_t *fa,
+ meshset_t::edge_t *eb);
+ void generateEdgeFaceIntersections(meshset_t::face_t *a,
+ const std::vector<meshset_t::face_t *> &b);
- void generateIntersectionCandidates(carve::mesh::MeshSet<3> *a,
+ void generateIntersectionCandidates(meshset_t *a,
const face_rtree_t *a_node,
- carve::mesh::MeshSet<3> *b,
+ meshset_t *b,
const face_rtree_t *b_node,
face_pairs_t &face_pairs,
bool descend_a = true);
@@ -287,7 +287,7 @@
* @param[out] out_loops A list of grouped face loops.
*/
void groupFaceLoops(
- carve::mesh::MeshSet<3> *src,
+ meshset_t *src,
FaceLoopList &face_loops,
const detail::LoopEdges &loop_edges,
const V2Set &no_cross,
Modified: trunk/blender/extern/carve/include/carve/polyline_decl.hpp
===================================================================
--- trunk/blender/extern/carve/include/carve/polyline_decl.hpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/include/carve/polyline_decl.hpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -138,6 +138,11 @@
PolylineSet(const std::vector<carve::geom3d::Vector> &points);
PolylineSet() {
}
+ ~PolylineSet() {
+ for (line_iter i = lines.begin(); i != lines.end(); ++i) {
+ delete *i;
+ }
+ }
template<typename iter_t>
void addPolyline(bool closed, iter_t begin, iter_t end);
Modified: trunk/blender/extern/carve/include/carve/rtree.hpp
===================================================================
--- trunk/blender/extern/carve/include/carve/rtree.hpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/include/carve/rtree.hpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -49,8 +49,6 @@
aabb_t getAABB() const { return bbox; }
-
-
struct data_aabb_t {
aabb_t bbox;
data_t data;
@@ -164,8 +162,19 @@
_fill(begin, end, typename std::iterator_traits<iter_t>::value_type());
}
+ ~RTreeNode() {
+ if (child) {
+ RTreeNode *next = child;
+ while (next) {
+ RTreeNode *curr = next;
+ next = next->sibling;
+ delete curr;
+ }
+ }
+ }
+
// functor for ordering nodes by increasing aabb midpoint, along a specified axis.
struct aabb_cmp_mid {
size_t dim;
Modified: trunk/blender/extern/carve/lib/csg_data.hpp
===================================================================
--- trunk/blender/extern/carve/lib/csg_data.hpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/lib/csg_data.hpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -30,7 +30,7 @@
VVMap vmap;
// map from intersected edge to intersection points.
- EVSMap emap;
+ EIntMap emap;
// map from intersected face to intersection points.
FVSMap fmap;
@@ -39,7 +39,7 @@
VFSMap fmap_rev;
// created by divideEdges().
- // holds, for each edge, a
+ // holds, for each edge, an ordered vector of inserted vertices.
EVVMap divided_edges;
// created by faceSplitEdges.
Modified: trunk/blender/extern/carve/lib/csg_detail.hpp
===================================================================
--- trunk/blender/extern/carve/lib/csg_detail.hpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/lib/csg_detail.hpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -24,30 +24,32 @@
namespace carve {
namespace csg {
namespace detail {
+ typedef std::map<carve::mesh::MeshSet<3>::vertex_t *,
+ std::set<std::pair<carve::mesh::MeshSet<3>::face_t *, double> > > EdgeIntInfo;
- typedef std::unordered_set<carve::mesh::MeshSet<3>::vertex_t *> VSet;
- typedef std::unordered_set<carve::mesh::MeshSet<3>::face_t *> FSet;
+ typedef std::unordered_set<carve::mesh::MeshSet<3>::vertex_t *> VSet;
+ typedef std::unordered_set<carve::mesh::MeshSet<3>::face_t *> FSet;
- typedef std::set<carve::mesh::MeshSet<3>::vertex_t *> VSetSmall;
- typedef std::set<csg::V2> V2SetSmall;
- typedef std::set<carve::mesh::MeshSet<3>::face_t *> FSetSmall;
+ typedef std::set<carve::mesh::MeshSet<3>::vertex_t *> VSetSmall;
+ typedef std::set<csg::V2> V2SetSmall;
+ typedef std::set<carve::mesh::MeshSet<3>::face_t *> FSetSmall;
- typedef std::unordered_map<carve::mesh::MeshSet<3>::vertex_t *, VSetSmall> VVSMap;
- typedef std::unordered_map<carve::mesh::MeshSet<3>::edge_t *, VSetSmall> EVSMap;
- typedef std::unordered_map<carve::mesh::MeshSet<3>::face_t *, VSetSmall> FVSMap;
+ typedef std::unordered_map<carve::mesh::MeshSet<3>::vertex_t *, VSetSmall> VVSMap;
+ typedef std::unordered_map<carve::mesh::MeshSet<3>::edge_t *, EdgeIntInfo> EIntMap;
+ typedef std::unordered_map<carve::mesh::MeshSet<3>::face_t *, VSetSmall> FVSMap;
- typedef std::unordered_map<carve::mesh::MeshSet<3>::vertex_t *, FSetSmall> VFSMap;
- typedef std::unordered_map<carve::mesh::MeshSet<3>::face_t *, V2SetSmall> FV2SMap;
+ typedef std::unordered_map<carve::mesh::MeshSet<3>::vertex_t *, FSetSmall> VFSMap;
+ typedef std::unordered_map<carve::mesh::MeshSet<3>::face_t *, V2SetSmall> FV2SMap;
- typedef std::unordered_map<
- carve::mesh::MeshSet<3>::edge_t *,
- std::vector<carve::mesh::MeshSet<3>::vertex_t *> > EVVMap;
+ typedef std::unordered_map<
+ carve::mesh::MeshSet<3>::edge_t *,
+ std::vector<carve::mesh::MeshSet<3>::vertex_t *> > EVVMap;
typedef std::unordered_map<carve::mesh::MeshSet<3>::vertex_t *,
std::vector<carve::mesh::MeshSet<3>::edge_t *> > VEVecMap;
- class LoopEdges : public std::unordered_map<V2, std::list<FaceLoop *> > {
+ class LoopEdges : public std::unordered_map<V2, std::list<FaceLoop *> > {
typedef std::unordered_map<V2, std::list<FaceLoop *> > super;
public:
Modified: trunk/blender/extern/carve/lib/intersect.cpp
===================================================================
--- trunk/blender/extern/carve/lib/intersect.cpp 2012-07-04 16:06:04 UTC (rev 48595)
+++ trunk/blender/extern/carve/lib/intersect.cpp 2012-07-04 16:07:01 UTC (rev 48596)
@@ -41,6 +41,7 @@
#include <carve/timing.hpp>
#include <carve/colour.hpp>
+#include <memory>
@@ -114,7 +115,7 @@
ordered_vertices.reserve(std::distance(beg, end));
for (; beg != end; ++beg) {
- carve::mesh::MeshSet<3>::vertex_t *v = (*beg);
+ carve::mesh::MeshSet<3>::vertex_t *v = *beg;
ordered_vertices.push_back(std::make_pair(carve::geom::dot(v->v - base, dir), v));
}
@@ -130,8 +131,39 @@
}
}
+ template<typename iter_t>
+ void orderEdgeIntersectionVertices(iter_t beg, const iter_t end,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list