From 4d0936c7d74bee32cd50bf63ed2613fa17b9e700 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 11 Mar 2024 15:58:40 +0100 Subject: [PATCH] Fix #119316: instancing lamps does not work The issue was that calling `ensure_geometry_instances` converts all instances to a geometry, even the ones that can't be converted. The comment already says that non-geometry instances should stay intact, but that didn't work correctly yet: ``` /** * If references have a collection or object type, convert them into geometry instances * recursively. After that, the geometry sets can be edited. There may still be instances of * other types of they can't be converted to geometry sets. */ ``` Pull Request: https://projects.blender.org/blender/blender/pulls/119324 --- source/blender/blenkernel/intern/geometry_set_instances.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/geometry_set_instances.cc b/source/blender/blenkernel/intern/geometry_set_instances.cc index b53f711b0ac..b62e70f2ba2 100644 --- a/source/blender/blenkernel/intern/geometry_set_instances.cc +++ b/source/blender/blenkernel/intern/geometry_set_instances.cc @@ -115,7 +115,11 @@ void Instances::ensure_geometry_instances() case InstanceReference::Type::Object: { /* Create a new reference that contains the geometry set of the object. We may want to * treat e.g. lamps and similar object types separately here. */ - const Object &object = reference.object(); + Object &object = reference.object(); + if (ELEM(object.type, OB_LAMP, OB_CAMERA, OB_SPEAKER, OB_ARMATURE, OB_GPENCIL_LEGACY)) { + new_references.append(InstanceReference(object)); + break; + } GeometrySet object_geometry_set = object_get_evaluated_geometry_set(object); if (object_geometry_set.has_instances()) { object_geometry_set.get_instances_for_write()->ensure_geometry_instances();