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:
authorIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-04-23 10:02:06 +0400
committerIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-04-23 10:03:34 +0400
commitfc28732ba65a57bccd47940249999809c2c93eb0 (patch)
tree1ba4dbb7e6644adc029ae36f00e5ac86d27e4b1f /source/blender/blenkernel/intern/material.c
parent0e6b28e04b291dfe797432532208065c52ff3fdb (diff)
Blender Internal: Add material property "Cast" which can disable both ray and buffer shadows.
Also refactor: - Material property UI related to shadows - Preparation of OR-ed mode flags (ma->mode_l) of render materials Reviewers: brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D313
Diffstat (limited to 'source/blender/blenkernel/intern/material.c')
-rw-r--r--source/blender/blenkernel/intern/material.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 01bbd1db003..1ee84fb0058 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -203,6 +203,7 @@ void init_material(Material *ma)
ma->game.face_orientation = 0;
ma->mode = MA_TRACEBLE | MA_SHADBUF | MA_SHADOW | MA_RAYBIAS | MA_TANGENT_STR | MA_ZTRANSP;
+ ma->mode2 = MA_CASTSHADOW;
ma->shade_flag = MA_APPROX_OCCLUSION;
ma->preview = NULL;
}
@@ -1009,16 +1010,6 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb)
ma->ambg = ma->amb * amb[1];
ma->ambb = ma->amb * amb[2];
}
- /* will become or-ed result of all node modes */
- ma->mode_l = ma->mode;
- ma->mode_l &= ~MA_SHLESS;
-
- if (ma->strand_surfnor > 0.0f)
- ma->mode_l |= MA_STR_SURFDIFF;
-
- /* parses the geom+tex nodes */
- if (ma->nodetree && ma->use_nodes)
- ntreeShaderGetTexcoMode(ma->nodetree, r_mode, &ma->texco, &ma->mode_l);
/* local group override */
if ((ma->shade_flag & MA_GROUP_LOCAL) && ma->id.lib && ma->group && ma->group->id.lib) {
@@ -1043,8 +1034,16 @@ static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode
if (ma != basemat) {
do_init_render_material(ma, r_mode, amb);
basemat->texco |= ma->texco;
- basemat->mode_l |= ma->mode_l & ~(MA_TRANSP | MA_ZTRANSP | MA_RAYTRANSP);
}
+
+ basemat->mode_l |= ma->mode & ~(MA_MODE_PIPELINE | MA_SHLESS);
+ basemat->mode2_l |= ma->mode2 & ~MA_MODE2_PIPELINE;
+ /* basemat only considered shadeless if all node materials are too */
+ if(!(ma->mode & MA_SHLESS))
+ basemat->mode_l &= ~MA_SHLESS;
+
+ if (ma->strand_surfnor > 0.0f)
+ basemat->mode_l |= MA_STR_SURFDIFF;
}
else if (node->type == NODE_GROUP)
init_render_nodetree((bNodeTree *)node->id, basemat, r_mode, amb);
@@ -1058,11 +1057,27 @@ void init_render_material(Material *mat, int r_mode, float *amb)
do_init_render_material(mat, r_mode, amb);
if (mat->nodetree && mat->use_nodes) {
+ /* mode_l will take the pipeline options from the main material, and the or-ed
+ * result of non-pipeline options from the nodes. shadeless is an exception,
+ * mode_l will have it set when all node materials are shadeless. */
+ mat->mode_l = (mat->mode & MA_MODE_PIPELINE) | MA_SHLESS;
+ mat->mode2_l = mat->mode2 & MA_MODE2_PIPELINE;
+
+ /* parses the geom+tex nodes */
+ ntreeShaderGetTexcoMode(mat->nodetree, r_mode, &mat->texco, &mat->mode_l);
+
init_render_nodetree(mat->nodetree, mat, r_mode, amb);
if (!mat->nodetree->execdata)
mat->nodetree->execdata = ntreeShaderBeginExecTree(mat->nodetree);
}
+ else {
+ mat->mode_l = mat->mode;
+ mat->mode2_l = mat->mode2;
+
+ if (mat->strand_surfnor > 0.0f)
+ mat->mode_l |= MA_STR_SURFDIFF;
+ }
}
void init_render_materials(Main *bmain, int r_mode, float *amb)
@@ -1087,7 +1102,7 @@ void init_render_materials(Main *bmain, int r_mode, float *amb)
init_render_material(ma, r_mode, amb);
}
- do_init_render_material(&defmaterial, r_mode, amb);
+ init_render_material(&defmaterial, r_mode, amb);
}
/* only needed for nodes now */