99984b3b05a07776d23b42e3d0ff98bd2b10dd63
We generally expect `bNodeTreeRuntime::nodes_by_id` to be valid at all times, so it also has to have the same order `bNodeTree.nodes`. When freeing a node, the entire vector set was rebuild currently to ensure that invariant. This leads O(n^2) behavior when all nodes are freed as is commonly the case with depsgraph copies etc. This patch implements an optimization where `nodes_by_id` is not rebuild if only the last node was removed. In this case, that not can just be popped from `nodes_by_id` without affecting the order of the other nodes. To use this optimization, the node tree freeing code now frees nodes in reverse order. Pull Request: https://projects.blender.org/blender/blender/pulls/143831
…
Blender
Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
Project Pages
Development
License
Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different but compatible license.
See blender.org/about/license for details.
Description
Languages
C++
78%
Python
14.9%
C
2.9%
GLSL
1.9%
CMake
1.2%
Other
0.9%
