[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54081] trunk/blender/source/blender: Usability

Ton Roosendaal ton at blender.org
Thu Jan 24 17:11:11 CET 2013


Revision: 54081
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54081
Author:   ton
Date:     2013-01-24 16:11:07 +0000 (Thu, 24 Jan 2013)
Log Message:
-----------
Usability

- Cycles materials now render in Blender Internal too, skipping the nodes.
  Not very useful, but at least things then show up on renders and in
  previews.

- Node editor: if wrong shader nodes are in a tree, they draw with thene
  color RED ALERT headers now. (Switching render engine will show it).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/nodes/intern/node_exec.c
    trunk/blender/source/blender/nodes/intern/node_exec.h
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2013-01-24 16:11:07 UTC (rev 54081)
@@ -577,7 +577,7 @@
 
 struct bNodeTreeExec *ntreeShaderBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
 void            ntreeShaderEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
-void            ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
+int             ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
 void            ntreeShaderGetTexcoMode(struct bNodeTree *ntree, int osa, short *texco, int *mode);
 void            nodeShaderSynchronizeID(struct bNode *node, int copyto);
 

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2013-01-24 16:11:07 UTC (rev 54081)
@@ -701,7 +701,21 @@
 	
 	if (node->flag & NODE_MUTED)
 		UI_ThemeColorBlend(color_id, TH_REDALERT, 0.5f);
+	
+	/* debug info: using wrong shaders in wrong context */
+	if (ntree->type == NTREE_SHADER) {
+		if (snode->flag & SNODE_NEW_SHADERS) {
+			if (node->typeinfo->compatibility == NODE_OLD_SHADING)
+				UI_ThemeColor(TH_REDALERT);
+		}
+		else {
+			if (node->typeinfo->compatibility == NODE_NEW_SHADING)
+				UI_ThemeColor(TH_REDALERT);
+		}
+	}
+	
 
+
 #ifdef WITH_COMPOSITOR
 	if (ntree->type == NTREE_COMPOSIT && (snode->flag & SNODE_SHOW_HIGHLIGHT)) {
 		if (COM_isHighlightedbNode(node)) {
@@ -795,6 +809,7 @@
 
 	/* outline active and selected emphasis */
 	if (node->flag & SELECT) {
+		
 		glEnable(GL_BLEND);
 		glEnable(GL_LINE_SMOOTH);
 		
@@ -802,6 +817,7 @@
 			UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -40);
 		else
 			UI_ThemeColorShadeAlpha(TH_SELECT, 0, -40);
+		
 		uiSetRoundBox(UI_CNR_ALL);
 		uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
 		

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2013-01-24 16:11:07 UTC (rev 54081)
@@ -550,6 +550,12 @@
 	snode->id = snode->from = NULL;
 	
 	if (snode->treetype == NTREE_SHADER) {
+		/* we use this to signal warnings, when node shaders are drawn in wrong render engine */
+		if (BKE_scene_use_new_shading_nodes(scene))
+			snode->flag |= SNODE_NEW_SHADERS;
+		else
+			snode->flag &= ~SNODE_NEW_SHADERS;
+			
 		/* need active object, or we allow pinning... */
 		if (snode->shaderfrom == SNODE_SHADER_OBJECT) {
 			if (ob) {

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2013-01-24 16:11:07 UTC (rev 54081)
@@ -917,6 +917,7 @@
 	SNODE_AUTO_RENDER    = (1 << 5),
 	SNODE_SHOW_HIGHLIGHT = (1 << 6),
 	SNODE_USE_HIDDEN_PREVIEW = (1 << 10),
+	SNODE_NEW_SHADERS = (1 << 11),
 } eSpaceNode_Flag;
 
 /* snode->texfrom */

Modified: trunk/blender/source/blender/nodes/intern/node_exec.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_exec.c	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/nodes/intern/node_exec.c	2013-01-24 16:11:07 UTC (rev 54081)
@@ -287,7 +287,7 @@
 	nts->used = 0;
 }
 
-void ntreeExecThreadNodes(bNodeTreeExec *exec, bNodeThreadStack *nts, void *callerdata, int thread)
+int ntreeExecThreadNodes(bNodeTreeExec *exec, bNodeThreadStack *nts, void *callerdata, int thread)
 {
 	bNodeStack *nsin[MAX_SOCKET];	/* arbitrary... watch this */
 	bNodeStack *nsout[MAX_SOCKET];	/* arbitrary... watch this */
@@ -305,10 +305,17 @@
 			 * If the mute func is not set, assume the node should never be muted,
 			 * and hence execute it!
 			 */
+			if (node->typeinfo->compatibility != NODE_OLD_SHADING)
+				break;
 			if (node->typeinfo->execfunc)
 				node->typeinfo->execfunc(callerdata, node, nsin, nsout);
 			else if (node->typeinfo->newexecfunc)
 				node->typeinfo->newexecfunc(callerdata, thread, node, nodeexec->data, nsin, nsout);
 		}
 	}
+	
+	/* signal to switch back to no-node render */
+	if (node)
+		return 0;
+	return 1;
 }

Modified: trunk/blender/source/blender/nodes/intern/node_exec.h
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_exec.h	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/nodes/intern/node_exec.h	2013-01-24 16:11:07 UTC (rev 54081)
@@ -79,6 +79,6 @@
 
 struct bNodeThreadStack *ntreeGetThreadStack(struct bNodeTreeExec *exec, int thread);
 void ntreeReleaseThreadStack(struct bNodeThreadStack *nts);
-void ntreeExecThreadNodes(struct bNodeTreeExec *exec, struct bNodeThreadStack *nts, void *callerdata, int thread);
+int ntreeExecThreadNodes(struct bNodeTreeExec *exec, struct bNodeThreadStack *nts, void *callerdata, int thread);
 
 #endif

Modified: trunk/blender/source/blender/nodes/shader/node_shader_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/shader/node_shader_tree.c	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/nodes/shader/node_shader_tree.c	2013-01-24 16:11:07 UTC (rev 54081)
@@ -248,7 +248,8 @@
 	}
 }
 
