[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