diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-10-11 12:54:04 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-10-11 12:55:11 +0300 |
commit | 4370f8ffbde44442855275204689cc9ff3596306 (patch) | |
tree | d8111dd9eff0610d61f3a4bddf891a997b309201 /source | |
parent | 3e460b68d91ee2452f32e89f92ab5a6db590034b (diff) |
Fix T49623: Immediately crash trying to render attached file in Cycles
Original fix in this area was not really complete (but was the safest at
the release time). Now all the crazy configurations of slots going out
of sync should be handled here.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 2c6ed0df04b..446aef9be65 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -2368,14 +2368,9 @@ Mesh *BKE_mesh_new_from_object( if (tmpcu->mat) { for (i = tmpcu->totcol; i-- > 0; ) { /* are we an object material or data based? */ - if (ob->matbits[i] && i >= ob->totcol) { - tmpmesh->mat[i] = NULL; - } - else { - tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : tmpcu->mat[i]; - } + tmpmesh->mat[i] = give_current_material(ob, i + 1); - if ((ob->matbits[i] || do_mat_id_data_us) && tmpmesh->mat[i]) { + if (((ob->matbits && ob->matbits[i]) || do_mat_id_data_us) && tmpmesh->mat[i]) { id_us_plus(&tmpmesh->mat[i]->id); } } @@ -2392,14 +2387,9 @@ Mesh *BKE_mesh_new_from_object( if (tmpmb->mat) { for (i = tmpmb->totcol; i-- > 0; ) { /* are we an object material or data based? */ - if (ob->matbits[i] && i >= ob->totcol) { - tmpmesh->mat[i] = NULL; - } - else { - tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : tmpmb->mat[i]; - } + tmpmesh->mat[i] = give_current_material(ob, i + 1); - if ((ob->matbits[i] || do_mat_id_data_us) && tmpmesh->mat[i]) { + if (((ob->matbits[i] && ob->matbits) || do_mat_id_data_us) && tmpmesh->mat[i]) { id_us_plus(&tmpmesh->mat[i]->id); } } @@ -2417,14 +2407,9 @@ Mesh *BKE_mesh_new_from_object( if (origmesh->mat) { for (i = origmesh->totcol; i-- > 0; ) { /* are we an object material or data based? */ - if (ob->matbits[i] && i >= ob->totcol) { - tmpmesh->mat[i] = NULL; - } - else { - tmpmesh->mat[i] = ob->matbits[i] ? ob->mat[i] : origmesh->mat[i]; - } + tmpmesh->mat[i] = give_current_material(ob, i + 1); - if ((ob->matbits[i] || do_mat_id_data_us) && tmpmesh->mat[i]) { + if (((ob->matbits && ob->matbits[i]) || do_mat_id_data_us) && tmpmesh->mat[i]) { id_us_plus(&tmpmesh->mat[i]->id); } } |