[Bf-blender-cvs] [e2623305592] cycles_procedural_api: pass a flag to GeometryManager::tag_update to specify what the tagging is for

Kévin Dietrich noreply at git.blender.org
Fri Nov 6 18:47:59 CET 2020


Commit: e26233055925ffc4191fd9fe0d9b3e8e93e78e92
Author: Kévin Dietrich
Date:   Fri Nov 6 09:32:51 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rBe26233055925ffc4191fd9fe0d9b3e8e93e78e92

pass a flag to GeometryManager::tag_update to specify what the tagging is for

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

M	intern/cycles/render/film.cpp
M	intern/cycles/render/geometry.cpp
M	intern/cycles/render/geometry.h
M	intern/cycles/render/scene.cpp

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

diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index a3c3a13cafd..f6e0b3a8502 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -688,13 +688,13 @@ void Film::device_free(Device * /*device*/, DeviceScene * /*dscene*/, Scene *sce
 void Film::tag_passes_update(Scene *scene, const vector<Pass> &passes_, bool update_passes)
 {
   if (Pass::contains(scene->passes, PASS_UV) != Pass::contains(passes_, PASS_UV)) {
-    scene->geometry_manager->tag_update(scene);
+    scene->geometry_manager->tag_update(scene, GeometryManager::UV_PASS_NEEDED);
 
     foreach (Shader *shader, scene->shaders)
       shader->need_update_uvs = true;
   }
   else if (Pass::contains(scene->passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) {
-    scene->geometry_manager->tag_update(scene);
+    scene->geometry_manager->tag_update(scene, GeometryManager::MOTION_PASS_NEEDED);
   }
   else if (Pass::contains(scene->passes, PASS_AO) != Pass::contains(passes_, PASS_AO)) {
     scene->integrator->tag_update(scene);
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 88ab31b86ac..b2be93d2640 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1879,8 +1879,9 @@ void GeometryManager::device_free(Device *device, DeviceScene *dscene)
 #endif
 }
 
-void GeometryManager::tag_update(Scene *scene)
+void GeometryManager::tag_update(Scene *scene, uint32_t flag)
 {
+  update_flags |= flag;
   need_update = true;
   scene->object_manager->need_update = true;
 }
diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h
index e98729d539b..4d872369767 100644
--- a/intern/cycles/render/geometry.h
+++ b/intern/cycles/render/geometry.h
@@ -179,6 +179,7 @@ class GeometryManager {
   };
 
   DeviceUpdateFlags device_update_flags;
+  uint32_t update_flags = 0;
 
   BVH *bvh;
 
@@ -188,10 +189,13 @@ class GeometryManager {
     MESH_REMOVED = (1 << 1),
     HAIR_ADDED   = (1 << 2),
     HAIR_REMOVED = (1 << 3),
+    UV_PASS_NEEDED = (1 << 4),
+    MOTION_PASS_NEEDED = (1 << 5),
+
+    UPDATE_ALL = ~0u,
   };
 
   /* Update Flags */
-  uint32_t update_flags = 0;
   bool need_update;
   bool need_flags_update;
 
@@ -205,7 +209,7 @@ class GeometryManager {
   void device_free(Device *device, DeviceScene *dscene);
 
   /* Updates */
-  void tag_update(Scene *scene);
+  void tag_update(Scene *scene, uint32_t flag);
 
   /* Statistics */
   void collect_statistics(const Scene *scene, RenderStats *stats);
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index b6244e6668d..bd9962e3a5c 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -480,7 +480,7 @@ void Scene::reset()
   background->tag_update(this);
   integrator->tag_update(this);
   object_manager->tag_update(this);
-  geometry_manager->tag_update(this);
+  geometry_manager->tag_update(this, GeometryManager::UPDATE_ALL);
   light_manager->tag_update(this);
   particle_system_manager->tag_update(this);
   procedural_manager->need_update = true;
@@ -680,8 +680,7 @@ template<> Mesh *Scene::create_node<Mesh>()
   Mesh *node = new Mesh();
   node->set_owner(this);
   geometry.push_back(node);
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::MESH_ADDED;
+  geometry_manager->tag_update(this, GeometryManager::MESH_ADDED);
   return node;
 }
 
@@ -690,8 +689,7 @@ template<> Hair *Scene::create_node<Hair>()
   Hair *node = new Hair();
   node->set_owner(this);
   geometry.push_back(node);
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::HAIR_ADDED;
+  geometry_manager->tag_update(this, GeometryManager::HAIR_ADDED);
   return node;
 }
 
@@ -700,8 +698,7 @@ template<> Volume *Scene::create_node<Volume>()
   Volume *node = new Volume();
   node->set_owner(this);
   geometry.push_back(node);
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::MESH_ADDED;
+  geometry_manager->tag_update(this, GeometryManager::MESH_ADDED);
   return node;
 }
 
@@ -764,35 +761,33 @@ template<> void Scene::delete_node_impl(Light *node)
 template<> void Scene::delete_node_impl(Mesh *node)
 {
   delete_node_from_array(geometry, static_cast<Geometry *>(node));
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::MESH_REMOVED;
+  geometry_manager->tag_update(this, GeometryManager::MESH_REMOVED);
 }
 
 template<> void Scene::delete_node_impl(Hair *node)
 {
   delete_node_from_array(geometry, static_cast<Geometry *>(node));
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::HAIR_REMOVED;
+  geometry_manager->tag_update(this, GeometryManager::HAIR_REMOVED);
 }
 
 template<> void Scene::delete_node_impl(Volume *node)
 {
   delete_node_from_array(geometry, static_cast<Geometry *>(node));
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= GeometryManager::MESH_REMOVED;
+  geometry_manager->tag_update(this, GeometryManager::MESH_REMOVED);
 }
 
 template<> void Scene::delete_node_impl(Geometry *node)
 {
+  uint32_t flag;
   if (node->is_hair()) {
-    geometry_manager->update_flags |= GeometryManager::HAIR_REMOVED;
+    flag = GeometryManager::HAIR_REMOVED;
   }
   else {
-    geometry_manager->update_flags |= GeometryManager::MESH_REMOVED;
+    flag = GeometryManager::MESH_REMOVED;
   }
 
   delete_node_from_array(geometry, node);
-  geometry_manager->tag_update(this);
+  geometry_manager->tag_update(this, flag);
 }
 
 template<> void Scene::delete_node_impl(Object *node)
@@ -853,8 +848,7 @@ template<> void Scene::delete_nodes(const set<Light *> &nodes, const NodeOwner *
 template<> void Scene::delete_nodes(const set<Geometry *> &nodes, const NodeOwner *owner)
 {
   remove_nodes_in_set(nodes, geometry, owner);
-  geometry_manager->tag_update(this);
-  geometry_manager->update_flags |= (GeometryManager::MESH_REMOVED | GeometryManager::HAIR_REMOVED);
+  geometry_manager->tag_update(this, GeometryManager::MESH_REMOVED | GeometryManager::HAIR_REMOVED);
 }
 
 template<> void Scene::delete_nodes(const set<Object *> &nodes, const NodeOwner *owner)



More information about the Bf-blender-cvs mailing list