Blender  V3.3
Classes | Macros | Variables
layer.c File Reference
#include <string.h>
#include "CLG_log.h"
#include "BLI_listbase.h"
#include "BLI_mempool.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BLT_translation.h"
#include "BKE_animsys.h"
#include "BKE_collection.h"
#include "BKE_freestyle.h"
#include "BKE_idprop.h"
#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_object.h"
#include "DNA_ID.h"
#include "DNA_collection_types.h"
#include "DNA_layer_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "DNA_windowmanager_types.h"
#include "DNA_workspace_types.h"
#include "DNA_world_types.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_debug.h"
#include "DEG_depsgraph_query.h"
#include "DRW_engine.h"
#include "RE_engine.h"
#include "MEM_guardedalloc.h"
#include "BLO_read_write.h"

Go to the source code of this file.

Classes

struct  LayerCollectionResync
 
struct  LayerObjectBaseIteratorData
 

Macros

#define DNA_DEPRECATED_ALLOW
 

Functions

Layer Collections and Bases
static LayerCollection * layer_collection_add (ListBase *lb_parent, Collection *collection)
 
static void layer_collection_free (ViewLayer *view_layer, LayerCollection *lc)
 
static Base * object_base_new (Object *ob)
 
View Layer
ViewLayer * BKE_view_layer_default_view (const Scene *scene)
 
ViewLayer * BKE_view_layer_default_render (const Scene *scene)
 
ViewLayer * BKE_view_layer_find (const Scene *scene, const char *layer_name)
 
ViewLayer * BKE_view_layer_context_active_PLACEHOLDER (const Scene *scene)
 
static ViewLayer * view_layer_add (const char *name)
 
static void layer_collection_exclude_all (LayerCollection *layer_collection)
 
ViewLayer * BKE_view_layer_add (Scene *scene, const char *name, ViewLayer *view_layer_source, const int type)
 
void BKE_view_layer_free (ViewLayer *view_layer)
 
void BKE_view_layer_free_ex (ViewLayer *view_layer, const bool do_id_user)
 
void BKE_view_layer_selected_objects_tag (ViewLayer *view_layer, const int tag)
 
static bool find_scene_collection_in_scene_collections (ListBase *lb, const LayerCollection *lc)
 
Object * BKE_view_layer_camera_find (ViewLayer *view_layer)
 
ViewLayer * BKE_view_layer_find_from_collection (const Scene *scene, LayerCollection *lc)
 
static void view_layer_bases_hash_create (ViewLayer *view_layer, const bool do_base_duplicates_fix)
 
Base * BKE_view_layer_base_find (ViewLayer *view_layer, Object *ob)
 
void BKE_view_layer_base_deselect_all (ViewLayer *view_layer)
 
void BKE_view_layer_base_select_and_set_active (struct ViewLayer *view_layer, Base *selbase)
 
Copy View Layer and Layer Collections
static void layer_aov_copy_data (ViewLayer *view_layer_dst, const ViewLayer *view_layer_src, ListBase *aovs_dst, const ListBase *aovs_src)
 
static void layer_lightgroup_copy_data (ViewLayer *view_layer_dst, const ViewLayer *view_layer_src, ListBase *lightgroups_dst, const ListBase *lightgroups_src)
 
static void layer_collections_copy_data (ViewLayer *view_layer_dst, const ViewLayer *view_layer_src, ListBase *layer_collections_dst, const ListBase *layer_collections_src)
 
void BKE_view_layer_copy_data (Scene *scene_dst, const Scene *UNUSED(scene_src), ViewLayer *view_layer_dst, const ViewLayer *view_layer_src, const int flag)
 
void BKE_view_layer_rename (Main *bmain, Scene *scene, ViewLayer *view_layer, const char *newname)
 
static LayerCollection * collection_from_index (ListBase *lb, const int number, int *i)
 
static bool layer_collection_hidden (ViewLayer *view_layer, LayerCollection *lc)
 
LayerCollection * BKE_layer_collection_from_index (ViewLayer *view_layer, const int index)
 
LayerCollection * BKE_layer_collection_get_active (ViewLayer *view_layer)
 
bool BKE_layer_collection_activate (ViewLayer *view_layer, LayerCollection *lc)
 
LayerCollection * BKE_layer_collection_activate_parent (ViewLayer *view_layer, LayerCollection *lc)
 
static int collection_count (const ListBase *lb)
 
int BKE_layer_collection_count (const ViewLayer *view_layer)
 
static int index_from_collection (ListBase *lb, const LayerCollection *lc, int *i)
 
int BKE_layer_collection_findindex (ViewLayer *view_layer, const LayerCollection *lc)
 
Object Selection
bool BKE_layer_collection_objects_select (ViewLayer *view_layer, LayerCollection *lc, bool deselect)
 
bool BKE_layer_collection_has_selected_objects (ViewLayer *view_layer, LayerCollection *lc)
 
bool BKE_layer_collection_has_layer_collection (LayerCollection *lc_parent, LayerCollection *lc_child)
 
Object Visibility
void BKE_base_set_visible (Scene *scene, ViewLayer *view_layer, Base *base, bool extend)
 
bool BKE_base_is_visible (const View3D *v3d, const Base *base)
 
bool BKE_object_is_visible_in_viewport (const View3D *v3d, const struct Object *ob)
 
Collection Isolation & Local View
static void layer_collection_flag_set_recursive (LayerCollection *lc, const int flag)
 
static void layer_collection_flag_unset_recursive (LayerCollection *lc, const int flag)
 
void BKE_layer_collection_isolate_global (Scene *scene, ViewLayer *view_layer, LayerCollection *lc, bool extend)
 
static void layer_collection_local_visibility_set_recursive (LayerCollection *layer_collection, const int local_collections_uuid)
 
static void layer_collection_local_visibility_unset_recursive (LayerCollection *layer_collection, const int local_collections_uuid)
 
static void layer_collection_local_sync (ViewLayer *view_layer, LayerCollection *layer_collection, const unsigned short local_collections_uuid, bool visible)
 
