Blender V5.0
BKE_light_linking.h File Reference

Go to the source code of this file.

Typedefs

typedef enum LightLinkingType LightLinkingType

Enumerations

enum  LightLinkingType { LIGHT_LINKING_RECEIVER , LIGHT_LINKING_BLOCKER }

Functions

void BKE_light_linking_ensure (struct Object *object)
void BKE_light_linking_copy (struct Object *object_dst, const struct Object *object_src, const int copy_flags)
void BKE_light_linking_delete (struct Object *object, const int delete_flags)
void BKE_light_linking_free_if_empty (struct Object *object)
struct CollectionBKE_light_linking_collection_get (const struct Object *object, LightLinkingType link_type)
struct CollectionBKE_light_linking_collection_new (struct Main *bmain, struct Object *object, LightLinkingType link_type)
void BKE_light_linking_collection_assign_only (struct Object *object, struct Collection *new_collection, LightLinkingType link_type)
void BKE_light_linking_collection_assign (struct Main *bmain, struct Object *object, struct Collection *new_collection, LightLinkingType link_type)
void BKE_light_linking_add_receiver_to_collection (struct Main *bmain, struct Collection *collection, struct ID *receiver, const eCollectionLightLinkingState link_state)
void BKE_light_linking_add_receiver_to_collection_before (struct Main *bmain, struct Collection *collection, struct ID *receiver, const struct ID *before, const eCollectionLightLinkingState link_state)
void BKE_light_linking_add_receiver_to_collection_after (struct Main *bmain, struct Collection *collection, struct ID *receiver, const struct ID *after, const eCollectionLightLinkingState link_state)
bool BKE_light_linking_unlink_id_from_collection (struct Main *bmain, struct Collection *collection, struct ID *id, struct ReportList *reports)
void BKE_light_linking_link_receiver_to_emitter (struct Main *bmain, struct Object *emitter, struct Object *receiver, LightLinkingType link_type, eCollectionLightLinkingState link_state)
void BKE_light_linking_select_receivers_of_emitter (struct Scene *scene, struct ViewLayer *view_layer, struct Object *emitter, LightLinkingType link_type)

Detailed Description

API to manage light linking.

Definition in file BKE_light_linking.h.

Typedef Documentation

◆ LightLinkingType

Enumeration Type Documentation

◆ LightLinkingType

Enumerator
LIGHT_LINKING_RECEIVER 
LIGHT_LINKING_BLOCKER 

Definition at line 23 of file BKE_light_linking.h.

Function Documentation

◆ BKE_light_linking_add_receiver_to_collection()

void BKE_light_linking_add_receiver_to_collection ( struct Main * bmain,
struct Collection * collection,
struct ID * receiver,
const eCollectionLightLinkingState link_state )

◆ BKE_light_linking_add_receiver_to_collection_after()

void BKE_light_linking_add_receiver_to_collection_after ( struct Main * bmain,
struct Collection * collection,
struct ID * receiver,
const struct ID * after,
const eCollectionLightLinkingState link_state )

◆ BKE_light_linking_add_receiver_to_collection_before()

void BKE_light_linking_add_receiver_to_collection_before ( struct Main * bmain,
struct Collection * collection,
struct ID * receiver,
const struct ID * before,
const eCollectionLightLinkingState link_state )

◆ BKE_light_linking_collection_assign()

void BKE_light_linking_collection_assign ( struct Main * bmain,
struct Object * object,
struct Collection * new_collection,
LightLinkingType link_type )

◆ BKE_light_linking_collection_assign_only()

void BKE_light_linking_collection_assign_only ( struct Object * object,
struct Collection * new_collection,
LightLinkingType link_type )

Assign given light or shadow linking collection (denoted by the link_type) to the given object. Maintains user counters of the collection: old collection is decreased the user counter, the new one is increased after this call. The new_collection is allowed to be null pointer.

The assign_only variant takes care of (re)assigning the collection and maintaining the user counter, but not the dependency graph tagging for update.

Definition at line 120 of file light_linking.cc.

References BKE_light_linking_collection_get(), BKE_light_linking_ensure(), BKE_light_linking_free_if_empty(), BLI_assert_unreachable, Collection::id, id_us_min(), id_us_plus(), Object::light_linking, LIGHT_LINKING_BLOCKER, and LIGHT_LINKING_RECEIVER.

