diff --git a/source/blender/blenkernel/intern/geometry_set.cc b/source/blender/blenkernel/intern/geometry_set.cc index f9e12ef0274..1e03b8d235a 100644 --- a/source/blender/blenkernel/intern/geometry_set.cc +++ b/source/blender/blenkernel/intern/geometry_set.cc @@ -161,7 +161,8 @@ const GeometryComponent *GeometrySet::get_component_for_read( bool GeometrySet::has(const GeometryComponentType component_type) const { - return components_[component_type].has_value(); + const GeometryComponentPtr &component = components_[component_type]; + return component.has_value() && !component->is_empty(); } void GeometrySet::remove(const GeometryComponentType component_type) diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc index cca609a2e0d..a8512036566 100644 --- a/source/blender/blenkernel/intern/object_dupli.cc +++ b/source/blender/blenkernel/intern/object_dupli.cc @@ -245,6 +245,7 @@ static DupliObject *make_dupli(const DupliContext *ctx, dob->ob = ob; dob->ob_data = const_cast(object_data); mul_m4_m4m4(dob->mat, (float(*)[4])ctx->space_mat, mat); + std::cout << "Use\n"; dob->type = ctx->gen == nullptr ? 0 : ctx->dupli_gen_type_stack->last(); dob->preview_base_geometry = ctx->preview_base_geometry; dob->preview_instance_index = ctx->preview_instance_index; @@ -344,8 +345,10 @@ static void make_recursive_duplis(const DupliContext *ctx, ctx->instance_stack->append(ob); rctx.gen->make_duplis(&rctx); ctx->instance_stack->remove_last(); - if (!ctx->dupli_gen_type_stack->is_empty()) { - ctx->dupli_gen_type_stack->remove_last(); + if (rctx.gen->type != GEOMETRY_SET_DUPLI_GENERATOR_TYPE) { + if (!ctx->dupli_gen_type_stack->is_empty()) { + ctx->dupli_gen_type_stack->remove_last(); + } } } } @@ -391,8 +394,10 @@ static void make_child_duplis(const DupliContext *ctx, ob->flag |= OB_DONE; /* Doesn't render. */ } make_child_duplis_cb(&pctx, userdata, ob); - if (!ctx->dupli_gen_type_stack->is_empty()) { - ctx->dupli_gen_type_stack->remove_last(); + if (pctx.gen->type != GEOMETRY_SET_DUPLI_GENERATOR_TYPE) { + if (!ctx->dupli_gen_type_stack->is_empty()) { + ctx->dupli_gen_type_stack->remove_last(); + } } } } @@ -419,8 +424,10 @@ static void make_child_duplis(const DupliContext *ctx, } make_child_duplis_cb(&pctx, userdata, ob); - if (!ctx->dupli_gen_type_stack->is_empty()) { - ctx->dupli_gen_type_stack->remove_last(); + if (pctx.gen->type != GEOMETRY_SET_DUPLI_GENERATOR_TYPE) { + if (!ctx->dupli_gen_type_stack->is_empty()) { + ctx->dupli_gen_type_stack->remove_last(); + } } } } diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 13674c0f201..c2b14262b4f 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -1015,9 +1015,6 @@ static Vector compute_attributes_to_store( continue; } const GeometryComponent &component = *geometry.get_component_for_read(component_type); - if (component.is_empty()) { - continue; - } const blender::bke::AttributeAccessor attributes = *component.attributes(); for (const auto item : outputs_by_domain.items()) { const eAttrDomain domain = item.key; diff --git a/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc b/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc index 22c18504985..832c40114d9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc @@ -111,9 +111,6 @@ static bool component_is_available(const GeometrySet &geometry, return false; } const GeometryComponent &component = *geometry.get_component_for_read(type); - if (component.is_empty()) { - return false; - } return component.attribute_domain_size(domain) != 0; } diff --git a/source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc b/source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc index 4717634814b..b38d7f2fec4 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_sample_nearest.cc @@ -211,9 +211,6 @@ static bool component_is_available(const GeometrySet &geometry, return false; } const GeometryComponent &component = *geometry.get_component_for_read(type); - if (component.is_empty()) { - return false; - } return component.attribute_domain_size(domain) != 0; }