[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