[Bf-blender-cvs] [9ab0595f010] cycles_procedural_api: add some more flags for the ObjectManager

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


Commit: 9ab0595f0100d342d316c727b7e324eabf4d1293
Author: Kévin Dietrich
Date:   Fri Nov 6 11:44:28 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB9ab0595f0100d342d316c727b7e324eabf4d1293

add some more flags for the ObjectManager

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

M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/blender/blender_particles.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/render/geometry.cpp
M	intern/cycles/render/object.cpp
M	intern/cycles/render/object.h
M	intern/cycles/render/scene.cpp

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

diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 0315097ae47..c2e277a372f 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -246,7 +246,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
   /* holdout */
   object->set_use_holdout(use_holdout);
   if (object->use_holdout_is_modified()) {
-    scene->object_manager->tag_update(scene);
+    scene->object_manager->tag_update(scene, ObjectManager::HOLDOUT_MODIFIED);
   }
 
   object->set_visibility(visibility);
diff --git a/intern/cycles/blender/blender_particles.cpp b/intern/cycles/blender/blender_particles.cpp
index ca221b229b4..4a5dea8d131 100644
--- a/intern/cycles/blender/blender_particles.cpp
+++ b/intern/cycles/blender/blender_particles.cpp
@@ -85,7 +85,7 @@ bool BlenderSync::sync_dupli_particle(BL::Object &b_ob,
   object->set_particle_index(psys->particles.size() - 1);
 
   if (object->particle_index_is_modified())
-    scene->object_manager->tag_update(scene);
+    scene->object_manager->tag_update(scene, ObjectManager::PARTICLE_MODIFIED);
 
   /* return that this object has particle data */
   return true;
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index c3764ac5365..501bedb43b1 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -305,7 +305,7 @@ void BlenderSync::sync_integrator()
   integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
   if (!preview) {
     if (integrator->get_motion_blur() != r.use_motion_blur()) {
-      scene->object_manager->tag_update(scene);
+      scene->object_manager->tag_update(scene, ObjectManager::MOTION_BLUR_MODIFIED);
       scene->camera->tag_modified();
     }
 
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index c73f9022ae9..c8285461aed 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -277,7 +277,7 @@ void Geometry::tag_update(Scene *scene, bool rebuild)
   }
 
   scene->geometry_manager->need_update = true;
-  scene->object_manager->need_update = true;
+  scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MODIFIED);
 }
 
 /* Geometry Manager */
@@ -1887,7 +1887,7 @@ void GeometryManager::tag_update(Scene *scene, uint32_t flag)
 {
   update_flags |= flag;
   need_update = true;
-  scene->object_manager->need_update = true;
+  scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MANAGER);
 }
 
 void GeometryManager::collect_statistics(const Scene *scene, RenderStats *stats)
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index b50b3b76d1b..e25c395fa30 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -232,7 +232,7 @@ void Object::tag_update(Scene *scene)
 
   scene->camera->need_flags_update = true;
   scene->geometry_manager->need_update = true;
-  scene->object_manager->need_update = true;
+  scene->object_manager->tag_update(scene, ObjectManager::OBJECT_MODIFIED);
 }
 
 bool Object::use_motion() const
@@ -666,7 +666,7 @@ void ObjectManager::device_update(Device *device,
 
   device_flags = 0;
 
-  if (update_flags & (OBJECT_WAS_ADDED | OBJECT_WAS_REMOVED)) {
+  if (update_flags & (OBJECT_ADDED | OBJECT_REMOVED)) {
     device_flags |= DEVICE_DATA_NEEDS_REALLOC;
   }
 
@@ -942,9 +942,10 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, P
   }
 }
 
-void ObjectManager::tag_update(Scene *scene)
+void ObjectManager::tag_update(Scene *scene, uint32_t flag)
 {
   need_update = true;
+  update_flags |= flag;
   scene->geometry_manager->need_update = true;
   scene->light_manager->tag_update(scene, LightManager::OBJECT_MANAGER);
 }
diff --git a/intern/cycles/render/object.h b/intern/cycles/render/object.h
index b3a1c8a1f1b..7bcde97aace 100644
--- a/intern/cycles/render/object.h
+++ b/intern/cycles/render/object.h
@@ -122,6 +122,7 @@ class Object : public Node {
 /* Object Manager */
 
 class ObjectManager {
+  uint32_t update_flags;
   uint32_t device_flags;
 
   enum {
@@ -133,11 +134,17 @@ class ObjectManager {
   bool need_update;
   bool need_flags_update;
 
-  uint32_t update_flags;
-
   enum {
-    OBJECT_WAS_ADDED   = (1 << 0),
-    OBJECT_WAS_REMOVED = (1 << 1),
+    OBJECT_ADDED         = (1 << 0),
+    OBJECT_REMOVED       = (1 << 1),
+    GEOMETRY_MODIFIED    = (1 << 2),
+    GEOMETRY_MANAGER     = (1 << 3),
+    OBJECT_MODIFIED      = (1 << 4),
+    PARTICLE_MODIFIED    = (1 << 5),
+    HOLDOUT_MODIFIED     = (1 << 6),
+    MOTION_BLUR_MODIFIED = (1 << 7),
+
+    UPDATE_ALL = ~0u,
   };
 
   ObjectManager();
@@ -155,7 +162,7 @@ class ObjectManager {
 
   void device_free(Device *device, DeviceScene *dscene);
 
-  void tag_update(Scene *scene);
+  void tag_update(Scene *scene, uint32_t flag);
 
   void apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress &progress);
 
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index f84bfa82c69..ec0d08cb14f 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -482,7 +482,7 @@ void Scene::reset()
 
   background->tag_update(this);
   integrator->tag_update(this, 0);
-  object_manager->tag_update(this);
+  object_manager->tag_update(this, ObjectManager::UPDATE_ALL);
   geometry_manager->tag_update(this, GeometryManager::UPDATE_ALL);
   light_manager->tag_update(this, LightManager::UPDATE_ALL);
   particle_system_manager->tag_update(this);
@@ -710,8 +710,7 @@ template<> Object *Scene::create_node<Object>()
   Object *node = new Object();
   node->set_owner(this);
   objects.push_back(node);
-  object_manager->tag_update(this);
-  object_manager->update_flags |= ObjectManager::OBJECT_WAS_ADDED;
+  object_manager->tag_update(this, ObjectManager::OBJECT_ADDED);
   return node;
 }
 
@@ -796,8 +795,7 @@ template<> void Scene::delete_node_impl(Geometry *node)
 template<> void Scene::delete_node_impl(Object *node)
 {
   delete_node_from_array(objects, node);
-  object_manager->tag_update(this);
-  object_manager->update_flags |= ObjectManager::OBJECT_WAS_REMOVED;
+  object_manager->tag_update(this, ObjectManager::OBJECT_REMOVED);
 }
 
 template<> void Scene::delete_node_impl(ParticleSystem *node)
@@ -857,8 +855,7 @@ template<> void Scene::delete_nodes(const set<Geometry *> &nodes, const NodeOwne
 template<> void Scene::delete_nodes(const set<Object *> &nodes, const NodeOwner *owner)
 {
   remove_nodes_in_set(nodes, objects, owner);
-  object_manager->tag_update(this);
-  object_manager->update_flags |= ObjectManager::OBJECT_WAS_REMOVED;
+  object_manager->tag_update(this, ObjectManager::OBJECT_REMOVED);
 }
 
 template<> void Scene::delete_nodes(const set<ParticleSystem *> &nodes, const NodeOwner *owner)



More information about the Bf-blender-cvs mailing list