[Bf-blender-cvs] [f93bc76] : Backport revisions for the 2.70a release

Sergey Sharybin noreply at git.blender.org
Thu Apr 10 13:59:50 CEST 2014


Commit: f93bc7693a530632455d3ec7acc4bce54a1f85bc
Author: Sergey Sharybin
Date:   Wed Apr 9 18:54:13 2014 +0600
https://developer.blender.org/rBf93bc7693a530632455d3ec7acc4bce54a1f85bc

Backport revisions for the 2.70a release

d2660a0, 6e99fb0, 58c22d8, 83f2012 + ff21f6a, a7ed1db. cc6b106
7997e38, 9d4b54b, efb48fc, 3fc293c, 29f359c, 77c1d17, 92a539e,
c626462, f48828b, 6452d9f, 765d077, 74518b2, af16d46, 8da4936,
6babbf5, f0106d2, f88776b, ee72cba, 467596d, e21a7b3, eed3974,
71a2ff1, ccf9afd, 44d6c68, 30fdfc3, b69809c, b0a8e4c, bd57ec6,
3b0832d, 2a25676, 3977b76, fb25a86, 9bbb30b, 51abc2b, 0ebade5,
2c0e32f, 3deaf7d, ea01b24, c61eb64, f3db038, a6fb670, eedde31,
b66a954, 7ff123c, f5b79df, 7148c97, 54a8753, fcaa018, 4c73001,
7a21330, 07578be, e9a64e2, fd3de8b, ae792e9, b7712a7 + 3600622,
d9557d0, 6d973b8, 688257d, 4acb57a, 95ac6bc,

Also backported openmp changes to sculpt making it so number
of real CPU cores is used as a number of threads here.

===================================================================

M	extern/carve/carve-capi.cc
M	extern/carve/carve-util.cc
M	extern/carve/carve-util.h
M	extern/carve/include/carve/config.h
M	extern/carve/include/carve/mesh_ops.hpp
M	extern/carve/lib/triangulator.cpp
M	extern/carve/patches/clang_is_heap_fix.patch
M	extern/carve/patches/files/config.h
M	extern/carve/patches/series
M	extern/libmv/ChangeLog
M	extern/libmv/libmv/simple_pipeline/bundle.cc
M	extern/rangetree/range_tree.hh
M	intern/cycles/app/cycles_standalone.cpp
M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/device/device.cpp
M	intern/cycles/device/device.h
M	intern/cycles/device/device_cuda.cpp
M	intern/cycles/device/device_multi.cpp
M	intern/cycles/render/buffers.cpp
M	intern/cycles/render/buffers.h
M	intern/cycles/render/session.cpp
M	intern/cycles/render/session.h
M	release/scripts/addons
M	release/scripts/startup/bl_operators/uvcalc_smart_project.py
M	release/scripts/startup/bl_ui/space_clip.py
M	release/scripts/startup/bl_ui/space_image.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/BKE_curve.h
M	source/blender/blenkernel/BKE_depsgraph.h
M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/BKE_sequencer.h
M	source/blender/blenkernel/depsgraph_private.h
M	source/blender/blenkernel/intern/anim_sys.c
M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/depsgraph.c
M	source/blender/blenkernel/intern/displist.c
M	source/blender/blenkernel/intern/editderivedmesh.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/bmesh/intern/bmesh_mods.c
M	source/blender/bmesh/operators/bmo_inset.c
M	source/blender/bmesh/tools/bmesh_wireframe.c
M	source/blender/compositor/COM_defines.h
M	source/blender/compositor/operations/COM_FastGaussianBlurOperation.cpp
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_layout.c
M	source/blender/editors/mesh/editmesh_inset.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/sculpt_paint/paint_cursor.c
M	source/blender/editors/sculpt_paint/paint_intern.h
M	source/blender/editors/sculpt_paint/paint_utils.c
M	source/blender/editors/sculpt_paint/paint_vertex_proj.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/space_clip/clip_editor.c
M	source/blender/editors/space_clip/clip_ops.c
M	source/blender/editors/space_clip/space_clip.c
M	source/blender/editors/space_clip/tracking_ops.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/editors/space_outliner/outliner_intern.h
M	source/blender/editors/space_outliner/outliner_select.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_constraints.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/util/numinput.c
M	source/blender/freestyle/intern/geometry/FitCurve.cpp
M	source/blender/freestyle/intern/geometry/GeomUtils.cpp
M	source/blender/imbuf/intern/IMB_allocimbuf.h
M	source/blender/imbuf/intern/allocimbuf.c
M	source/blender/imbuf/intern/module.c
M	source/blender/imbuf/intern/moviecache.c
M	source/blender/imbuf/intern/tiff.c
M	source/blender/imbuf/intern/util.c
M	source/blender/makesrna/intern/rna_access.c
M	source/blender/makesrna/intern/rna_color.c
M	source/blender/makesrna/intern/rna_particle.c
M	source/blender/makesrna/intern/rna_rna.c
M	source/blender/python/mathutils/mathutils_geometry.c
M	source/blender/render/intern/source/bake.c
M	source/blender/render/intern/source/convertblender.c
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blender/windowmanager/intern/wm_window.c
M	source/gameengine/Converter/BL_BlenderDataConversion.cpp
M	source/gameengine/Converter/BlenderWorldInfo.cpp
M	source/gameengine/Converter/KX_BlenderSceneConverter.cpp
M	source/gameengine/Ketsji/KX_KetsjiEngine.cpp
M	source/gameengine/Rasterizer/RAS_2DFilterManager.cpp

