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 /source/blender/blenkernel/intern/mesh.c
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.
Diffstat (limited to 'source/blender/blenkernel/intern/mesh.c')
-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);
}
}