[Bf-blender-cvs] [6ba48a78d29] virtual-array-attributes: initial typed output attribute
Jacques Lucke
noreply at git.blender.org
Tue Apr 13 09:01:51 CEST 2021
Commit: 6ba48a78d294fafbe1776096d66c2bd3a176548c
Author: Jacques Lucke
Date: Tue Apr 13 08:38:01 2021 +0200
Branches: virtual-array-attributes
https://developer.blender.org/rB6ba48a78d294fafbe1776096d66c2bd3a176548c
initial typed output attribute
===================================================================
M source/blender/blenkernel/BKE_attribute_access.hh
===================================================================
diff --git a/source/blender/blenkernel/BKE_attribute_access.hh b/source/blender/blenkernel/BKE_attribute_access.hh
index fe901848852..4d234a5a03b 100644
--- a/source/blender/blenkernel/BKE_attribute_access.hh
+++ b/source/blender/blenkernel/BKE_attribute_access.hh
@@ -114,4 +114,60 @@ class OutputAttribute {
void save_if_necessary();
};
+template<typename T> class OutputAttribute_Typed {
+ private:
+ OutputAttribute attribute_;
+ std::optional<fn::GVMutableArray_Typed<T>> optional_varray_;
+ VMutableArray<T> *varray_ = nullptr;
+
+ public:
+ OutputAttribute_Typed(OutputAttribute attribute) : attribute_(std::move(attribute))
+ {
+ if (attribute_) {
+ varray_.emplace(attribute_.varray());
+ varray_ = &**optional_varray_;
+ }
+ }
+
+ operator bool() const
+ {
+ return varray_ != nullptr;
+ }
+
+ VMutableArray<T> &operator*()
+ {
+ return *varray_;
+ }
+
+ VMutableArray<T> *operator->()
+ {
+ return varray_;
+ }
+
+ GVMutableArray<T> &varray()
+ {
+ return *varray_;
+ }
+
+ AttributeDomain domain() const
+ {
+ return attribute_.domain();
+ }
+
+ const CPPType &cpp_type() const
+ {
+ return CPPType::get<T>();
+ }
+
+ CustomDataType custom_data_type() const
+ {
+ return cpp_type_to_custom_data_type(this->cpp_type());
+ }
+
+ void save_if_necessary()
+ {
+ attribute_.save_if_necessary();
+ }
+};
+
} // namespace blender::bke
More information about the Bf-blender-cvs
mailing list