[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