diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-05-15 12:25:42 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-05-15 12:25:42 +0400 |
commit | 4fcd44d3897403e6c87abf5a6020153c0d220d2d (patch) | |
tree | 8f752616508f1645fb79627df86c8bdbf62ab935 /source/blender/editors/render | |
parent | cd089ea321666817336e5bb7b3eba7d4ecc74479 (diff) |
Fix #35362: using dyntopo gives wrong render results
Made it so dynamic topology will flush changes from
SculptSession->bm to Object->me.
Used the same approach as sculptsession_bm_to_me does,
but instead of using DAG_id_tag_update used in-place
DerivedMesh release. Otherwise this lead to some
update issues resulting in missed object after render.
Also fixed multires modifier not being applied for
render when rendering from dyntopo sculpt mode.
P.S. Apparently sculpsession_bm_to_me was declared
in BKE_paint.h but implemented in object.c.
Rather confusing and better make it so this
functions are declared and implemented in
consistent files. But will solve this in a
separate commit.
Diffstat (limited to 'source/blender/editors/render')
-rw-r--r-- | source/blender/editors/render/render_internal.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 3e6d426eb06..293eba0f658 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -40,6 +40,7 @@ #include "BLF_translation.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_view3d_types.h" #include "DNA_userdef_types.h" @@ -53,6 +54,7 @@ #include "BKE_main.h" #include "BKE_node.h" #include "BKE_multires.h" +#include "BKE_paint.h" #include "BKE_report.h" #include "BKE_sequencer.h" #include "BKE_screen.h" @@ -539,6 +541,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even const short is_write_still = RNA_boolean_get(op->ptr, "write_still"); struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL; const char *name; + Object *active_object = CTX_data_active_object(C); /* only one render job at a time */ if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER)) @@ -572,7 +575,10 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even WM_cursor_wait(1); /* flush multires changes (for sculpt) */ - multires_force_render_update(CTX_data_active_object(C)); + multires_force_render_update(active_object); + + /* flush changes from dynamic topology sculpt */ + sculptsession_bm_to_me_for_render(active_object); /* cleanup sequencer caches before starting user triggered render. * otherwise, invalidated cache entries can make their way into |