Commit: 40e143989bd4351f872928cd681aecd4ece29fe2 Author: Kévin Dietrich Date: Tue Nov 10 13:08:17 2020 +0100 Branches: cycles_procedural_api https://developer.blender.org/rB40e143989bd4351f872928cd681aecd4ece29fe2
encapsulate the need_update member of every manager =================================================================== M intern/cycles/blender/blender_particles.cpp M intern/cycles/render/bake.cpp M intern/cycles/render/bake.h M intern/cycles/render/geometry.cpp M intern/cycles/render/geometry.h M intern/cycles/render/image.cpp M intern/cycles/render/image.h M intern/cycles/render/light.cpp M intern/cycles/render/light.h M intern/cycles/render/object.cpp M intern/cycles/render/object.h M intern/cycles/render/osl.cpp M intern/cycles/render/particles.cpp M intern/cycles/render/particles.h M intern/cycles/render/scene.cpp M intern/cycles/render/shader.cpp M intern/cycles/render/shader.h M intern/cycles/render/svm.cpp M intern/cycles/render/tables.cpp M intern/cycles/render/tables.h =================================================================== diff --git a/intern/cycles/blender/blender_particles.cpp b/intern/cycles/blender/blender_particles.cpp index 4a5dea8d131..d5dd7215c47 100644 --- a/intern/cycles/blender/blender_particles.cpp +++ b/intern/cycles/blender/blender_particles.cpp @@ -57,7 +57,7 @@ bool BlenderSync::sync_dupli_particle(BL::Object &b_ob, /* no update needed? */ if (!need_update && !object->get_geometry()->is_modified() && - !scene->object_manager->need_update) + !scene->object_manager->need_update()) return true; /* first time used in this sync loop? clear and tag update */ diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp index d81f06e49e2..a490fc361f5 100644 --- a/intern/cycles/render/bake.cpp +++ b/intern/cycles/render/bake.cpp @@ -78,7 +78,7 @@ BakeManager::BakeManager() type = SHADER_EVAL_BAKE; pass_filter = 0; - need_update = true; + need_update_ = true; } BakeManager::~BakeManager() @@ -116,7 +116,7 @@ void BakeManager::set(Scene *scene, scene->film->tag_modified(); scene->integrator->tag_update(scene, 0); - need_update = true; + need_update_ = true; } void BakeManager::device_update(Device * /*device*/, @@ -124,7 +124,7 @@ void BakeManager::device_update(Device * /*device*/, Scene *scene, Progress & /* progress */) { - if (!need_update) + if (!need_update()) return; scoped_callback_timer timer([scene](double time) { @@ -152,11 +152,21 @@ void BakeManager::device_update(Device * /*device*/, object_index++; } - need_update = false; + need_update_ = false; } void BakeManager::device_free(Device * /*device*/, DeviceScene * /*dscene*/) { } +void BakeManager::tag_update() +{ + need_update_ = true; +} + +bool BakeManager::need_update() const +{ + return need_update_; +} + CCL_NAMESPACE_END diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h index 93e664c2ab1..655b9b1cf7e 100644 --- a/intern/cycles/render/bake.h +++ b/intern/cycles/render/bake.h @@ -36,9 +36,12 @@ class BakeManager { void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress); void device_free(Device *device, DeviceScene *dscene); - bool need_update; + void tag_update(); + + bool need_update() const; private: + bool need_update_; ShaderEvalType type; int pass_filter; std::string object_name; diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp index bd9655b47b9..f49c421df60 100644 --- a/intern/cycles/render/geometry.cpp +++ b/intern/cycles/render/geometry.cpp @@ -274,15 +274,14 @@ void Geometry::tag_update(Scene *scene, bool rebuild) } } - scene->geometry_manager->need_update = true; - scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MODIFIED); + scene->geometry_manager->tag_update(scene, GeometryManager::GEOMETRY_MODIFIED); } /* Geometry Manager */ GeometryManager::GeometryManager() { - need_update = true; + update_flags = UPDATE_ALL; need_flags_update = true; bvh = nullptr; } @@ -1348,7 +1347,7 @@ void GeometryManager::device_update_bvh(Device *device, void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Progress &progress) { - if (!need_update && !need_flags_update) { + if (!need_update() && !need_flags_update) { return; } @@ -1434,10 +1433,6 @@ void GeometryManager::device_update_preprocess(Device *device, Scene *scene, Pro device_update_flags |= DEVICE_CURVE_DATA_NEEDS_REALLOC; } - if (device_update_flags != 0) { - need_update = true; - } - need_flags_update = false; } @@ -1520,7 +1515,7 @@ void GeometryManager::device_update(Device *device, Scene *scene, Progress &progress) { - if (!need_update) + if (!need_update()) return; VLOG(1) << "Total " << scene->geometry.size() << " meshes."; @@ -1806,7 +1801,6 @@ void GeometryManager::device_update(Device *device, } } - need_update = false; update_flags = 0; if (true_displacement_used) { @@ -1901,8 +1895,15 @@ void GeometryManager::device_free(Device *device, DeviceScene *dscene) void GeometryManager::tag_update(Scene *scene, uint32_t flag) { update_flags |= flag; - need_update = true; - scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MANAGER); + + if ((flag & OBJECT_MANAGER) == 0) { + scene->object_manager->tag_update(scene, ObjectManager::GEOMETRY_MANAGER); + } +} + +bool GeometryManager::need_update() const +{ + return update_flags != 0; } void GeometryManager::collect_statistics(const Scene *scene, RenderStats *stats) diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h index 4d872369767..00eff781e7d 100644 --- a/intern/cycles/render/geometry.h +++ b/intern/cycles/render/geometry.h @@ -191,12 +191,14 @@ class GeometryManager { HAIR_REMOVED = (1 << 3), UV_PASS_NEEDED = (1 << 4), MOTION_PASS_NEEDED = (1 << 5), + SHADER_ATTRIBUTE_MODIFIED = (1 << 6), + OBJECT_MANAGER = (1 << 7), + GEOMETRY_MODIFIED = (1 << 8), UPDATE_ALL = ~0u, }; /* Update Flags */ - bool need_update; bool need_flags_update; /* Constructor/Destructor */ @@ -211,6 +213,8 @@ class GeometryManager { /* Updates */ void tag_update(Scene *scene, uint32_t flag); + bool need_update() const; + /* Statistics */ void collect_statistics(const Scene *scene, RenderStats *stats); diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index 3e6ff289c85..c90d8a2b49d 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -298,7 +298,7 @@ bool ImageLoader::is_vdb_loader() const ImageManager::ImageManager(const DeviceInfo &info) { - need_update = true; + need_update_ = true; osl_texture_system = NULL; animation_frame = 0; @@ -451,7 +451,7 @@ int ImageManager::add_image_slot(ImageLoader *loader, images[slot] = img; - need_update = true; + need_update_ = true; return slot; } @@ -478,7 +478,7 @@ void ImageManager::remove_image_user(int slot) * the reasons for this is that on shader changes we add and remove nodes * that use them, but we do not want to reload the image all the time. */ if (image->users == 0) - need_update = true; + need_update_ = true; } static bool image_associate_alpha(ImageManager::Image *img) @@ -810,7 +810,7 @@ void ImageManager::device_free_image(Device *, int slot) void ImageManager::device_update(Device *device, Scene *scene, Progress &progress) { - if (!need_update) { + if (!need_update()) { return; } @@ -834,7 +834,7 @@ void ImageManager::device_update(Device *device, Scene *scene, Progress &progres pool.wait_work(); - need_update = false; + need_update_ = false; } void ImageManager::device_update_slot(Device *device, Scene *scene, int slot, Progress *progress) @@ -854,7 +854,7 @@ void ImageManager::device_load_builtin(Device *device, Scene *scene, Progress &p { /* Load only builtin images, Blender needs this to load evaluated * scene data from depsgraph before it is freed. */ - if (!need_update) { + if (!need_update()) { return; } @@ -896,4 +896,14 @@ void ImageManager::collect_statistics(RenderStats *stats) } } +void ImageManager::tag_update() +{ + need_update_ = true; +} + +bool ImageManager::need_update() const +{ + return need_update_; +} + CCL_NAMESPACE_END diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index 6ac1db9ed63..c802521db56 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -189,7 +189,9 @@ class ImageManager { void collect_statistics(RenderStats *stats); - bool need_update; + void tag_update(); + + bool need_update() const; struct Image { ImageParams params; @@ -209,6 +211,7 @@ class ImageManager { }; private: + bool need_update_; bool has_half_images; thread_mutex device_mutex; diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 4b34bf958d7..5ff4705d6cd 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -185,7 +185,7 @@ bool Light::has_contribution(Scene *scene) LightManager::LightManager() { - need_update = true; + update_flags = UPDATE_ALL; need_update_background = true; use_light_visibility = false; last_background_enabled = false; @@ -962,7 +962,7 @@ void LightManager::device_update(Device *device, Scene *scene, Progress &progress) { - if (!need_update) + if (!need_update()) return; scoped_callback_timer timer([scene](double time) { @@ -1000,7 +1000,7 @@ void LightManager::device_update(Device *device, scene->film->set_use_light_visibility(use_light_visibility); - need_update = false; + update_flags = 0; need_update_background = false; } @@ -1017,7 +1017,12 @@ void LightManager::device_free(Device *, DeviceScene *dscene, const bool free_ba void LightManager::tag_update(Scene * /*scene*/, uint32_t /*flag*/) { - need_update = true; + update_flags |= UPDATE_ALL; +} + +bool LightManager::need_update() const +{ + return update_flags != 0; } int LightManager::add_ies_from_file(const string &filename) @@ -1063,7 +1068,7 @@ int LightManager::add_ies(const string &content) ies_slots[slot]->users = 1; ies_slots[slot]->hash = hash; - need_update = true; + update_flags = UPDATE_ALL; need_update_background = true; return slot; @@ -1082,8 +1087,10 @@ void LightManager::remove_ies(int slot) ies_slots[slot]->users--; /* If the slot has no more users, update the device to remove it. */ - need_update |= (ies_slots[slot]->users == 0); - need_update_background |= need_update; + if (ies_slots[slot]->users == 0) { + update_flags |= UPDATE_ALL; + need_update_background |= need_update(); + } } void LightManager::device_update_ies(DeviceScene *dscene) diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h index 1f0ca50cad4..c32eee0f53b 100644 --- a/intern/cycles/render/light.h +++ b/inte @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs