Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-06-17 16:26:28 +0400
committerTon Roosendaal <ton@blender.org>2006-06-17 16:26:28 +0400
commitb159b273293dd606e780e3da74584e516635a408 (patch)
tree096c2262c6b7c125aa808cc5ba73351e7f69afcb /source/blender/blenkernel/intern/material.c
parent16bce562d0ecb045627239cdaf00d510b3b6935e (diff)
Bugfix 4346
Node Shaders: the code checking for all required texture coordinates did not test Groups inside a tree, so textures didn't render properly always.
Diffstat (limited to 'source/blender/blenkernel/intern/material.c')
-rw-r--r--source/blender/blenkernel/intern/material.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index d88829a0a53..43e96c40ef4 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -618,25 +618,36 @@ static void do_init_render_material(Material *ma, int osa, float *amb)
ma->mode_l= ma->mode;
}
-void init_render_material(Material *mat, int osa, float *amb)
+static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int osa, float *amb)
{
- do_init_render_material(mat, osa, amb);
+ bNode *node;
- if(mat->nodetree && mat->use_nodes) {
- bNode *node;
-
- for(node=mat->nodetree->nodes.first; node; node= node->next) {
- if(node->id && GS(node->id->name)==ID_MA) {
+ for(node=ntree->nodes.first; node; node= node->next) {
+ if(node->id) {
+ if(GS(node->id->name)==ID_MA) {
Material *ma= (Material *)node->id;
- if(ma!=mat) {
+ if(ma!=basemat) {
do_init_render_material(ma, osa, amb);
- mat->texco |= ma->texco;
- mat->mode_l |= ma->mode_l;
+ basemat->texco |= ma->texco;
+ basemat->mode_l |= ma->mode_l;
}
}
+ else if(node->type==NODE_GROUP)
+ init_render_nodetree((bNodeTree *)node->id, basemat, osa, amb);
}
- /* parses the geom nodes */
- mat->texco |= ntreeShaderGetTexco(mat->nodetree, osa);
+ }
+ /* parses the geom+tex nodes */
+ basemat->texco |= ntreeShaderGetTexco(ntree, osa);
+}
+
+void init_render_material(Material *mat, int osa, float *amb)
+{
+
+ do_init_render_material(mat, osa, amb);
+
+ if(mat->nodetree && mat->use_nodes) {
+ init_render_nodetree(mat->nodetree, mat, osa, amb);
+
ntreeBeginExecTree(mat->nodetree); /* has internal flag to detect it only does it once */
}
}