[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