diff options
author | Ton Roosendaal <ton@blender.org> | 2006-06-17 16:26:28 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-06-17 16:26:28 +0400 |
commit | b159b273293dd606e780e3da74584e516635a408 (patch) | |
tree | 096c2262c6b7c125aa808cc5ba73351e7f69afcb /source | |
parent | 16bce562d0ecb045627239cdaf00d510b3b6935e (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')
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 35 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node_shaders.c | 1 |
2 files changed, 24 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 */ } } diff --git a/source/blender/blenkernel/intern/node_shaders.c b/source/blender/blenkernel/intern/node_shaders.c index 21c54c83a1a..e810355f865 100644 --- a/source/blender/blenkernel/intern/node_shaders.c +++ b/source/blender/blenkernel/intern/node_shaders.c @@ -732,6 +732,7 @@ void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr) } /* go over all used Geometry and Texture nodes, and return a texco flag */ +/* no group inside needed, this function is called for groups too */ int ntreeShaderGetTexco(bNodeTree *ntree, int osa) { bNode *node; |