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:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-10-11 12:54:04 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-10-11 12:55:11 +0300
commit4370f8ffbde44442855275204689cc9ff3596306 (patch)
treed8111dd9eff0610d61f3a4bddf891a997b309201
parent3e460b68d91ee2452f32e89f92ab5a6db590034b (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.
-rw-r--r--source/blender/blenkernel/intern/mesh.c27
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);
}
}