Fix T86172: check if attribute is actually accessible
The crash happened when the density in the Point Distribute node was above zero but so small, that no point was generated. In this case, there was a point cloud component, but the point cloud was empty, making some attributes unavailable. One could also make more attributes available in this case, but that can be done separately if necessary.
This commit is contained in:
parent
1e7d8a4ad5
commit
f094b4fa08
Notes:
blender-bot
2023-02-13 19:24:06 +01:00
Referenced by issue #86172, Geometry Nodes Crash
|
@ -1886,7 +1886,7 @@ OutputAttributePtr GeometryComponent::attribute_try_get_for_output(const StringR
|
|||
if (!attribute) {
|
||||
this->attribute_try_create(attribute_name, domain, data_type);
|
||||
attribute = this->attribute_try_get_for_write(attribute_name);
|
||||
if (default_value != nullptr) {
|
||||
if (attribute && default_value != nullptr) {
|
||||
void *data = attribute->get_span_for_write_only().data();
|
||||
cpp_type->fill_initialized(default_value, data, attribute->size());
|
||||
attribute->apply_span();
|
||||
|
|
|
@ -47,6 +47,9 @@ static void execute_on_component(GeoNodeExecParams params, GeometryComponent &co
|
|||
static const float3 scale_default = float3(1.0f);
|
||||
OutputAttributePtr scale_attribute = component.attribute_try_get_for_output(
|
||||
"scale", ATTR_DOMAIN_POINT, CD_PROP_FLOAT3, &scale_default);
|
||||
if (!scale_attribute) {
|
||||
return;
|
||||
}
|
||||
ReadAttributePtr attribute = params.get_input_attribute(
|
||||
"Factor", component, ATTR_DOMAIN_POINT, CD_PROP_FLOAT3, nullptr);
|
||||
if (!attribute) {
|
||||
|
|
Loading…
Reference in New Issue