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:
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_multires.h4
-rw-r--r--source/blender/blenkernel/intern/multires.c14
2 files changed, 14 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 33672b5d397..c5955a9af8d 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -49,7 +49,9 @@ void multires_customdata_delete(struct Mesh *me);
void multires_set_tot_level(struct Object *ob, struct MultiresModifierData *mmd, int lvl);
-void multires_mark_as_modified(struct Object *ob, enum MultiresModifiedFlags flags);
+void multires_mark_as_modified(struct Depsgraph *depsgraph,
+ struct Object *object,
+ enum MultiresModifiedFlags flags);
void multires_force_update(struct Object *ob);
void multires_force_render_update(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 17d6b623b33..29337ca9985 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -385,12 +385,20 @@ static void multires_ccg_mark_as_modified(SubdivCCG *subdiv_ccg, MultiresModifie
}
}
-void multires_mark_as_modified(Object *ob, MultiresModifiedFlags flags)
+void multires_mark_as_modified(Depsgraph *depsgraph, Object *object, MultiresModifiedFlags flags)
{
- if (ob == NULL) {
+ if (object == NULL) {
return;
}
- Mesh *mesh = ob->data;
+ /* NOTE: CCG live inside of evaluated object.
+ *
+ * While this is a bit weird to tag the only one, this is how other areas were built
+ * historically: they are tagging multires for update and then rely on object re-evaluation to
+ * do an actual update.
+ *
+ * In a longer term maybe special dependency graph tag can help sanitizing this a bit. */
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
+ Mesh *mesh = object_eval->data;
SubdivCCG *subdiv_ccg = mesh->runtime.subdiv_ccg;
if (subdiv_ccg == NULL) {
return;