diff options
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r-- | intern/cycles/blender/addon/properties.py | 3 | ||||
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 13 | ||||
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 8 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 1 |
5 files changed, 28 insertions, 3 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 62c1db5a16d..b2d982fdabc 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -36,6 +36,9 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): default=10, min=1, max=2147483647) cls.preview_passes = IntProperty(name="Preview Passes", description="Number of passes to render in the viewport, unlimited if 0", default=0, min=0, max=2147483647) + cls.preview_pause = BoolProperty(name="Pause Preview", description="Pause all viewport preview renders", + default=False) + cls.min_bounces = IntProperty(name="Min Bounces", description="Minimum number of bounces", default=3, min=0, max=1024) cls.max_bounces = IntProperty(name="Max Bounces", description="Maximum number of bounces", diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 4fe9e25d251..ec753590cce 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -473,6 +473,17 @@ def draw_device(self, context): if cscene.device == 'CPU' and engine.with_osl(): layout.prop(cscene, "shading_system") +def draw_pause(self, context): + layout = self.layout + scene = context.scene + + if scene.render.engine == "CYCLES": + view = context.space_data + + if view.viewport_shade == "RENDERED": + cscene = scene.cycles + layout.prop(cscene, "preview_pause", icon="PAUSE", text="") + def get_panels(): return [ bpy.types.RENDER_PT_render, @@ -514,12 +525,14 @@ def get_panels(): def register(): bpy.types.RENDER_PT_render.append(draw_device) + bpy.types.VIEW3D_HT_header.append(draw_pause) for panel in get_panels(): panel.COMPAT_ENGINES.add('CYCLES') def unregister(): bpy.types.RENDER_PT_render.remove(draw_device) + bpy.types.VIEW3D_HT_header.remove(draw_pause) for panel in get_panels(): panel.COMPAT_ENGINES.remove('CYCLES') diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 7be15ca0e3c..62721b7cf10 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -93,6 +93,7 @@ void BlenderSession::create_session() session->scene = scene; session->progress.set_update_callback(function_bind(&BlenderSession::tag_redraw, this)); session->progress.set_cancel_callback(function_bind(&BlenderSession::test_cancel, this)); + session->set_pause(BlenderSync::get_session_pause(b_scene, background)); /* start rendering */ session->reset(width, height, session_params.passes); @@ -159,6 +160,7 @@ void BlenderSession::synchronize() /* increase passes, but never decrease */ session->set_passes(session_params.passes); + session->set_pause(BlenderSync::get_session_pause(b_scene, background)); /* copy recalc flags, outside of mutex so we can decide to do the real synchronization at a later time to not block on running updates */ @@ -178,12 +180,12 @@ void BlenderSession::synchronize() else sync->sync_camera(width, height); + /* unlock */ + session->scene->mutex.unlock(); + /* reset if needed */ if(scene->need_reset()) session->reset(width, height, session_params.passes); - - /* unlock */ - session->scene->mutex.unlock(); } bool BlenderSession::draw(int w, int h) diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index ccfc3bb2bf1..c579253336f 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -185,6 +185,12 @@ SceneParams BlenderSync::get_scene_params(BL::Scene b_scene) /* Session Parameters */ +bool BlenderSync::get_session_pause(BL::Scene b_scene, bool background) +{ + PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); + return (background)? false: get_boolean(cscene, "preview_pause"); +} + SessionParams BlenderSync::get_session_params(BL::Scene b_scene, bool background) { SessionParams params; diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 16ce1998a24..fe60f42bc75 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -61,6 +61,7 @@ public: /* get parameters */ static SceneParams get_scene_params(BL::Scene b_scene); static SessionParams get_session_params(BL::Scene b_scene, bool background); + static bool get_session_pause(BL::Scene b_scene, bool background); private: /* sync */ |