[Bf-blender-cvs] [07a30be] object_nodes: Make an extra copy of the resulting node DM after eval.
Lukas Tönne
noreply at git.blender.org
Tue Nov 24 09:44:33 CET 2015
Commit: 07a30be179e9dc0ff7110e037d3549a4b17a8d5f
Author: Lukas Tönne
Date: Thu Nov 19 17:18:11 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB07a30be179e9dc0ff7110e037d3549a4b17a8d5f
Make an extra copy of the resulting node DM after eval.
This is necessary unfortunately because of the unreliable nature of dm->needsFree.
Without it the BKE_object_free_derived_caches function can destroy our static
empty DM at any point.
===================================================================
M source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index ad9975b..65a688a 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1784,7 +1784,15 @@ static void mesh_calc_modifiers(
deform_app_flags |= MOD_APPLY_USECACHE;
if (ob->nodetree) {
- DerivedMesh *dm = mesh_calc_modifier_nodes(scene, ob, ob->nodetree);
+ DerivedMesh *result = mesh_calc_modifier_nodes(scene, ob, ob->nodetree);
+
+ /* XXX this is stupid, but currently required because of
+ * the unreliability of dm->needsFree ...
+ * This flag gets set in places to force freeing of meshes, can't expect this to work
+ */
+ DerivedMesh *dm = CDDM_copy(result);
+ DM_release(result);
+
*r_final = dm;
if (r_deform)
*r_deform = CDDM_copy(dm);
More information about the Bf-blender-cvs
mailing list