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:
authorClément Foucault <foucault.clem@gmail.com>2017-01-26 21:49:09 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-01-26 21:49:09 +0300
commit4c416aea3bd2d4b5e05c33b90f7b79e04f4da318 (patch)
tree74f6e19ea5e2a5c118e8afc037b5fcdcccbd3481
parentfcd5880d12f659644e6b21371f5d94e3ffdbc70e (diff)
parent8f673cb40c6d038ecaabd24c6549dc5c7571c26a (diff)
Merge branch 'render-layers' of git.blender.org:blender into clay-engine
# Conflicts: # source/blender/makesdna/DNA_scene_types.h
-rw-r--r--release/scripts/startup/bl_ui/properties_render_layer.py101
-rw-r--r--source/blender/blenkernel/BKE_context.h2
-rw-r--r--source/blender/blenkernel/intern/context.c39
-rw-r--r--source/blender/blenkernel/intern/layer.c10
-rw-r--r--source/blender/blenloader/intern/versioning_280.c13
-rw-r--r--source/blender/editors/render/render_shading.c12
-rw-r--r--source/blender/makesdna/DNA_layer_types.h8
-rw-r--r--source/blender/makesdna/DNA_scene_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_scene.c61
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c4
-rw-r--r--tests/python/bl_render_layer.py7
11 files changed, 118 insertions, 141 deletions
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 9b8bc237db9..45c93dd9335 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -35,7 +35,7 @@ class RenderLayerButtonsPanel:
class RENDERLAYER_UL_renderlayers(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
- # assert(isinstance(item, bpy.types.SceneRenderLayer)
+ # assert(isinstance(item, bpy.types.SceneLayer)
layer = item
if self.layout_type in {'DEFAULT', 'COMPACT'}:
layout.prop(layer, "name", text="", icon_value=icon, emboss=False)
@@ -62,7 +62,7 @@ class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.template_list("RENDERLAYER_UL_renderlayers", "", rd, "layers", rd.layers, "active_index", rows=2)
+ col.template_list("RENDERLAYER_UL_renderlayers", "", scene, "render_layers", scene.render_layers, "active_index", rows=2)
col = row.column()
sub = col.column(align=True)
@@ -71,103 +71,6 @@ class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
col.prop(rd, "use_single_layer", icon_only=True)
-class RENDERLAYER_PT_layer_options(RenderLayerButtonsPanel, Panel):
- bl_label = "Layer"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
- rl = rd.layers.active
-
- split = layout.split()
-
- col = split.column()
- col.prop(scene, "layers", text="Scene")
- col.label(text="")
- col.prop(rl, "light_override", text="Lights")
- col.prop(rl, "material_override", text="Material")
-
- col = split.column()
- col.prop(rl, "layers", text="Layer")
- col.prop(rl, "layers_zmask", text="Mask Layer")
-
- layout.separator()
- layout.label(text="Include:")
-
- split = layout.split()
-
- col = split.column()
- col.prop(rl, "use_zmask")
- row = col.row()
- row.prop(rl, "invert_zmask", text="Negate")
- row.active = rl.use_zmask
- col.prop(rl, "use_all_z")
-
- col = split.column()
- col.prop(rl, "use_solid")
- col.prop(rl, "use_halo")
- col.prop(rl, "use_ztransp")
-
- col = split.column()
- col.prop(rl, "use_sky")
- col.prop(rl, "use_edge_enhance")
- col.prop(rl, "use_strand")
- if bpy.app.build_options.freestyle:
- row = col.row()
- row.prop(rl, "use_freestyle")
- row.active = rd.use_freestyle
-
-
-class RENDERLAYER_PT_layer_passes(RenderLayerButtonsPanel, Panel):
- bl_label = "Passes"
- bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @staticmethod
- def draw_pass_type_buttons(box, rl, pass_type):
- # property names
- use_pass_type = "use_pass_" + pass_type
- exclude_pass_type = "exclude_" + pass_type
- # draw pass type buttons
- row = box.row()
- row.prop(rl, use_pass_type)
- row.prop(rl, exclude_pass_type, text="")
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
- rl = rd.layers.active
-
- split = layout.split()
-
- col = split.column()
- col.prop(rl, "use_pass_combined")
- col.prop(rl, "use_pass_z")
- col.prop(rl, "use_pass_vector")
- col.prop(rl, "use_pass_normal")
- col.prop(rl, "use_pass_uv")
- col.prop(rl, "use_pass_mist")
- col.prop(rl, "use_pass_object_index")
- col.prop(rl, "use_pass_material_index")
- col.prop(rl, "use_pass_color")
-
- col = split.column()
- col.prop(rl, "use_pass_diffuse")
- self.draw_pass_type_buttons(col, rl, "specular")
- self.draw_pass_type_buttons(col, rl, "shadow")
- self.draw_pass_type_buttons(col, rl, "emit")
- self.draw_pass_type_buttons(col, rl, "ambient_occlusion")
- self.draw_pass_type_buttons(col, rl, "environment")
- self.draw_pass_type_buttons(col, rl, "indirect")
- self.draw_pass_type_buttons(col, rl, "reflection")
- self.draw_pass_type_buttons(col, rl, "refraction")
-
-
class RENDERLAYER_UL_renderviews(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
# assert(isinstance(item, bpy.types.SceneRenderView)
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 70f9fa3dfc4..649d142d1cd 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -251,8 +251,6 @@ int CTX_data_mode_enum(const bContext *C);
void CTX_data_main_set(bContext *C, struct Main *bmain);
void CTX_data_scene_set(bContext *C, struct Scene *bmain);
-void CTX_data_scene_collection_set(bContext *C, struct SceneCollection *sc);
-void CTX_data_scene_layer_set(bContext *C, struct SceneLayer *sl);
int CTX_data_selected_editable_objects(const bContext *C, ListBase *list);
int CTX_data_selected_editable_bases(const bContext *C, ListBase *list);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 592adfc578a..8025732efe5 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -79,8 +79,6 @@ struct bContext {
struct {
struct Main *main;
struct Scene *scene;
- struct SceneLayer *render_layer;
- struct SceneCollection *scene_collection;
int recursion;
int py_init; /* true if python is initialized */
@@ -908,7 +906,10 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
return sl;
}
else {
- return C->data.render_layer;
+ Scene *scene = CTX_data_scene(C);
+ sl = BLI_findlink(&scene->render_layers, scene->active_layer);
+ BLI_assert(sl);
+ return sl;
}
}
@@ -928,15 +929,11 @@ SceneCollection *CTX_data_scene_collection(const bContext *C)
if (BKE_scene_layer_has_collection(sl, sc)) {
return sc;
}
- else {
- /* fallback */
- LayerCollection *lc = BKE_layer_collection_active(sl);
- return lc->scene_collection;
- }
- }
- else {
- return C->data.scene_collection;
}
+
+ /* fallback */
+ LayerCollection *lc = BKE_layer_collection_active(sl);
+ return lc->scene_collection;
}
int CTX_data_mode_enum(const bContext *C)
@@ -1005,26 +1002,6 @@ const char *CTX_data_mode_string(const bContext *C)
void CTX_data_scene_set(bContext *C, Scene *scene)
{
C->data.scene = scene;
- TODO_LAYER_CONTEXT
-
- /* render_layer comes from workspace (or even viewport) actually
- * this is only while we wait for workspace changes to be merged
- */
- CTX_data_scene_layer_set(C, scene->render_layers.last);
-}
-
-void CTX_data_scene_collection_set(bContext *C, SceneCollection *sc)
-{
- C->data.scene_collection = sc;
-}
-
-void CTX_data_scene_layer_set(bContext *C, SceneLayer *sl)
-{
- C->data.render_layer = sl;
-
- /* update the related data */
- LayerCollection *lc = BKE_layer_collection_active(sl);
- CTX_data_scene_collection_set(C, lc->scene_collection);
}
ToolSettings *CTX_data_tool_settings(const bContext *C)
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 40cba304377..bb013b4aa46 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -57,7 +57,13 @@ static void object_bases_Iterator_next(Iterator *iter, const int flag);
*/
SceneLayer *BKE_scene_layer_add(Scene *scene, const char *name)
{
+ if (!name) {
+ name = DATA_("Render Layer");
+ }
+
SceneLayer *sl = MEM_callocN(sizeof(SceneLayer), "Scene Layer");
+ sl->flag |= SCENE_LAYER_RENDER;
+
BLI_addtail(&scene->render_layers, sl);
/* unique name */
@@ -85,9 +91,11 @@ bool BKE_scene_layer_remove(Main *bmain, Scene *scene, SceneLayer *sl)
}
BLI_remlink(&scene->render_layers, sl);
+
BKE_scene_layer_free(sl);
MEM_freeN(sl);
+ scene->active_layer = 0;
/* TODO WORKSPACE: set active_layer to 0 */
for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
@@ -635,7 +643,7 @@ void BKE_selected_objects_Iterator_begin(Iterator *iter, void *data_in)
void BKE_selected_objects_Iterator_next(Iterator *iter)
{
- object_bases_Iterator_next(iter, BASE_SELECTED);
+ objects_Iterator_next(iter, BASE_SELECTED);
}
void BKE_selected_objects_Iterator_end(Iterator *UNUSED(iter))
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index f9afa33ae79..3eedfaa4679 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -79,6 +79,8 @@ void blo_do_versions_after_linking_280(Main *main)
}
}
+ scene->active_layer = 0;
+
if (!BKE_scene_uses_blender_game(scene)) {
for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
@@ -108,6 +110,10 @@ void blo_do_versions_after_linking_280(Main *main)
/* TODO: passes, samples, mask_layesr, exclude, ... */
}
+
+ if (BLI_findlink(&scene->render_layers, scene->r.actlay)) {
+ scene->active_layer = scene->r.actlay;
+ }
}
SceneLayer *sl = BKE_scene_layer_add(scene, "Render Layer");
@@ -121,6 +127,9 @@ void blo_do_versions_after_linking_280(Main *main)
lc = lc->next;
}
+ /* but we still need to make the flags synced */
+ BKE_scene_layer_base_flag_recalculate(sl);
+
/* convert active base */
if (scene->basact) {
sl->basact = BKE_scene_layer_base_find(sl, scene->basact->object);
@@ -130,7 +139,9 @@ void blo_do_versions_after_linking_280(Main *main)
for (Base *base = scene->base.first; base; base = base->next) {
ObjectBase *ob_base = BKE_scene_layer_base_find(sl, base->object);
if ((base->flag & SELECT) != 0) {
- ob_base->flag |= BASE_SELECTED;
+ if ((ob_base->flag & BASE_SELECTABLED) != 0) {
+ ob_base->flag |= BASE_SELECTED;
+ }
}
else {
ob_base->flag &= ~BASE_SELECTED;
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 837573ad175..984aa6e43c2 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -54,6 +54,7 @@
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_linestyle.h"
#include "BKE_main.h"
@@ -626,11 +627,11 @@ static int render_layer_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- BKE_scene_add_render_layer(scene, NULL);
- scene->r.actlay = BLI_listbase_count(&scene->r.layers) - 1;
+ BKE_scene_layer_add(scene, NULL);
+ scene->active_layer = BLI_listbase_count(&scene->render_layers) - 1;
DAG_id_tag_update(&scene->id, 0);
- WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
return OPERATOR_FINISHED;
}
@@ -652,10 +653,11 @@ void SCENE_OT_render_layer_add(wmOperatorType *ot)
static int render_layer_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *rl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ SceneLayer *sl = BLI_findlink(&scene->render_layers, scene->active_layer);
- if (!BKE_scene_remove_render_layer(CTX_data_main(C), scene, rl))
+ if (!BKE_scene_layer_remove(CTX_data_main(C), scene, sl)) {
return OPERATOR_CANCELLED;
+ }
DAG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index b1f988945f8..d45334a227f 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -62,7 +62,8 @@ typedef struct SceneLayer {
char name[64]; /* MAX_NAME */
char engine[32]; /* render engine */
short active_collection;
- short pad[3];
+ short flag;
+ short pad[2];
ListBase object_bases; /* ObjectBase */
struct ObjectBase *basact;
ListBase layer_collections; /* LayerCollection */
@@ -92,6 +93,11 @@ enum {
COLLECTION_FOLDED = (1 << 2),
};
+/* SceneLayer->flag */
+enum {
+ SCENE_LAYER_RENDER = (1 << 0),
+};
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 08366af628c..3759aa3d48b 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1751,6 +1751,8 @@ typedef struct Scene {
ListBase render_layers;
struct SceneCollection *collection;
+ int active_layer;
+ int pad4;
/* Engine Settings */
struct EngineDataClay claydata;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 5e92772171f..3b599dedfca 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2545,6 +2545,44 @@ static int rna_SceneLayer_multiple_engines_get(PointerRNA *UNUSED(ptr))
return (BLI_listbase_count(&R_engines) > 1);
}
+static int rna_SceneLayer_active_layer_index_get(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+ return scene->active_layer;
+}
+
+static void rna_SceneLayer_active_layer_index_set(PointerRNA *ptr, int value)
+{
+ Scene *scene = (Scene *)ptr->data;
+ int num_layers = BLI_listbase_count(&scene->render_layers);
+ scene->active_layer = min_ff(value, num_layers - 1);
+}
+
+static void rna_SceneLayer_active_layer_index_range(
+ PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
+{
+ Scene *scene = (Scene *)ptr->data;
+
+ *min = 0;
+ *max = max_ii(0, BLI_listbase_count(&scene->render_layers) - 1);
+}
+
+static PointerRNA rna_SceneLayer_active_layer_get(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+ SceneLayer *sl = BLI_findlink(&scene->render_layers, scene->active_layer);
+
+ return rna_pointer_inherit_refine(ptr, &RNA_SceneLayer, sl);
+}
+
+static void rna_SceneLayer_active_layer_set(PointerRNA *ptr, PointerRNA value)
+{
+ Scene *scene = (Scene *)ptr->data;
+ SceneLayer *sl = (SceneLayer *)value.data;
+ const int index = BLI_findindex(&scene->render_layers, sl);
+ if (index != -1) scene->active_layer = index;
+}
+
static SceneLayer *rna_SceneLayer_new(ID *id, Scene *UNUSED(sce), const char *name)
{
Scene *scene = (Scene *)id;
@@ -5693,6 +5731,12 @@ static void rna_def_scene_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Objects", "All the objects in this layer");
rna_def_layer_objects(brna, prop);
+ /* layer options */
+ prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SCENE_LAYER_RENDER);
+ RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
/* engine */
prop = RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, engine_items);
@@ -5713,12 +5757,29 @@ static void rna_def_scene_layers(BlenderRNA *brna, PropertyRNA *cprop)
StructRNA *srna;
FunctionRNA *func;
PropertyRNA *parm;
+ PropertyRNA *prop;
RNA_def_property_srna(cprop, "SceneLayers");
srna = RNA_def_struct(brna, "SceneLayers", NULL);
RNA_def_struct_sdna(srna, "Scene");
RNA_def_struct_ui_text(srna, "Render Layers", "Collection of render layers");
+ prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "active_layer");
+ RNA_def_property_int_funcs(prop, "rna_SceneLayer_active_layer_index_get",
+ "rna_SceneLayer_active_layer_index_set",
+ "rna_SceneLayer_active_layer_index_range");
+ RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
+ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "SceneLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_SceneLayer_active_layer_get",
+ "rna_SceneLayer_active_layer_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
+ RNA_def_property_ui_text(prop, "Active Render Layer", "Active Render Layer");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
func = RNA_def_function(srna, "new", "rna_SceneLayer_new");
RNA_def_function_ui_description(func, "Add a render layer to scene");
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 6b615f5a121..af15743f2d9 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -83,6 +83,7 @@ struct HookModifierData;
struct NodeBlurData;
struct Nurb;
struct Object;
+struct ObjectBase;
struct PBVHNode;
struct PyObject;
struct Render;
@@ -486,6 +487,7 @@ void ED_node_shader_default(const struct bContext *C, struct ID *id) RET_NONE
void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh) RET_NONE
struct bScreen *ED_screen_animation_playing(const struct wmWindowManager *wm) RET_NULL
void ED_base_object_select(struct Base *base, short mode) RET_NONE
+void ED_object_base_select(struct ObjectBase *base, short mode) RET_NONE
bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Object *ob, struct ModifierData *md) RET_ZERO
struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, const char *name, int type) RET_ZERO
void ED_object_modifier_clear(struct Main *bmain, struct Object *ob) RET_NONE
@@ -506,7 +508,7 @@ void uiLayoutSetAlignment(uiLayout *layout, char alignment) RET_NONE
void uiLayoutSetScaleX(struct uiLayout *layout, float scale) RET_NONE
void uiLayoutSetScaleY(struct uiLayout *layout, float scale) RET_NONE
void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname, int show_labels, float icon_scale) RET_NONE
-void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base) RET_NONE
+void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *base) RET_NONE
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface) RET_NONE
void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
diff --git a/tests/python/bl_render_layer.py b/tests/python/bl_render_layer.py
index fa693a037a2..93318d6eb31 100644
--- a/tests/python/bl_render_layer.py
+++ b/tests/python/bl_render_layer.py
@@ -752,6 +752,7 @@ class UnitsTesting(unittest.TestCase):
See if we can link objects via bpy.context.scene_collection
"""
import bpy
+ bpy.context.scene.render_layers.active_index = len(bpy.context.scene.render_layers) - 1
master_collection = bpy.context.scene_collection
self.do_link(master_collection)
@@ -828,6 +829,10 @@ class UnitsTesting(unittest.TestCase):
layer.collections.active_index = 3
self.assertEqual(layer.collections.active.name, 'scorpion')
+ scene = bpy.context.scene
+ scene.render_layers.active_index = len(scene.render_layers) - 2
+ self.assertEqual(scene.render_layers.active.name, "Render Layer")
+
# old layer
self.assertEqual(bpy.ops.testing.sample(render_layer='Render Layer', use_verbose=True), {'FINISHED'})
@@ -971,6 +976,8 @@ class UnitsTesting(unittest.TestCase):
layer = scene.render_layers.new('Fresh new Layer')
layer.collections.link(subzero)
+ scene.render_layers.active_index = len(scene.render_layers) - 1
+
if mode == 'DUPLICATE':
# assuming the latest layer is the active layer
bpy.ops.object.select_all(action='DESELECT')