[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