Render API: shader script node for custom shaders.
* Shader script node added, which stores either a link to a text datablock or file on disk, and has functions to add and remove sockets. * Callback RenderEngine.update_script_node(self, node) added for render engines to compile the shader and update the node with new sockets. Thanks to Thomas, Lukas and Dalai for the implementation.
This commit is contained in:
@@ -1384,6 +1384,34 @@ static void node_shader_buts_glossy(uiLayout *layout, bContext *UNUSED(C), Point
|
||||
uiItemR(layout, ptr, "distribution", 0, "", ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_shader_buts_script(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiLayout *row;
|
||||
|
||||
row = uiLayoutRow(layout, FALSE);
|
||||
uiItemR(row, ptr, "mode", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
|
||||
|
||||
row = uiLayoutRow(layout, TRUE);
|
||||
|
||||
if(RNA_enum_get(ptr, "mode") == NODE_SCRIPT_INTERNAL)
|
||||
uiItemR(row, ptr, "script", 0, "", ICON_NONE);
|
||||
else
|
||||
uiItemR(row, ptr, "filepath", 0,"", ICON_NONE);
|
||||
|
||||
uiItemO(row, "", ICON_FILE_REFRESH, "node.shader_script_update");
|
||||
}
|
||||
|
||||
static void node_shader_buts_script_details(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
uiItemS(layout);
|
||||
|
||||
node_shader_buts_script(layout, C, ptr);
|
||||
|
||||
/* not implemented yet
|
||||
if(RNA_enum_get(ptr, "mode") == NODE_SCRIPT_EXTERNAL)
|
||||
uiItemR(layout, ptr, "use_auto_update", 0, NULL, ICON_NONE);*/
|
||||
}
|
||||
|
||||
/* only once called */
|
||||
static void node_shader_set_butfunc(bNodeType *ntype)
|
||||
{
|
||||
@@ -1467,6 +1495,10 @@ static void node_shader_set_butfunc(bNodeType *ntype)
|
||||
case SH_NODE_BSDF_GLASS:
|
||||
ntype->uifunc = node_shader_buts_glossy;
|
||||
break;
|
||||
case SH_NODE_SCRIPT:
|
||||
ntype->uifunc = node_shader_buts_script;
|
||||
ntype->uifuncbut = node_shader_buts_script_details;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user