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-16 14:00:24 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-08-16 15:42:06 +0300
commit50cb9b52bb13d6805c9ffdf39f84d0af7592160b (patch)
tree534ed7950b001ea1cf57c81c5ff23b8df5c00c70 /source/blender/blenkernel/intern/multires.c
parent642c6d2fc94b3aadf3c44fddd3e62f98684f2a63 (diff)
Multires: Implement function to get mesh at multires position of stack
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r--source/blender/blenkernel/intern/multires.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index b4fd93afba1..bd6c30606f4 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -49,6 +49,7 @@
#include "BKE_pbvh.h"
#include "BKE_ccg.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_library.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_runtime.h"
@@ -293,6 +294,30 @@ DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, Scene *scene, Multires
return dm;
}
+Mesh *get_multires_mesh(
+ struct Depsgraph *depsgraph,
+ Scene *scene,
+ MultiresModifierData *mmd,
+ Object *ob)
+{
+ Mesh *deformed_mesh = mesh_get_eval_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
+ ModifierEvalContext modifier_ctx = {
+ .depsgraph = depsgraph,
+ .object = ob,
+ .flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY};
+ Mesh *result = modifier_applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh);
+ if (result == deformed_mesh) {
+ /* TODO(sergey): De-duplicate with copy in modifier stack. */
+ BKE_id_copy_ex(NULL, &deformed_mesh->id, (ID **)&result,
+ (LIB_ID_CREATE_NO_MAIN |
+ LIB_ID_CREATE_NO_USER_REFCOUNT |
+ LIB_ID_CREATE_NO_DEG_TAG |
+ LIB_ID_COPY_CD_REFERENCE),
+ false);
+ }
+ return result;
+}
+
MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData *lastmd)
{
ModifierData *md;