Blender
V4.5
source
blender
blenkernel
intern
instances_attributes.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2024 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
BKE_instances.hh
"
6
7
#include "
attribute_access_intern.hh
"
8
9
namespace
blender::bke
{
10
11
static
void
tag_component_reference_index_changed
(
void
*owner)
12
{
13
Instances
&instances = *
static_cast<
Instances
*
>
(owner);
14
instances.
tag_reference_handles_changed
();
15
}
16
17
static
GeometryAttributeProviders
create_attribute_providers_for_instances
()
18
{
19
static
CustomDataAccessInfo
instance_custom_data_access = {
20
[](
void
*owner) ->
CustomData
* {
21
Instances
*instances =
static_cast<
Instances
*
>
(owner);
22
return
&instances->
custom_data_attributes
();
23
},
24
[](
const
void
*owner) ->
const
CustomData
* {
25
const
Instances
*instances =
static_cast<
const
Instances
*
>
(owner);
26
return
&instances->
custom_data_attributes
();
27
},
28
[](
const
void
*owner) ->
int
{
29
const
Instances
*instances =
static_cast<
const
Instances
*
>
(owner);
30
return
instances->
instances_num
();
31
}};
32
39
static
BuiltinCustomDataLayerProvider
id
(
"id"
,
40
AttrDomain::Instance
,
41
CD_PROP_INT32
,
42
BuiltinAttributeProvider::Deletable
,
43
instance_custom_data_access,
44
nullptr
);
45
46
static
BuiltinCustomDataLayerProvider
instance_transform(
"instance_transform"
,
47
AttrDomain::Instance
,
48
CD_PROP_FLOAT4X4
,
49
BuiltinAttributeProvider::NonDeletable
,
50
instance_custom_data_access,
51
nullptr
);
52
54
static
BuiltinCustomDataLayerProvider
reference_index(
".reference_index"
,
55
AttrDomain::Instance
,
56
CD_PROP_INT32
,
57
BuiltinAttributeProvider::NonDeletable
,
58
instance_custom_data_access,
59
tag_component_reference_index_changed
);
60
61
static
CustomDataAttributeProvider
instance_custom_data(
AttrDomain::Instance
,
62
instance_custom_data_access);
63
64
return
GeometryAttributeProviders
({&instance_transform, &
id
, &reference_index},
65
{&instance_custom_data});
66
}
67
68
static
AttributeAccessorFunctions
get_instances_accessor_functions
()
69
{
70
static
const
GeometryAttributeProviders
providers =
create_attribute_providers_for_instances
();
71
AttributeAccessorFunctions
fn
=
72
attribute_accessor_functions::accessor_functions_for_providers<providers>
();
73
fn
.domain_size = [](
const
void
*owner,
const
AttrDomain
domain) {
74
if
(owner ==
nullptr
) {
75
return
0;
76
}
77
const
Instances
*instances =
static_cast<
const
Instances
*
>
(owner);
78
switch
(domain) {
79
case
AttrDomain::Instance
:
80
return
instances->
instances_num
();
81
default
:
82
return
0;
83
}
84
};
85
fn
.domain_supported = [](
const
void
*
/*owner*/
,
const
AttrDomain
domain) {
86
return
domain ==
AttrDomain::Instance
;
87
};
88
fn
.adapt_domain = [](
const
void
*
/*owner*/
,
89
const
GVArray
&varray,
90
const
AttrDomain
from_domain,
91
const
AttrDomain
to_domain) {
92
if
(from_domain == to_domain && from_domain ==
AttrDomain::Instance
) {
93
return
varray;
94
}
95
return
GVArray
{};
96
};
97
return
fn
;
98
}
99
100
const
AttributeAccessorFunctions
&
instance_attribute_accessor_functions
()
101
{
102
static
const
AttributeAccessorFunctions
fn
=
get_instances_accessor_functions
();
103
return
fn
;
104
}
105
106
}
// namespace blender::bke
BKE_instances.hh
CD_PROP_INT32
@ CD_PROP_INT32
Definition
DNA_customdata_types.h:114
CD_PROP_FLOAT4X4
@ CD_PROP_FLOAT4X4
Definition
DNA_customdata_types.h:125
attribute_access_intern.hh
blender::GVArray
Definition
BLI_generic_virtual_array.hh:174
blender::bke::BuiltinAttributeProvider::NonDeletable
@ NonDeletable
Definition
attribute_access_intern.hh:44
blender::bke::BuiltinAttributeProvider::Deletable
@ Deletable
Definition
attribute_access_intern.hh:43
blender::bke::BuiltinCustomDataLayerProvider
Definition
attribute_access_intern.hh:181
blender::bke::CustomDataAttributeProvider
Definition
attribute_access_intern.hh:134
blender::bke::GeometryAttributeProviders
Definition
attribute_access_intern.hh:216
blender::bke::Instances
Definition
BKE_instances.hh:113
blender::bke::Instances::tag_reference_handles_changed
void tag_reference_handles_changed()
Definition
BKE_instances.hh:224
blender::bke::Instances::instances_num
int instances_num() const
Definition
instances.cc:398
blender::bke::Instances::custom_data_attributes
CustomData & custom_data_attributes()
Definition
BKE_instances.hh:309
blender::bke::attribute_accessor_functions::accessor_functions_for_providers
AttributeAccessorFunctions accessor_functions_for_providers()
Definition
attribute_access_intern.hh:412
blender::bke::id
Definition
AS_asset_library.hh:27
blender::bke
Definition
AS_asset_library.hh:27
blender::bke::AttrDomain
AttrDomain
Definition
BKE_attribute.hh:63
blender::bke::AttrDomain::Instance
@ Instance
Definition
BKE_attribute.hh:77
blender::bke::create_attribute_providers_for_instances
static GeometryAttributeProviders create_attribute_providers_for_instances()
Definition
instances_attributes.cc:17
blender::bke::get_instances_accessor_functions
static AttributeAccessorFunctions get_instances_accessor_functions()
Definition
instances_attributes.cc:68
blender::bke::tag_component_reference_index_changed
static void tag_component_reference_index_changed(void *owner)
Definition
instances_attributes.cc:11
blender::bke::instance_attribute_accessor_functions
const AttributeAccessorFunctions & instance_attribute_accessor_functions()
Definition
instances_attributes.cc:100
blender::fn
Definition
BKE_attribute.hh:27
CustomData
Definition
DNA_customdata_types.h:67
blender::bke::AttributeAccessorFunctions
Definition
BKE_attribute.hh:495
blender::bke::CustomDataAccessInfo
Definition
attribute_access_intern.hh:22
Generated on
for Blender by
doxygen
1.16.1