Fix #30061: cycles single render layer through python operator parameter not

working.
This commit is contained in:
Brecht Van Lommel 2012-02-07 20:51:33 +00:00
parent 2bfaade0ac
commit 54c7f374c8
3 changed files with 22 additions and 13 deletions

@ -191,14 +191,8 @@ void BlenderSession::render()
BL::RenderResult::layers_iterator b_iter;
BL::RenderLayers b_rr_layers(r.ptr);
int active = 0;
/* render each layer */
for(b_rr.layers.begin(b_iter); b_iter != b_rr.layers.end(); ++b_iter, ++active) {
/* single layer render */
if(r.use_single_layer())
active = b_rr_layers.active_index();
for(b_rr.layers.begin(b_iter); b_iter != b_rr.layers.end(); ++b_iter) {
/* set layer */
b_rlay = *b_iter;
@ -226,7 +220,7 @@ void BlenderSession::render()
session->reset(buffer_params, session_params.samples);
/* update scene */
sync->sync_data(b_v3d, active);
sync->sync_data(b_v3d, b_iter->name().c_str());
/* render */
session->start();

@ -122,7 +122,7 @@ bool BlenderSync::sync_recalc()
return recalc;
}
void BlenderSync::sync_data(BL::SpaceView3D b_v3d, int layer)
void BlenderSync::sync_data(BL::SpaceView3D b_v3d, const char *layer)
{
sync_render_layers(b_v3d);
sync_integrator(layer);
@ -133,7 +133,7 @@ void BlenderSync::sync_data(BL::SpaceView3D b_v3d, int layer)
/* Integrator */
void BlenderSync::sync_integrator(int layer)
void BlenderSync::sync_integrator(const char *layer)
{
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
@ -155,7 +155,20 @@ void BlenderSync::sync_integrator(int layer)
integrator->no_caustics = get_boolean(cscene, "no_caustics");
integrator->seed = get_int(cscene, "seed");
integrator->layer_flag = render_layers[layer].layer;
/* render layer */
int active_layer = 0;
if(layer) {
for(int i = 0; i < render_layers.size(); i++) {
if(render_layers[i].name == layer) {
active_layer = i;
break;
}
}
}
integrator->layer_flag = render_layers[active_layer].layer;
if(integrator->modified(previntegrator))
integrator->tag_update(scene);
@ -208,6 +221,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d)
/* single layer for now */
RenderLayerInfo rlay;
rlay.name = b_rlay->name();
rlay.scene_layer = get_layer(b_scene.layers());
rlay.layer = get_layer(b_rlay->layers());
rlay.material_override = b_rlay->material_override();

@ -54,7 +54,7 @@ public:
/* sync */
bool sync_recalc();
void sync_data(BL::SpaceView3D b_v3d, int layer = 0);
void sync_data(BL::SpaceView3D b_v3d, const char *layer = 0);
void sync_camera(int width, int height);
void sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height);
@ -70,7 +70,7 @@ private:
void sync_materials();
void sync_objects(BL::SpaceView3D b_v3d);
void sync_film();
void sync_integrator(int layer);
void sync_integrator(const char *layer);
void sync_view();
void sync_world();
void sync_render_layers(BL::SpaceView3D b_v3d);
@ -110,6 +110,7 @@ private:
material_override(PointerRNA_NULL)
{}
string name;
uint scene_layer;
uint layer;
BL::Material material_override;