-void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
+/* only for Blender internal */
+int ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
 {
 	ShaderCallData scd;
 	/**
@@ -258,6 +259,7 @@
 	Material *mat = shi->mat;
 	bNodeThreadStack *nts = NULL;
 	bNodeTreeExec *exec = ntree->execdata;
+	int compat;
 	
 	/* convert caller data to struct */
 	scd.shi = shi;
@@ -277,13 +279,17 @@
 	}
 	
 	nts = ntreeGetThreadStack(exec, shi->thread);
-	ntreeExecThreadNodes(exec, nts, &scd, shi->thread);
+	compat = ntreeExecThreadNodes(exec, nts, &scd, shi->thread);
 	ntreeReleaseThreadStack(nts);
 	
 	// \note: set material back to preserved material
 	shi->mat = mat;
+		
 	/* better not allow negative for now */
 	if (shr->combined[0] < 0.0f) shr->combined[0] = 0.0f;
 	if (shr->combined[1] < 0.0f) shr->combined[1] = 0.0f;
 	if (shr->combined[2] < 0.0f) shr->combined[2] = 0.0f;
+	
+	/* if compat is zero, it has been using non-compatible nodes */
+	return compat;
 }

Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c	2013-01-24 14:48:08 UTC (rev 54080)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c	2013-01-24 16:11:07 UTC (rev 54081)
@@ -151,6 +151,7 @@
 /* do a shade, finish up some passes, apply mist */
 void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr)
 {
+	int compat = 0;
 	float alpha;
 	
 	/* ------  main shading loop -------- */
@@ -158,10 +159,11 @@
 	memset(&shi->raycounter, 0, sizeof(shi->raycounter));
 #endif
 	
-	if (shi->mat->nodetree && shi->mat->use_nodes) {
-		ntreeShaderExecTree(shi->mat->nodetree, shi, shr);
-	}
-	else {
+	if (shi->mat->nodetree && shi->mat->use_nodes)
+		compat = ntreeShaderExecTree(shi->mat->nodetree, shi, shr);
+	
+	/* also run this when node shaders fail, due to incompatible shader nodes */
+	if (compat == 0) {
 		/* copy all relevant material vars, note, keep this synced with render_types.h */
 		shade_input_init_material(shi);
 		




More information about the Bf-blender-cvs mailing list