[Bf-blender-cvs] [19e627c] : Backport revisions for the final 2.70 release

Sergey Sharybin noreply at git.blender.org
Wed Mar 19 06:24:11 CET 2014


Commit: 19e627cab34a04a3d01b2e3a868b7bf91d56e8f9
Author: Sergey Sharybin
Date:   Tue Mar 18 18:54:41 2014 +0600
https://developer.blender.org/rB19e627cab34a04a3d01b2e3a868b7bf91d56e8f9

Backport revisions for the final 2.70 release

e6a359a, 9437927, a205700, d908c90, a6e3471, deef641,
4080673, 0141265, 0c6e744, f959e3d, ade6646, caf5d90,
5febb09, d08e6ab, 22873ea, 3d031d1, c450ea2, 60cab47,
ed26edb, df25dbf, f127f49.

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

M	extern/carve/lib/intersect_face_division.cpp
A	extern/carve/patches/face_hole_merge_workaround.patch
M	extern/carve/patches/series
M	intern/cycles/render/tables.cpp
M	release/scripts/addons
M	release/scripts/modules/bpy/ops.py
M	release/scripts/startup/bl_operators/uvcalc_smart_project.py
M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/bmesh/operators/bmo_connect.c
M	source/blender/bmesh/operators/bmo_subdivide.c
M	source/blender/bmesh/tools/bmesh_bisect_plane.c
M	source/blender/bmesh/tools/bmesh_path.c
M	source/blender/compositor/operations/COM_MapUVOperation.cpp
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_regions.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/makesdna/DNA_particle_types.h
M	source/blender/modifiers/intern/MOD_laplaciandeform.c
M	source/blender/render/intern/source/convertblender.c
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/extern/carve/lib/intersect_face_division.cpp b/extern/carve/lib/intersect_face_division.cpp
index e826948..0016724 100644
--- a/extern/carve/lib/intersect_face_division.cpp
+++ b/extern/carve/lib/intersect_face_division.cpp
@@ -719,6 +719,10 @@ namespace {
           unassigned--;
         }
       }
