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-21 16:40:23 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-08-22 11:21:45 +0300
commit9e11b8e24939fbc73930bc05ddea1f79bb00783f (patch)
tree74f12d38dde314d551fca75044299e6d8dff4408 /source/blender/blenkernel/intern/multires.c
parent6b6c27694e16ee1f21fe562408afc8a1fa4690f6 (diff)
Multires: implement reshape operation
The one which is used by applying deformation modifiers on the multires.
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r--source/blender/blenkernel/intern/multires.c66
1 files changed, 1 insertions, 65 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 995c8a12ebe..f44f1265904 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -359,7 +359,7 @@ MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob, bool use_f
return mmd;
}
-int multires_get_level(Scene *scene, Object *ob, const MultiresModifierData *mmd,
+int multires_get_level(const Scene *scene, const Object *ob, const MultiresModifierData *mmd,
bool render, bool ignore_simplify)
{
if (render)
@@ -421,70 +421,6 @@ void multires_force_render_update(Object *ob)
multires_force_update(ob);
}
-int multiresModifier_reshapeFromDM(struct Depsgraph *depsgraph, Scene *scene, MultiresModifierData *mmd,
- Object *ob, DerivedMesh *srcdm)
-{
- DerivedMesh *mrdm = get_multires_dm(depsgraph, scene, mmd, ob);
-
- if (mrdm && srcdm && mrdm->getNumVerts(mrdm) == srcdm->getNumVerts(srcdm)) {
- multires_mvert_to_ss(mrdm, srcdm->getVertArray(srcdm));
-
- multires_dm_mark_as_modified(mrdm, MULTIRES_COORDS_MODIFIED);
- multires_force_update(ob);
-
- mrdm->release(mrdm);
-
- return 1;
- }
-
- if (mrdm) mrdm->release(mrdm);
-
- return 0;
-}
-
-/* Returns 1 on success, 0 if the src's totvert doesn't match */
-int multiresModifier_reshape(struct Depsgraph *depsgraph, Scene *scene, MultiresModifierData *mmd, Object *dst, Object *src)
-{
- DerivedMesh *srcdm = mesh_get_derived_final(depsgraph, scene, src, CD_MASK_BAREMESH);
- return multiresModifier_reshapeFromDM(depsgraph, scene, mmd, dst, srcdm);
-}
-
-bool multiresModifier_reshapeFromDeformModifier(
- struct Depsgraph *depsgraph, Scene *scene, MultiresModifierData *mmd,
- Object *ob, ModifierData *md)
-{
- DerivedMesh *dm, *ndm;
- int numVerts;
- float (*deformedVerts)[3];
- const ModifierEvalContext mectx = {depsgraph, ob, 0};
-
- if (multires_get_level(scene, ob, mmd, false, true) == 0) {
- return false;
- }
-
- /* Create DerivedMesh for deformation modifier */
- dm = get_multires_dm(depsgraph, scene, mmd, ob);
- numVerts = dm->getNumVerts(dm);
- deformedVerts = MEM_malloc_arrayN(numVerts, sizeof(float[3]), "multiresReshape_deformVerts");
-
- dm->getVertCos(dm, deformedVerts);
- modifier_deformVerts_DM_deprecated(md, &mectx, dm, deformedVerts, numVerts);
-
- ndm = CDDM_copy(dm);
- CDDM_apply_vert_coords(ndm, deformedVerts);
-
- MEM_freeN(deformedVerts);
- dm->release(dm);
-
- /* Reshaping */
- bool result = (multiresModifier_reshapeFromDM(depsgraph, scene, mmd, ob, ndm) != 0);
-
- /* Cleanup */
- ndm->release(ndm);
-
- return result;
-}
-
/* reset the multires levels to match the number of mdisps */
static int get_levels_from_disps(Object *ob)
{