Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-08-10 11:39:07 +0300
committerJacques Lucke <jacques@blender.org>2021-08-10 11:39:07 +0300
commit277117826fc1c745049463d4d6120849f9369f48 (patch)
treecfbfef70f2424ba87d08a3552a0ddb075bbfe5df /source/blender/blenkernel/intern/attribute_access.cc
parent71e3f18b4ae76ee958cf20f2ac2e10172ce8aa3b (diff)
properly interpolate selection between some domainstemp-geometry-nodes-expandable-geometry-socket-prototype
Diffstat (limited to 'source/blender/blenkernel/intern/attribute_access.cc')
-rw-r--r--source/blender/blenkernel/intern/attribute_access.cc22
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc
index aa0af294bc3..221a98fdfec 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -988,9 +988,25 @@ std::unique_ptr<blender::fn::GVArray> GeometryComponent::attribute_try_get_for_r
std::unique_ptr<blender::fn::GVArray> varray = std::move(attribute.varray);
if (domain != ATTR_DOMAIN_AUTO && attribute.domain != domain) {
- varray = this->attribute_try_adapt_domain(std::move(varray), attribute.domain, domain);
- if (!varray) {
- return {};
+ if (this->type() == GEO_COMPONENT_TYPE_MESH && data_type == CD_PROP_BOOL &&
+ varray->type().is<bool>()) {
+ /* TODO: Not all boolean attributes are selections. */
+ const MeshComponent &mesh_component = static_cast<const MeshComponent &>(*this);
+ blender::VArrayPtr<bool> varray_bool =
+ std::make_unique<blender::fn::VArray_For_OwnedGVArray<bool>>(std::move(varray));
+ varray_bool = mesh_component.adapt_selection(
+ std::move(varray_bool), attribute.domain, domain);
+ if (!varray_bool) {
+ return {};
+ }
+ varray = std::make_unique<blender::fn::GVArray_For_OwnedVArray<bool>>(
+ std::move(varray_bool));
+ }
+ else {
+ varray = this->attribute_try_adapt_domain(std::move(varray), attribute.domain, domain);
+ if (!varray) {
+ return {};
+ }
}
}