forked from bartvdbraak/blender
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.
This commit is contained in:
parent
3e460b68d9
commit
4370f8ffbd
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user