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) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs