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>2018-08-24 18:00:08 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-08-24 18:00:32 +0300
commitd162be62469a7a7ad341905fe9eeed63c14ed8d5 (patch)
tree8b5881489361e1487d713c9b587392761ab0bd35
parent0ba3a1a6863a4b5960933df7d5a12d158da5d0d0 (diff)
Multires: Fix wrong apply deform results when multires has sculpt already
-rw-r--r--source/blender/blenkernel/BKE_subdiv.h2
-rw-r--r--source/blender/blenkernel/intern/subdiv_displacement_multires.c16
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c2
3 files changed, 7 insertions, 13 deletions
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);