===================================================================

diff --git a/extern/carve/carve-capi.cc b/extern/carve/carve-capi.cc
index a65d1a8..af9ecad 100644
--- a/extern/carve/carve-capi.cc
+++ b/extern/carve/carve-capi.cc
@@ -38,7 +38,7 @@ typedef std::pair<int, int> OrigIndex;
 typedef std::pair<MeshSet<3>::vertex_t *, MeshSet<3>::vertex_t *> VertexPair;
 typedef carve::interpolate::VertexAttr<OrigIndex> OrigVertMapping;
 typedef carve::interpolate::FaceAttr<OrigIndex> OrigFaceMapping;
-typedef carve::interpolate::FaceEdgeAttr<OrigIndex> OrigFaceEdgeMapping;
+typedef carve::interpolate::SwapableFaceEdgeAttr<OrigIndex> OrigFaceEdgeMapping;
 typedef carve::interpolate::SimpleFaceEdgeAttr<bool> FaceEdgeTriangulatedFlag;
 
 typedef struct CarveMeshDescr {
@@ -522,6 +522,39 @@ public:
 	}
 };
 
+template <typename Interpolator>
+void copyFaceEdgeAttrs(const MeshSet<3> *poly,
+                       Interpolator *old_interpolator,
+                       Interpolator *new_interpolator)
+{
+	for (MeshSet<3>::const_face_iter face_iter = poly->faceBegin();
+	     face_iter != poly->faceEnd();
+	     ++face_iter)
+	{
+		const MeshSet<3>::face_t *face = *face_iter;
+
+		for (int edge_index = 0;
+		     edge_index < face->nEdges();
+		     ++edge_index)
+		{
+			new_interpolator->copyAttribute(face,
+			                                edge_index,
+			                                old_interpolator);
+		}
+	}
+}
+
+template <typename Interpolator>
+void cleanupFaceEdgeAttrs(const MeshSet<3> *left,
+                          const MeshSet<3> *right,
+                          Interpolator *interpolator)
+{
+	Interpolator new_interpolator;
+	copyFaceEdgeAttrs(left, interpolator, &new_interpolator);
+	copyFaceEdgeAttrs(right, interpolator, &new_interpolator);
+	interpolator->swapAttributes(&new_interpolator);
+}
+
 }  // namespace
 
 CarveMeshDescr *carve_addMesh(struct ImportMeshData *import_data,
@@ -698,7 +731,15 @@ bool carve_performBooleanOperation(CarveMeshDescr *left_mesh,
 		// intersecting that meshes tessellation of operation result can't be
 		// done properly. The only way to make such situations working is to
 		// union intersecting meshes of the same operand.
-		carve_unionIntersections(&csg, &left, &right);
+		if (carve_unionIntersections(&csg, &left, &right)) {
+			cleanupFaceEdgeAttrs(left,
+			                     right,
+			                     &output_descr->face_edge_triangulated_flag);
+			cleanupFaceEdgeAttrs(left,
+			                     right,
+			                     &output_descr->orig_face_edge_mapping);
+		}
+
 		left_mesh->poly = left;
 		right_mesh->poly = right;
 
diff --git a/extern/carve/carve-util.cc b/extern/carve/carve-util.cc
index ac6dcbc..b268dae 100644
--- a/extern/carve/carve-util.cc
+++ b/extern/carve/carve-util.cc
@@ -486,14 +486,15 @@ MeshSet<3> *unionIntersectingMeshes(carve::csg::CSG *csg,
 
 // TODO(sergey): This function is to be totally re-implemented to make it
 // more clear what's going on and hopefully optimize it as well.
-void carve_unionIntersections(carve::csg::CSG *csg,
+bool carve_unionIntersections(carve::csg::CSG *csg,
                               MeshSet<3> **left_r,
                               MeshSet<3> **right_r)
 {
 	MeshSet<3> *left = *left_r, *right = *right_r;
+	bool changed = false;
 
 	if (left->meshes.size() == 1 && right->meshes.size() == 0) {
-		return;
+		return false;
 	}
 
 	MeshSet<3>::aabb_t leftAABB = left->getAABB();
@@ -503,14 +504,19 @@ void carve_unionIntersections(carve::csg::CSG *csg,
 	right = unionIntersectingMeshes(csg, right, leftAABB);
 
 	if (left != *left_r) {
+		changed = true;
 		delete *left_r;
 	}
 
-	if (right != *right_r)
+	if (right != *right_r) {
+		changed = true;
 		delete *right_r;
+	}
 
 	*left_r = left;
 	*right_r = right;
+
+	return changed;
 }
 
 static inline void add_newell_cross_v3_v3v3(const Vector &v_prev,
diff --git a/extern/carve/carve-util.h b/extern/carve/carve-util.h
index a658b2f..f650810 100644
--- a/extern/carve/carve-util.h
+++ b/extern/carve/carve-util.h
@@ -70,7 +70,7 @@ void carve_getRescaleMinMax(const carve::mesh::MeshSet<3> *left,
                             carve::geom3d::Vector *min,
                             carve::geom3d::Vector *max);
 
-void carve_unionIntersections(carve::csg::CSG *csg,
+bool carve_unionIntersections(carve::csg::CSG *csg,
                               carve::mesh::MeshSet<3> **left_r,
                               carve::mesh::MeshSet<3> **right_r);
 
@@ -115,8 +115,8 @@ namespace carve {
 						attrs.find(new_edge_iter->vert);
 					if (found == attrs.end()) {
 						for (const_edge_iter_t orig_edge_iter = orig_face->begin();
-							 orig_edge_iter != orig_face->end();
-							 ++orig_edge_iter)
+						     orig_edge_iter != orig_face->end();
+						     ++orig_edge_iter)
 						{
 							if ((orig_edge_iter->vert->v - new_edge_iter->vert->v).length2() < 1e-5) {
 								attrs[new_edge_iter->vert] = attrs[orig_edge_iter->vert];
@@ -236,6 +236,20 @@ namespace carve {
 				attrs[std::make_pair(f, e)] = attr;
 			}
 
+			void copyAttribute(const meshset_t::face_t *face,
+			                   unsigned edge,
+			                   SimpleFaceEdgeAttr<attr_t> *interpolator) {
+				key_t key(face, edge);
+				typename attrmap_t::const_iterator fv = interpolator->attrs.find(key);
+				if (fv != interpolator->attrs.end()) {
+					attrs[key] = (*fv).second;
+				}
+			}
+
+			void swapAttributes(SimpleFaceEdgeAttr<attr_t> *interpolator) {
+				attrs.swap(interpolator->attrs);
+			}
+
 			SimpleFaceEdgeAttr() : Interpolator() {
 			}
 
@@ -243,6 +257,25 @@ namespace carve {
 			}
 		};
 
+		template<typename attr_t>
+		class SwapableFaceEdgeAttr : public FaceEdgeAttr<attr_t> {
+		public:
+			typedef carve::mesh::MeshSet<3> meshset_t;
+
+			void copyAttribute(const meshset_t::face_t *face,
+			                   unsigned edge,
+			                   SwapableFaceEdgeAttr<attr_t> *interpolator) {
+				typename FaceEdgeAttr<attr_t>::key_t key(face, edge);
+				typename FaceEdgeAttr<attr_t>::attrmap_t::const_iterator fv = interpolator->attrs.find(key);
+				if (fv != interpolator->attrs.end()) {
+					this->attrs[key] = (*fv).second;
+				}
+			}
+
+			void swapAttributes(SwapableFaceEdgeAttr<attr_t> *interpolator) {
+				this->attrs.swap(interpolator->attrs);
+			}
+		};
 	}  // namespace interpolate
 }  // namespace carve
 
diff --git a/extern/carve/include/carve/config.h b/extern/carve/include/carve/config.h
index fdae2d2..3533c1a 100644
--- a/extern/carve/include/carve/config.h
+++ b/extern/carve/include/carve/config.h
@@ -10,3 +10,21 @@
 
 #  define HAVE_STDINT_H
 #endif
+
+// Support for latest Clang/LLVM on FreeBSD which does have different libcxx.
+//
+// TODO(sergey): Move it some some more generic header with platform-specific
+//               declarations.
+
+// Indicates whether __is_heap is available
+#undef HAVE_IS_HEAP
+
+#ifdef __GNUC__
+// NeyBSD doesn't have __is_heap
+#  ifndef __NetBSD__
+#    define HAVE_IS_HEAP
+#    ifdef _LIBCPP_VERSION
+#      define __is_heap is_heap
+#    endif  // _LIBCPP_VERSION
+#  endif  // !__NetBSD__
+#endif  // __GNUC__
diff --git a/extern/carve/include/carve/mesh_ops.hpp b/extern/carve/include/carve/mesh_ops.hpp
index 02b1bde..3b71feb 100644
--- a/extern/carve/include/carve/mesh_ops.hpp
+++ b/extern/carve/include/carve/mesh_ops.hpp
@@ -580,7 +580,7 @@ namespace carve {
           std::vector<VertexInfo *> queue;
 
           void checkheap() {
-#ifdef __GNUC__
+#if defined(HAVE_IS_HEAP)
             CARVE_ASSERT(std::__is_heap(queue.begin(), queue.end(), order_by_score()));
 #endif
           }
diff --git a/extern/carve/lib/triangulator.cpp b/extern/carve/lib/triangulator.cpp
index 820fed0..eb36e86 100644
--- a/extern/carve/lib/triangulator.cpp
+++ b/extern/carve/lib/triangulator.cpp
@@ -27,24 +27,6 @@
 
 #include <algorithm>
 
-// Support for latest Clang/LLVM on FreeBSD which does have different libcxx.
-//
-// TODO(sergey): Move it some some more generic header with platform-specific
-//               declarations.
-
-// Indicates whether __is_heap is available
-#undef HAVE_IS_HEAP
-
-#ifdef __GNUC__
-// NeyBSD doesn't have __is_heap
-#  ifndef __NetBSD__
-#    define HAVE_IS_HEAP
-#    ifdef _LIBCPP_VERSION
-#      define __is_heap is_heap
-#    endif  // _LIBCPP_VERSION
-#  endif  // !__NetBSD__
-#endif  // __GNUC__
-
 namespace {
   // private code related to hole patching.
 
diff --git a/extern/carve/patches/clang_is_heap_fix.patch b/extern/carve/patches/clang_is_heap_fix.patch
index a00710b..524a8e0 100644
--- a/extern/carve/patches/clang_is_heap_fix.patch
+++ b/extern/carve/patches/clang_is_heap_fix.patch
@@ -1,31 +1,27 @@
-diff -r 2e6e59022e6e lib/triangulator.cpp
---- a/lib/triangulator.cpp	Fri Nov 09 09:35:35 2012 +1100
-+++ b/lib/triangulator.cpp	Thu Jan 09 16:13:17 2014 +0600
-@@ -27,6 +27,23 @@
+diff -r e82d852e4fb0 include/carve/mesh_ops.hpp
+--- a/include/carve/mesh_ops.hpp	Wed Jan 15 13:16:14 2014 +1100
++++ b/include/carve/mesh_ops.hpp	Fri Mar 28 14:34:04 2014 +0600
+@@ -580,7 +580,7 @@
+           std::vector<VertexInfo *> queue;
  
- #include <algorithm>
+           void checkheap() {
+-#ifdef __GNUC__
++#if defined(HAVE_IS_HEAP)
+             CARVE_ASSERT(std::__is_heap(queue.begin(), queue.end(), order_by_score()));
+ #endif
+           }
+diff -r e82d852e4fb0 lib/triangulator.cpp
+--- a/lib/triangulator.cpp	Wed Jan 15 13:16:14 2014 +1100
++++ b/lib/triangulator.cpp	Fri Mar 28 14:34:04 2014 +0600
+@@ -27,7 +27,6 @@
  
-+// Support for latest Clang/LLVM on FreeBSD which does have different libcxx.
-+//
-+// TODO(sergey): Move it some some more generic header with platform-specific
-+//               declarations.
-+
-+// Indicates whether __is_heap is available
-+#undef HAVE_IS_HEAP
-+
-+#ifdef __GNUC__
-+// NeyBSD doesn't have __is_heap
-+#  ifndef __NetBSD__
-+#    define HAVE_IS_HEAP
-+#    ifdef _LIBCPP_VERSION
-+#      define __is_heap is_heap
-+#    endif  // _LIBCPP_VERSION
-+#  endif  // !__NetBSD__
-+#endif  // __GNUC__
+ #include <algorithm>
  
+-
  namespace {
    // private code related to hole patching.
-@@ -122,7 +139,7 @@
+ 
+@@ -122,7 +121,7 @@
      std::vector<vertex_info *> queue;
  
      void checkheap() {
diff --git a/extern/carve/patches/files/config.h b/extern/carve/p

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list