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:
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/addon/properties.py3
-rw-r--r--intern/cycles/blender/addon/ui.py13
-rw-r--r--intern/cycles/blender/blender_session.cpp8
-rw-r--r--intern/cycles/blender/blender_sync.cpp6
-rw-r--r--intern/cycles/blender/blender_sync.h1
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 */