[Bf-blender-cvs] [6ff6883] master: Fix T40843: Cycles does not support viewport render override

Sergey Sharybin noreply at git.blender.org
Fri Jul 4 12:34:27 CEST 2014


Commit: 6ff6883f99d2faeb71359b9e2333a684e0ccf5ca
Author: Sergey Sharybin
Date:   Fri Jul 4 16:32:17 2014 +0600
https://developer.blender.org/rB6ff6883f99d2faeb71359b9e2333a684e0ccf5ca

Fix T40843: Cycles does not support viewport render override

===================================================================

M	intern/cycles/blender/blender_sync.cpp
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/pipeline.c

===================================================================

diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 042bbca..19898bf 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 3d0c455..284377d 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 c76cf34..24f8cbe 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 d16fe6f..536a2b8 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 95ff68d..58e3038 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 92f64d9..a7a8584 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 */




More information about the Bf-blender-cvs mailing list