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.
This commit is contained in:
Brecht Van Lommel 2010-02-07 10:16:42 +00:00
parent 6920a0cc1d
commit c2122f01ad
3 changed files with 9 additions and 1 deletions

@ -40,6 +40,7 @@ struct Object;
void multires_mark_as_modified(struct Object *ob); void multires_mark_as_modified(struct Object *ob);
void multires_force_update(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*, struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
int local_mmd, struct DerivedMesh*, struct Object *, int, int); int local_mmd, struct DerivedMesh*, struct Object *, int, int);

@ -122,6 +122,7 @@ void multires_mark_as_modified(Object *ob)
void multires_force_update(Object *ob) void multires_force_update(Object *ob)
{ {
if(ob && ob->derivedFinal) { if(ob && ob->derivedFinal) {
ob->derivedFinal->needsFree =1; ob->derivedFinal->needsFree =1;
ob->derivedFinal->release(ob->derivedFinal); 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 */ /* XXX */
#if 0 #if 0
void multiresModifier_join(Object *ob) void multiresModifier_join(Object *ob)

@ -3173,7 +3173,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
WM_cursor_wait(1); WM_cursor_wait(1);
/* flush multires changes (for sculpt) */ /* 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 */ /* get editmode results */
ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); /* 0 = does not exit editmode */ ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); /* 0 = does not exit editmode */