[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33912] trunk/blender/source/blender: Bugfix #25392

Ton Roosendaal ton at blender.org
Mon Dec 27 20:26:39 CET 2010


Revision: 33912
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33912
Author:   ton
Date:     2010-12-27 20:26:38 +0100 (Mon, 27 Dec 2010)

Log Message:
-----------
Bugfix #25392

Compositor: Texture node didn't use texture-nodes itself.
Now composites initialize texture nodes correctly.

Also reviewed the fix for crashing texture nodes for displace.
It appears texture nodes also are used for sculpt/paint 
brushes, in these cases it can be allowed again. But, don't
do this during rendering for now!

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/modifiers/intern/MOD_util.c
    trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
    trunk/blender/source/blender/render/intern/source/texture.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2010-12-27 18:54:43 UTC (rev 33911)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2010-12-27 19:26:38 UTC (rev 33912)
@@ -2474,7 +2474,26 @@
 	return NULL;
 }
 
+/* check if texture nodes need exec or end */
+static  void ntree_composite_texnode(bNodeTree *ntree, int init)
+{
+	bNode *node;
+	
+	for(node= ntree->nodes.first; node; node= node->next) {
+		if(node->type==CMP_NODE_TEXTURE && node->id) {
+			Tex *tex= (Tex *)node->id;
+			if(tex->nodetree && tex->use_nodes) {
+				/* has internal flag to detect it only does it once */
+				if(init)
+					ntreeBeginExecTree(tex->nodetree); 
+				else
+					ntreeEndExecTree(tex->nodetree);
+			}
+		}
+	}
 
+}
+
 /* optimized tree execute test for compositing */
 void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
 {
@@ -2489,6 +2508,7 @@
 		ntreeInitPreview(ntree, 0, 0);
 	
 	ntreeBeginExecTree(ntree);
+	ntree_composite_texnode(ntree, 1);
 	
 	/* prevent unlucky accidents */
 	if(G.background)

Modified: trunk/blender/source/blender/modifiers/intern/MOD_util.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_util.c	2010-12-27 18:54:43 UTC (rev 33911)
+++ trunk/blender/source/blender/modifiers/intern/MOD_util.c	2010-12-27 19:26:38 UTC (rev 33912)
@@ -53,7 +53,8 @@
 {
 	int result_type;
 
-	result_type = multitex_ext(texture, tex_co, NULL, NULL, 0, texres);
+	/* no node textures for now */
+	result_type = multitex_ext_safe(texture, tex_co, texres);
 
 	/* if the texture gave an RGB value, we assume it didn't give a valid
 	* intensity, so calculate one (formula from do_material_tex).

Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2010-12-27 18:54:43 UTC (rev 33911)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2010-12-27 19:26:38 UTC (rev 33912)
@@ -189,7 +189,11 @@
 /* node shaders... */
 struct Tex;
 struct MTex;
+/* this one uses nodes */
 int	multitex_ext(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
+/* nodes disabled */
+int multitex_ext_safe(struct Tex *tex, float *texvec, struct TexResult *texres);
+/* only for internal node usage */
 int multitex_nodes(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres,
 	short thread, short which_output, struct ShadeInput *shi, struct MTex *mtex);
 

Modified: trunk/blender/source/blender/render/intern/source/texture.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/texture.c	2010-12-27 18:54:43 UTC (rev 33911)
+++ trunk/blender/source/blender/render/intern/source/texture.c	2010-12-27 19:26:38 UTC (rev 33912)
@@ -1348,18 +1348,24 @@
 
 /* Warning, if the texres's values are not declared zero, check the return value to be sure
  * the color values are set before using the r/g/b values, otherwise you may use uninitialized values - Campbell */
-/* extern-tex doesn't support nodes (ntreeBeginExec() can't be called when rendering is going on) */
 int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
 {
+	return multitex_nodes(tex, texvec, dxt, dyt, osatex, texres, 0, 0, NULL, NULL);
+}
+
+/* extern-tex doesn't support nodes (ntreeBeginExec() can't be called when rendering is going on) */
+int multitex_ext_safe(Tex *tex, float *texvec, TexResult *texres)
+{
 	int use_nodes= tex->use_nodes, retval;
 	
 	tex->use_nodes= 0;
-	retval= multitex_nodes(tex, texvec, dxt, dyt, osatex, texres, 0, 0, NULL, NULL);
+	retval= multitex_nodes(tex, texvec, NULL, NULL, 0, texres, 0, 0, NULL, NULL);
 	tex->use_nodes= use_nodes;
 	
 	return retval;
 }
 
+
 /* ------------------------------------------------------------------------- */
 
 /* in = destination, tex = texture, out = previous color */





More information about the Bf-blender-cvs mailing list