[Bf-blender-cvs] [4370f8f] master: Fix T49623: Immediately crash trying to render attached file in Cycles

Sergey Sharybin noreply at git.blender.org
Tue Oct 11 11:55:30 CEST 2016


Commit: 4370f8ffbde44442855275204689cc9ff3596306
Author: Sergey Sharybin
Date:   Tue Oct 11 11:54:04 2016 +0200
Branches: master
https://developer.blender.org/rB4370f8ffbde44442855275204689cc9ff3596306

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.

===================================================================

M	source/blender/blenkernel/intern/mesh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 2c6ed0d..446aef9 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);
 						}
 					}




More information about the Bf-blender-cvs mailing list