Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r--source/blender/blenkernel/intern/node.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 320bead1c61..1f8cd1ca152 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -27,6 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/blenkernel/intern/node.c
+ * \ingroup bke
+ */
+
+
#ifdef WITH_PYTHON
#include <Python.h>
#endif
@@ -1183,6 +1188,12 @@ bNodeTree *ntreeCopyTree(bNodeTree *ntree)
newtree= MEM_dupallocN(ntree);
copy_libblock_data(&newtree->id, &ntree->id, TRUE); /* copy animdata and ID props */
}
+
+ /* in case a running nodetree is copied */
+ newtree->init &= ~(NTREE_EXEC_INIT);
+ newtree->threadstack= NULL;
+ newtree->stack= NULL;
+
newtree->nodes.first= newtree->nodes.last= NULL;
newtree->links.first= newtree->links.last= NULL;
@@ -2766,8 +2777,8 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
/* ********** copy composite tree entirely, to allow threaded exec ******************* */
/* ***************** do NOT execute this in a thread! ****************** */
-/* returns localized composite tree for execution in threads */
-/* local tree then owns all compbufs */
+/* returns localized tree for execution in threads */
+/* local tree then owns all compbufs (for composite) */
bNodeTree *ntreeLocalize(bNodeTree *ntree)
{
bNodeTree *ltree;
@@ -2804,16 +2815,17 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
/* end animdata uglyness */
/* ensures only a single output node is enabled */
- ntreeSetOutput(ntree);
+ ntreeSetOutput(ltree);
for(node= ntree->nodes.first; node; node= node->next) {
/* store new_node pointer to original */
node->new_node->new_node= node;
- /* ensure new user input gets handled ok */
- node->need_exec= 0;
if(ntree->type==NTREE_COMPOSIT) {
+ /* ensure new user input gets handled ok, only composites (texture nodes will break, for painting since it uses no tags) */
+ node->need_exec= 0;
+
/* move over the compbufs */
/* right after ntreeCopyTree() oldsock pointers are valid */
@@ -2881,7 +2893,7 @@ void ntreeLocalSync(bNodeTree *localtree, bNodeTree *ntree)
}
}
}
- else if(ntree->type==NTREE_SHADER) {
+ else if(ELEM(ntree->type, NTREE_SHADER, NTREE_TEXTURE)) {
/* copy over contents of previews */
for(lnode= localtree->nodes.first; lnode; lnode= lnode->next) {
if(node_exists(ntree, lnode->new_node)) {