[Bf-blender-cvs] [f5c526f] texture_nodes_refactor: Port texture nodes to the exec pool in renderer

Sergey Sharybin noreply at git.blender.org
Sat Oct 11 15:24:22 CEST 2014


Commit: f5c526f29cb1d10538105c151daba60bec3377bf
Author: Sergey Sharybin
Date:   Sat Oct 11 19:22:54 2014 +0600
Branches: texture_nodes_refactor
https://developer.blender.org/rBf5c526f29cb1d10538105c151daba60bec3377bf

Port texture nodes to the exec pool in renderer

This only makes it so renderer uses the proper API to deal with the
tree evaluation. Tree nodes still does nothing because all the delegate
system has been just removed.

Painting and sculpting will also fail and abort .

===================================================================

M	source/blender/blenkernel/BKE_node.h
M	source/blender/editors/sculpt_paint/paint_cursor.c
M	source/blender/editors/sculpt_paint/paint_image.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/nodes/texture/node_texture_tree.c
M	source/blender/render/intern/source/render_texture.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index e0ab69e..8f435a9 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1000,9 +1000,10 @@ struct TexResult;
 int  ntreeTexTagAnimated(struct bNodeTree *ntree);
 void ntreeTexCheckCyclics(struct bNodeTree *ntree);
 
-struct bNodeTreeExec *ntreeTexBeginExecTree(struct bNodeTree *ntree);
+struct bNodeTreeExec *ntreeTexBeginExecTree(struct bNodeTree *ntree) ATTR_WARN_UNUSED_RESULT;
 void ntreeTexEndExecTree(struct bNodeTreeExec *exec);
-int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target,
+int ntreeTexExecTree(bNodeTreeExecPool *pool,
+                     struct bNodeTree *ntree, struct TexResult *target,
                      float coord[3], float dxt[3], float dyt[3], int osatex, const short thread,
                      struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
 
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c
index 4e969dd..b2a236b 100644
--- a/source/blender/editors/sculpt_paint/paint_cursor.c
+++ b/source/blender/editors/sculpt_paint/paint_cursor.c
@@ -209,8 +209,10 @@ static int load_tex(Brush *br, ViewContext *vc, float zoom, bool col, bool prima
 
 		pool = BKE_image_pool_new();
 
-		if (mtex->tex && mtex->tex->nodetree)
-			ntreeTexBeginExecTree(mtex->tex->nodetree);  /* has internal flag to detect it only does it once */
+		if (mtex->tex && mtex->tex->nodetree) {
+			BLI_assert(!"Port over to the new system");
+			//ntreeTexBeginExecTree(mtex->tex->nodetree);  /* has internal flag to detect it only does it once */
+		}
 
 #pragma omp parallel for schedule(static)
 		for (j = 0; j < size; j++) {
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 56ab7c7..51baeb7 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -699,12 +699,16 @@ void paint_brush_init_tex(Brush *brush)
 {
 	/* init mtex nodes */
 	if (brush) {
+#if 0
 		MTex *mtex = &brush->mtex;
 		if (mtex->tex && mtex->tex->nodetree)
 			ntreeTexBeginExecTree(mtex->tex->nodetree);  /* has internal flag to detect it only does it once */
 		mtex = &brush->mask_mtex;
 		if (mtex->tex && mtex->tex->nodetree)
 			ntreeTexBeginExecTree(mtex->tex->nodetree);
+#else
+		BLI_assert(!"Port over to the new system");
+#endif
 	}
 }
 
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 26f810a..7aaa28e 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -4136,8 +4136,10 @@ static void sculpt_brush_init_tex(const Scene *scene, Sculpt *sd, SculptSession
 	MTex *mtex = &brush->mtex;
 
 	/* init mtex nodes */
-	if (mtex->tex && mtex->tex->nodetree)
-		ntreeTexBeginExecTree(mtex->tex->nodetree);  /* has internal flag to detect it only does it once */
+	if (mtex->tex && mtex->tex->nodetree) {
+		//ntreeTexBeginExecTree(mtex->tex->nodetree);  /* has internal flag to detect it only does it once */
+		BLI_assert(!"Port over to the new system");
+	}
 
 	/* TODO: Shouldn't really have to do this at the start of every
 	 * stroke, but sculpt would need some sort of notification when
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c
index fb3eadb..e238d11 100644
--- a/source/blender/nodes/texture/node_texture_tree.c
+++ b/source/blender/nodes/texture/node_texture_tree.c
@@ -269,7 +269,8 @@ void ntreeTexEndExecTree(bNodeTreeExec *exec)
 }
 
 int ntreeTexExecTree(
-        bNodeTree *UNUSED(nodes),
+        bNodeTreeExecPool *exec_tree_pool,
+        bNodeTree *ntree,
         TexResult *texres,
         float co[3],
         float dxt[3], float dyt[3],
@@ -286,7 +287,11 @@ int ntreeTexExecTree(
 	float *nor = texres->nor;
 	int retval = TEX_INT;
 	bNodeThreadStack *nts = NULL;
-	bNodeTreeExec *exec = NULL;
+	bNodeTreeExec *exec;
+
+	exec = BKE_node_tree_exec_pool_get(exec_tree_pool,
+	                                   &ntree->id);
+	BLI_assert(exec != NULL);
 
 	return 0;
 
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 8158950..1708f67 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -125,7 +125,16 @@ static void init_render_texture(Render *re, Tex *tex)
 	}
 	
 	if (tex->nodetree && tex->use_nodes) {
-		ntreeTexBeginExecTree(tex->nodetree); /* has internal flag to detect it only does it once */
+		struct bNodeTreeExec *exec_data;
+		BLI_assert(re != NULL);
+		exec_data = BKE_node_tree_exec_pool_get(re->tree_exec_pool,
+		                                        &tex->nodetree->id);
+		if (exec_data == NULL) {
+			exec_data = ntreeTexBeginExecTree(tex->nodetree); /* has internal flag to detect it only does it once */
+			BKE_node_tree_exec_pool_put(re->tree_exec_pool,
+			                            &tex->nodetree->id,
+			                            exec_data);
+		}
 	}
 }
 
@@ -142,11 +151,15 @@ void init_render_textures(Render *re)
 	}
 }
 