+
+      if (!removed.size())
+        throw carve::exception("Failed to merge holes");
+
       for (std::set<int>::iterator f = removed.begin(); f != removed.end(); ++f) {
         for (unsigned i = 0; i < containing_faces.size(); ++i) {
           containing_faces[i].erase(std::remove(containing_faces[i].begin(),
diff --git a/extern/carve/patches/face_hole_merge_workaround.patch b/extern/carve/patches/face_hole_merge_workaround.patch
new file mode 100644
index 0000000..834e03a
--- /dev/null
+++ b/extern/carve/patches/face_hole_merge_workaround.patch
@@ -0,0 +1,14 @@
+diff -r e82d852e4fb0 lib/intersect_face_division.cpp
+--- a/lib/intersect_face_division.cpp	Wed Jan 15 13:16:14 2014 +1100
++++ b/lib/intersect_face_division.cpp	Thu Mar 13 15:39:26 2014 +0600
+@@ -719,6 +719,10 @@
+           unassigned--;
+         }
+       }
++
++      if (!removed.size())
++        throw carve::exception("Failed to merge holes");
++
+       for (std::set<int>::iterator f = removed.begin(); f != removed.end(); ++f) {
+         for (unsigned i = 0; i < containing_faces.size(); ++i) {
+           containing_faces[i].erase(std::remove(containing_faces[i].begin(),
diff --git a/extern/carve/patches/series b/extern/carve/patches/series
index 62a24d9..286d594 100644
--- a/extern/carve/patches/series
+++ b/extern/carve/patches/series
@@ -9,3 +9,4 @@ interpolator_reorder.patch
 mesh_simplify_dissolve_edges.patch
 memory_leak_fix.patch
 mavc_fix.patch
+face_hole_merge_workaround.patch
diff --git a/intern/cycles/render/tables.cpp b/intern/cycles/render/tables.cpp
index be0d4af..a8d502c 100644
--- a/intern/cycles/render/tables.cpp
+++ b/intern/cycles/render/tables.cpp
@@ -39,7 +39,10 @@ void LookupTables::device_update(Device *device, DeviceScene *dscene)
 	if(!need_update)
 		return;
 
-	device->tex_alloc("__lookup_table", dscene->lookup_table);
+	device->tex_free(dscene->lookup_table);
+
+	if(lookup_tables.size() > 0)
+		device->tex_alloc("__lookup_table", dscene->lookup_table);
 
 	need_update = false;
 }
diff --git a/release/scripts/addons b/release/scripts/addons
index 8ad356e..6c32300 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 8ad356e3324cddef42d41f9b9b588ef1ebd2f8bf
+Subproject commit 6c32300be8cc8d48a3e02055dc43bea2ab98a525
diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py
index 1d71bff..e457c08 100644
--- a/release/scripts/modules/bpy/ops.py
+++ b/release/scripts/modules/bpy/ops.py
@@ -204,7 +204,10 @@ class BPyOpsSubModOp(object):
         import bpy
         idname = self.idname()
         as_string = op_as_string(idname)
-        op_class = getattr(bpy.types, idname)
+        # XXX You never quite know what you get from bpy.types, with operators... Operator and OperatorProperties
+        #     are shadowing each other, and not in the same way for native ops and py ones! See T39158.
+        # op_class = getattr(bpy.types, idname)
+        op_class = op_get_rna(idname)
         descr = op_class.bl_rna.description
         # XXX, workaround for not registering
         # every __doc__ to save time on load.
diff --git a/release/scripts/startup/bl_operators/uvcalc_smart_project.py b/release/scripts/startup/bl_operators/uvcalc_smart_project.py
index 74fb9e9..70df5a9 100644
--- a/release/scripts/startup/bl_operators/uvcalc_smart_project.py
+++ b/release/scripts/startup/bl_operators/uvcalc_smart_project.py
@@ -23,7 +23,7 @@ import bpy
 from bpy.types import Operator
 
 DEG_TO_RAD = 0.017453292519943295 # pi/180.0
-SMALL_NUM = 0.000001  # see bug [#31598] why we dont have smaller values
+SMALL_NUM = 0.00000001  # see bug [#31598] why we dont have smaller values
 
 global USER_FILL_HOLES
 global USER_FILL_HOLES_QUALITY
@@ -594,10 +594,10 @@ def packIslands(islandList):
             # recalc width and height
             w, h = maxx-minx, maxy-miny
 
-        if w < 0.00001 or h < 0.00001:
-            del islandList[islandIdx]
-            islandIdx -=1
-            continue
+        if w < SMALL_NUM:
+            w = SMALL_NUM
+        if h < SMALL_NUM:
+            h = SMALL_NUM
 
         """Save the offset to be applied later,
         we could apply to the UVs now and allign them to the bottom left hand area
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index d35ff80..ec59532 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -51,7 +51,7 @@ extern "C" {
 /* can be left blank, otherwise a,b,c... etc with no quotes */
 #define BLENDER_VERSION_CHAR   
 /* alpha/beta/rc/release, docs use this */
-#define BLENDER_VERSION_CYCLE   rc
+#define BLENDER_VERSION_CYCLE   release
 
 extern char versionstr[]; /* from blender.c */
 
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 55699bc..b8b126c 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -3620,6 +3620,7 @@ ImBuf *BKE_image_get_ibuf_with_name(Image *image, const char *name)
 				IMB_refImBuf(ibuf);
 				break;
 			}
+			IMB_moviecacheIter_step(iter);
 		}
 		IMB_moviecacheIter_free(iter);
 	}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 43dbc34..0970af4 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -331,6 +331,10 @@ void BKE_object_free_derived_caches(Object *ob)
 			free_path(ob->curve_cache->path);
 			ob->curve_cache->path = NULL;
 		}
+
+		/* Signal for viewport to run DAG workarounds. */
+		MEM_freeN(ob->curve_cache);
+		ob->curve_cache = NULL;
 	}
 }
 
@@ -1282,6 +1286,7 @@ static ParticleSystem *copy_particlesystem(ParticleSystem *psys)
 	psysn->pdd = NULL;
 	psysn->effectors = NULL;
 	psysn->tree = NULL;
+	psysn->bvhtree = NULL;
 	
 	BLI_listbase_clear(&psysn->pathcachebufs);
 	BLI_listbase_clear(&psysn->childcachebufs);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 3f4c536..e7c2bf6 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -109,6 +109,8 @@
 
 #endif // WITH_MOD_FLUID
 
+static ThreadRWMutex psys_bvhtree_rwlock = BLI_RWLOCK_INITIALIZER;
+
 /************************************************/
 /*			Reacting to system events			*/
 /************************************************/
@@ -2209,15 +2211,22 @@ static void psys_update_particle_bvhtree(ParticleSystem *psys, float cfra)
 	if (psys) {
 		PARTICLE_P;
 		int totpart = 0;
+		bool need_rebuild;
 
-		if (!psys->bvhtree || psys->bvhtree_frame != cfra) {
+		BLI_rw_mutex_lock(&psys_bvhtree_rwlock, THREAD_LOCK_READ);
+		need_rebuild = !psys->bvhtree || psys->bvhtree_frame != cfra;
+		BLI_rw_mutex_unlock(&psys_bvhtree_rwlock);
+		
+		if (need_rebuild) {
 			LOOP_SHOWN_PARTICLES {
 				totpart++;
 			}
 			
+			BLI_rw_mutex_lock(&psys_bvhtree_rwlock, THREAD_LOCK_WRITE);
+			
 			BLI_bvhtree_free(psys->bvhtree);
 			psys->bvhtree = BLI_bvhtree_new(totpart, 0.0, 4, 6);
-
+			
 			LOOP_SHOWN_PARTICLES {
 				if (pa->alive == PARS_ALIVE) {
 					if (pa->state.time == cfra)
@@ -2227,8 +2236,10 @@ static void psys_update_particle_bvhtree(ParticleSystem *psys, float cfra)
 				}
 			}
 			BLI_bvhtree_balance(psys->bvhtree);
-
+			
 			psys->bvhtree_frame = cfra;
+			
+			BLI_rw_mutex_unlock(&psys_bvhtree_rwlock);
 		}
 	}
 }
@@ -2546,7 +2557,11 @@ static void sph_evaluate_func(BVHTree *tree, ParticleSystem **psys, float co[3],
 			break;
 		}
 		else {
+			BLI_rw_mutex_lock(&psys_bvhtree_rwlock, THREAD_LOCK_READ);
+			
 			BLI_bvhtree_range_query(psys[i]->bvhtree, co, interaction_radius, callback, pfr);
+			
+			BLI_rw_mutex_unlock(&psys_bvhtree_rwlock);
 		}
 	}
 }
diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c
index 3d2c8c3..6e2bc0d 100644
--- a/source/blender/bmesh/operators/bmo_connect.c
+++ b/source/blender/bmesh/operators/bmo_connect.c
@@ -48,7 +48,7 @@ static int bm_face_connect_verts(BMesh *bm, BMFace *f)
 
 	BMIter liter;
 	BMFace *f_new;
-	BMLoop *l, *l_new;
+	BMLoop *l;
 	BMLoop *l_last;
 	unsigned int i;
 
@@ -96,6 +96,7 @@ static int bm_face_connect_verts(BMesh *bm, BMFace *f)
 	}
 
 	for (i = 0; i < STACK_SIZE(verts_pair); i++) {
+		BMLoop *l_new;
 		BMLoop *l_a, *l_b;
 
 		if ((l_a = BM_face_vert_share_loop(f, verts_pair[i][0])) &&
diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c
index 7235957..1e93340 100644
--- a/source/blender/bmesh/operators/bmo_subdivide.c
+++ b/source/blender/bmesh/operators/bmo_subdivide.c
@@ -135,7 +135,6 @@ typedef struct SubDPattern {
  * edge subdivision */
 static BMEdge *connect_smallest_face(BMesh *bm, BMVert *v_a, BMVert *v_b, BMFace **r_f_new)
 {
-	BMLoop *l_new;
 	BMLoop *l_a, *l_b;
 	BMFace *f;
 
@@ -146,6 +145,7 @@ static BMEdge *connect_smallest_face(BMesh *bm, BMVert *v_a, BMVert *v_b, BMFace
 
 	if (f) {
 		BMFace *f_new;
+		BMLoop *l_new;
 
 		f_new = BM_face_split(bm, f, l_a, l_b, &l_new, NULL, false);
 		
diff --git a/source/blender/bmesh/tools/bmesh_bisect_plane.c b/source/blender/bmesh/tools/bmesh_bisect_plane.c
index 7a33dc4..f431893 100644
--- a/source/blender/bmesh/tools/bmesh_bisect_plane.c
+++ b/source/blender/bmesh/tools/bmesh_bisect_plane.c
@@ -136,16 +136,14 @@ static void bm_face_bisect_verts(BMesh *bm, BMFace *f, const float plane[4], con
 	if ((STACK_SIZE(vert_split_arr) > 1) &&
 	    (use_dirs[0] && use_dirs[2]))
 	{
-		BMLoop *l_new;
-
 		if (LIKELY(STACK_SIZE(vert_split_arr) == 2)) {
+			BMLoop *l_new;
 			BMLoop *l_a, *l_b;
 
 			l_a = BM_face_vert_share_loop(f, vert_split_arr[0]);
 			l_b = BM_face_vert_share_loop(f, vert_split_arr[1]);
 
 			/* common case, just cut the face once */
-			l_new = NULL;
 			BM_face

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list