Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-09-14ViewLayer: Lazy sync of scene data.Monique Dewanchand
When a change happens which invalidates view layers the syncing will be postponed until the first usage. This will improve importing or adding many objects in a single operation/script. `BKE_view_layer_need_resync_tag` is used to tag the view layer to be out of sync. Before accessing `BKE_view_layer_active_base_get`, `BKE_view_layer_active_object_get`, `BKE_view_layer_active_collection` or `BKE_view_layer_object_bases` the caller should call `BKE_view_layer_synced_ensure`. Having two functions ensures that partial syncing could be added as smaller patches in the future. Tagging a view layer out of sync could be replaced with a partial sync. Eventually the number of full resyncs could be reduced. After all tagging has been replaced with partial syncs the ensure_sync could be phased out. This patch has been added to discuss the details and consequences of the current approach. For clarity the call to BKE_view_layer_ensure_sync is placed close to the getters. In the future this could be placed in more strategical places to reduce the number of calls or improve performance. Finding those strategical places isn't that clear. When multiple operations are grouped in a single script you might want to always check for resync. Some areas found that can be improved. This list isn't complete. These areas aren't addressed by this patch as these changes would be hard to detect to the reviewer. The idea is to add changes to these areas as a separate patch. It might be that the initial commit would reduce performance compared to master, but will be fixed by the additional patches. **Object duplication** During object duplication the syncing is temporarily disabled. With this patch this isn't useful as when disabled the view_layer is accessed to locate bases. This can be improved by first locating the source bases, then duplicate and sync and locate the new bases. Will be solved in a separate patch for clarity reasons ({D15886}). **Object add** `BKE_object_add` not only adds a new object, but also selects and activates the new base. This requires the view_layer to be resynced. Some callers reverse the selection and activation (See `get_new_constraint_target`). We should make the selection and activation optional. This would make it possible to add multiple objects without having to resync per object. **Postpone Activate Base** Setting the basact is done in many locations. They follow a rule as after an action find the base and set the basact. Finding the base could require a resync. The idea is to store in the view_layer the object which base will be set in the basact during the next sync, reducing the times resyncing needs to happen. Reviewed By: mont29 Maniphest Tasks: T73411 Differential Revision: https://developer.blender.org/D15885
2022-09-06Cleanup: spelling in comments, formatting, move comments into headersCampbell Barton
2022-09-01Cleanup: Remove/replace View Layer macros.Monique Dewanchand
This patch is a cleanup required before refactoring the view layer syncing process {T73411}. * Remove FIRSTBASE. * Remove LASTBASE. * Remove BASACT. * Remove OBEDIT_FROM_WORKSPACE. * Replace OBACT with BKE_view_layer_active_object. * Replace OBEDIT_FROM_VIEW_LAYER with BKE_view_layer_edit_object. Reviewed By: mont29 Maniphest Tasks: T73411 Differential Revision: https://developer.blender.org/D15799
2022-08-24Cleanup: Move outliner types to namespace, avoid C-style type definitionJulian Eisel
With C++ we should transition towards namespaces to avoid naming collisions. Having the namespace in place is the first step for that transition. Plus, the `typedef` isn't necessary for struct/class/enum definitions in C++, so avoid the verbosity it adds.
2022-08-19Outliner: Refactor how lazy-building of children is doneJulian Eisel
Makes the lazy-building (where children are only built when the parent isn't collapsed) more generic, so more display modes can use it. So far this was hardcoded for the "Data API" display mode. This will be used to work around a big performance issue with the Library Overrides Hierachies view in a complex production file, see following commit.
2022-08-17Cleanup: Remove unused Outliner search element storageJulian Eisel
This is old code to keep track of an active search element, so you could step through the search results. This isn't used anymore, and not needed since searching now filters the tree to only show matches. If we ever wanted to have support for stepping through elements again, that should be done via the active element instead.
2022-07-29Cleanup: Replace reinterpret_cast<> with static_cast<> in UI codeJulian Eisel
2022-07-29Cleanup: Move RNA path functions into own C++ fileJulian Eisel
Adds `rna_path.cc` and `RNA_path.h`. `rna_access.c` is a quite big file, which makes it rather hard and inconvenient to navigate. RNA path functions form a nicely coherent unit that can stand well on it's own, so it makes sense to split them off to mitigate the problem. Moreover, I was looking into refactoring the quite convoluted/overloaded `rna_path_parse()`, and found that some C++ features may help greatly with that. So having that code compile in C++ would be helpful to attempt that. Differential Revision: https://developer.blender.org/D15540 Reviewed by: Brecht Van Lommel, Campbell Barton, Bastien Montagne
2022-07-06Fix T99462: Deleting Missing Libraries Crashes Blender.Bastien Montagne
Usual same issue with outliner operations, where you apply it on one item, and then try to apply it again on same item listed somewhere else in the tree... Fixed by using the 'multi-tagged deletion' code we now have for IDs, that way tree-walking function just tags IDs for deletion, and they all get deleted at once at the end.
2022-05-26Outliner: Make use of new C++ based functional iteratorsJulian Eisel
(Not meant to cause user visible changes.) Makes use of the new iterators introduced in the previous commit. Some benefits: - Shorter, simpler, easier to read & understand - Deduplicates logic - Centralizes iteration logic, making it easier to replace tree storage (as planned), see previous commit. - Avoids having to pass (sub-)tree to iterate around (often redundant since it's just `SpaceOutliner.tree`, even though `SpaceOutliner` is already passed). - Function arguments that are only passed to the recursive call are recognized as unused (found and removed a few). Also does some general cleanups while refactoring the code for the iterators. Use `const`, use references (signals null is not expected), early-exit (see 16fd5fa656af), remove redundant arguments, etc.
2022-05-17Revert "Outliner: Remove the 'Remap data-block usages' operation."Bastien Montagne
This reverts commit 30534deced8dad16c566dd82db3edd462283de13. After discussion and feedback from users, it's better to keep this tool available until there is time to properly re-think the whole Outliner's contextual menu.
2022-05-11Outliner: Remove the 'Remap data-block usages' operation.Bastien Montagne
This feature is very advanced, and the way it was exposed in the Outliner was very confusing at best. It remains available through the Python API (`ID.user_remap`) e.g.
2022-05-11Outliner: Remove 'rename library' feature.Bastien Montagne
This was historically the only way to change/fix paths of library files in Blender. However, only changing the path then required a manual reload of the library, which could be skipped by user, or a save/reload of the working .blend file, which could lead to corruption of advanced library usages like overrides. Prefferred, modern way to change path of a library is to use the Relocate operation instead. Direct path modification remains possible through RNA (python console or the Data API view in the Outliner.
2022-03-29LibOverride: Rename 'delete hierarchy' to 'clear hierarchy', add 'clear ↵Bastien Montagne
single' operations. 'Delete' was a confusing name, even though it would delete the overrides it would replace them by linked data. Adding the 'single' version of that operation made it even more confusing, since often it has to keep the override ID for sakes of hierarchy, and just reset it and turn it back into a non-editable system override. Ref: {T95707}.
2022-03-24Outliner: tweak handling of liboverrides in delete code.Bastien Montagne
Essentially, we only allow deletion of hierarchy roots of liboverrides, when hierarchy deletion option is enabled. Also add some checking code in the generic, non-object/collection ID delete code, to prevent any deletion of liboverrides that would be part of a hierarchy.
2022-03-11Fix out of order event handling when calling operators from gizmosCampbell Barton
Activating a gizmo used the windows eventstate which may have values newer than the event used to activate the gizmo. This meant transforms check for the key that activated transform could be incorrect. Support passing an event when calling operators to avoid this problem.
2022-03-09Event System: drag events no longer default to the drag start locationCampbell Barton
This avoids transform jumping which is a problem when tweaking values a small amount. A fix for T40549 was made box-select used the location when the key was pressed. While it's important for box-select or any operator where it's expected the drag-start location is used, this is only needed in some cases. Since the event stores the click location and the current location, no longer overwrite the events real location. Operators that depend on using the drag-start can use this location if they need. In some cases the region relative cursor location (Event.mval) now needs to be calculated based on the click location. - Added `WM_event_drag_start_mval` for convenient access to the region relative drag-start location (for drag events). - Added `WM_event_drag_start_xy` for window relative coordinates. - Added Python property Event.mouse_prev_click_x/y Resolves T93599. Reviewed By: Severin Ref D14213
2022-03-02Fix modal item open/close in the outliner since removing tweak eventsCampbell Barton
Correct check for left-mouse event which assumed the alternative was a tweak event. Also remove print added by accident.
2022-02-11File headers: SPDX License migrationCampbell Barton
Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
2022-01-26Cleanup: Remove RNA data from TreeElement, get via type specific classJulian Eisel
The `TreeElement.rnaptr` was only needed for RNA tree-elements. Now it can be gotten through the new type specific classes, e.g. `TreeElementRNAProperty.getPointerRNA()`.
2022-01-26Cleanup: Improve function name, introduced in own recent commitJulian Eisel
I prefer it this way around now, especially since I'm adding a `getPointerRNA()` too. Good to keep it match the actual struct names.
2022-01-26Cleanup: Small improvements to Outliner RNA path build functionJulian Eisel
Smaller cleanups to improve readability of a complex function.
2022-01-26Fix incorrect index-key in RNA path built from OutlinerJulian Eisel
Bug introduced in 7cbcfb7f492d.
2022-01-26Cleanup: Reduce `void *` reliance of new RNA C++ Outliner elementsJulian Eisel
Continuation of the previous commit, this time addressing the same for RNA tree-elements.
2022-01-14Cleanup: spelling in comments, C++ style comments for disabled codeCampbell Barton
Also ensure space at end of comment.
2022-01-14Cleanup: Clang tidyHans Goudey
- modernize-deprecated-headers - modernize-use-using - modernize-use-nullptr - modernize-use-bool-literals
2022-01-13Cleanup: Use `nullptr` in new Outliner C++ filesJulian Eisel
2022-01-13Outliner: Compile all Outliner files in C++Julian Eisel
We want to refactor quite some of the Outliner code using C++, this is a logical step to help the transition to a new architecture. Includes plenty of fixes to make this compile without warnings, trying not to change logic. The usual stuff (casts from `void *`, designated initializers, compound literals, etc.).