diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-09-06 18:00:09 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-09-11 11:43:27 +0300 |
commit | 022de797f1773f512f21cf9038787dd77e0fd5de (patch) | |
tree | cc428b1a778d5a76c7ea931c5d10cb65a80dc7f0 /source/blender/depsgraph/intern/depsgraph_registry.cc | |
parent | 73a199e96a68a5b9521ba7d3e8cca85697095c03 (diff) |
Depsgraph: Introduce depsgraph registry
Allows to access dependency graphs created for render engines
to inform them about changes in .blend file structure from the
Python handlers.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5724
Diffstat (limited to 'source/blender/depsgraph/intern/depsgraph_registry.cc')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_registry.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_registry.cc b/source/blender/depsgraph/intern/depsgraph_registry.cc new file mode 100644 index 00000000000..ad60b1bc4cf --- /dev/null +++ b/source/blender/depsgraph/intern/depsgraph_registry.cc @@ -0,0 +1,74 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2019 Blender Foundation. + * All rights reserved. + */ + +/** \file + * \ingroup depsgraph + */ + +#include "intern/depsgraph_registry.h" + +#include "BLI_utildefines.h" + +#include "intern/depsgraph.h" + +namespace DEG { + +typedef set<Depsgraph *> DepsgraphStorage; +typedef map<Main *, DepsgraphStorage> MainDepsgraphMap; + +static MainDepsgraphMap g_graph_registry; + +void register_graph(Depsgraph *depsgraph) +{ + Main *bmain = depsgraph->bmain; + MainDepsgraphMap::iterator it = g_graph_registry.find(bmain); + if (it == g_graph_registry.end()) { + it = g_graph_registry.insert(make_pair(bmain, DepsgraphStorage())).first; + } + DepsgraphStorage &storage = it->second; + storage.insert(depsgraph); +} + +void unregister_graph(Depsgraph *depsgraph) +{ + Main *bmain = depsgraph->bmain; + MainDepsgraphMap::iterator it = g_graph_registry.find(bmain); + BLI_assert(it != g_graph_registry.end()); + + // Remove dependency graph from storage. + DepsgraphStorage &storage = it->second; + storage.erase(depsgraph); + + // If this was the last depsgraph associated with the main, remove the main entry as well. + if (storage.empty()) { + g_graph_registry.erase(bmain); + } +} + +const set<Depsgraph *> &get_all_registered_graphs(Main *bmain) +{ + MainDepsgraphMap::iterator it = g_graph_registry.find(bmain); + if (it == g_graph_registry.end()) { + static DepsgraphStorage empty_storage; + return empty_storage; + } + return it->second; +} + +} // namespace DEG |