== PyNodes ==
1) Including the Add->Dynamic submenu in the Nodes window header. Previously pynodes could only be added via toolbox. 2) Disabling pynodes execution when using more than one thread for rendering. This prevents the crashes while a proper fix isn't implemented.
This commit is contained in:
@@ -570,6 +570,9 @@ static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNode
|
||||
if (!node->id)
|
||||
return;
|
||||
|
||||
if (G.scene->r.threads > 1)
|
||||
return;
|
||||
|
||||
if (BTST2(node->custom1, NODE_DYNAMIC_NEW, NODE_DYNAMIC_REPARSE)) {
|
||||
node_dynamic_setup(node);
|
||||
return;
|
||||
|
||||
@@ -798,6 +798,11 @@ static int node_shader_buts_dynamic(uiBlock *block, bNodeTree *ntree, bNode *nod
|
||||
ui_rasterpos_safe(butr->xmin + xoff, butr->ymin + 5, snode->aspect);
|
||||
snode_drawstring(snode, "Error! Check console...", butr->xmax - butr->xmin);
|
||||
}
|
||||
else if (G.scene->r.threads > 1) {
|
||||
BIF_ThemeColor(TH_REDALERT);
|
||||
ui_rasterpos_safe(butr->xmin + xoff, butr->ymin + 5, snode->aspect);
|
||||
snode_drawstring(snode, "Set threads to 1", butr->xmax - butr->xmin);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 20+19;
|
||||
|
||||
@@ -273,10 +273,17 @@ static void node_make_addmenu(SpaceNode *snode, int nodeclass, uiBlock *block)
|
||||
}
|
||||
else {
|
||||
bNodeType *type;
|
||||
int script=0;
|
||||
for(a=0, type= ntree->alltypes.first; type; type=type->next) {
|
||||
if( type->nclass == nodeclass ) {
|
||||
if(type->type == NODE_DYNAMIC) {
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, type->name, 0,
|
||||
yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, NODE_DYNAMIC_MENU+script, "");
|
||||
script++;
|
||||
} else {
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, type->name, 0,
|
||||
yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, type->type, "");
|
||||
}
|
||||
a++;
|
||||
}
|
||||
}
|
||||
@@ -423,6 +430,22 @@ static uiBlock *node_add_groupmenu(void *arg_unused)
|
||||
return block;
|
||||
}
|
||||
|
||||
static uiBlock *node_add_dynamicmenu(void *arg_unused)
|
||||
{
|
||||
SpaceNode *snode= curarea->spacedata.first;
|
||||
uiBlock *block;
|
||||
|
||||
block= uiNewBlock(&curarea->uiblocks, "node_add_dynamicmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
|
||||
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
|
||||
|
||||
node_make_addmenu(snode, NODE_CLASS_OP_DYNAMIC, block);
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 60);
|
||||
|
||||
return block;
|
||||
}
|
||||
|
||||
static uiBlock *node_addmenu(void *arg_unused)
|
||||
{
|
||||
SpaceNode *snode= curarea->spacedata.first;
|
||||
@@ -440,6 +463,7 @@ static uiBlock *node_addmenu(void *arg_unused)
|
||||
uiDefIconTextBlockBut(block, node_add_vectormenu, NULL, ICON_RIGHTARROW_THIN, "Vector", 0, yco-=20, 120, 19, "");
|
||||
uiDefIconTextBlockBut(block, node_add_convertermenu, NULL, ICON_RIGHTARROW_THIN, "Convertor", 0, yco-=20, 120, 19, "");
|
||||
uiDefIconTextBlockBut(block, node_add_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
|
||||
uiDefIconTextBlockBut(block, node_add_dynamicmenu, NULL, ICON_RIGHTARROW_THIN, "Dynamic", 0, yco-=20, 120, 19, "");
|
||||
}
|
||||
else if(snode->treetype==NTREE_COMPOSIT) {
|
||||
uiDefIconTextBlockBut(block, node_add_inputmenu, NULL, ICON_RIGHTARROW_THIN, "Input", 0, yco-=20, 120, 19, "");
|
||||
|
||||
Reference in New Issue
Block a user