void BKE_layer_collection_local_sync (ViewLayer *view_layer, const View3D *v3d)
 
void BKE_layer_collection_local_sync_all (const Main *bmain)
 
void BKE_layer_collection_isolate_local (ViewLayer *view_layer, const View3D *v3d, LayerCollection *lc, bool extend)
 
static void layer_collection_bases_show_recursive (ViewLayer *view_layer, LayerCollection *lc)
 
static void layer_collection_bases_hide_recursive (ViewLayer *view_layer, LayerCollection *lc)
 
void BKE_layer_collection_set_visible (ViewLayer *view_layer, LayerCollection *lc, const bool visible, const bool hierarchy)
 
static void layer_collection_flag_recursive_set (LayerCollection *lc, const int flag, const bool value, const bool restore_flag)
 
void BKE_layer_collection_set_flag (LayerCollection *lc, const int flag, const bool value)
 
static LayerCollection * find_layer_collection_by_scene_collection (LayerCollection *lc, const Collection *collection)
 
LayerCollection * BKE_layer_collection_first_from_scene_collection (const ViewLayer *view_layer, const Collection *collection)
 
bool BKE_view_layer_has_collection (const ViewLayer *view_layer, const Collection *collection)
 
bool BKE_scene_has_object (Scene *scene, Object *ob)
 
BKE_view_layer_selected_objects_iterator
void BKE_view_layer_selected_objects_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_selected_objects_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_selected_objects_iterator_end (BLI_Iterator *iter)
 
BKE_view_layer_visible_objects_iterator
void BKE_view_layer_visible_objects_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_visible_objects_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_visible_objects_iterator_end (BLI_Iterator *iter)
 
BKE_view_layer_selected_editable_objects_iterator
void BKE_view_layer_selected_editable_objects_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_selected_editable_objects_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_selected_editable_objects_iterator_end (BLI_Iterator *iter)
 
BKE_view_layer_selected_bases_iterator
void BKE_view_layer_selected_bases_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_selected_bases_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_selected_bases_iterator_end (BLI_Iterator *iter)
 
BKE_view_layer_visible_bases_iterator
void BKE_view_layer_visible_bases_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_visible_bases_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_visible_bases_iterator_end (BLI_Iterator *iter)
 
BKE_view_layer_bases_in_mode_iterator
static bool base_is_in_mode (struct ObjectsInModeIteratorData *data, Base *base)
 
void BKE_view_layer_bases_in_mode_iterator_begin (BLI_Iterator *iter, void *data_in)
 
void BKE_view_layer_bases_in_mode_iterator_next (BLI_Iterator *iter)
 
void BKE_view_layer_bases_in_mode_iterator_end (BLI_Iterator *UNUSED(iter))
 
Evaluation
void BKE_base_eval_flags (Base *base)
 
static void layer_eval_view_layer (struct Depsgraph *depsgraph, struct Scene *UNUSED(scene), ViewLayer *view_layer)
 
void BKE_layer_eval_view_layer_indexed (struct Depsgraph *depsgraph, struct Scene *scene, int view_layer_index)
 
Blend File I/O
static void write_layer_collections (BlendWriter *writer, ListBase *lb)
 
void BKE_view_layer_blend_write (BlendWriter *writer, ViewLayer *view_layer)
 
static void direct_link_layer_collections (BlendDataReader *reader, ListBase *lb, bool master)
 
void BKE_view_layer_blend_read_data (BlendDataReader *reader, ViewLayer *view_layer)
 
static void lib_link_layer_collection (BlendLibReader *reader, Library *lib, LayerCollection *layer_collection, bool master)
 
void BKE_view_layer_blend_read_lib (BlendLibReader *reader, Library *lib, ViewLayer *view_layer)
 
Shader AOV
static void viewlayer_aov_make_name_unique (ViewLayer *view_layer)
 
static void viewlayer_aov_active_set (ViewLayer *view_layer, ViewLayerAOV *aov)
 
struct ViewLayerAOV * BKE_view_layer_add_aov (struct ViewLayer *view_layer)
 
void BKE_view_layer_remove_aov (ViewLayer *view_layer, ViewLayerAOV *aov)
 
void BKE_view_layer_set_active_aov (ViewLayer *view_layer, ViewLayerAOV *aov)
 
static void bke_view_layer_verify_aov_cb (void *userdata, Scene *UNUSED(scene), ViewLayer *UNUSED(view_layer), const char *name, int UNUSED(channels), const char *UNUSED(chanid), eNodeSocketDatatype UNUSED(type))
 
