Blender V4.3
BKE_layer.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
11#include "BLI_vector.hh"
12
13#include "BKE_collection.hh"
14
15#include "DNA_layer_types.h"
16#include "DNA_listBase.h"
17#include "DNA_object_enums.h"
18
19struct Base;
20struct BlendDataReader;
21struct BlendLibReader;
22struct BlendWriter;
23struct Collection;
24struct Depsgraph;
25struct LayerCollection;
26struct Main;
27struct Object;
28struct RenderEngine;
29struct Scene;
30struct View3D;
31struct ViewLayer;
32
38
51ViewLayer *BKE_view_layer_find(const Scene *scene, const char *layer_name);
56 const char *name,
57 ViewLayer *view_layer_source,
58 int type);
59
60/* DEPRECATED */
67
68void BKE_view_layer_free(ViewLayer *view_layer);
72void BKE_view_layer_free_ex(ViewLayer *view_layer, bool do_id_user);
73
79
83void BKE_view_layer_selected_objects_tag(const Scene *scene, ViewLayer *view_layer, int tag);
84
92Object *BKE_view_layer_camera_find(const Scene *scene, ViewLayer *view_layer);
98void BKE_view_layer_base_deselect_all(const Scene *scene, ViewLayer *view_layer);
99
101
107void BKE_view_layer_copy_data(Scene *scene_dst,
108 const Scene *scene_src,
109 ViewLayer *view_layer_dst,
110 const ViewLayer *view_layer_src,
111 int flag);
112
113void BKE_view_layer_rename(Main *bmain, Scene *scene, ViewLayer *view_layer, const char *newname);
114
127
131int BKE_layer_collection_count(const ViewLayer *view_layer);
132
141
144
151void BKE_layer_collection_doversion_2_80(const Scene *scene, ViewLayer *view_layer);
152
153void BKE_main_collection_sync(const Main *bmain);
154void BKE_scene_collection_sync(const Scene *scene);
160void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer);
161void BKE_layer_collection_local_sync(const Scene *scene, ViewLayer *view_layer, const View3D *v3d);
166
167void BKE_main_collection_sync_remap(const Main *bmain);
168
173 const Collection *collection);
177bool BKE_view_layer_has_collection(const ViewLayer *view_layer, const Collection *collection);
181bool BKE_scene_has_object(Scene *scene, Object *ob);
182
183/* Selection and hiding. */
184
192 ViewLayer *view_layer,
193 LayerCollection *lc,
194 bool deselect);
196 ViewLayer *view_layer,
197 LayerCollection *lc);
199 LayerCollection *lc_child);
200
204void BKE_base_set_visible(Scene *scene, ViewLayer *view_layer, Base *base, bool extend);
205bool BKE_base_is_visible(const View3D *v3d, const Base *base);
206bool BKE_object_is_visible_in_viewport(const View3D *v3d, const Object *ob);
216 ViewLayer *view_layer,
217 LayerCollection *lc,
218 bool extend);
225 ViewLayer *view_layer,
226 const View3D *v3d,
227 LayerCollection *lc,
228 bool extend);
235 const Scene *scene, ViewLayer *view_layer, LayerCollection *lc, bool visible, bool hierarchy);
236void BKE_layer_collection_set_flag(LayerCollection *lc, int flag, bool value);
237
238/* Evaluation. */
239
245void BKE_base_eval_flags(Base *base);
246
247void BKE_layer_eval_view_layer_indexed(Depsgraph *depsgraph, Scene *scene, int view_layer_index);
248
249/* .blend file I/O */
250
251void BKE_view_layer_blend_write(BlendWriter *writer, const Scene *scene, ViewLayer *view_layer);
254 ID *self_id,
255 ViewLayer *view_layer);
256
257/* iterators */
258
265
269
273
277
285
289
293
297
298#define FOREACH_SELECTED_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
299 { \
300 ObjectsVisibleIteratorData data_ = {NULL}; \
301 data_.view_layer = _view_layer; \
302 data_.v3d = _v3d; \
303 ITER_BEGIN (BKE_view_layer_selected_objects_iterator_begin, \
304 BKE_view_layer_selected_objects_iterator_next, \
305 BKE_view_layer_selected_objects_iterator_end, \
306 &data_, \
307 Object *, \
308 _instance)
309
310#define FOREACH_SELECTED_OBJECT_END \
311 ITER_END; \
312 } \
313 ((void)0)
314
315#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
316 { \
317 ObjectsVisibleIteratorData data_ = {NULL}; \
318 data_.view_layer = _view_layer; \
319 data_.v3d = _v3d; \
320 ITER_BEGIN (BKE_view_layer_selected_editable_objects_iterator_begin, \
321 BKE_view_layer_selected_editable_objects_iterator_next, \
322 BKE_view_layer_selected_editable_objects_iterator_end, \
323 &data_, \
324 Object *, \
325 _instance)
326
327#define FOREACH_SELECTED_EDITABLE_OBJECT_END \
328 ITER_END; \
329 } \
330 ((void)0)
331
332#define FOREACH_VISIBLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
333 { \
334 ObjectsVisibleIteratorData data_ = {NULL}; \
335 data_.view_layer = _view_layer; \
336 data_.v3d = _v3d; \
337 ITER_BEGIN (BKE_view_layer_visible_objects_iterator_begin, \
338 BKE_view_layer_visible_objects_iterator_next, \
339 BKE_view_layer_visible_objects_iterator_end, \
340 &data_, \
341 Object *, \
342 _instance)
343
344#define FOREACH_VISIBLE_OBJECT_END \
345 ITER_END; \
346 } \
347 ((void)0)
348
349#define FOREACH_BASE_IN_MODE_BEGIN( \
350 _scene, _view_layer, _v3d, _object_type, _object_mode, _instance) \
351 { \
352 ObjectsInModeIteratorData data_; \
353 memset(&data_, 0, sizeof(data_)); \
354 data_.object_mode = _object_mode; \
355 data_.object_type = _object_type; \
356 data_.view_layer = _view_layer; \
357 data_.v3d = _v3d; \
358 BKE_view_layer_synced_ensure(_scene, _view_layer); \
359 data_.base_active = BKE_view_layer_active_base_get(_view_layer); \
360 ITER_BEGIN (BKE_view_layer_bases_in_mode_iterator_begin, \
361 BKE_view_layer_bases_in_mode_iterator_next, \
362 BKE_view_layer_bases_in_mode_iterator_end, \
363 &data_, \
364 Base *, \
365 _instance)
366
367#define FOREACH_BASE_IN_MODE_END \
368 ITER_END; \
369 } \
370 ((void)0)
371
372#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_scene, _view_layer, _v3d, _instance) \
373 FOREACH_BASE_IN_MODE_BEGIN (_scene, _view_layer, _v3d, -1, OB_MODE_EDIT, _instance)
374
375#define FOREACH_BASE_IN_EDIT_MODE_END FOREACH_BASE_IN_MODE_END
376
377#define FOREACH_OBJECT_IN_MODE_BEGIN( \
378 _scene, _view_layer, _v3d, _object_type, _object_mode, _instance) \
379 FOREACH_BASE_IN_MODE_BEGIN (_scene, _view_layer, _v3d, _object_type, _object_mode, _base) { \
380 Object *_instance = _base->object;
381
382#define FOREACH_OBJECT_IN_MODE_END \
383 } \
384 FOREACH_BASE_IN_MODE_END
385
386#define FOREACH_OBJECT_IN_EDIT_MODE_BEGIN(_scene, _view_layer, _v3d, _instance) \
387 FOREACH_BASE_IN_EDIT_MODE_BEGIN (_scene, _view_layer, _v3d, _base) { \
388 Object *_instance = _base->object;
389
390#define FOREACH_OBJECT_IN_EDIT_MODE_END \
391 } \
392 FOREACH_BASE_IN_EDIT_MODE_END
393
394#define FOREACH_SELECTED_BASE_BEGIN(view_layer, _instance) \
395 ITER_BEGIN (BKE_view_layer_selected_bases_iterator_begin, \
396 BKE_view_layer_selected_bases_iterator_next, \
397 BKE_view_layer_selected_bases_iterator_end, \
398 view_layer, \
399 Base *, \
400 _instance)
401
402#define FOREACH_SELECTED_BASE_END ITER_END
403
404#define FOREACH_VISIBLE_BASE_BEGIN(_scene, _view_layer, _v3d, _instance) \
405 { \
406 ObjectsVisibleIteratorData data_ = {NULL}; \
407 data_.view_layer = _view_layer; \
408 data_.v3d = _v3d; \
409 BKE_view_layer_synced_ensure(_scene, _view_layer); \
410 ITER_BEGIN (BKE_view_layer_visible_bases_iterator_begin, \
411 BKE_view_layer_visible_bases_iterator_next, \
412 BKE_view_layer_visible_bases_iterator_end, \
413 &data_, \
414 Base *, \
415 _instance)
416
417#define FOREACH_VISIBLE_BASE_END \
418 ITER_END; \
419 } \
420 ((void)0)
421
422#define FOREACH_OBJECT_BEGIN(scene, view_layer, _instance) \
423 { \
424 Object *_instance; \
425 Base *_base; \
426 BKE_view_layer_synced_ensure(scene, view_layer); \
427 for (_base = (Base *)BKE_view_layer_object_bases_get(view_layer)->first; _base; \
428 _base = _base->next) \
429 { \
430 _instance = _base->object;
431
432#define FOREACH_OBJECT_END \
433 } \
434 } \
435 ((void)0)
436
437#define FOREACH_OBJECT_FLAG_BEGIN(_scene, _view_layer, _v3d, _flag, _instance) \
438 { \
439 IteratorBeginCb func_begin; \
440 IteratorCb func_next, func_end; \
441 void *data_in; \
442\
443 ObjectsVisibleIteratorData data_select_ = {NULL}; \
444 data_select_.view_layer = _view_layer; \
445 data_select_.v3d = _v3d; \
446\
447 SceneObjectsIteratorExData data_flag_ = {NULL}; \
448 data_flag_.scene = _scene; \
449 switch ((data_flag_.flag = _flag)) { \
450 case SELECT: { \
451 func_begin = &BKE_view_layer_selected_objects_iterator_begin; \
452 func_next = &BKE_view_layer_selected_objects_iterator_next; \
453 func_end = &BKE_view_layer_selected_objects_iterator_end; \
454 data_in = &data_select_; \
455 break; \
456 } \
457 case 0: { \
458 func_begin = BKE_scene_objects_iterator_begin; \
459 func_next = BKE_scene_objects_iterator_next; \
460 func_end = BKE_scene_objects_iterator_end; \
461 data_in = data_flag_.scene; \
462 break; \
463 } \
464 default: { \
465 func_begin = BKE_scene_objects_iterator_begin_ex; \
466 func_next = BKE_scene_objects_iterator_next_ex; \
467 func_end = BKE_scene_objects_iterator_end_ex; \
468 data_in = &data_flag_; \
469 break; \
470 } \
471 } \
472 if (data_select_.view_layer) { \
473 BKE_view_layer_synced_ensure(data_flag_.scene, data_select_.view_layer); \
474 } \
475 ITER_BEGIN (func_begin, func_next, func_end, data_in, Object *, _instance)
476
477#define FOREACH_OBJECT_FLAG_END \
478 ITER_END; \
479 } \
480 ((void)0)
481
482/* `layer_utils.cc` */
483
486
487 bool (*filter_fn)(const Object *ob, void *user_data);
489};
490
492 ViewLayer *view_layer, const View3D *v3d, const ObjectsInViewLayerParams *params);
493
502 ViewLayer *view_layer,
503 const View3D *v3d);
504
508
509 bool (*filter_fn)(const Object *ob, void *user_data);
511};
512
514 const Scene *scene,
515 ViewLayer *view_layer,
516 const View3D *v3d,
518
520 const Scene *scene,
521 ViewLayer *view_layer,
522 const View3D *v3d,
524
525bool BKE_view_layer_filter_edit_mesh_has_uvs(const Object *ob, void *user_data);
526bool BKE_view_layer_filter_edit_mesh_has_edges(const Object *ob, void *user_data);
527
528/* Utility functions that wrap common arguments (add more as needed). */
529
531 ViewLayer *view_layer,
532 const View3D *v3d);
534 ViewLayer *view_layer,
535 const View3D *v3d);
537 const Scene *scene, ViewLayer *view_layer, const View3D *v3d);
538
540 const Scene *scene, ViewLayer *view_layer, const View3D *v3d);
542 const Scene *scene, ViewLayer *view_layer, const View3D *v3d);
544 const Scene *scene, ViewLayer *view_layer, const View3D *v3d, eObjectMode mode);
547
550
552
554void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer);
555
558
560void BKE_view_layer_remove_aov(ViewLayer *view_layer, ViewLayerAOV *aov);
570void BKE_view_layer_verify_aov(RenderEngine *engine, Scene *scene, ViewLayer *view_layer);
576
577ViewLayerLightgroup *BKE_view_layer_add_lightgroup(ViewLayer *view_layer, const char *name);
582 ViewLayer *view_layer,
583 ViewLayerLightgroup *lightgroup,
584 const char *name);
585
586int BKE_lightgroup_membership_get(const LightgroupMembership *lgm, char *name);
588void BKE_lightgroup_membership_set(LightgroupMembership **lgm, const char *name);
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_blend_write(BlendWriter *writer, const Scene *scene, ViewLayer *view_layer)
void BKE_view_layer_rename_lightgroup(Scene *scene, ViewLayer *view_layer, ViewLayerLightgroup *lightgroup, const char *name)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
bool BKE_view_layer_filter_edit_mesh_has_uvs(const Object *ob, void *user_data)
LayerCollection * BKE_layer_collection_first_from_scene_collection(const ViewLayer *view_layer, const Collection *collection)
ViewLayerLightgroup * BKE_view_layer_add_lightgroup(ViewLayer *view_layer, const char *name)
bool BKE_view_layer_has_collection(const ViewLayer *view_layer, const Collection *collection)
void BKE_view_layer_blend_read_data(BlendDataReader *reader, ViewLayer *view_layer)
ViewLayer * BKE_view_layer_find_with_aov(Scene *scene, ViewLayerAOV *aov)
LayerCollection * BKE_layer_collection_get_active(ViewLayer *view_layer)
void BKE_view_layer_set_active_lightgroup(ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
void BKE_view_layer_selected_objects_tag(const Scene *scene, ViewLayer *view_layer, int tag)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
bool BKE_view_layer_has_valid_aov(ViewLayer *view_layer)
void BKE_layer_collection_resync_forbid()
void BKE_view_layer_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_view_layer_blend_read_after_liblink(BlendLibReader *reader, ID *self_id, ViewLayer *view_layer)
void BKE_view_layer_base_deselect_all(const Scene *scene, ViewLayer *view_layer)
void BKE_scene_view_layers_synced_ensure(const Scene *scene)
void BKE_main_collection_sync_remap(const Main *bmain)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
LayerCollection * BKE_view_layer_active_collection_get(ViewLayer *view_layer)
bool BKE_view_layer_filter_edit_mesh_has_edges(const Object *ob, void *user_data)
void BKE_view_layer_selected_editable_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_view_layer_set_active_aov(ViewLayer *view_layer, ViewLayerAOV *aov)
void BKE_view_layer_remove_aov(ViewLayer *view_layer, ViewLayerAOV *aov)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_mode_params(const Scene *scene, ViewLayer *view_layer, const View3D *v3d, const ObjectsInModeParams *params)
void BKE_view_layer_remove_lightgroup(ViewLayer *view_layer, ViewLayerLightgroup *lightgroup)
void BKE_layer_collection_local_sync(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
LayerCollection * BKE_layer_collection_from_index(ViewLayer *view_layer, int index)
void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter)
bool BKE_layer_collection_objects_select(const Scene *scene, ViewLayer *view_layer, LayerCollection *lc, bool deselect)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
void BKE_view_layer_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter)
void BKE_view_layer_free_object_content(ViewLayer *view_layer)
void BKE_layer_collection_isolate_local(const Scene *scene, ViewLayer *view_layer, const View3D *v3d, LayerCollection *lc, bool extend)
void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter)
void BKE_view_layer_selected_editable_objects_iterator_next(BLI_Iterator *iter)
bool BKE_layer_collection_has_selected_objects(const Scene *scene, ViewLayer *view_layer, LayerCollection *lc)
eViewLayerCopyMethod
Definition BKE_layer.hh:33
@ VIEWLAYER_ADD_NEW
Definition BKE_layer.hh:34
@ VIEWLAYER_ADD_EMPTY
Definition BKE_layer.hh:35
@ VIEWLAYER_ADD_COPY
Definition BKE_layer.hh:36
void BKE_layer_collection_resync_allow()
void BKE_view_layer_verify_aov(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
void BKE_layer_eval_view_layer_indexed(Depsgraph *depsgraph, Scene *scene, int view_layer_index)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
Object * BKE_view_layer_camera_find(const Scene *scene, ViewLayer *view_layer)
void BKE_view_layer_free_ex(ViewLayer *view_layer, bool do_id_user)
ViewLayer * BKE_view_layer_find_with_lightgroup(Scene *scene, ViewLayerLightgroup *lightgroup)
int BKE_lightgroup_membership_length(const LightgroupMembership *lgm)
blender::Vector< Object * > BKE_view_layer_array_selected_objects_params(ViewLayer *view_layer, const View3D *v3d, const ObjectsInViewLayerParams *params)
ViewLayer * BKE_view_layer_add(Scene *scene, const char *name, ViewLayer *view_layer_source, int type)
ViewLayer * BKE_view_layer_default_view(const Scene *scene)
void BKE_view_layer_selected_bases_iterator_next(BLI_Iterator *iter)
ViewLayer * BKE_view_layer_find(const Scene *scene, const char *layer_name)
bool BKE_base_is_visible(const View3D *v3d, const Base *base)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
void BKE_scene_collection_sync(const Scene *scene)
bool BKE_object_is_visible_in_viewport(const View3D *v3d, const Object *ob)
void BKE_view_layer_visible_objects_iterator_end(BLI_Iterator *iter)
ViewLayer * BKE_view_layer_context_active_PLACEHOLDER(const Scene *scene)
Object * BKE_view_layer_non_active_selected_object(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
void BKE_view_layer_selected_bases_iterator_end(BLI_Iterator *iter)
void BKE_view_layer_rename(Main *bmain, Scene *scene, ViewLayer *view_layer, const char *newname)
void BKE_base_set_visible(Scene *scene, ViewLayer *view_layer, Base *base, bool extend)
void BKE_layer_collection_set_visible(const Scene *scene, ViewLayer *view_layer, LayerCollection *lc, bool visible, bool hierarchy)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d, eObjectMode mode)
int BKE_layer_collection_count(const ViewLayer *view_layer)
bool BKE_layer_collection_has_layer_collection(LayerCollection *lc_parent, LayerCollection *lc_child)
void BKE_layer_collection_isolate_global(Scene *scene, ViewLayer *view_layer, LayerCollection *lc, bool extend)
void BKE_view_layer_need_resync_tag(ViewLayer *view_layer)
bool BKE_scene_has_object(Scene *scene, Object *ob)
void BKE_main_collection_sync(const Main *bmain)
void BKE_view_layer_free(ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
void BKE_layer_collection_doversion_2_80(const Scene *scene, ViewLayer *view_layer)
void BKE_view_layer_visible_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
LayerCollection * BKE_layer_collection_activate_parent(ViewLayer *view_layer, LayerCollection *lc)
void BKE_view_layer_selected_bases_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_lightgroup_membership_set(LightgroupMembership **lgm, const char *name)
void BKE_layer_collection_set_flag(LayerCollection *lc, int flag, bool value)
int BKE_lightgroup_membership_get(const LightgroupMembership *lgm, char *name)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
int BKE_layer_collection_findindex(ViewLayer *view_layer, const LayerCollection *lc)
bool BKE_layer_collection_activate(ViewLayer *view_layer, LayerCollection *lc)
ViewLayerAOV * BKE_view_layer_add_aov(ViewLayer *view_layer)
void BKE_view_layer_copy_data(Scene *scene_dst, const Scene *scene_src, ViewLayer *view_layer_dst, const ViewLayer *view_layer_src, int flag)
void BKE_base_eval_flags(Base *base)
ViewLayer * BKE_view_layer_default_render(const Scene *scene)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BKE_main_view_layers_synced_ensure(const Main *bmain)
void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter)
void BKE_view_layer_base_select_and_set_active(ViewLayer *view_layer, Base *selbase)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_mode_params(const Scene *scene, ViewLayer *view_layer, const View3D *v3d, const ObjectsInModeParams *params)
void BKE_layer_collection_local_sync_all(const Main *bmain)
void BKE_view_layer_bases_in_mode_iterator_end(BLI_Iterator *iter)
ViewLayer * BKE_view_layer_find_from_collection(const Scene *scene, LayerCollection *lc)
void BKE_view_layer_visible_objects_iterator_next(BLI_Iterator *iter)
Object * BKE_view_layer_edit_object_get(const ViewLayer *view_layer)
void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter)
unsigned int uint
These structs are the foundation for all linked lists in the library system.
eObjectMode
const Depsgraph * depsgraph
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
Definition DNA_ID.h:413
bool(* filter_fn)(const Object *ob, void *user_data)
Definition BKE_layer.hh:509
bool(* filter_fn)(const Object *ob, void *user_data)
Definition BKE_layer.hh:487
uint8_t flag
Definition wm_window.cc:138