[Bf-blender-cvs] [9345d2d] master: Fix T42767: Subsurfacing union boolean with same-named UVs crashes Blender

Sergey Sharybin noreply at git.blender.org
Tue Dec 2 13:50:39 CET 2014


Commit: 9345d2d723733b84a8c8fb3bc387b812f951f77f
Author: Sergey Sharybin
Date:   Tue Dec 2 17:49:40 2014 +0500
Branches: master
https://developer.blender.org/rB9345d2d723733b84a8c8fb3bc387b812f951f77f

Fix T42767: Subsurfacing union boolean with same-named UVs crashes Blender

Was own mistake in handling custom data layers in boolean modifier.

Campbell, do you mind double-checking if it's all correct?

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

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/modifiers/intern/MOD_boolean_util.c

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

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index a71f695..1915a05 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -77,7 +77,7 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm);
 #include "GPU_glew.h"
 
 /* very slow! enable for testing only! */
-// #define USE_MODIFIER_VALIDATE
+//#define USE_MODIFIER_VALIDATE
 
 #ifdef USE_MODIFIER_VALIDATE
 #  define ASSERT_IS_VALID_DM(dm) (BLI_assert((dm == NULL) || (DM_is_valid(dm) == true)))
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c
index 6e62a21..061b119 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.c
+++ b/source/blender/modifiers/intern/MOD_boolean_util.c
@@ -365,14 +365,6 @@ BLI_INLINE MPoly *which_mpoly(ExportMeshData *export_data, int which_mesh)
 	return mpoly;
 }
 
-static void allocate_custom_layers(CustomData *data, int type, int num_elements, int num_layers)
-{
-	int i;
-	for (i = 0; i < num_layers; i++) {
-		CustomData_add_layer(data, type, CD_DEFAULT, NULL, num_elements);
-	}
-}
-
 /* Create new external mesh */
 static void exporter_InitGeomArrays(ExportMeshData *export_data,
                                     int num_verts, int num_edges,
@@ -392,24 +384,15 @@ static void exporter_InitGeomArrays(ExportMeshData *export_data,
 	export_data->mloop = dm->getLoopArray(dm);
 	export_data->mpoly = dm->getPolyArray(dm);
 
-	/* Allocate layers for UV layers and vertex colors.
-	 * Without this interpolation of those data will not happen.
-	 */
-	allocate_custom_layers(&dm->loopData, CD_MLOOPCOL, num_loops,
-	                       CustomData_number_of_layers(&dm_left->loopData, CD_MLOOPCOL));
-	allocate_custom_layers(&dm->loopData, CD_MLOOPUV, num_loops,
-	                       CustomData_number_of_layers(&dm_left->loopData, CD_MLOOPUV));
-
-	allocate_custom_layers(&dm->loopData, CD_MLOOPCOL, num_loops,
-	                       CustomData_number_of_layers(&dm_right->loopData, CD_MLOOPCOL));
-	allocate_custom_layers(&dm->loopData, CD_MLOOPUV, num_loops,
-	                       CustomData_number_of_layers(&dm_right->loopData, CD_MLOOPUV));
-
 	/* Merge custom data layers from operands.
 	 *
 	 * Will only create custom data layers for all the layers which appears in
 	 * the operand. Data for those layers will not be allocated or initialized.
 	 */
+
+	CustomData_merge(&dm_left->loopData, &dm->loopData, merge_mask, CD_DEFAULT, num_loops);
+	CustomData_merge(&dm_right->loopData, &dm->loopData, merge_mask, CD_DEFAULT, num_loops);
+
 	CustomData_merge(&dm_left->polyData, &dm->polyData, merge_mask, CD_DEFAULT, num_polys);
 	CustomData_merge(&dm_right->polyData, &dm->polyData, merge_mask, CD_DEFAULT, num_polys);




More information about the Bf-blender-cvs mailing list