[Bf-blender-cvs] [b6cf474d7e1] temp-modifiers-instancing: initial rendering of geometry component
Jacques Lucke
noreply at git.blender.org
Tue Nov 10 16:39:05 CET 2020
Commit: b6cf474d7e1a2b620ee60029c5996e3989036075
Author: Jacques Lucke
Date: Tue Nov 10 12:28:57 2020 +0100
Branches: temp-modifiers-instancing
https://developer.blender.org/rBb6cf474d7e1a2b620ee60029c5996e3989036075
initial rendering of geometry component
===================================================================
M source/blender/blenkernel/intern/pointcloud.cc
M source/blender/depsgraph/DEG_depsgraph_query.h
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 eca1dd98bf7..7cc23b35c1c 100644
--- a/source/blender/blenkernel/intern/pointcloud.cc
+++ b/source/blender/blenkernel/intern/pointcloud.cc
@@ -384,7 +384,9 @@ void BKE_pointcloud_data_update(struct Depsgraph *depsgraph, struct Scene *scene
depsgraph, scene, object, input_geometry_set);
/* Assign evaluated object. */
+ /* Just use the original point cloud for now. */
BKE_object_eval_assign_data(object, &pointcloud->id, false);
+
BLI_assert(object->runtime.geometry_set_eval == nullptr);
object->runtime.geometry_set_eval = wrap(geometry_set_eval.release());
}
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h
index 7eb5f1ccec1..cdf1548d1a6 100644
--- a/source/blender/depsgraph/DEG_depsgraph_query.h
+++ b/source/blender/depsgraph/DEG_depsgraph_query.h
@@ -160,6 +160,10 @@ typedef struct DEGObjectIterData {
* other users of the iterator. */
struct Object temp_dupli_object;
+ /* **** Iteration over Geometry Set. ****/
+
+ bool geometry_set_finished;
+
/* **** Iteration over ID nodes **** */
size_t id_node_index;
size_t num_id_nodes;
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
index 7d47e1fb541..7347d30cfac 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@ -29,6 +29,7 @@
#include "MEM_guardedalloc.h"
#include "BKE_duplilist.h"
+#include "BKE_geometry_set.hh"
#include "BKE_idprop.h"
#include "BKE_layer.h"
#include "BKE_node.h"
@@ -60,6 +61,7 @@
#endif
namespace deg = blender::deg;
+namespace bke = blender::bke;
/* ************************ DEG ITERATORS ********************* */
@@ -235,6 +237,7 @@ void deg_iterator_objects_step(BLI_Iterator *iter, deg::IDNode *id_node)
if (ob_visibility & (OB_VISIBLE_SELF | OB_VISIBLE_PARTICLES)) {
iter->current = object;
iter->skip = false;
+ data->geometry_set_finished = false;
}
}
@@ -261,6 +264,7 @@ void DEG_iterator_objects_begin(BLI_Iterator *iter, DEGObjectIterData *data)
data->id_node_index = 0;
data->num_id_nodes = num_id_nodes;
data->eval_mode = DEG_get_mode(depsgraph);
+ data->geometry_set_finished = true;
deg_invalidate_iterator_work_data(data);
deg::IDNode *id_node = deg_graph->id_nodes[data->id_node_index];
@@ -292,6 +296,23 @@ void DEG_iterator_objects_next(BLI_Iterator *iter)
deg_invalidate_iterator_work_data(data);
}
+ ID *current_id = deg_graph->id_nodes[data->id_node_index]->id_cow;
+ if (GS(current_id->name) == ID_OB) {
+ Object *current_object = (Object *)current_id;
+ if (current_object->runtime.geometry_set_eval != nullptr) {
+ if (!data->geometry_set_finished) {
+ bke::GeometrySet *geometry_set = bke::unwrap(current_object->runtime.geometry_set_eval);
+ PointCloud *pointcloud = (PointCloud *)geometry_set->get_pointcloud_for_read();
+ Object *temp_object = &data->temp_dupli_object;
+ *temp_object = *current_object;
+ temp_object->data = pointcloud;
+ iter->current = temp_object;
+ data->geometry_set_finished = true;
+ return;
+ }
+ }
+ }
+
++data->id_node_index;
if (data->id_node_index == data->num_id_nodes) {
iter->valid = false;
More information about the Bf-blender-cvs
mailing list