[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60468] trunk/blender/source/blender/ blenkernel/intern/node.c: Fix #36850, Material Node Editor Crash Always.
Lukas Toenne
lukas.toenne at googlemail.com
Tue Oct 1 10:18:16 CEST 2013
Revision: 60468
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60468
Author: lukastoenne
Date: 2013-10-01 08:18:16 +0000 (Tue, 01 Oct 2013)
Log Message:
-----------
Fix #36850, Material Node Editor Crash Always.
This problem was introduced with pynodes merge in r55373. It's caused by missing localization of node groups in shaders in cases where GLSL + node previews causes threading conflicts. I'm not quite sure why
we didn't do this before, but now all node groups also get localized recursively.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55373
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/node.c
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2013-10-01 07:02:18 UTC (rev 60467)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2013-10-01 08:18:16 UTC (rev 60468)
@@ -1933,7 +1933,13 @@
* Note: previews are not copied here.
*/
ltree = ntreeCopyTree_internal(ntree, FALSE, FALSE, FALSE);
-
+
+ for (node = ltree->nodes.first; node; node = node->next) {
+ if (node->type == NODE_GROUP && node->id) {
+ node->id = (ID *)ntreeLocalize((bNodeTree *)node->id);
+ }
+ }
+
if (adt) {
AnimData *ladt = BKE_animdata_from_id(<ree->id);
@@ -1978,10 +1984,24 @@
/* we have to assume the editor already changed completely */
void ntreeLocalMerge(bNodeTree *localtree, bNodeTree *ntree)
{
- if (localtree && ntree) {
- if (ntree->typeinfo->local_merge)
- ntree->typeinfo->local_merge(localtree, ntree);
+ bNode *node;
+
+ if (localtree) {
+ if (ntree) {
+ if (ntree->typeinfo->local_merge)
+ ntree->typeinfo->local_merge(localtree, ntree);
+ }
+ for (node = localtree->nodes.first; node; node = node->next) {
+ if (node->type == NODE_GROUP && node->id) {
+ bNodeTree *localgroup = (bNodeTree *)node->id;
+ /* not passing original node tree for node group merge,
+ * because there may be multiple instances using the same group tree.
+ */
+ ntreeLocalMerge(localgroup, NULL);
+ }
+ }
+
ntreeFreeTree_ex(localtree, FALSE);
MEM_freeN(localtree);
}
More information about the Bf-blender-cvs
mailing list