svn merge ^/trunk/blender -r49118:49143
[blender.git] / intern / cycles / blender / blender_sync.cpp
index ae28453a69684858ac2db3d63718c2f338f54a70..bab467746c782c5aff80828c94d55b7b0a757885 100644 (file)
@@ -40,8 +40,9 @@ CCL_NAMESPACE_BEGIN
 
 /* Constructor */
 
-BlenderSync::BlenderSync(BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_)
-: b_data(b_data_), b_scene(b_scene_),
+BlenderSync::BlenderSync(BL::RenderEngine b_engine_, BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_)
+: b_engine(b_engine_),
+  b_data(b_data_), b_scene(b_scene_),
   shader_map(&scene_->shaders),
   object_map(&scene_->objects),
   mesh_map(&scene_->meshes),
@@ -287,7 +288,7 @@ bool BlenderSync::get_session_pause(BL::Scene b_scene, bool background)
        return (background)? false: get_boolean(cscene, "preview_pause");
 }
 
-SessionParams BlenderSync::get_session_params(BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
+SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
 {
        SessionParams params;
        PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
@@ -341,25 +342,36 @@ SessionParams BlenderSync::get_session_params(BL::UserPreferences b_userpref, BL
                }
        }
 
+       /* tiles */
+       int tile_x = b_engine.tile_x();
+       int tile_y = b_engine.tile_y();
+
+       if(tile_x == 0 || tile_y == 0) {
+               tile_x = get_int(cscene, "debug_tile_size");
+               tile_y = tile_x;
+
+               params.tile_size = make_int2(tile_x, tile_y);
+               params.min_size = get_int(cscene, "debug_min_size");
+       }
+       else {
+               params.tile_size = make_int2(tile_x, tile_y);
+               params.min_size = min(tile_x, tile_y);
+       }
+
        /* other parameters */
        params.threads = b_scene.render().threads();
-       params.tile_size = get_int(cscene, "debug_tile_size");
-       params.min_size = get_int(cscene, "debug_min_size");
+
        params.cancel_timeout = get_float(cscene, "debug_cancel_timeout");
        params.reset_timeout = get_float(cscene, "debug_reset_timeout");
        params.text_timeout = get_float(cscene, "debug_text_timeout");
 
        if(background) {
-               params.progressive = true;
+               params.progressive = false;
                params.min_size = INT_MAX;
        }
        else
                params.progressive = true;
        
-       /* todo: multi device only works with single tiles now */
-       if(params.device.type == DEVICE_MULTI)
-               params.tile_size = INT_MAX;
-
        return params;
 }