From dc907ef876b128c9767394d00dfc719d55ba077e Mon Sep 17 00:00:00 2001 From: Jens Verwiebe Date: Mon, 17 Oct 2011 16:36:03 +0000 Subject: [PATCH 1/7] Allow symlinks in user_scripts, this fixes raised exeption in copy_prefs for version_updates --- release/scripts/startup/bl_operators/wm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 63104ca00c3..a539e2693c1 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1161,7 +1161,7 @@ class WM_OT_copy_prev_settings(Operator): elif not os.path.isdir(path_src): self.report({'ERROR'}, "Source path %r exists" % path_src) else: - shutil.copytree(path_src, path_dst) + shutil.copytree(path_src, path_dst, symlinks=True) # in 2.57 and earlier windows installers, system scripts were copied # into the configuration directory, don't want to copy those From 408a2c62b974c10c7d19ad419dfca479dec59f65 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 19 Oct 2011 00:41:48 +0000 Subject: [PATCH 2/7] fix for armatures in wire draw mode not displaying in solid mode. note, this isn't a showstopper bugfix. --- source/blender/editors/space_view3d/drawarmature.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 83a695ba72a..eed86467eaa 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1839,7 +1839,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, } /* wire draw over solid only in posemode */ - if ((dt <= OB_WIRE) || (arm->flag & ARM_POSEMODE) || (arm->drawtype==ARM_LINE)) { + if ((dt <= OB_WIRE) || (arm->flag & ARM_POSEMODE) || ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) { /* draw line check first. we do selection indices */ if ELEM(arm->drawtype, ARM_LINE, ARM_WIRE) { if (arm->flag & ARM_POSEMODE) @@ -2512,7 +2512,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in if(v3d->flag2 & V3D_RENDER_OVERRIDE) return 1; - if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) { + if(dt>OB_WIRE && !ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) { /* we use color for solid lighting */ glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); glEnable(GL_COLOR_MATERIAL); From 0d7bd0f9b63db4c7891137d18ae6a40e652e190f Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Wed, 19 Oct 2011 17:08:35 +0000 Subject: [PATCH 3/7] Adds an update flag to the bNode struct (similar to bNodeTree->update). This prevents access to non-existent typeinfo during type initialization, when node types have been removed and such nodes are deleted from older files. All blenkernel functions now only set the node->update flag instead of directly calling the update function. All operators, etc. calling blenkernel functions to modify nodes should make a ntreeUpdate call afterward (they already did that anyway). Editor/RNA/renderer/etc. high-level functions still can do immediate updates by using nodeUpdate and nodeUpdateID (replacing NodeTagChanged/NodeTagIDChanged respectively). These old functions were previously used only for setting compositor node needexec flags and clearing cached data, but have become generic update functions that require type-specific functionality (i.e. a valid typeinfo struct). --- source/blender/blenkernel/BKE_node.h | 7 ++- source/blender/blenkernel/intern/depsgraph.c | 2 +- source/blender/blenkernel/intern/image.c | 2 +- source/blender/blenkernel/intern/node.c | 52 +++++++++++-------- .../blender/editors/render/render_internal.c | 4 +- source/blender/editors/space_node/node_draw.c | 4 +- source/blender/editors/space_node/node_edit.c | 22 ++++---- .../blender/editors/space_node/space_node.c | 4 +- source/blender/makesdna/DNA_node_types.h | 11 +++- source/blender/makesrna/intern/rna_nodetree.c | 4 +- .../nodes/composite/node_composite_tree.c | 27 ++++++---- source/blender/nodes/intern/node_common.c | 6 ++- .../blender/nodes/shader/node_shader_tree.c | 7 ++- .../blender/nodes/texture/node_texture_tree.c | 2 +- .../blender/render/intern/source/pipeline.c | 2 +- 15 files changed, 92 insertions(+), 64 deletions(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 1de3c295f4d..b75a8cb29ec 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -346,9 +346,8 @@ struct bNode *nodeGetActiveID(struct bNodeTree *ntree, short idtype); int nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id); void nodeClearActiveID(struct bNodeTree *ntree, short idtype); -void NodeTagChanged(struct bNodeTree *ntree, struct bNode *node); -int NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id); -void ntreeClearTags(struct bNodeTree *ntree); +void nodeUpdate(struct bNodeTree *ntree, struct bNode *node); +int nodeUpdateID(struct bNodeTree *ntree, struct ID *id); void nodeFreePreview(struct bNode *node); @@ -601,7 +600,7 @@ void ntreeCompositTagRender(struct Scene *sce); int ntreeCompositTagAnimated(struct bNodeTree *ntree); void ntreeCompositTagGenerators(struct bNodeTree *ntree); void ntreeCompositForceHidden(struct bNodeTree *ntree, struct Scene *scene); - +void ntreeCompositClearTags(struct bNodeTree *ntree); /* ************** TEXTURE NODES *************** */ diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 80a40c0a3a3..8d0c20ecc52 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -1962,7 +1962,7 @@ static void dag_tag_renderlayers(Scene *sce, unsigned int lay) if(node->id==(ID *)sce) { SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1); if(srl && (srl->lay & lay_changed)) - NodeTagChanged(sce->nodetree, node); + nodeUpdate(sce->nodetree, node); } } } diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index cf8f96c143a..1de581034a4 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -1514,7 +1514,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal) Scene *scene; for(scene= G.main->scene.first; scene; scene= scene->id.next) { if(scene->nodetree) { - NodeTagIDChanged(scene->nodetree, &ima->id); + nodeUpdateID(scene->nodetree, &ima->id); } } } diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index f0be3c99f13..a46b358798a 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -184,7 +184,7 @@ bNodeSocket *nodeAddSocket(bNodeTree *ntree, bNode *node, int in_out, const char else if (in_out==SOCK_OUT) BLI_addtail(&node->outputs, sock); - ntree->update |= NTREE_UPDATE_NODES; + node->update |= NODE_UPDATE; return sock; } @@ -197,7 +197,7 @@ bNodeSocket *nodeInsertSocket(bNodeTree *ntree, bNode *node, int in_out, bNodeSo else if (in_out==SOCK_OUT) BLI_insertlinkbefore(&node->outputs, next_sock, sock); - ntree->update |= NTREE_UPDATE_NODES; + node->update |= NODE_UPDATE; return sock; } @@ -221,7 +221,7 @@ void nodeRemoveSocket(bNodeTree *ntree, bNode *node, bNodeSocket *sock) MEM_freeN(sock->default_value); MEM_freeN(sock); - ntree->update |= NTREE_UPDATE_NODES; + node->update |= NODE_UPDATE; } void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node) @@ -246,7 +246,7 @@ void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node) BLI_freelistN(&node->outputs); - ntree->update |= NTREE_UPDATE_NODES; + node->update |= NODE_UPDATE; } /* finds a node based on its name */ @@ -823,7 +823,7 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node) if(link->fromnode==node) { lb= &node->outputs; if (link->tonode) - NodeTagChanged(ntree, link->tonode); + link->tonode->update |= NODE_UPDATE; } else if(link->tonode==node) lb= &node->inputs; @@ -1495,18 +1495,19 @@ void ntreeUpdateTree(bNodeTree *ntree) /* update individual nodes */ for (n=0; n < totnodes; ++n) { node = deplist[n]; - if (ntreetype->update_node) - ntreetype->update_node(ntree, node); - else if (node->typeinfo->updatefunc) - node->typeinfo->updatefunc(ntree, node); + + /* node tree update tags override individual node update flags */ + if ((node->update & NODE_UPDATE) || (ntree->update & NTREE_UPDATE)) { + if (ntreetype->update_node) + ntreetype->update_node(ntree, node); + else if (node->typeinfo->updatefunc) + node->typeinfo->updatefunc(ntree, node); + } + /* clear update flag */ + node->update = 0; } MEM_freeN(deplist); - - /* ensures only a single output node is enabled, texnode allows multiple though */ - if(ntree->type!=NTREE_TEXTURE) - ntreeSetOutput(ntree); - } /* general tree updates */ @@ -1518,6 +1519,9 @@ void ntreeUpdateTree(bNodeTree *ntree) if (ntreetype->update) ntreetype->update(ntree); else { + /* Trees can be associated with a specific node type (i.e. group nodes), + * in that case a tree update function may be defined by that node type. + */ bNodeType *ntype= node_get_type(ntree, ntree->nodetype); if (ntype && ntype->updatetreefunc) ntype->updatetreefunc(ntree); @@ -1530,24 +1534,24 @@ void ntreeUpdateTree(bNodeTree *ntree) ntree->update = 0; } -void NodeTagChanged(bNodeTree *ntree, bNode *node) +void nodeUpdate(bNodeTree *ntree, bNode *node) { - bNodeTreeType *ntreetype = ntreeGetType(ntree->type); + bNodeTreeType *ntreetype= ntreeGetType(ntree->type); - /* extra null pointer checks here because this is called when unlinking - unknown nodes on file load, so typeinfo pointers may not be set */ - if (ntreetype && ntreetype->update_node) + if (ntreetype->update_node) ntreetype->update_node(ntree, node); - else if (node->typeinfo && node->typeinfo->updatefunc) + else if (node->typeinfo->updatefunc) node->typeinfo->updatefunc(ntree, node); + /* clear update flag */ + node->update = 0; } -int NodeTagIDChanged(bNodeTree *ntree, ID *id) +int nodeUpdateID(bNodeTree *ntree, ID *id) { bNodeTreeType *ntreetype; bNode *node; int change = FALSE; - + if(ELEM(NULL, id, ntree)) return change; @@ -1558,6 +1562,8 @@ int NodeTagIDChanged(bNodeTree *ntree, ID *id) if(node->id==id) { change = TRUE; ntreetype->update_node(ntree, node); + /* clear update flag */ + node->update = 0; } } } @@ -1567,6 +1573,8 @@ int NodeTagIDChanged(bNodeTree *ntree, ID *id) change = TRUE; if (node->typeinfo->updatefunc) node->typeinfo->updatefunc(ntree, node); + /* clear update flag */ + node->update = 0; } } } diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 0b350e3afd0..d80f3fef125 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -398,13 +398,13 @@ static void render_endjob(void *rjv) ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1); /* XXX above function sets all tags in nodes */ - ntreeClearTags(rj->scene->nodetree); + ntreeCompositClearTags(rj->scene->nodetree); /* potentially set by caller */ rj->scene->r.scemode &= ~R_NO_FRAME_UPDATE; if(rj->srl) { - NodeTagIDChanged(rj->scene->nodetree, &rj->scene->id); + nodeUpdateID(rj->scene->nodetree, &rj->scene->id); WM_main_add_notifier(NC_NODE|NA_EDITED, rj->scene); } diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index e713ed5a678..baa47d4147e 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -102,12 +102,12 @@ void ED_node_changed_update(ID *id, bNode *node) WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id); } else if(treetype==NTREE_COMPOSIT) { - NodeTagChanged(edittree, node); + nodeUpdate(edittree, node); /* don't use NodeTagIDChanged, it gives far too many recomposites for image, scene layers, ... */ node= node_tree_get_editgroup(nodetree); if(node) - NodeTagIDChanged(nodetree, node->id); + nodeUpdateID(nodetree, node->id); WM_main_add_notifier(NC_SCENE|ND_NODES, id); } diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index baa755ef841..85942901c00 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -496,17 +496,17 @@ void snode_set_context(SpaceNode *snode, Scene *scene) node_tree_from_ID(snode->id, &snode->nodetree, &snode->edittree, NULL); } -static void snode_tag_changed(SpaceNode *snode, bNode *node) +static void snode_update(SpaceNode *snode, bNode *node) { bNode *gnode; if (node) - NodeTagChanged(snode->edittree, node); + nodeUpdate(snode->edittree, node); /* if inside group, tag entire group */ gnode= node_tree_get_editgroup(snode->nodetree); if(gnode) - NodeTagIDChanged(snode->nodetree, gnode->id); + nodeUpdateID(snode->nodetree, gnode->id); } static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup) @@ -1775,7 +1775,7 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode) link->fromsock= sock; } ntreeUpdateTree(snode->edittree); - snode_tag_changed(snode, node); + snode_update(snode, node); } } } @@ -2127,7 +2127,7 @@ void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace) continue; } - snode_tag_changed(snode, node_to); + snode_update(snode, node_to); ++numlinks; break; } @@ -2175,7 +2175,7 @@ bNode *node_add_node(SpaceNode *snode, Main *bmain, Scene *scene, bNodeTemplate if(node->id) id_us_plus(node->id); - snode_tag_changed(snode, node); + snode_update(snode, node); } if(snode->nodetree->type==NTREE_TEXTURE) { @@ -2412,7 +2412,7 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) case MIDDLEMOUSE: if(link->tosock && link->fromsock) { /* send changed events for original tonode and new */ - snode_tag_changed(snode, link->tonode); + snode_update(snode, link->tonode); /* we might need to remove a link */ if(in_out==SOCK_OUT) @@ -2495,7 +2495,7 @@ static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag) if(link) { /* send changed event to original tonode */ if(link->tonode) - snode_tag_changed(snode, link->tonode); + snode_update(snode, link->tonode); nldrag->node= link->fromnode; nldrag->sock= link->fromsock; @@ -2663,7 +2663,7 @@ static int cut_links_exec(bContext *C, wmOperator *op) next= link->next; if(cut_links_intersect(link, mcoords, i)) { - snode_tag_changed(snode, link->tonode); + snode_update(snode, link->tonode); nodeRemLink(snode->edittree, link); } } @@ -2794,7 +2794,7 @@ void ED_node_link_insert(ScrArea *sa) nodeAddLink(snode->edittree, select, socket_best_match(&select->outputs, sockto->type), node, sockto); ntreeUpdateTree(snode->edittree); /* needed for pointers */ - snode_tag_changed(snode, select); + snode_update(snode, select); ED_node_changed_update(snode->id, select); } } @@ -3198,7 +3198,7 @@ static int node_mute_exec(bContext *C, wmOperator *UNUSED(op)) /* Be able to mute in-/output nodes as well. - DingTo if(node->inputs.first && node->outputs.first) { */ node->flag ^= NODE_MUTED; - snode_tag_changed(snode, node); + snode_update(snode, node); } } diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 9c4581a43da..1047e906a10 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -244,10 +244,10 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn) if(type==NTREE_COMPOSIT) { Scene *scene= wmn->window->screen->scene; - /* note that NodeTagIDChanged is already called by BKE_image_signal() on all + /* note that nodeUpdateID is already called by BKE_image_signal() on all * scenes so really this is just to know if the images is used in the compo else * painting on images could become very slow when the compositor is open. */ - if(NodeTagIDChanged(scene->nodetree, wmn->reference)) + if(nodeUpdateID(scene->nodetree, wmn->reference)) ED_area_tag_refresh(sa); } } diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 4cfd0b56b70..f03cc200a56 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -154,7 +154,9 @@ typedef struct bNode { float locx, locy; /* root offset for drawing */ float width, height; /* node custom width and height */ float miniwidth; /* node width if hidden */ - int pad; + + int update; /* update flags */ + char label[32]; /* custom user-defined label */ short custom1, custom2; /* to be abused for buttons */ float custom3, custom4; @@ -192,6 +194,13 @@ typedef struct bNode { /* automatic flag for nodes included in transforms */ #define NODE_TRANSFORM (1<<13) +/* node->update */ +/* XXX NODE_UPDATE is a generic update flag. More fine-grained updates + * might be used in the future, but currently all work the same way. + */ +#define NODE_UPDATE 0xFFFF /* generic update flag (includes all others) */ +#define NODE_UPDATE_ID 1 /* associated id data block has changed */ + typedef struct bNodeLink { struct bNodeLink *next, *prev; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 061a21056d0..7d20378d55e 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -568,7 +568,7 @@ static bNode *rna_NodeTree_node_new(bNodeTree *ntree, bContext *UNUSED(C), Repor } else { ntreeUpdateTree(ntree); /* update group node socket links*/ - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); WM_main_add_notifier(NC_NODE|NA_EDITED, ntree); if (group) @@ -651,7 +651,7 @@ static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, b ret= nodeAddLink(ntree, fromnode, in, tonode, out); if(ret) { - NodeTagChanged(ntree, tonode); + nodeUpdate(ntree, tonode); ntreeUpdateTree(ntree); diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index 5c58070be9d..6f4939ecbdd 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -183,6 +183,11 @@ static void local_merge(bNodeTree *localtree, bNodeTree *ntree) } } +static void update(bNodeTree *ntree) +{ + ntreeSetOutput(ntree); +} + bNodeTreeType ntreeType_Composite = { /* type */ NTREE_COMPOSIT, /* idname */ "NTCompositing Nodetree", @@ -195,7 +200,7 @@ bNodeTreeType ntreeType_Composite = { /* localize */ localize, /* local_sync */ local_sync, /* local_merge */ local_merge, - /* update */ NULL, + /* update */ update, /* update_node */ update_node }; @@ -716,9 +721,9 @@ void ntreeCompositTagRender(Scene *curscene) for(node= sce->nodetree->nodes.first; node; node= node->next) { if(node->id==(ID *)curscene || node->type==CMP_NODE_COMPOSITE) - NodeTagChanged(sce->nodetree, node); + nodeUpdate(sce->nodetree, node); else if(node->type==CMP_NODE_TEXTURE) /* uses scene sizex/sizey */ - NodeTagChanged(sce->nodetree, node); + nodeUpdate(sce->nodetree, node); } } } @@ -745,7 +750,7 @@ static int node_animation_properties(bNodeTree *ntree, bNode *node) for (index=0; indextype==CMP_NODE_IMAGE) { Image *ima= (Image *)node->id; if(ima && ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); tagged= 1; } } else if(node->type==CMP_NODE_TIME) { - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); tagged= 1; } /* here was tag render layer, but this is called after a render, so re-composites fail */ else if(node->type==NODE_GROUP) { if( ntreeCompositTagAnimated((bNodeTree *)node->id) ) { - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); } } } @@ -818,12 +823,12 @@ void ntreeCompositTagGenerators(bNodeTree *ntree) for(node= ntree->nodes.first; node; node= node->next) { if( ELEM(node->type, CMP_NODE_R_LAYERS, CMP_NODE_IMAGE)) - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); } } /* XXX after render animation system gets a refresh, this call allows composite to end clean */ -void ntreeClearTags(bNodeTree *ntree) +void ntreeCompositClearTags(bNodeTree *ntree) { bNode *node; @@ -832,6 +837,6 @@ void ntreeClearTags(bNodeTree *ntree) for(node= ntree->nodes.first; node; node= node->next) { node->need_exec= 0; if(node->type==NODE_GROUP) - ntreeClearTags((bNodeTree *)node->id); + ntreeCompositClearTags((bNodeTree *)node->id); } } diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c index 56f80840112..4dbf4b96b74 100644 --- a/source/blender/nodes/intern/node_common.c +++ b/source/blender/nodes/intern/node_common.c @@ -239,9 +239,11 @@ bNode *node_group_make_from_selected(bNodeTree *ntree) } } + /* update of the group tree */ ngroup->update |= NTREE_UPDATE; ntreeUpdateTree(ngroup); - ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS; + /* update of the tree containing the group instance node */ + ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; ntreeUpdateTree(ntree); return gnode; @@ -559,7 +561,7 @@ int node_group_ungroup(bNodeTree *ntree, bNode *gnode) /* free the group tree (takes care of user count) */ free_libblock(&G.main->nodetree, wgroup); - ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; ntreeUpdateTree(ntree); return 1; diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c index 28f0f983454..9f3e7ce3c73 100644 --- a/source/blender/nodes/shader/node_shader_tree.c +++ b/source/blender/nodes/shader/node_shader_tree.c @@ -85,6 +85,11 @@ static void local_sync(bNodeTree *localtree, bNodeTree *ntree) } } +static void update(bNodeTree *ntree) +{ + ntreeSetOutput(ntree); +} + bNodeTreeType ntreeType_Shader = { /* type */ NTREE_SHADER, /* id_name */ "NTShader Nodetree", @@ -97,7 +102,7 @@ bNodeTreeType ntreeType_Shader = { /* localize */ NULL, /* local_sync */ local_sync, /* local_merge */ NULL, - /* update */ NULL, + /* update */ update, /* update_node */ NULL }; diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 603aa7ceb77..2b016177820 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -108,7 +108,7 @@ int ntreeTexTagAnimated(bNodeTree *ntree) for(node= ntree->nodes.first; node; node= node->next) { if(node->type==TEX_NODE_CURVE_TIME) { - NodeTagChanged(ntree, node); + nodeUpdate(ntree, node); return 1; } else if(node->type==NODE_GROUP) { diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 7835ae6dcd3..19dc0538dba 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2261,7 +2261,7 @@ static void ntree_render_scenes(Render *re) restore_scene= (scene != re->scene); node->id->flag &= ~LIB_DOIT; - NodeTagChanged(re->scene->nodetree, node); + nodeUpdate(re->scene->nodetree, node); } } } From c97aa671f4f5082d61f5e8f08281323e514708d0 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Wed, 19 Oct 2011 18:21:08 +0000 Subject: [PATCH 4/7] == Sequencer == do_versions fix: hd audio tracks within metastrips were not properly upgraded from 2.49 files, resulting in broken unusable tracks, which were rendered as black strips as a bonus. --- source/blender/blenloader/intern/readfile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index dfaf96a6066..a6474fb5044 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -10215,8 +10215,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) { if(scene->ed && scene->ed->seqbasep) { - for(seq = scene->ed->seqbasep->first; seq; seq = seq->next) - { + SEQ_BEGIN(scene->ed, seq) { if(seq->type == SEQ_HD_SOUND) { char str[FILE_MAX]; @@ -10236,6 +10235,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) seq->strip->dir); } } + SEQ_END } } From 4d2a28c2a9408463b182e67c47accb31b8ea7df9 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 19 Oct 2011 18:46:16 +0000 Subject: [PATCH 5/7] Revert own commit 41026. It now had issues when hiding menus with the - icon, space selector disappeared. I am sorry for that, but I consider this a show stopper eventually. :( This commit introduces the issue with narrowed verts/edge/face select in solid/edit mode again. --- release/scripts/startup/bl_ui/space_view3d.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index e4beee66871..c6a26cd9bbf 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -56,9 +56,9 @@ class VIEW3D_HT_header(Header): # Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode... - layout.template_header_3D() + row = layout.row() #XXX Narrowed down vert/edge/face selector in edit mode/solid drawmode. -DingTo + row.template_header_3D() - row = layout.row() if obj: # Particle edit if obj.mode == 'PARTICLE_EDIT': From c661a4b1ab80162d0fac4fd0e2066b806e2acdce Mon Sep 17 00:00:00 2001 From: Jens Verwiebe Date: Wed, 19 Oct 2011 19:12:41 +0000 Subject: [PATCH 6/7] OSX: set at least initial OMP_NUM_THREADS value to avoid warnings in log, remove applescript for now --- source/darwin/blender.app/Contents/Info.plist | 2 +- .../Contents/Info.plist | 44 ------------------ .../Contents/MacOS/applet | Bin 34480 -> 0 bytes .../Contents/PkgInfo | 1 - .../Contents/Resources/Scripts/main.scpt | Bin 4696 -> 0 bytes .../Contents/Resources/applet.icns | Bin 40291 -> 0 bytes .../Contents/Resources/applet.rsrc | Bin 362 -> 0 bytes .../Resources/description.rtfd/TXT.rtf | 4 -- .../set_simulation_threads_applescript.scpt | Bin 5144 -> 0 bytes 9 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 source/darwin/set_simulation_threads.app/Contents/Info.plist delete mode 100755 source/darwin/set_simulation_threads.app/Contents/MacOS/applet delete mode 100644 source/darwin/set_simulation_threads.app/Contents/PkgInfo delete mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/Scripts/main.scpt delete mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns delete mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/applet.rsrc delete mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/description.rtfd/TXT.rtf delete mode 100644 source/darwin/set_simulation_threads_applescript.scpt diff --git a/source/darwin/blender.app/Contents/Info.plist b/source/darwin/blender.app/Contents/Info.plist index 9aeb617a051..37920dc8181 100644 --- a/source/darwin/blender.app/Contents/Info.plist +++ b/source/darwin/blender.app/Contents/Info.plist @@ -46,7 +46,7 @@ LSEnvironment OMP_NUM_THREADS - + 4 diff --git a/source/darwin/set_simulation_threads.app/Contents/Info.plist b/source/darwin/set_simulation_threads.app/Contents/Info.plist deleted file mode 100644 index 44d6783599c..00000000000 --- a/source/darwin/set_simulation_threads.app/Contents/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - CFBundleAllowMixedLocalizations - - CFBundleDevelopmentRegion - English - CFBundleExecutable - applet - CFBundleIconFile - applet - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - set_simulation_threads - CFBundlePackageType - APPL - CFBundleSignature - aplt - LSMinimumSystemVersionByArchitecture - - x86_64 - 10.6 - - LSRequiresCarbon - - WindowState - - dividerCollapsed - - eventLogLevel - -1 - name - ScriptWindowState - positionOfDivider - 470 - savedFrame - 199 169 1197 810 0 0 1920 1178 - selectedTabView - result - - - diff --git a/source/darwin/set_simulation_threads.app/Contents/MacOS/applet b/source/darwin/set_simulation_threads.app/Contents/MacOS/applet deleted file mode 100755 index 0079f4b19d448615de26af5c84a0a6195d511bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34480 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 JH;*3O`xk#M8>j#P diff --git a/source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns b/source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns deleted file mode 100644 index fcc1f09273d73cb424494118a39d8b391ce00bcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40291 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 From f6f9288f353eed07cb298a7be3585f0bf3f620dd Mon Sep 17 00:00:00 2001 From: Jens Verwiebe Date: Wed, 19 Oct 2011 19:15:35 +0000 Subject: [PATCH 7/7] replace former applescript with an editable one --- .../Contents/Info.plist | 44 ++++++++++++++++++ .../Contents/MacOS/applet | Bin 0 -> 34480 bytes .../Contents/PkgInfo | 1 + .../Contents/Resources/Scripts/main.scpt | Bin 0 -> 7664 bytes .../Contents/Resources/applet.icns | Bin 0 -> 40291 bytes .../Contents/Resources/applet.rsrc | Bin 0 -> 362 bytes .../Resources/description.rtfd/TXT.rtf | 4 ++ 7 files changed, 49 insertions(+) create mode 100644 source/darwin/set_simulation_threads.app/Contents/Info.plist create mode 100755 source/darwin/set_simulation_threads.app/Contents/MacOS/applet create mode 100644 source/darwin/set_simulation_threads.app/Contents/PkgInfo create mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/Scripts/main.scpt create mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns create mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/applet.rsrc create mode 100644 source/darwin/set_simulation_threads.app/Contents/Resources/description.rtfd/TXT.rtf diff --git a/source/darwin/set_simulation_threads.app/Contents/Info.plist b/source/darwin/set_simulation_threads.app/Contents/Info.plist new file mode 100644 index 00000000000..eb80955e5a6 --- /dev/null +++ b/source/darwin/set_simulation_threads.app/Contents/Info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleAllowMixedLocalizations + + CFBundleDevelopmentRegion + English + CFBundleExecutable + applet + CFBundleIconFile + applet + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + set_simulation_threads + CFBundlePackageType + APPL + CFBundleSignature + aplt + LSMinimumSystemVersionByArchitecture + + x86_64 + 10.6 + + LSRequiresCarbon + + WindowState + + dividerCollapsed + + eventLogLevel + -1 + name + ScriptWindowState + positionOfDivider + 493 + savedFrame + 698 332 1163 846 0 0 1920 1178 + selectedTabView + result + + + diff --git a/source/darwin/set_simulation_threads.app/Contents/MacOS/applet b/source/darwin/set_simulation_threads.app/Contents/MacOS/applet new file mode 100755 index 0000000000000000000000000000000000000000..0079f4b19d448615de26af5c84a0a6195d511bfc GIT binary patch literal 34480 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 NiLRCRZQFMLe*l(L>tFx? literal 0 HcmV?d00001 diff --git a/source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns b/source/darwin/set_simulation_threads.app/Contents/Resources/applet.icns new file mode 100644 index 0000000000000000000000000000000000000000..fcc1f09273d73cb424494118a39d8b391ce00bcc GIT binary patch literal 40291 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