== 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:
2008-02-10 03:40:24 +00:00
parent 34ddfb03c1
commit f46fcf7aab
3 changed files with 32 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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, "");