[Bf-blender-cvs] [c5134689826] temp-geometry-nodes-mesh-modifier: change owner of evaluated pointcloud for more consistency

Jacques Lucke noreply at git.blender.org
Tue Dec 8 13:21:16 CET 2020


Commit: c513468982639a87f47aa3c816a55d4a88a9e1be
Author: Jacques Lucke
Date:   Tue Dec 8 12:04:06 2020 +0100
Branches: temp-geometry-nodes-mesh-modifier
https://developer.blender.org/rBc513468982639a87f47aa3c816a55d4a88a9e1be

change owner of evaluated pointcloud for more consistency

===================================================================

M	source/blender/blenkernel/intern/pointcloud.cc
M	source/blender/depsgraph/intern/depsgraph_query_iter.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/pointcloud.cc b/source/blender/blenkernel/intern/pointcloud.cc
index 5f6685817b9..f0679630e63 100644
--- a/source/blender/blenkernel/intern/pointcloud.cc
+++ b/source/blender/blenkernel/intern/pointcloud.cc
@@ -383,9 +383,19 @@ void BKE_pointcloud_data_update(struct Depsgraph *depsgraph, struct Scene *scene
   pointcloud_evaluate_modifiers(depsgraph, scene, object, geometry_set);
 
   /* Assign evaluated object. */
-  PointCloud *dummy_pointcloud = BKE_pointcloud_new_nomain(0);
-  BKE_object_eval_assign_data(object, &dummy_pointcloud->id, true);
-  object->runtime.geometry_set_eval = new GeometrySet(geometry_set);
+  PointCloudComponent &pointcloud_component =
+      geometry_set.get_component_for_write<PointCloudComponent>();
+  PointCloud *pointcloud_eval = pointcloud_component.release();
+  if (pointcloud_eval == nullptr) {
+    pointcloud_eval = BKE_pointcloud_new_nomain(0);
+  }
+  else {
+    pointcloud_component.replace(pointcloud_eval, GeometryOwnershipType::ReadOnly);
+  }
+
+  const bool eval_is_owned = pointcloud_eval != pointcloud;
+  BKE_object_eval_assign_data(object, &pointcloud_eval->id, eval_is_owned);
+  object->runtime.geometry_set_eval = new GeometrySet(std::move(geometry_set));
 }
 
 /* Draw Cache */
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
index 1949b49bdca..7c8e7dce4d9 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@ -173,6 +173,11 @@ bool deg_iterator_components_step(BLI_Iterator *iter)
     data->geometry_component_id++;
 
     /* The pointcloud component. */
+    if (data->geometry_component_owner->type == OB_POINTCLOUD) {
+      iter->current = data->geometry_component_owner;
+      return true;
+    }
+
     const PointCloud *pointcloud = geometry_set->get_pointcloud_for_read();
     if (pointcloud != nullptr) {
       Object *temp_object = &data->temp_geometry_component_object;



More information about the Bf-blender-cvs mailing list