-static void end_render_texture(Tex *tex)
+static void end_render_texture(Render *re, Tex *tex)
 {
 	if (tex && tex->use_nodes && tex->nodetree) {
-		/* ntreeTexEndExecTree(tex->nodetree->execdata); */
-		BLI_assert(!"Need to port thing over");
+		struct bNodeTreeExec *exec_data =
+		        BKE_node_tree_exec_pool_pop(re->tree_exec_pool,
+		                                    &tex->nodetree->id);
+		if (exec_data != NULL) {
+			ntreeTexEndExecTree(exec_data);
+		}
 	}
 }
 
@@ -155,7 +168,7 @@ void end_render_textures(Render *re)
 	Tex *tex;
 	for (tex= re->main->tex.first; tex; tex= tex->id.next)
 		if (tex->id.us)
-			end_render_texture(tex);
+			end_render_texture(re, tex);
 }
 
 /* ------------------------------------------------------------------------- */
@@ -1116,7 +1129,7 @@ static int multitex(Tex *tex, float texvec[3], float dxt[3], float dyt[3], int o
 	texres->talpha = false;  /* is set when image texture returns alpha (considered premul) */
 	
 	if (tex->use_nodes && tex->nodetree) {
-		retval = ntreeTexExecTree(tex->nodetree, texres, texvec, dxt, dyt, osatex, thread,
+		retval = ntreeTexExecTree(R.tree_exec_pool, tex->nodetree, texres, texvec, dxt, dyt, osatex, thread,
 		                          tex, which_output, R.r.cfra, (R.r.scemode & R_TEXNODE_PREVIEW) != 0, NULL, NULL);
 	}
 	else {
@@ -1312,7 +1325,7 @@ static int multitex_mtex(ShadeInput *shi, MTex *mtex, float texvec[3], float dxt
 	if (tex->use_nodes && tex->nodetree) {
 		/* stupid exception here .. but we have to pass shi and mtex to
 		 * textures nodes for 2d mapping and color management for images */
-		return ntreeTexExecTree(tex->nodetree, texres, texvec, dxt, dyt, shi->osatex, shi->thread,
+		return ntreeTexExecTree(R.tree_exec_pool, tex->nodetree, texres, texvec, dxt, dyt, shi->osatex, shi->thread,
 		                        tex, mtex->which_output, R.r.cfra, (R.r.scemode & R_TEXNODE_PREVIEW) != 0, shi, mtex);
 	}
 	else {




More information about the Bf-blender-cvs mailing list