[Bf-blender-cvs] [0b2abe1] GPU_data_request: WIP new node type for workflow shaders
Antony Riakiotakis
noreply at git.blender.org
Fri Apr 10 19:03:04 CEST 2015
Commit: 0b2abe145aba2ab0ca6f304f1e7eb4e84c4bf9f9
Author: Antony Riakiotakis
Date: Fri Apr 10 17:50:14 2015 +0200
Branches: GPU_data_request
https://developer.blender.org/rB0b2abe145aba2ab0ca6f304f1e7eb4e84c4bf9f9
WIP new node type for workflow shaders
===================================================================
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/intern/bpath.c
M source/blender/blenkernel/intern/node.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/editors/space_node/node_draw.c
M source/blender/makesdna/DNA_node_types.h
M source/blender/makesrna/RNA_access.h
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/NOD_shader.h
M source/blender/nodes/shader/node_shader_tree.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 89e7ad7..4059861 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -258,8 +258,9 @@ typedef struct bNodeType {
#define NODE_CLASS_LAYOUT 100
/* nodetype->compatibility */
-#define NODE_OLD_SHADING 1
-#define NODE_NEW_SHADING 2
+#define NODE_OLD_SHADING 1
+#define NODE_NEW_SHADING 2
+#define NODE_WORKFLOW_SHADING 3
/* node resize directions */
#define NODE_RESIZE_TOP 1
diff --git a/source/blender/blenkernel/intern/bpath.c b/source/blender/blenkernel/intern/bpath.c
index f5b2af3..658f9cf 100644
--- a/source/blender/blenkernel/intern/bpath.c
+++ b/source/blender/blenkernel/intern/bpath.c
@@ -557,7 +557,7 @@ void BKE_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
bNodeTree *ntree = (bNodeTree *)id;
bNode *node;
- if (ntree->type == NTREE_SHADER) {
+ if (ELEM(ntree->type, NTREE_SHADER, NTREE_WORKFLOW)) {
/* same as lines above */
for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == SH_NODE_SCRIPT) {
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index b426325..3ff570b1 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1718,6 +1718,7 @@ void ntreeFreeTree_ex(bNodeTree *ntree, const bool do_id_user)
if (ntree->execdata) {
switch (ntree->type) {
case NTREE_SHADER:
+ case NTREE_WORKFLOW:
ntreeShaderEndExecTree(ntree->execdata);
break;
case NTREE_TEXTURE:
@@ -3632,6 +3633,7 @@ void init_nodesystem(void)
register_node_tree_type_cmp();
register_node_tree_type_sh();
+ register_node_tree_type_workflow();
register_node_tree_type_tex();
register_node_type_frame();
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 646d7a1..673961b 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2798,7 +2798,7 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
if (node->storage) {
/* could be handlerized at some point */
- if (ntree->type==NTREE_SHADER) {
+ if (ELEM(ntree->type, NTREE_SHADER, NTREE_WORKFLOW)) {
if (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB) {
direct_link_curvemapping(fd, node->storage);
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index e301ccc..f8c97af 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -869,7 +869,7 @@ static void write_nodetree(WriteData *wd, bNodeTree *ntree)
writestruct(wd, DATA, "bNodeLink", 1, link);
if (node->storage) {
/* could be handlerized at some point, now only 1 exception still */
- if (ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB))
+ if (ELEM(ntree->type, NTREE_SHADER, NTREE_WORKFLOW) && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB))
write_curvemapping(wd, node->storage);
else if (ntree->type==NTREE_SHADER && node->type==SH_NODE_SCRIPT) {
NodeShaderScript *nss = (NodeShaderScript *)node->storage;
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 87a64e9..7faa464 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -134,6 +134,9 @@ void ED_node_tag_update_id(ID *id)
else if (GS(id->name) == ID_WO)
WM_main_add_notifier(NC_WORLD | ND_WORLD, id);
}
+ else if (ntree->type == NTREE_WORKFLOW) {
+ WM_main_add_notifier(NC_SCENE | ND_NODES, id);
+ }
else if (ntree->type == NTREE_COMPOSIT) {
WM_main_add_notifier(NC_SCENE | ND_NODES, id);
}
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index f6524be..27875e5 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -394,6 +394,7 @@ typedef struct bNodeTree {
#define NTREE_SHADER 0
#define NTREE_COMPOSIT 1
#define NTREE_TEXTURE 2
+#define NTREE_WORKFLOW 3
/* ntree->init, flag */
#define NTREE_TYPE_INIT 1
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 6cbc58d..340229e 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -257,6 +257,7 @@ extern StructRNA RNA_GPencilFrame;
extern StructRNA RNA_GPencilLayer;
extern StructRNA RNA_GPencilStroke;
extern StructRNA RNA_GPencilStrokePoint;
+extern StructRNA RNA_GPUWorkflowShader;
extern StructRNA RNA_GameBooleanProperty;
extern StructRNA RNA_GameFloatProperty;
extern StructRNA RNA_GameIntProperty;
@@ -673,7 +674,7 @@ extern StructRNA RNA_WindowManager;
extern StructRNA RNA_WipeSequence;
extern StructRNA RNA_WireframeModifier;
extern StructRNA RNA_WoodTexture;
-extern StructRNA RNA_GPUWorkflowShader;
+extern StructRNA RNA_WorkflowNodeTree;
extern StructRNA RNA_World;
extern StructRNA RNA_WorldAmbientOcclusion;
extern StructRNA RNA_WorldLighting;
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 3ca14e0..ce96f94 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -7669,6 +7669,7 @@ static void rna_def_nodetree(BlenderRNA *brna)
static EnumPropertyItem static_type_items[] = {
{NTREE_SHADER, "SHADER", ICON_MATERIAL, "Shader", "Shader nodes"},
+ {NTREE_WORKFLOW, "WORKFLOW", ICON_SMOOTH, "Workflow", "Workflow nodes"},
{NTREE_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture nodes"},
{NTREE_COMPOSIT, "COMPOSITING", ICON_RENDERLAYERS, "Compositing", "Compositing nodes"},
{0, NULL, 0, NULL, NULL}
@@ -7852,6 +7853,18 @@ static void rna_def_shader_nodetree(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_MATERIAL);
}
+
+static void rna_def_workflow_nodetree(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna = RNA_def_struct(brna, "WorkflowNodeTree", "NodeTree");
+ RNA_def_struct_ui_text(srna, "Workflow Node Tree",
+ "Node tree consisting of linked nodes used for shader workflows");
+ RNA_def_struct_sdna(srna, "bNodeTree");
+ RNA_def_struct_ui_icon(srna, ICON_SMOOTH);
+}
+
static void rna_def_texture_nodetree(BlenderRNA *brna)
{
StructRNA *srna;
@@ -7948,6 +7961,7 @@ void RNA_def_nodetree(BlenderRNA *brna)
rna_def_composite_nodetree(brna);
rna_def_shader_nodetree(brna);
+ rna_def_workflow_nodetree(brna);
rna_def_texture_nodetree(brna);
#define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/nodes/NOD_shader.h
index 59639e4..cc8e17e 100644
--- a/source/blender/nodes/NOD_shader.h
+++ b/source/blender/nodes/NOD_shader.h
@@ -42,6 +42,8 @@ extern struct bNodeTreeType *ntreeType_Shader;
void register_node_tree_type_sh(void);
+void register_node_tree_type_workflow(void);
+
void register_node_type_sh_group(void);
void register_node_type_sh_output(void);
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index f18ee1d..500434e 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -36,7 +36,9 @@
#include "DNA_material_types.h"
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "DNA_linestyle_types.h"
@@ -50,6 +52,7 @@
#include "BKE_linestyle.h"
#include "BKE_node.h"
#include "BKE_scene.h"
+#include "BKE_screen.h"
#include "RNA_access.h"
@@ -196,6 +199,70 @@ void register_node_tree_type_sh(void)
ntreeTypeAdd(tt);
}
+static void workflow_get_from_context(const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from)
+{
+ Main *bmain = CTX_data_main(C);
+ ScrArea *sa = NULL;
+ ARegion *ar = NULL;
+ View3D *v3d = NULL;
+ bScreen *screen = CTX_wm_screen(C);
+
+ *r_from = NULL;
+
+ if (screen) {
+ sa = BKE_screen_find_big_area(screen, SPACE_VIEW3D, 0);
+ ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
+ if (ar) {
+ v3d = sa->spacedata.first;
+ }
+ }
+
+ if (v3d && v3d->activeworkflow) {
+ *r_id = &v3d->activeworkflow->id;
+ *r_ntree = v3d->activeworkflow->ntree;
+ }
+ else if (bmain->gpuworkflows.first) {
+ GPUWorkflowShader *wfshader = bmain->gpuworkflows.first;
+ *r_id = &wfshader->id;
+ *r_ntree = wfshader->ntree;
+ }
+ else {
+ *r_id = NULL;
+ *r_ntree = NULL;
+ }
+}
+
+
+static int workflow_tree_poll(const bContext *UNUSED(C), bNodeTreeType *UNUSED(treetype))
+{
+ return (U.gameflags & USER_VIEWPORT_2) != 0;
+}
+
+
+void register_node_tree_type_workflow(void)
+{
+ bNodeTreeType *tt = ntreeType_Shader = MEM_callocN(sizeof(bNodeTreeType), "shader node tree type");
+
+ tt->type = NTREE_SHADER;
+ strcpy(tt->idname, "WorkflowNodeTree");
+ strcpy(tt->ui_name, "Workflow Shader");
+ tt->ui_icon = 0; /* defined in drawnode.c */
+ strcpy(tt->ui_description, "Workflow nodes");
+
+ tt->foreach_nodeclass = foreach_nodeclass;
+ tt->localize = localize;
+ tt->local_sync = local_sync;
+ tt->local_merge = local_merge;
+ tt->update = update;
+ tt->poll = workflow_tree_poll;
+ tt->get_from_context = workflow_get_from_context;
+
+ tt->ext.srna = &RNA_WorkflowNodeTree;
+
+ ntreeTypeAdd(tt);
+}
+
+
/* GPU material from shader nodes */
void ntreeGPUMaterialNodes(bNodeTree *ntree, GPUMaterial *mat, short compatibility)
More information about the Bf-blender-cvs
mailing list