Cleanup: Remove unnecessary attribute provider callbacks #107088

Merged
Hans Goudey merged 1 commits from HooglyBoogly/blender:cleanup-remove-as-attribute-callbacks into main 2023-04-18 17:13:48 +02:00
6 changed files with 19 additions and 114 deletions

View File

@ -322,10 +322,11 @@ GVArray BuiltinCustomDataLayerProvider::try_get_for_read(const void *owner) cons
}
/* When the number of elements is zero, layers might have null data but still exist. */
const CPPType &type = *custom_data_type_to_cpp_type(data_type_);
const int element_num = custom_data_access_.get_element_num(owner);
if (element_num == 0) {
if (this->layer_exists(*custom_data)) {
return as_read_attribute_(nullptr, 0);
return GVArray::ForSpan({type, nullptr, 0});
}
return {};
}
@ -340,7 +341,7 @@ GVArray BuiltinCustomDataLayerProvider::try_get_for_read(const void *owner) cons
if (data == nullptr) {
return {};
}
return as_read_attribute_(data, element_num);
return GVArray::ForSpan({type, data, element_num});
}
GAttributeWriter BuiltinCustomDataLayerProvider::try_get_for_write(void *owner) const
@ -356,10 +357,11 @@ GAttributeWriter BuiltinCustomDataLayerProvider::try_get_for_write(void *owner)
}
/* When the number of elements is zero, layers might have null data but still exist. */
const CPPType &type = *custom_data_type_to_cpp_type(data_type_);
const int element_num = custom_data_access_.get_element_num(owner);
if (element_num == 0) {
if (this->layer_exists(*custom_data)) {
return {as_write_attribute_(nullptr, 0), domain_, std::move(tag_modified_fn)};
return {GVMutableArray::ForSpan({type, nullptr, 0}), domain_, std::move(tag_modified_fn)};
}
return {};
}
@ -375,7 +377,7 @@ GAttributeWriter BuiltinCustomDataLayerProvider::try_get_for_write(void *owner)
if (data == nullptr) {
return {};
}
return {as_write_attribute_(data, element_num), domain_, std::move(tag_modified_fn)};
return {GVMutableArray::ForSpan({type, data, element_num}), domain_, std::move(tag_modified_fn)};
}
bool BuiltinCustomDataLayerProvider::try_delete(void *owner) const

View File

