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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-02-07 13:16:42 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-02-07 13:16:42 +0300
commitc2122f01ad867a6889812a73e88fd0d657ef2448 (patch)
tree735768e11e724a9adee077c2abda5901b075dc97
parent6920a0cc1dac513f78da5cb721aacc6f0427a0d4 (diff)
Fix #20928: difference boolean modifier is not applied during rendering,
fixed by last depsgraph commit and this extra check to avoid unnecessary free of derivedmesh for sculpt/multires.
-rw-r--r--source/blender/blenkernel/BKE_multires.h1
-rw-r--r--source/blender/blenkernel/intern/multires.c7
-rw-r--r--source/blender/editors/screen/screen_ops.c2
3 files changed, 9 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 2f372f80957..51f3c3424c5 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -40,6 +40,7 @@ struct Object;
void multires_mark_as_modified(struct Object *ob);
void multires_force_update(struct Object *ob);
+void multires_force_render_update(struct Object *ob);
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
int local_mmd, struct DerivedMesh*, struct Object *, int, int);
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 6ed4f7a7703..20f8d4852ce 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -122,6 +122,7 @@ void multires_mark_as_modified(Object *ob)
void multires_force_update(Object *ob)
{
+
if(ob && ob->derivedFinal) {
ob->derivedFinal->needsFree =1;
ob->derivedFinal->release(ob->derivedFinal);
@@ -129,6 +130,12 @@ void multires_force_update(Object *ob)
}
}
+void multires_force_render_update(Object *ob)
+{
+ if(ob && (ob->mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires))
+ multires_force_update(ob);
+}
+
/* XXX */
#if 0
void multiresModifier_join(Object *ob)
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index d5afd99ea7b..f7aeee14cb7 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -3173,7 +3173,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
WM_cursor_wait(1);
/* flush multires changes (for sculpt) */
- multires_force_update(CTX_data_active_object(C));
+ multires_force_render_update(CTX_data_active_object(C));
/* get editmode results */
ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); /* 0 = does not exit editmode */