Fix T45631: Ambient update rendered bug

The issue was in fact caused by both preview and viewport renderers affecting
on the default material, conflicting with each other.

Preview render doesn't really need default material, so we can safely skip it's
initialization in the render pipeline for preview rendering.
This commit is contained in:
Sergey Sharybin
2015-08-26 14:51:13 +02:00
parent d33557c52e
commit 76df0ec93a
3 changed files with 8 additions and 6 deletions

View File

@@ -98,7 +98,7 @@ void BKE_material_clear_id(struct ID *id, bool update_data);
/* rendering */
void init_render_material(struct Material *, int, float *);
void init_render_materials(struct Main *, int, float *);
void init_render_materials(struct Main *, int r_mode, float *amd, bool do_default_material);
void end_render_material(struct Material *);
void end_render_materials(struct Main *);

View File

@@ -1132,7 +1132,7 @@ void init_render_material(Material *mat, int r_mode, float *amb)
}
}
void init_render_materials(Main *bmain, int r_mode, float *amb)
void init_render_materials(Main *bmain, int r_mode, float *amb, bool do_default_material)
{
Material *ma;
@@ -1153,8 +1153,10 @@ void init_render_materials(Main *bmain, int r_mode, float *amb)
if (ma->id.us)
init_render_material(ma, r_mode, amb);
}
init_render_material(&defmaterial, r_mode, amb);
if (do_default_material) {
init_render_material(&defmaterial, r_mode, amb);
}
}
/* only needed for nodes now */

View File

@@ -5210,7 +5210,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
/* still bad... doing all */
init_render_textures(re);
copy_v3_v3(amb, &re->wrld.ambr);
init_render_materials(re->main, re->r.mode, amb);
init_render_materials(re->main, re->r.mode, amb, (re->r.scemode & R_BUTS_PREVIEW) == 0);
set_node_shader_lamp_loop(shade_material_loop);
/* MAKE RENDER DATA */
@@ -5941,7 +5941,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
init_render_textures(re);
copy_v3_v3(amb, &re->wrld.ambr);
init_render_materials(re->main, re->r.mode, amb);
init_render_materials(re->main, re->r.mode, amb, true);
set_node_shader_lamp_loop(shade_material_loop);