[Bf-blender-cvs] [d162be62469] blender2.8: Multires: Fix wrong apply deform results when multires has sculpt already

Sergey Sharybin noreply at git.blender.org
Fri Aug 24 17:00:37 CEST 2018


Commit: d162be62469a7a7ad341905fe9eeed63c14ed8d5
Author: Sergey Sharybin
Date:   Fri Aug 24 17:00:08 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd162be62469a7a7ad341905fe9eeed63c14ed8d5

Multires: Fix wrong apply deform results when multires has sculpt already

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

M	source/blender/blenkernel/BKE_subdiv.h
M	source/blender/blenkernel/intern/subdiv_displacement_multires.c
M	source/blender/modifiers/intern/MOD_multires.c

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

diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h
index 76539383f16..aa14f9724fb 100644
--- a/source/blender/blenkernel/BKE_subdiv.h
+++ b/source/blender/blenkernel/BKE_subdiv.h
@@ -416,7 +416,7 @@ struct Mesh *BKE_subdiv_to_mesh(
 
 void BKE_subdiv_displacement_attach_from_multires(
         Subdiv *subdiv,
-        const struct Object *object,
+        const struct Mesh *mesh,
         const struct MultiresModifierData *mmd);
 
 void BKE_subdiv_displacement_detach(Subdiv *subdiv);
diff --git a/source/blender/blenkernel/intern/subdiv_displacement_multires.c b/source/blender/blenkernel/intern/subdiv_displacement_multires.c
index 7eb47a70588..1e0e2ae5152 100644
--- a/source/blender/blenkernel/intern/subdiv_displacement_multires.c
+++ b/source/blender/blenkernel/intern/subdiv_displacement_multires.c
@@ -369,10 +369,9 @@ static int count_num_ptex_faces(const Mesh *mesh)
 }
 
 static void displacement_data_init_mapping(SubdivDisplacement *displacement,
-                                           const Object *object)
+                                           const Mesh *mesh)
 {
 	MultiresDisplacementData *data = displacement->user_data;
-	const Mesh *mesh = (Mesh *)object->data;
 	const MPoly *mpoly = mesh->mpoly;
 	const int num_ptex_faces = count_num_ptex_faces(mesh);
 	/* Allocate memory. */
@@ -400,15 +399,14 @@ static void displacement_data_init_mapping(SubdivDisplacement *displacement,
 }
 
 static void displacement_init_data(SubdivDisplacement *displacement,
-                                   const Object *object,
+                                   const Mesh *mesh,
                                    const MultiresModifierData *mmd)
 {
 	MultiresDisplacementData *data = displacement->user_data;
-	Mesh *mesh = (Mesh *)object->data;
 	data->grid_size = (1 << (mmd->totlvl - 1)) + 1;
 	data->mpoly = mesh->mpoly;
 	data->mdisps = CustomData_get_layer(&mesh->ldata, CD_MDISPS);
-	displacement_data_init_mapping(displacement, object);
+	displacement_data_init_mapping(displacement, mesh);
 }
 
 static void displacement_init_functions(SubdivDisplacement *displacement)
@@ -419,13 +417,9 @@ static void displacement_init_functions(SubdivDisplacement *displacement)
 
 void BKE_subdiv_displacement_attach_from_multires(
         Subdiv *subdiv,
-        const Object *object,
+        const Mesh *mesh,
         const MultiresModifierData *mmd)
 {
-	if (object->type != OB_MESH) {
-		BLI_assert(!"Should never be called for non-mesh objects");
-		return;
-	}
 	/* Make sure we dont' have previously assigned displacement. */
 	BKE_subdiv_displacement_detach(subdiv);
 	/* Allocate all required memory. */
@@ -433,7 +427,7 @@ void BKE_subdiv_displacement_attach_from_multires(
 	                                               "multires displacement");
 	displacement->user_data = MEM_callocN(sizeof(MultiresDisplacementData),
 	                                      "multires displacement data");
-	displacement_init_data(displacement, object, mmd);
+	displacement_init_data(displacement, mesh, mmd);
 	displacement_init_functions(displacement);
 	/* Finish. */
 	subdiv->displacement_evaluator = displacement;
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 1298ad63604..24495efa08d 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -169,7 +169,7 @@ static Mesh *applyModifier_subdiv(ModifierData *md,
 		/* Happens on bad topology, ut also on empty input mesh. */
 		return result;
 	}
-	BKE_subdiv_displacement_attach_from_multires(subdiv, object, mmd);
+	BKE_subdiv_displacement_attach_from_multires(subdiv, mesh, mmd);
 	result = BKE_subdiv_to_mesh(subdiv, &mesh_settings, mesh);
 	/* TODO(sergey): Cache subdiv somehow. */
 	// BKE_subdiv_stats_print(&subdiv->stats);



More information about the Bf-blender-cvs mailing list