[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41475] trunk/blender: RenderEngine/Nodes: system to check for shading nodes compatibility

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Nov 2 20:24:31 CET 2011


Revision: 41475
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41475
Author:   blendix
Date:     2011-11-02 19:24:30 +0000 (Wed, 02 Nov 2011)
Log Message:
-----------
RenderEngine/Nodes: system to check for shading nodes compatibility

* Scene.use_shading_nodes property to check if RenderEngine is using new shading
  nodes system, and RenderEngine.bl_use_shading_nodes to set this.
* Add mechanism for tagging nodes as being compatible with the old/new system.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_node.py
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/editors/render/render_shading.c
    trunk/blender/source/blender/editors/space_node/node_header.c
    trunk/blender/source/blender/makesrna/intern/rna_render.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/nodes/intern/node_common.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_camera.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_curves.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_dynamic.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_geom.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_invert.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_mapping.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_material.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_math.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_normal.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_output.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_rgb.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_squeeze.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_texture.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_value.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_vectMath.c
    trunk/blender/source/blender/render/extern/include/RE_engine.h

Modified: trunk/blender/release/scripts/startup/bl_ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_node.py	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/release/scripts/startup/bl_ui/space_node.py	2011-11-02 19:24:30 UTC (rev 41475)
@@ -27,6 +27,7 @@
     def draw(self, context):
         layout = self.layout
 
+        scene = context.scene
         snode = context.space_data
         snode_id = snode.id
         id_from = snode.id_from
@@ -43,11 +44,15 @@
         layout.prop(snode, "tree_type", text="", expand=True)
 
         if snode.tree_type == 'SHADER':
-            if id_from:
-                layout.template_ID(id_from, "active_material", new="material.new")
-            if snode_id:
-                layout.prop(snode_id, "use_nodes")
+            if scene.render.use_shading_nodes:
+                layout.prop(snode, "shader_type", text="", expand=True)
 
+            if not scene.render.use_shading_nodes or snode.shader_type == 'OBJECT':
+                if id_from:
+                    layout.template_ID(id_from, "active_material", new="material.new")
+                if snode_id:
+                    layout.prop(snode_id, "use_nodes")
+
         elif snode.tree_type == 'TEXTURE':
             layout.prop(snode, "texture_type", text="", expand=True)
 

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py	2011-11-02 19:24:30 UTC (rev 41475)
@@ -2143,10 +2143,11 @@
         subsub.active = scene.unit_settings.system == 'NONE'
         subsub.prop(view, "grid_subdivisions", text="Subdivisions")
 
-        col = layout.column()
-        col.label(text="Shading:")
-        col.prop(gs, "material_mode", text="")
-        col.prop(view, "show_textured_solid")
+        if not scene.render.use_shading_nodes:
+            col = layout.column()
+            col.label(text="Shading:")
+            col.prop(gs, "material_mode", text="")
+            col.prop(view, "show_textured_solid")
 
         layout.separator()
 

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2011-11-02 19:24:30 UTC (rev 41475)
@@ -130,7 +130,7 @@
 	char name[32];
 	float width, minwidth, maxwidth;
 	float height, minheight, maxheight;
-	short nclass, flag;
+	short nclass, flag, compatibility;
 	
 	/* templates for static sockets */
 	bNodeSocketTemplate *inputs, *outputs;
@@ -230,8 +230,13 @@
 #define NODE_CLASS_PARTICLES		25
 #define NODE_CLASS_TRANSFORM		30
 #define NODE_CLASS_COMBINE			31
+#define NODE_CLASS_SHADER 			40
 #define NODE_CLASS_LAYOUT			100
 
+/* nodetype->compatibility */
+#define NODE_OLD_SHADING	1
+#define NODE_NEW_SHADING	2
+
 /* enum values for input/output */
 #define SOCK_IN		1
 #define SOCK_OUT	2
@@ -388,6 +393,7 @@
 								   void (*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata, struct bNodeStack **, struct bNodeStack **));
 void			node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out));
 void			node_type_gpu_ext(struct bNodeType *ntype, int (*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node, void *nodedata, struct GPUNodeStack *in, struct GPUNodeStack *out));
+void			node_type_compatibility(struct bNodeType *ntype, short compatibility);
 
 /* ************** COMMON NODES *************** */
 

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h	2011-11-02 19:24:30 UTC (rev 41475)
@@ -98,6 +98,8 @@
 int get_render_shadow_samples(struct RenderData *r, int samples);
 float get_render_aosss_error(struct RenderData *r, float error);
 
+int scene_use_new_shading_nodes(struct Scene *scene);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2011-11-02 19:24:30 UTC (rev 41475)
@@ -43,10 +43,11 @@
 #include <string.h>
 #include <limits.h>
 
+#include "DNA_action_types.h"
 #include "DNA_anim_types.h"
 #include "DNA_node_types.h"
+#include "DNA_node_types.h"
 #include "DNA_scene_types.h"
-#include "DNA_action_types.h"
 
 #include "BLI_string.h"
 #include "BLI_math.h"
@@ -1751,6 +1752,10 @@
 	ntype->gpuextfunc = gpuextfunc;
 }
 