Referenced by BKE_light_linking_collection_assign().

◆ BKE_light_linking_collection_get()

struct Collection * BKE_light_linking_collection_get ( const struct Object * object,
LightLinkingType link_type )

Get a collection of the given light linking type of the given object.

◆ BKE_light_linking_collection_new()

struct Collection * BKE_light_linking_collection_new ( struct Main * bmain,
struct Object * object,
LightLinkingType link_type )

Create new collection and assign it as a light or shadow linking collection (denoted by the link_type) of the given object.

The collection is created outside of the view layer collections. If the object already has light linking collection set up it is unreferenced from the object.

Returns
the newly created collection.

Definition at line 107 of file light_linking.cc.

References BKE_collection_add(), BKE_light_linking_collection_assign(), and get_default_collection_name().

Referenced by BKE_light_linking_link_receiver_to_emitter(), and blender::ed::object::light_linking_collection_new_exec().

◆ BKE_light_linking_copy()

void BKE_light_linking_copy ( struct Object * object_dst,
const struct Object * object_src,
const int copy_flags )

Copy the LightLinking data from object_src to object_dst.

Parameters
copy_flagsFlags controlling the copy process, see e.g. LIB_ID_CREATE_NO_USER_REFCOUNT and related flags in the same enum.

Referenced by object_copy_data().

◆ BKE_light_linking_delete()

void BKE_light_linking_delete ( struct Object * object,
const int delete_flags )

Free the LightLinking data from the object.

Parameters
copy_flagsFlags controlling the copy process, see e.g. LIB_ID_CREATE_NO_USER_REFCOUNT and related flags in the same enum.

Definition at line 50 of file light_linking.cc.

References LightLinking::blocker_collection, id_us_min(), LIB_ID_CREATE_NO_USER_REFCOUNT, Object::light_linking, MEM_SAFE_FREE, and LightLinking::receiver_collection.

Referenced by BKE_light_linking_free_if_empty(), and object_free_data().

◆ BKE_light_linking_ensure()

◆ BKE_light_linking_free_if_empty()

void BKE_light_linking_free_if_empty ( struct Object * object)

◆ BKE_light_linking_link_receiver_to_emitter()

void BKE_light_linking_link_receiver_to_emitter ( struct Main * bmain,
struct Object * emitter,
struct Object * receiver,
LightLinkingType link_type,
eCollectionLightLinkingState link_state )

Link receiver object to the given emitter.

If the emitter already has light linking collection specified the object is added to that collection. Otherwise, first a new collection is created and assigned, and the receiver is added to it.

Definition at line 483 of file light_linking.cc.

References BKE_collection_contains_geometry_recursive(), BKE_light_linking_add_receiver_to_collection(), BKE_light_linking_collection_get(), BKE_light_linking_collection_new(), Object::id, Object::instance_collection, OB_EMPTY, OB_TYPE_IS_GEOMETRY, and Object::type.

Referenced by blender::ed::object::light_linking_link_exec().

◆ BKE_light_linking_select_receivers_of_emitter()

void BKE_light_linking_select_receivers_of_emitter ( struct Scene * scene,
struct ViewLayer * view_layer,
struct Object * emitter,
LightLinkingType link_type )

◆ BKE_light_linking_unlink_id_from_collection()

bool BKE_light_linking_unlink_id_from_collection ( struct Main * bmain,
struct Collection * collection,
struct ID * id,
struct ReportList * reports )

Remove the given ID from the light or shadow linking collection of the given object.

The collection is expected to be either receiver_collection or blocker_collection from an emitter object.

The ID is expected to either be collection or an object. If other ID type is passed to the function an error is reported and false is returned.

Returns
true if the ID was unlinked from the receiver collection, false otherwise. The unlinking will be unsuccessful if, for example, the receiver collection is a linked data-block.

The optional reports argument is used to provide human-readable details about why unlinking was not successful. If it is nullptr then the report is printed to the console.

Definition at line 451 of file light_linking.cc.

References BKE_collection_child_remove(), BKE_collection_object_remove(), BKE_reportf(), DEG_id_tag_update(), DEG_relations_tag_update(), GS, Collection::id, ID_GR, ID_OB, ID_RECALC_HIERARCHY, ID_RECALC_SYNC_TO_EVAL, ID::name, and RPT_ERROR.

Referenced by blender::ed::object::light_linking_unlink_from_collection_exec().