diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-08-24 18:00:08 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-08-24 18:00:32 +0300 |
commit | d162be62469a7a7ad341905fe9eeed63c14ed8d5 (patch) | |
tree | 8b5881489361e1487d713c9b587392761ab0bd35 | |
parent | 0ba3a1a6863a4b5960933df7d5a12d158da5d0d0 (diff) |
Multires: Fix wrong apply deform results when multires has sculpt already
-rw-r--r-- | source/blender/blenkernel/BKE_subdiv.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subdiv_displacement_multires.c | 16 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_multires.c | 2 |
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); |