+void node_type_compatibility(struct bNodeType *ntype, short compatibility)
+{
+	ntype->compatibility = compatibility;
+}
 
 static bNodeType *is_nodetype_registered(ListBase *typelist, int type) 
 {

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2011-11-02 19:24:30 UTC (rev 41475)
@@ -72,6 +72,8 @@
 
 #include "BKE_sound.h"
 
+#include "RE_engine.h"
+
 //XXX #include "BIF_previewrender.h"
 //XXX #include "BIF_editseq.h"
 
@@ -1127,3 +1129,10 @@
 
 	return NULL;
 }
+
+int scene_use_new_shading_nodes(Scene *scene)
+{
+	RenderEngineType *type= RE_engines_find(scene->r.engine);
+	return (type->flag & RE_USE_SHADING_NODES);
+}
+

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2011-11-02 19:24:30 UTC (rev 41475)
@@ -26,7 +26,6 @@
  *  \ingroup edrend
  */
 
-
 #include <stdlib.h>
 #include <string.h>
 
@@ -76,6 +75,7 @@
 
 #include "ED_curve.h"
 #include "ED_mesh.h"
+#include "ED_node.h"
 #include "ED_render.h"
 #include "ED_screen.h"
 
@@ -363,16 +363,24 @@
 
 static int new_material_exec(bContext *C, wmOperator *UNUSED(op))
 {
+	Scene *scene= CTX_data_scene(C);
 	Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
 	PointerRNA ptr, idptr;
 	PropertyRNA *prop;
 
 	/* add or copy material */
-	if(ma)
+	if(ma) {
 		ma= copy_material(ma);
-	else
+	}
+	else {
 		ma= add_material("Material");
 
+		if(scene_use_new_shading_nodes(scene)) {
+			ED_node_shader_default(scene, &ma->id);
+			ma->use_nodes= 1;
+		}
+	}
+
 	/* hook into UI */
 	uiIDContextProperty(C, &ptr, &prop);
 
@@ -455,16 +463,24 @@
 
 static int new_world_exec(bContext *C, wmOperator *UNUSED(op))
 {
+	Scene *scene= CTX_data_scene(C);
 	World *wo= CTX_data_pointer_get_type(C, "world", &RNA_World).data;
 	PointerRNA ptr, idptr;
 	PropertyRNA *prop;
 
 	/* add or copy world */
-	if(wo)
+	if(wo) {
 		wo= copy_world(wo);
-	else
+	}
+	else {
 		wo= add_world("World");
 
+		if(scene_use_new_shading_nodes(scene)) {
+			ED_node_shader_default(scene, &wo->id);
+			wo->use_nodes= 1;
+		}
+	}
+
 	/* hook into UI */
 	uiIDContextProperty(C, &ptr, &prop);
 

Modified: trunk/blender/source/blender/editors/space_node/node_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_header.c	2011-11-02 18:55:32 UTC (rev 41474)
+++ trunk/blender/source/blender/editors/space_node/node_header.c	2011-11-02 19:24:30 UTC (rev 41475)
@@ -46,9 +46,10 @@
 
 #include "BKE_context.h"
 #include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+#include "BKE_scene.h"
 #include "BKE_screen.h"
-#include "BKE_node.h"
-#include "BKE_main.h"
 
 #include "RNA_access.h"
 
@@ -168,10 +169,11 @@
 static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass)
 {
 	Main *bmain= CTX_data_main(C);
+	Scene *scene= CTX_data_scene(C);
 	SpaceNode *snode= CTX_wm_space_node(C);
 	bNodeTree *ntree;
 	int nodeclass= GET_INT_FROM_POINTER(arg_nodeclass);
-	int event;
+	int event, compatibility= 0;
 	
 	ntree = snode->nodetree;
 	
@@ -179,6 +181,13 @@
 		uiItemS(layout);
 		return;
 	}
+
+	if(ntree->type == NTREE_SHADER) {
+		if(scene_use_new_shading_nodes(scene))
+			compatibility= NODE_NEW_SHADING;
+		else
+			compatibility= NODE_OLD_SHADING;
+	}
 	
 	if (nodeclass==NODE_CLASS_GROUP) {
 		bNodeTree *ngroup;
@@ -210,14 +219,16 @@
 		uiLayoutSetFunc(layout, do_node_add_static, NULL);
 		
 		for (ntype=ntreeGetType(ntree->type)->node_types.first; ntype; ntype=ntype->next) {
-			if(ntype->nclass==nodeclass && ntype->name)
-				uiItemV(layout, ntype->name, 0, ntype->type);
+			if (ntype->nclass==nodeclass && ntype->name)
+				if (!compatibility || (ntype->compatibility & compatibility))
+					uiItemV(layout, ntype->name, 0, ntype->type);
 		}
 	}
 }
 
 static void node_menu_add(const bContext *C, Menu *menu)
 {
+	Scene *scene= CTX_data_scene(C);
 	SpaceNode *snode= CTX_wm_space_node(C);
 	uiLayout *layout= menu->layout;
 
@@ -227,11 +238,15 @@
 	if(snode->treetype==NTREE_SHADER) {
 		uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
 		uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
+		if(scene_use_new_shading_nodes(scene)) {
+			uiItemMenuF(layout, IFACE_("Shader"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_SHADER));
+			uiItemMenuF(layout, IFACE_("Texture"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE));
+		}
 		uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
 		uiItemMenuF(layout, IFACE_("Vector"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
 		uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
 		uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
-		uiItemMenuF(layout, IFACE_("Dynamic"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_DYNAMIC));

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list