Fix #29555: cycles crash rendering with no material in material slot.
This commit is contained in:
@@ -233,9 +233,9 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated)
|
||||
BL::Object::material_slots_iterator slot;
|
||||
for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot) {
|
||||
if(render_layer.material_override)
|
||||
find_shader(render_layer.material_override, used_shaders);
|
||||
find_shader(render_layer.material_override, used_shaders, scene->default_surface);
|
||||
else
|
||||
find_shader(slot->material(), used_shaders);
|
||||
find_shader(slot->material(), used_shaders, scene->default_surface);
|
||||
}
|
||||
|
||||
if(used_shaders.size() == 0)
|
||||
|
||||
@@ -137,7 +137,7 @@ void BlenderSync::sync_light(BL::Object b_parent, int b_index, BL::Object b_ob,
|
||||
/* shader */
|
||||
vector<uint> used_shaders;
|
||||
|
||||
find_shader(b_lamp, used_shaders);
|
||||
find_shader(b_lamp, used_shaders, scene->default_light);
|
||||
|
||||
if(used_shaders.size() == 0)
|
||||
used_shaders.push_back(scene->default_light);
|
||||
|
||||
@@ -36,9 +36,9 @@ typedef map<void*, SocketPair> PtrSockMap;
|
||||
|
||||
/* Find */
|
||||
|
||||
void BlenderSync::find_shader(BL::ID id, vector<uint>& used_shaders)
|
||||
void BlenderSync::find_shader(BL::ID id, vector<uint>& used_shaders, int default_shader)
|
||||
{
|
||||
Shader *shader = shader_map.find(id);
|
||||
Shader *shader = (id)? shader_map.find(id): scene->shaders[default_shader];
|
||||
|
||||
for(size_t i = 0; i < scene->shaders.size(); i++) {
|
||||
if(scene->shaders[i] == shader) {
|
||||
|
||||
@@ -81,7 +81,7 @@ private:
|
||||
void sync_light(BL::Object b_parent, int b_index, BL::Object b_ob, Transform& tfm);
|
||||
|
||||
/* util */
|
||||
void find_shader(BL::ID id, vector<uint>& used_shaders);
|
||||
void find_shader(BL::ID id, vector<uint>& used_shaders, int default_shader);
|
||||
bool object_is_modified(BL::Object b_ob);
|
||||
bool object_is_mesh(BL::Object b_ob);
|
||||
bool object_is_light(BL::Object b_ob);
|
||||
|
||||
Reference in New Issue
Block a user