@ -163,16 +163,6 @@ class CustomDataAttributeProvider final : public DynamicAttributesProvider {
}
};
template<typename T> GVArray make_array_read_attribute(const void *data, const int domain_num)
{
return VArray<T>::ForSpan(Span<T>((const T *)data, domain_num));
}
template<typename T> GVMutableArray make_array_write_attribute(void *data, const int domain_num)
{
return VMutableArray<T>::ForSpan(MutableSpan<T>((T *)data, domain_num));
}
/**
* This provider is used to provide access to builtin attributes. It supports making internal types
* available as different types.
@ -181,14 +171,10 @@ template<typename T> GVMutableArray make_array_write_attribute(void *data, const
* if the stored type is the same as the attribute type.
*/
class BuiltinCustomDataLayerProvider final : public BuiltinAttributeProvider {
using AsReadAttribute = GVArray (*)(const void *data, int element_num);
using AsWriteAttribute = GVMutableArray (*)(void *data, int element_num);
using UpdateOnRead = void (*)(const void *owner);
using UpdateOnChange = void (*)(void *owner);
const eCustomDataType stored_type_;
const CustomDataAccessInfo custom_data_access_;
const AsReadAttribute as_read_attribute_;
const AsWriteAttribute as_write_attribute_;
const UpdateOnChange update_on_change_;
bool stored_as_named_attribute_;
@ -200,16 +186,12 @@ class BuiltinCustomDataLayerProvider final : public BuiltinAttributeProvider {
const CreatableEnum creatable,
const DeletableEnum deletable,
const CustomDataAccessInfo custom_data_access,
const AsReadAttribute as_read_attribute,
const AsWriteAttribute as_write_attribute,
const UpdateOnChange update_on_write,
const AttributeValidator validator = {})
: BuiltinAttributeProvider(
std::move(attribute_name), domain, attribute_type, creatable, deletable, validator),
stored_type_(stored_type),
custom_data_access_(custom_data_access),
as_read_attribute_(as_read_attribute),
as_write_attribute_(as_write_attribute),
update_on_change_(update_on_write),
stored_as_named_attribute_(data_type_ == stored_type_)
{

View File

@ -375,8 +375,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
point_access,
make_array_read_attribute<float3>,
make_array_write_attribute<float3>,
tag_component_positions_changed);
static BuiltinCustomDataLayerProvider radius("radius",
@ -386,8 +384,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float>,
make_array_write_attribute<float>,
tag_component_radii_changed);
static BuiltinCustomDataLayerProvider id("id",
@ -397,8 +393,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr);
static BuiltinCustomDataLayerProvider tilt("tilt",
@ -408,8 +402,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float>,
make_array_write_attribute<float>,
tag_component_normals_changed);
static BuiltinCustomDataLayerProvider handle_right("handle_right",
@ -419,8 +411,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float3>,
make_array_write_attribute<float3>,
tag_component_positions_changed);
static BuiltinCustomDataLayerProvider handle_left("handle_left",
@ -430,8 +420,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float3>,
make_array_write_attribute<float3>,
tag_component_positions_changed);
static auto handle_type_clamp = mf::build::SI1_SO<int8_t, int8_t>(
@ -447,8 +435,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_topology_changed,
AttributeValidator{&handle_type_clamp});
@ -459,8 +445,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_topology_changed,
AttributeValidator{&handle_type_clamp});
@ -471,8 +455,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float>,
make_array_write_attribute<float>,
tag_component_positions_changed);
static const auto nurbs_order_clamp = mf::build::SI1_SO<int8_t, int8_t>(
@ -486,8 +468,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_topology_changed,
AttributeValidator{&nurbs_order_clamp});
@ -504,8 +484,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_normals_changed,
AttributeValidator{&normal_mode_clamp});
@ -522,8 +500,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_topology_changed,
AttributeValidator{&knots_mode_clamp});
@ -540,8 +516,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<int8_t>,
make_array_write_attribute<int8_t>,
tag_component_curve_types_changed,
AttributeValidator{&curve_type_clamp});
@ -556,8 +530,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
tag_component_topology_changed,
AttributeValidator{&resolution_clamp});
@ -568,8 +540,6 @@ static ComponentAttributeProviders create_attribute_providers_for_curve()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
curve_access,
make_array_read_attribute<bool>,
make_array_write_attribute<bool>,
tag_component_topology_changed);
static CustomDataAttributeProvider curve_custom_data(ATTR_DOMAIN_CURVE, curve_access);

View File

