[Bf-blender-cvs] [4aaa1be] object_nodes: Use the geometry subtree in object nodes rather than the toplevel node tree.
Lukas Tönne
noreply at git.blender.org
Tue Nov 24 09:44:37 CET 2015
Commit: 4aaa1bed742220e01fabd458c6a770ae5c76e44c
Author: Lukas Tönne
Date: Fri Nov 20 10:12:35 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB4aaa1bed742220e01fabd458c6a770ae5c76e44c
Use the geometry subtree in object nodes rather than the toplevel node tree.
This is currently a hack, since only a single geotree is used. Eventually
all geometry subtree result should just be combined.
===================================================================
M source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 65a688a..7c0a6c6 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1706,7 +1706,7 @@ static void dm_ensure_display_normals(DerivedMesh *dm)
static DerivedMesh *mesh_calc_modifier_nodes(Scene *scene, Object *ob, bNodeTree *ntree)
{
Mesh *me = ob->data;
- DerivedMesh *dm;
+ DerivedMesh *dm, *result;
struct BVMEvalGlobals *globals = BVM_globals_create();
@@ -1720,7 +1720,14 @@ static DerivedMesh *mesh_calc_modifier_nodes(Scene *scene, Object *ob, bNodeTree
BVM_globals_free(globals);
- return dm;
+ /* 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
+ */
+ result = CDDM_copy(dm);
+ DM_release(dm);
+
+ return result;
}
/**
@@ -1784,14 +1791,26 @@ static void mesh_calc_modifiers(
deform_app_flags |= MOD_APPLY_USECACHE;
if (ob->nodetree) {
- DerivedMesh *result = mesh_calc_modifier_nodes(scene, ob, ob->nodetree);
+ bNodeTree *geotree = NULL;
+ DerivedMesh *dm = NULL;
- /* 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
+ /* XXX TODO not nice, we can potentially have multiple geometry
+ * subtrees and it's not clear yet how these would be combined.
+ * For the time being just select the first and expect it to be the only one ...
*/
- DerivedMesh *dm = CDDM_copy(result);
- DM_release(result);
+ {
+ bNode *node;
+ for (node = ob->nodetree->nodes.first; node; node = node->next) {
+ if (STREQ(node->idname, "GeometryNode")) {
+ geotree = (bNodeTree *)node->id;
+ break;
+ }
+ }
+ }
+
+ if (geotree) {
+ dm = mesh_calc_modifier_nodes(scene, ob, geotree);
+ }
*r_final = dm;
if (r_deform)
More information about the Bf-blender-cvs
mailing list