diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_multires.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 14 |
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; |