@ -200,8 +200,6 @@ static ComponentAttributeProviders create_attribute_providers_for_instances()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
instance_custom_data_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr);
static CustomDataAttributeProvider instance_custom_data(ATTR_DOMAIN_INSTANCE,

View File

@ -859,23 +859,6 @@ static blender::GVArray adapt_mesh_attribute_domain(const Mesh &mesh,
namespace blender::bke {
template<typename StructT, typename ElemT, ElemT (*GetFunc)(const StructT &)>
static GVArray make_derived_read_attribute(const void *data, const int domain_num)
{
return VArray<ElemT>::template ForDerivedSpan<StructT, GetFunc>(
Span<StructT>((const StructT *)data, domain_num));
}
template<typename StructT,
typename ElemT,
ElemT (*GetFunc)(const StructT &),
void (*SetFunc)(StructT &, ElemT)>
static GVMutableArray make_derived_write_attribute(void *data, const int domain_num)
{
return VMutableArray<ElemT>::template ForDerivedSpan<StructT, GetFunc, SetFunc>(
MutableSpan<StructT>((StructT *)data, domain_num));
}
static void tag_component_positions_changed(void *owner)
{
Mesh *mesh = static_cast<Mesh *>(owner);
@ -884,16 +867,6 @@ static void tag_component_positions_changed(void *owner)
}
}
static float get_crease(const float &crease)
{
return crease;
}
static void set_crease(float &crease, const float value)
{
crease = std::clamp(value, 0.0f, 1.0f);
}
class VArrayImpl_For_VertexWeights final : public VMutableArrayImpl<float> {
private:
MDeformVert *dverts_;
@ -1144,8 +1117,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
point_access,
make_array_read_attribute<float3>,
make_array_write_attribute<float3>,
tag_component_positions_changed);
static BuiltinCustomDataLayerProvider id("id",
@ -1155,8 +1126,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr);
static const auto material_index_clamp = mf::build::SI1_SO<int, int>(
@ -1173,8 +1142,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
face_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr,
AttributeValidator{&material_index_clamp});
@ -1189,8 +1156,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
edge_access,
make_array_read_attribute<int2>,
make_array_write_attribute<int2>,
nullptr,
AttributeValidator{&int2_index_clamp});
@ -1207,8 +1172,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
corner_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr,
AttributeValidator{&int_index_clamp});
static BuiltinCustomDataLayerProvider corner_edge(".corner_edge",
@ -1218,8 +1181,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
corner_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr,
AttributeValidator{&int_index_clamp});
@ -1230,8 +1191,6 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
face_access,
make_array_read_attribute<bool>,
make_array_write_attribute<bool>,
nullptr);
static BuiltinCustomDataLayerProvider sharp_edge("sharp_edge",
@ -1241,21 +1200,21 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
edge_access,
make_array_read_attribute<bool>,
make_array_write_attribute<bool>,
nullptr);
static BuiltinCustomDataLayerProvider crease(
"crease",
ATTR_DOMAIN_EDGE,
CD_PROP_FLOAT,
CD_CREASE,
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
edge_access,
make_array_read_attribute<float>,
make_derived_write_attribute<float, float, get_crease, set_crease>,
nullptr);
static const auto crease_clamp = mf::build::SI1_SO<float, float>(
"Crease Clamp",
[](float value) { return std::clamp(value, 0.0f, 1.0f); },
mf::build::exec_presets::AllSpanOrSingle());
static BuiltinCustomDataLayerProvider crease("crease",
ATTR_DOMAIN_EDGE,
CD_PROP_FLOAT,
CD_CREASE,
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
edge_access,
nullptr,
AttributeValidator{&crease_clamp});
static VertexGroupsAttributeProvider vertex_groups;
static CustomDataAttributeProvider corner_custom_data(ATTR_DOMAIN_CORNER, corner_access);

View File

@ -142,8 +142,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud()
BuiltinAttributeProvider::NonCreatable,
BuiltinAttributeProvider::NonDeletable,
point_access,
make_array_read_attribute<float3>,
make_array_write_attribute<float3>,
tag_component_positions_changed);
static BuiltinCustomDataLayerProvider radius("radius",
ATTR_DOMAIN_POINT,
@ -152,8 +150,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<float>,
make_array_write_attribute<float>,
tag_component_radius_changed);
static BuiltinCustomDataLayerProvider id("id",
ATTR_DOMAIN_POINT,
@ -162,8 +158,6 @@ static ComponentAttributeProviders create_attribute_providers_for_point_cloud()
BuiltinAttributeProvider::Creatable,
BuiltinAttributeProvider::Deletable,
point_access,
make_array_read_attribute<int>,
make_array_write_attribute<int>,
nullptr);
static CustomDataAttributeProvider point_custom_data(ATTR_DOMAIN_POINT, point_access);
return ComponentAttributeProviders({&position, &radius, &id}, {&point_custom_data});