From 6ff6883f99d2faeb71359b9e2333a684e0ccf5ca Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 4 Jul 2014 16:32:17 +0600 Subject: [PATCH] Fix T40843: Cycles does not support viewport render override --- intern/cycles/blender/blender_sync.cpp | 4 +++- source/blender/makesrna/intern/rna_render.c | 4 ++++ source/blender/render/extern/include/RE_engine.h | 1 + source/blender/render/intern/include/render_types.h | 2 +- source/blender/render/intern/source/external_engine.c | 1 + source/blender/render/intern/source/pipeline.c | 1 + 6 files changed, 11 insertions(+), 2 deletions(-) diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 042bbca9497..19898bfa573 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -316,6 +316,8 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) BL::RenderSettings::layers_iterator b_rlay; int use_layer_samples = RNA_enum_get(&cscene, "use_layer_samples"); bool first_layer = true; + uint layer_override = get_layer(b_engine.layer_override()); + uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers()); for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) { if((!layer && first_layer) || (layer && b_rlay->name() == layer)) { @@ -324,7 +326,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) render_layer.holdout_layer = get_layer(b_rlay->layers_zmask()); render_layer.exclude_layer = get_layer(b_rlay->layers_exclude()); - render_layer.scene_layer = get_layer(b_scene.layers()) & ~render_layer.exclude_layer; + render_layer.scene_layer = scene_layers & ~render_layer.exclude_layer; render_layer.scene_layer |= render_layer.exclude_layer & render_layer.holdout_layer; render_layer.layer = get_layer(b_rlay->layers()); diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 3d0c455b4b5..284377d34f9 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -544,6 +544,10 @@ static void rna_def_render_engine(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "camera_override"); RNA_def_property_struct_type(prop, "Object"); + prop = RNA_def_property(srna, "layer_override", PROP_BOOLEAN, PROP_LAYER_MEMBER); + RNA_def_property_boolean_sdna(prop, NULL, "layer_override", 1); + RNA_def_property_array(prop, 20); + prop = RNA_def_property(srna, "tile_x", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "tile_x"); prop = RNA_def_property(srna, "tile_y", PROP_INT, PROP_UNSIGNED); diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index c76cf3406a1..24f8cbee401 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -104,6 +104,7 @@ typedef struct RenderEngine { int flag; struct Object *camera_override; + unsigned int layer_override; int tile_x; int tile_y; diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index d16fe6fd691..536a2b8a85f 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -192,7 +192,7 @@ struct Render RenderData r; World wrld; struct Object *camera_override; - unsigned int lay; + unsigned int lay, layer_override; ListBase parts; diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 95ff68dadb3..58e3038682c 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -624,6 +624,7 @@ int RE_engine_render(Render *re, int do_all) if (re->r.scemode & R_BUTS_PREVIEW) engine->flag |= RE_ENGINE_PREVIEW; engine->camera_override = re->camera_override; + engine->layer_override = re->layer_override; engine->resolution_x = re->winx; engine->resolution_y = re->winy; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 92f64d96e6c..a7a85847648 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2700,6 +2700,7 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, re->scene_color_manage = BKE_scene_check_color_management_enabled(scene); re->camera_override = camera_override; re->lay = lay_override ? lay_override : scene->lay; + re->layer_override = lay_override; re->i.localview = (re->lay & 0xFF000000) != 0; /* not too nice, but it survives anim-border render */