void BKE_view_layer_verify_aov (struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
 
bool BKE_view_layer_has_valid_aov (ViewLayer *view_layer)
 
ViewLayer * BKE_view_layer_find_with_aov (struct Scene *scene, struct ViewLayerAOV *aov)
 
Light Groups
static void viewlayer_lightgroup_make_name_unique (ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
 
static void viewlayer_lightgroup_active_set (ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
 
struct ViewLayerLightgroup * BKE_view_layer_add_lightgroup (struct ViewLayer *view_layer, const char *name)
 
void BKE_view_layer_remove_lightgroup (ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
 
void BKE_view_layer_set_active_lightgroup (ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
 
ViewLayer * BKE_view_layer_find_with_lightgroup (struct Scene *scene, struct ViewLayerLightgroup *lightgroup)
 
void BKE_view_layer_rename_lightgroup (Scene *scene, ViewLayer *view_layer, ViewLayerLightgroup *lightgroup, const char *name)
 
void BKE_lightgroup_membership_get (struct LightgroupMembership *lgm, char *name)
 
int BKE_lightgroup_membership_length (struct LightgroupMembership *lgm)
 
void BKE_lightgroup_membership_set (struct LightgroupMembership **lgm, const char *name)
 

Variables

static CLG_LogRef LOG = {"bke.layercollection"}
 
static const short g_base_collection_flags
 

Syncing

The layer collection tree mirrors the scene collection tree. Whenever that changes we need to synchronize them so that there is a corresponding layer collection for each collection. Note that the scene collection tree can contain link or override collections, and so this is also called on .blend file load to ensure any new or removed collections are synced.

The view layer also contains a list of bases for each object that exists in at least one layer collection. That list is also synchronized here, and stores state like selection.

This API allows to temporarily forbid resync of LayerCollections.

This can greatly improve performances in cases where those functions get called a lot (e.g. during massive remappings of IDs).

Usage of these should be done very carefully though. In particular, calling code must ensures it resync LayerCollections before any UI/Event loop handling can happen.

Warning
This is not threadsafe at all, only use from main thread.
Note
It is probably needed to use BKE_main_collection_sync_remap instead of just BKE_main_collection_sync after disabling LayerCollection resync, unless it is absolutely certain that no ID remapping (or any other process that may invalidate the caches) will happen while it is disabled.
This is a quick and safe band-aid around the long-known issue regarding this resync process. Proper fix would be to make resync itself lazy, i.e. only happen when actually needed. See also T73411.
typedef struct LayerCollectionResync LayerCollectionResync
 
static bool no_resync = false
 
void BKE_layer_collection_resync_forbid (void)
 
void BKE_layer_collection_resync_allow (void)
 
static LayerCollectionResync * layer_collection_resync_create_recurse (LayerCollectionResync *parent_layer_resync, LayerCollection *layer, BLI_mempool *mempool)
 
static LayerCollectionResync * layer_collection_resync_find (LayerCollectionResync *layer_resync, Collection *child_collection)
 
static void layer_collection_resync_unused_layers_free (ViewLayer *view_layer, LayerCollectionResync *layer_resync)
 
static void layer_collection_objects_sync (ViewLayer *view_layer, LayerCollection *layer, ListBase *r_lb_new_object_bases, const short collection_restrict, const short layer_restrict, const ushort local_collections_bits)
 
static void layer_collection_sync (ViewLayer *view_layer, LayerCollectionResync *layer_resync, BLI_mempool *layer_resync_mempool, ListBase *r_lb_new_object_bases, const short parent_layer_flag, const short parent_collection_restrict, const short parent_layer_restrict, const ushort parent_local_collections_bits)
 
static bool view_layer_objects_base_cache_validate (ViewLayer *view_layer, LayerCollection *layer)
 
void BKE_layer_collection_doversion_2_80 (const Scene *scene, ViewLayer *view_layer)
 
void BKE_layer_collection_sync (const Scene *scene, ViewLayer *view_layer)
 
void BKE_scene_collection_sync (const Scene *scene)
 
void BKE_main_collection_sync (const Main *bmain)
 
void BKE_main_collection_sync_remap (const Main *bmain)
 

Private Iterator Helpers

typedef struct LayerObjectBaseIteratorData LayerObjectBaseIteratorData
 
static void object_bases_iterator_next (BLI_Iterator *iter, const int flag)
 
static bool object_bases_iterator_is_valid (const View3D *v3d, Base *base, const int flag)
 
static void object_bases_iterator_begin (BLI_Iterator *iter, void *data_in_v, const int flag)
 
static void object_bases_iterator_end (BLI_Iterator *iter)
 
static void objects_iterator_begin (BLI_Iterator *iter, void *data_in, const int flag)
 
static void objects_iterator_next (BLI_Iterator *iter, const int flag)
 
static void objects_iterator_end (BLI_Iterator *iter)
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 8 of file layer.c.

Typedef Documentation

◆ LayerCollectionResync

◆ LayerObjectBaseIteratorData

Function Documentation

◆ base_is_in_mode()

static bool base_is_in_mode ( struct ObjectsInModeIteratorData *  data,
Base *  base 
)
static

◆ BKE_base_eval_flags()

void BKE_base_eval_flags ( struct Base *  base)

Applies object's restrict flags on top of flags coming from the collection and stores those in base->flag. BASE_VISIBLE_DEPSGRAPH ignores viewport flags visibility (i.e., restriction and local collection).

Definition at line 2200 of file layer.c.

References BASE_ENABLED_RENDER, BASE_ENABLED_VIEWPORT, BASE_HIDDEN, BASE_SELECTABLE, BASE_SELECTED, BASE_VISIBLE_DEPSGRAPH, BASE_VISIBLE_VIEWLAYER, Base::flag, Base::flag_from_collection, g_base_collection_flags, OB_HIDE_RENDER, OB_HIDE_SELECT, OB_HIDE_VIEWPORT, Base::object, and Object::visibility_flag.

Referenced by BKE_layer_collection_sync(), BKE_object_eval_eval_base_flags(), and object_add_named_exec().

◆ BKE_base_is_visible()

bool BKE_base_is_visible ( const View3D *  v3d,
const Base *  base 
)

◆ BKE_base_set_visible()

void BKE_base_set_visible ( struct Scene *  scene,
struct ViewLayer *  view_layer,
struct Base *  base,
bool  extend 
)

Update after toggling visibility of an object base.

Definition at line 1491 of file layer.c.

References BASE_HIDDEN, BKE_layer_collection_sync(), Base::flag, LISTBASE_FOREACH, ViewLayer::object_bases, and scene.

◆ BKE_layer_collection_activate()

bool BKE_layer_collection_activate ( struct ViewLayer *  view_layer,
struct LayerCollection *  lc 
)

◆ BKE_layer_collection_activate_parent()

LayerCollection* BKE_layer_collection_activate_parent ( struct ViewLayer *  view_layer,
struct LayerCollection *  lc 
)

◆ BKE_layer_collection_count()

int BKE_layer_collection_count ( const ViewLayer *  view_layer)

Definition at line 688 of file layer.c.

References collection_count(), and ViewLayer::layer_collections.

◆ BKE_layer_collection_doversion_2_80()

void BKE_layer_collection_doversion_2_80 ( const Scene *  scene,
ViewLayer *  view_layer 
)

◆ BKE_layer_collection_findindex()

int BKE_layer_collection_findindex ( ViewLayer *  view_layer,
const LayerCollection *  lc 
)

Definition at line 715 of file layer.c.

References index_from_collection(), and ViewLayer::layer_collections.

◆ BKE_layer_collection_first_from_scene_collection()

LayerCollection* BKE_layer_collection_first_from_scene_collection ( const ViewLayer *  view_layer,
const Collection *  collection 
)

◆ BKE_layer_collection_from_index()

LayerCollection* BKE_layer_collection_from_index ( struct ViewLayer *  view_layer,
int  index 
)

Get the collection for a given index.

Definition at line 630 of file layer.c.

References collection_from_index(), and ViewLayer::layer_collections.

Referenced by object_hide_collection_exec().

◆ BKE_layer_collection_get_active()

LayerCollection* BKE_layer_collection_get_active ( struct ViewLayer *  view_layer)

◆ BKE_layer_collection_has_layer_collection()

bool BKE_layer_collection_has_layer_collection ( LayerCollection *  lc_parent,
LayerCollection *  lc_child 
)

◆ BKE_layer_collection_has_selected_objects()

bool BKE_layer_collection_has_selected_objects ( ViewLayer *  view_layer,
LayerCollection *  lc 
)

◆ BKE_layer_collection_isolate_global()

void BKE_layer_collection_isolate_global ( struct Scene *  scene,
struct ViewLayer *  view_layer,
struct LayerCollection *  lc,
bool  extend 
)

Isolate the collection - hide all other collections but this one. Make sure to show all the direct parents and all children of the layer collection as well. When extending we simply show the collections and its direct family.

If the collection or any of its parents is disabled, make it enabled. Don't change the children disable state though.

Definition at line 1585 of file layer.c.

References BKE_layer_collection_activate(), BKE_layer_collection_has_layer_collection(), BKE_layer_collection_sync(), ListBase::first, LayerCollection::flag, layer_collection_flag_set_recursive(), layer_collection_flag_unset_recursive(), LAYER_COLLECTION_HIDE, LAYER_COLLECTION_VISIBLE_VIEW_LAYER, LayerCollection::layer_collections, ViewLayer::layer_collections, LISTBASE_FOREACH, LayerCollection::runtime_flag, and scene.

Referenced by collection_isolate_exec(), and object_hide_collection_exec().

◆ BKE_layer_collection_isolate_local()

void BKE_layer_collection_isolate_local ( ViewLayer *  view_layer,
const View3D *  v3d,
LayerCollection *  lc,
bool  extend 
)

◆ BKE_layer_collection_local_sync()

void BKE_layer_collection_local_sync ( ViewLayer *  view_layer,
const View3D *  v3d 
)

◆ BKE_layer_collection_local_sync_all()

void BKE_layer_collection_local_sync_all ( const Main *  bmain)

◆ BKE_layer_collection_objects_select()

bool BKE_layer_collection_objects_select ( struct ViewLayer *  view_layer,
struct LayerCollection *  lc,
bool  deselect 
)

◆ BKE_layer_collection_resync_allow()

void BKE_layer_collection_resync_allow ( void  )

◆ BKE_layer_collection_resync_forbid()

void BKE_layer_collection_resync_forbid ( void  )

◆ BKE_layer_collection_set_flag()

void BKE_layer_collection_set_flag ( LayerCollection *  lc,
const int  flag,
const bool  value 
)

◆ BKE_layer_collection_set_visible()

void BKE_layer_collection_set_visible ( struct ViewLayer *  view_layer,
struct LayerCollection *  lc,
bool  visible,
bool  hierarchy 
)

Hide/show all the elements of a collection. Don't change the collection children enable/disable state, but it may change it for the collection itself.

Definition at line 1791 of file layer.c.

References LayerCollection::flag, layer_collection_bases_hide_recursive(), layer_collection_bases_show_recursive(), layer_collection_flag_set_recursive(), layer_collection_flag_unset_recursive(), and LAYER_COLLECTION_HIDE.

Referenced by collection_visibility_exec(), and outliner_hide_exec().

◆ BKE_layer_collection_sync()

void BKE_layer_collection_sync ( const Scene *  scene,
ViewLayer *  view_layer 
)

◆ BKE_layer_eval_view_layer_indexed()

void BKE_layer_eval_view_layer_indexed ( struct Depsgraph *  depsgraph,
struct Scene *  scene,
int  view_layer_index 
)

◆ BKE_lightgroup_membership_get()

void BKE_lightgroup_membership_get ( struct LightgroupMembership *  lgm,
char *  name 
)

Definition at line 2624 of file layer.c.

References BLI_strncpy(), ViewLayerLightgroup::name, LightgroupMembership::name, and NULL.

◆ BKE_lightgroup_membership_length()

int BKE_lightgroup_membership_length ( struct LightgroupMembership *  lgm)

Definition at line 2634 of file layer.c.

References LightgroupMembership::name, and NULL.

◆ BKE_lightgroup_membership_set()

void BKE_lightgroup_membership_set ( struct LightgroupMembership **  lgm,
const char *  name 
)

Definition at line 2642 of file layer.c.

References BLI_strncpy(), MEM_callocN, MEM_freeN, ViewLayerLightgroup::name, and NULL.

◆ BKE_main_collection_sync()

void BKE_main_collection_sync ( const Main *  bmain)

◆ BKE_main_collection_sync_remap()

void BKE_main_collection_sync_remap ( const Main *  bmain)

◆ BKE_object_is_visible_in_viewport()

bool BKE_object_is_visible_in_viewport ( const View3D *  v3d,
const struct Object *  ob 
)

◆ BKE_scene_collection_sync()

void BKE_scene_collection_sync ( const Scene *  scene)

◆ BKE_scene_has_object()

bool BKE_scene_has_object ( struct Scene *  scene,
struct Object *  ob 
)

See if the object is in any of the scene layers of the scene.

Definition at line 1895 of file layer.c.

References BKE_view_layer_base_find(), LISTBASE_FOREACH, scene, and Scene::view_layers.

Referenced by ED_editors_init(), and scene_drop_invoke().

◆ BKE_view_layer_add()

ViewLayer* BKE_view_layer_add ( struct Scene *  scene,
const char *  name,
struct ViewLayer *  view_layer_source,
int  type 
)

◆ BKE_view_layer_add_aov()

struct ViewLayerAOV* BKE_view_layer_add_aov ( struct ViewLayer *  view_layer)

◆ BKE_view_layer_add_lightgroup()

struct ViewLayerLightgroup* BKE_view_layer_add_lightgroup ( struct ViewLayer *  view_layer,
const char *  name 
)

◆ BKE_view_layer_base_deselect_all()

void BKE_view_layer_base_deselect_all ( ViewLayer *  view_layer)

◆ BKE_view_layer_base_find()

Base* BKE_view_layer_base_find ( ViewLayer *  view_layer,
Object *  ob 
)

Definition at line 379 of file layer.c.

References BLI_ghash_lookup(), ViewLayer::object_bases_hash, and view_layer_bases_hash_create().

Referenced by add_hook_object_new(), bake_object_check(), bc_add_object(), BKE_layer_collection_has_selected_objects(), BKE_layer_collection_objects_select(), BKE_object_add(), BKE_object_add_for_data(), BKE_object_add_from(), BKE_object_pose_armature_get_visible(), BKE_object_pose_base_array_get_ex(), BKE_scene_has_object(), clear_override_library_exec(), collection_objects_select(), createTransObject(), CTX_data_active_base(), ctx_data_base_collection_get(), do_outliner_item_activate_tree_element(), do_outliner_item_mode_toggle_generic(), do_version_layers_to_collections(), duplibase_for_convert(), duplicate_exec(), ED_armature_pose_select_in_wpaint_mode(), ED_object_jump_to_object(), ed_object_posemode_set_for_weight_paint_ex(), ED_outliner_give_base_under_cursor(), ED_undo_object_set_active_or_warn(), EDBM_edge_find_nearest(), EDBM_face_find_nearest(), EDBM_vert_find_nearest(), editselect_buf_cache_init(), element_should_draw_faded(), blender::io::obj::geometry_to_blender_objects(), getTransformOrientation_ex(), gpencil_layer_to_curve(), id_override_library_clear_single_fn(), blender::io::usd::import_endjob(), import_endjob(), blender::io::stl::importer_main(), jump_to_target_ptr(), layer_collection_bases_hide_recursive(), layer_collection_bases_show_recursive(), layer_collection_local_sync(), lib_override_library_create_post_process(), loose_data_instantiate_collection_process(), loose_data_instantiate_object_base_instance_init(), make_local_all__instance_indirect_unused(), make_object_duplilist_real(), object_add_duplicate_internal(), object_batch_delete_hierarchy_fn(), object_deselect_fn(), object_preview_scene_create(), object_select_fn(), object_select_mirror_exec(), object_transfer_mode_to_base(), outliner_base_or_object_pointer_create(), outliner_draw_restrictbuts(), outliner_draw_tree_element(), outliner_element_visible_get(), outliner_hide_find_data_to_edit(), outliner_item_mode_toggle(), outliner_object_set_flag_recursive_fn(), outliner_select_sync_from_object(), outliner_select_sync_to_object(), override_idtemplate_clear_exec(), parent_drop_allowed(), scene_drop_invoke(), screen_set_3dview_camera(), select_grouped_object_hooks(), select_grouped_parent(), select_marker_camera_switch(), set_trans_object_base_flags(), transform_object_deform_pose_armature_get(), tree_element_object_activate(), tree_element_pose_state_get(), validate_object_select_id(), view3d_collection_drop_copy_external_asset(), and view3d_ob_drop_copy_external_asset().

◆ BKE_view_layer_base_select_and_set_active()

void BKE_view_layer_base_select_and_set_active ( struct ViewLayer *  view_layer,
Base *  selbase 
)

◆ BKE_view_layer_bases_in_mode_iterator_begin()

void BKE_view_layer_bases_in_mode_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

◆ BKE_view_layer_bases_in_mode_iterator_end()

void BKE_view_layer_bases_in_mode_iterator_end ( BLI_Iterator *  UNUSEDiter)

Definition at line 2189 of file layer.c.

◆ BKE_view_layer_bases_in_mode_iterator_next()

void BKE_view_layer_bases_in_mode_iterator_next ( BLI_Iterator *  iter)

◆ BKE_view_layer_blend_read_data()

void BKE_view_layer_blend_read_data ( BlendDataReader *  reader,
ViewLayer *  view_layer 
)

◆ BKE_view_layer_blend_read_lib()

void BKE_view_layer_blend_read_lib ( BlendLibReader *  reader,
Library *  lib,
ViewLayer *  view_layer 
)

◆ BKE_view_layer_blend_write()

void BKE_view_layer_blend_write ( BlendWriter *  writer,
ViewLayer *  view_layer 
)

◆ BKE_view_layer_camera_find()

Object* BKE_view_layer_camera_find ( struct ViewLayer *  view_layer)

Fallback for when a Scene has no camera to use.

Parameters
view_layerin general you want to use the same ViewLayer that is used for depsgraph. If rendering you pass the scene active layer, when viewing in the viewport you want to get ViewLayer from context.

Definition at line 311 of file layer.c.

References LISTBASE_FOREACH, NULL, OB_CAMERA, and ViewLayer::object_bases.

Referenced by check_valid_camera(), check_valid_compositing_camera(), screen_set_3dview_camera(), and view_camera_exec().

◆ BKE_view_layer_context_active_PLACEHOLDER()

ViewLayer* BKE_view_layer_context_active_PLACEHOLDER ( const Scene *  scene)

Definition at line 148 of file layer.c.

References BLI_assert, ListBase::first, scene, and Scene::view_layers.

◆ BKE_view_layer_copy_data()

void BKE_view_layer_copy_data ( Scene *  scene_dst,
const Scene *  UNUSEDscene_src,
ViewLayer *  view_layer_dst,
const ViewLayer *  view_layer_src,
const int  flag 
)

◆ BKE_view_layer_default_render()

ViewLayer* BKE_view_layer_default_render ( const Scene *  scene)

◆ BKE_view_layer_default_view()

ViewLayer* BKE_view_layer_default_view ( const Scene *  scene)

◆ BKE_view_layer_find()

ViewLayer* BKE_view_layer_find ( const Scene *  scene,
const char *  layer_name 
)

Definition at line 137 of file layer.c.

References LISTBASE_FOREACH, NULL, scene, STREQ, and Scene::view_layers.

◆ BKE_view_layer_find_from_collection()

ViewLayer* BKE_view_layer_find_from_collection ( const Scene *  scene,
LayerCollection *  lc 
)

◆ BKE_view_layer_find_with_aov()

ViewLayer* BKE_view_layer_find_with_aov ( struct Scene *  scene,
struct ViewLayerAOV *  aov 
)

Definition at line 2503 of file layer.c.

References BLI_findindex(), LISTBASE_FOREACH, NULL, scene, and Scene::view_layers.

◆ BKE_view_layer_find_with_lightgroup()

ViewLayer* BKE_view_layer_find_with_lightgroup ( struct Scene *  scene,
struct ViewLayerLightgroup *  lightgroup 
)

Definition at line 2581 of file layer.c.

References BLI_findindex(), LISTBASE_FOREACH, NULL, scene, and Scene::view_layers.

◆ BKE_view_layer_free()

void BKE_view_layer_free ( ViewLayer *  view_layer)

Definition at line 239 of file layer.c.

References BKE_view_layer_free_ex().

Referenced by ED_scene_view_layer_delete().

◆ BKE_view_layer_free_ex()

void BKE_view_layer_free_ex ( struct ViewLayer *  view_layer,
bool  do_id_user 
)

◆ BKE_view_layer_has_collection()

bool BKE_view_layer_has_collection ( const ViewLayer *  view_layer,
const Collection *  collection 
)

◆ BKE_view_layer_has_valid_aov()

bool BKE_view_layer_has_valid_aov ( struct ViewLayer *  view_layer)

Check if the given view layer has at least one valid AOV.

Definition at line 2493 of file layer.c.

References AOV_CONFLICT, ViewLayer::aovs, and LISTBASE_FOREACH.

Referenced by blender::bke::tests::TEST(), and blender::bke::tests::test_render_pass_conflict().

◆ BKE_view_layer_remove_aov()

void BKE_view_layer_remove_aov ( ViewLayer *  view_layer,
ViewLayerAOV *  aov 
)

◆ BKE_view_layer_remove_lightgroup()

void BKE_view_layer_remove_lightgroup ( ViewLayer *  view_layer,
ViewLayerLightgroup *  lightgroup 
)

◆ BKE_view_layer_rename()

void BKE_view_layer_rename ( Main *  bmain,
Scene *  scene,
ViewLayer *  view_layer,
const char *  newname 
)

◆ BKE_view_layer_rename_lightgroup()

void BKE_view_layer_rename_lightgroup ( Scene *  scene,
ViewLayer *  view_layer,
ViewLayerLightgroup *  lightgroup,
const char *  name 
)

◆ BKE_view_layer_selected_bases_iterator_begin()

void BKE_view_layer_selected_bases_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

Definition at line 2088 of file layer.c.

References BASE_SELECTED, BASE_VISIBLE_DEPSGRAPH, and objects_iterator_begin().

◆ BKE_view_layer_selected_bases_iterator_end()

void BKE_view_layer_selected_bases_iterator_end ( BLI_Iterator *  iter)

Definition at line 2098 of file layer.c.

References object_bases_iterator_end().

◆ BKE_view_layer_selected_bases_iterator_next()

void BKE_view_layer_selected_bases_iterator_next ( BLI_Iterator *  iter)

Definition at line 2093 of file layer.c.

References BASE_SELECTED, BASE_VISIBLE_DEPSGRAPH, and object_bases_iterator_next().

◆ BKE_view_layer_selected_editable_objects_iterator_begin()

void BKE_view_layer_selected_editable_objects_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

◆ BKE_view_layer_selected_editable_objects_iterator_end()

void BKE_view_layer_selected_editable_objects_iterator_end ( BLI_Iterator *  iter)

Definition at line 2077 of file layer.c.

References objects_iterator_end().

◆ BKE_view_layer_selected_editable_objects_iterator_next()

void BKE_view_layer_selected_editable_objects_iterator_next ( BLI_Iterator *  iter)

◆ BKE_view_layer_selected_objects_iterator_begin()

void BKE_view_layer_selected_objects_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

Definition at line 2012 of file layer.c.

References BASE_SELECTED, BASE_VISIBLE_DEPSGRAPH, and objects_iterator_begin().

◆ BKE_view_layer_selected_objects_iterator_end()

void BKE_view_layer_selected_objects_iterator_end ( BLI_Iterator *  iter)

Definition at line 2022 of file layer.c.

References objects_iterator_end().

◆ BKE_view_layer_selected_objects_iterator_next()

void BKE_view_layer_selected_objects_iterator_next ( BLI_Iterator *  iter)

Definition at line 2017 of file layer.c.

References BASE_SELECTED, BASE_VISIBLE_DEPSGRAPH, and objects_iterator_next().

◆ BKE_view_layer_selected_objects_tag()

void BKE_view_layer_selected_objects_tag ( struct ViewLayer *  view_layer,
int  tag 
)

Tag all the selected objects of a render-layer.

Definition at line 286 of file layer.c.

References BASE_SELECTED, LISTBASE_FOREACH, and ViewLayer::object_bases.

Referenced by make_single_user_exec().

◆ BKE_view_layer_set_active_aov()

void BKE_view_layer_set_active_aov ( ViewLayer *  view_layer,
ViewLayerAOV *  aov 
)

Definition at line 2448 of file layer.c.

References viewlayer_aov_active_set().

◆ BKE_view_layer_set_active_lightgroup()

void BKE_view_layer_set_active_lightgroup ( ViewLayer *  view_layer,
ViewLayerLightgroup *  lightgroup 
)

Definition at line 2576 of file layer.c.

References viewlayer_lightgroup_active_set().

◆ BKE_view_layer_verify_aov()

void BKE_view_layer_verify_aov ( struct RenderEngine *  engine,
struct Scene *  scene,
struct ViewLayer *  view_layer 
)

Update the naming and conflicts of the AOVs.

Name must be unique between all AOVs. Conflicts with render passes will show a conflict icon. Reason is that switching a render engine or activating a render pass could lead to other conflicts that wouldn't be that clear for the user.

Definition at line 2476 of file layer.c.

References AOV_CONFLICT, ViewLayer::aovs, bke_view_layer_verify_aov_cb(), BLI_ghash_free(), BLI_ghash_lookup(), BLI_ghash_str_new(), count, LISTBASE_FOREACH, MEM_freeN, NULL, POINTER_AS_INT, RE_engine_update_render_passes(), scene, SET_FLAG_FROM_TEST, and viewlayer_aov_make_name_unique().

Referenced by blender::bke::tests::TEST(), blender::bke::tests::test_render_pass_conflict(), view_layer_add_aov_exec(), and view_layer_remove_aov_exec().

◆ bke_view_layer_verify_aov_cb()

static void bke_view_layer_verify_aov_cb ( void *  userdata,
Scene *  UNUSEDscene,
ViewLayer *  UNUSEDview_layer,
const char *  name,
int   UNUSEDchannels,
const char *  UNUSEDchanid,
eNodeSocketDatatype   UNUSEDtype 
)
static

◆ BKE_view_layer_visible_bases_iterator_begin()

void BKE_view_layer_visible_bases_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

Definition at line 2109 of file layer.c.

References object_bases_iterator_begin().

◆ BKE_view_layer_visible_bases_iterator_end()

void BKE_view_layer_visible_bases_iterator_end ( BLI_Iterator *  iter)

Definition at line 2119 of file layer.c.

References object_bases_iterator_end().

◆ BKE_view_layer_visible_bases_iterator_next()

void BKE_view_layer_visible_bases_iterator_next ( BLI_Iterator *  iter)

Definition at line 2114 of file layer.c.

References object_bases_iterator_next().

◆ BKE_view_layer_visible_objects_iterator_begin()

void BKE_view_layer_visible_objects_iterator_begin ( BLI_Iterator *  iter,
void *  data_in 
)

Definition at line 2033 of file layer.c.

References objects_iterator_begin().

◆ BKE_view_layer_visible_objects_iterator_end()

void BKE_view_layer_visible_objects_iterator_end ( BLI_Iterator *  iter)

Definition at line 2043 of file layer.c.

References objects_iterator_end().

◆ BKE_view_layer_visible_objects_iterator_next()

void BKE_view_layer_visible_objects_iterator_next ( BLI_Iterator *  iter)

Definition at line 2038 of file layer.c.

References objects_iterator_next().

◆ collection_count()

static int collection_count ( const ListBase *  lb)
static

Recursively get the count of collections

Definition at line 679 of file layer.c.

References LISTBASE_FOREACH.

Referenced by BKE_layer_collection_count(), and select_grouped_collection().

◆ collection_from_index()

static LayerCollection* collection_from_index ( ListBase *  lb,
const int  number,
int *  i 
)
static

Recursively get the collection for a given index

Definition at line 583 of file layer.c.

References LISTBASE_FOREACH, and NULL.

Referenced by BKE_layer_collection_from_index().

◆ direct_link_layer_collections()

static void direct_link_layer_collections ( BlendDataReader *  reader,
ListBase *  lb,
bool  master 
)
static

Definition at line 2298 of file layer.c.

References BLO_read_data_address, BLO_read_list(), and LISTBASE_FOREACH.

Referenced by BKE_view_layer_blend_read_data().

◆ find_layer_collection_by_scene_collection()

static LayerCollection* find_layer_collection_by_scene_collection ( LayerCollection *  lc,
const Collection *  collection 
)
static

◆ find_scene_collection_in_scene_collections()

static bool find_scene_collection_in_scene_collections ( ListBase *  lb,
const LayerCollection *  lc 
)
static

Definition at line 298 of file layer.c.

References LISTBASE_FOREACH.

Referenced by BKE_view_layer_find_from_collection().

◆ index_from_collection()

static int index_from_collection ( ListBase *  lb,
const LayerCollection *  lc,
int *  i 
)
static

Recursively get the index for a given collection

Definition at line 696 of file layer.c.

References LISTBASE_FOREACH.

Referenced by BKE_layer_collection_findindex().

◆ layer_aov_copy_data()

static void layer_aov_copy_data ( ViewLayer *  view_layer_dst,
const ViewLayer *  view_layer_src,
ListBase *  aovs_dst,
const ListBase *  aovs_src 
)
static

◆ layer_collection_add()

static LayerCollection* layer_collection_add ( ListBase *  lb_parent,
Collection *  collection 
)
static

◆ layer_collection_bases_hide_recursive()

static void layer_collection_bases_hide_recursive ( ViewLayer *  view_layer,
LayerCollection *  lc 
)
static

◆ layer_collection_bases_show_recursive()

static void layer_collection_bases_show_recursive ( ViewLayer *  view_layer,
LayerCollection *  lc 
)
static

◆ layer_collection_exclude_all()

static void layer_collection_exclude_all ( LayerCollection *  layer_collection)
static

◆ layer_collection_flag_recursive_set()

static void layer_collection_flag_recursive_set ( LayerCollection *  lc,
const int  flag,
const bool  value,
const bool  restore_flag 
)
static

Set layer collection hide/exclude/indirect flag on a layer collection. recursively.

Definition at line 1820 of file layer.c.

References LayerCollection::flag, LAYER_COLLECTION_EXCLUDE, LAYER_COLLECTION_PREVIOUSLY_EXCLUDED, LayerCollection::layer_collections, LISTBASE_FOREACH, and SET_FLAG_FROM_TEST.

Referenced by BKE_layer_collection_set_flag().

◆ layer_collection_flag_set_recursive()

static void layer_collection_flag_set_recursive ( LayerCollection *  lc,
const int  flag 
)
static

◆ layer_collection_flag_unset_recursive()

static void layer_collection_flag_unset_recursive ( LayerCollection *  lc,
const int  flag 
)
static

◆ layer_collection_free()

static void layer_collection_free ( ViewLayer *  view_layer,
LayerCollection *  lc 
)
static

◆ layer_collection_hidden()

static bool layer_collection_hidden ( ViewLayer *  view_layer,
LayerCollection *  lc 
)
static

◆ layer_collection_local_sync()

static void layer_collection_local_sync ( ViewLayer *  view_layer,
LayerCollection *  layer_collection,
const unsigned short  local_collections_uuid,
bool  visible 
)
static

◆ layer_collection_local_visibility_set_recursive()

static void layer_collection_local_visibility_set_recursive ( LayerCollection *  layer_collection,
const int  local_collections_uuid 
)
static

◆ layer_collection_local_visibility_unset_recursive()

static void layer_collection_local_visibility_unset_recursive ( LayerCollection *  layer_collection,
const int  local_collections_uuid 
)
static

◆ layer_collection_objects_sync()

static void layer_collection_objects_sync ( ViewLayer *  view_layer,
LayerCollection *  layer,
ListBase *  r_lb_new_object_bases,
const short  collection_restrict,
const short  layer_restrict,
const ushort  local_collections_bits 
)
static

◆ layer_collection_resync_create_recurse()

static LayerCollectionResync* layer_collection_resync_create_recurse ( LayerCollectionResync *  parent_layer_resync,
LayerCollection *  layer,
BLI_mempool *  mempool 
)
static

◆ layer_collection_resync_find()

static LayerCollectionResync* layer_collection_resync_find ( LayerCollectionResync *  layer_resync,
Collection *  child_collection 
)
static

◆ layer_collection_resync_unused_layers_free()

static void layer_collection_resync_unused_layers_free ( ViewLayer *  view_layer,
LayerCollectionResync *  layer_resync 
)
static

◆ layer_collection_sync()

static void layer_collection_sync ( ViewLayer *  view_layer,
LayerCollectionResync *  layer_resync,
BLI_mempool *  layer_resync_mempool,
ListBase *  r_lb_new_object_bases,
const short  parent_layer_flag,
const short  parent_collection_restrict,
const short  parent_layer_restrict,
const ushort  parent_local_collections_bits 
)
static

◆ layer_collections_copy_data()

static void layer_collections_copy_data ( ViewLayer *  view_layer_dst,
const ViewLayer *  view_layer_src,
ListBase *  layer_collections_dst,
const ListBase *  layer_collections_src 
)
static

◆ layer_eval_view_layer()

static void layer_eval_view_layer ( struct Depsgraph *  depsgraph,
struct Scene *  UNUSEDscene,
ViewLayer *  view_layer 
)
static

◆ layer_lightgroup_copy_data()

static void layer_lightgroup_copy_data ( ViewLayer *  view_layer_dst,
const ViewLayer *  view_layer_src,
ListBase *  lightgroups_dst,
const ListBase *  lightgroups_src 
)
static

◆ lib_link_layer_collection()

static void lib_link_layer_collection ( BlendLibReader *  reader,
Library *  lib,
LayerCollection *  layer_collection,
bool  master 
)
static

◆ object_base_new()

static Base* object_base_new ( Object *  ob)
static

◆ object_bases_iterator_begin()

static void object_bases_iterator_begin ( BLI_Iterator *  iter,
void *  data_in_v,
const int  flag 
)
static

◆ object_bases_iterator_end()

static void object_bases_iterator_end ( BLI_Iterator *  iter)
static

◆ object_bases_iterator_is_valid()

static bool object_bases_iterator_is_valid ( const View3D *  v3d,
Base *  base,
const int  flag 
)
static

◆ object_bases_iterator_next()

static void object_bases_iterator_next ( BLI_Iterator *  iter,
const int  flag 
)
static

◆ objects_iterator_begin()

static void objects_iterator_begin ( BLI_Iterator *  iter,
void *  data_in,
const int  flag 
)
static

◆ objects_iterator_end()

static void objects_iterator_end ( BLI_Iterator *  iter)
static

◆ objects_iterator_next()

static void objects_iterator_next ( BLI_Iterator *  iter,
const int  flag 
)
static

◆ view_layer_add()

static ViewLayer* view_layer_add ( const char *  name)
static

◆ view_layer_bases_hash_create()

static void view_layer_bases_hash_create ( ViewLayer *  view_layer,
const bool  do_base_duplicates_fix 
)
static

◆ view_layer_objects_base_cache_validate()

static bool view_layer_objects_base_cache_validate ( ViewLayer *  view_layer,
LayerCollection *  layer 
)
static

◆ viewlayer_aov_active_set()

static void viewlayer_aov_active_set ( ViewLayer *  view_layer,
ViewLayerAOV *  aov 
)
static

◆ viewlayer_aov_make_name_unique()

static void viewlayer_aov_make_name_unique ( ViewLayer *  view_layer)
static

◆ viewlayer_lightgroup_active_set()

static void viewlayer_lightgroup_active_set ( ViewLayer *  view_layer,
ViewLayerLightgroup *  lightgroup 
)
static

◆ viewlayer_lightgroup_make_name_unique()

static void viewlayer_lightgroup_make_name_unique ( ViewLayer *  view_layer,
ViewLayerLightgroup *  lightgroup 
)
static

◆ write_layer_collections()

static void write_layer_collections ( BlendWriter *  writer,
ListBase *  lb 
)
static

Definition at line 2264 of file layer.c.

References BLO_write_struct, and LISTBASE_FOREACH.

Referenced by BKE_view_layer_blend_write().

Variable Documentation

◆ g_base_collection_flags

const short g_base_collection_flags
static
Initial value:

Definition at line 59 of file layer.c.

Referenced by BKE_base_eval_flags(), and BKE_layer_collection_sync().

◆ LOG

CLG_LogRef LOG = {"bke.layercollection"}
static

◆ no_resync

bool no_resync = false
static