Commit Graph

24274 Commits

Author SHA1 Message Date
Bastien Montagne
a9612086b8 Merge branch 'blender-v3.6-release' 2023-06-05 15:35:00 +02:00
Bastien Montagne
855d8d3fa4 Fix #88010: Undo system did not respect memory limit.
Code was plainfully buggy, early-out check in
`BKE_undosys_stack_limit_steps_and_memory` was plainfully wrong.

Also added some more logging for memory limiting code.
2023-06-05 15:23:31 +02:00
Bastien Montagne
ebb5643e59 Readfile: Refactor several parts of the process
This commit affects:
* Reading undo steps from memfile (aka 'Global Undo');
* Handling of UI IDs (WindowManager, Workspaces and Screens) when
  opening a .blend file.

While no major changes are expected from a user PoV, there may be some
unexpected changes in rare edge-cases. None has been identified so far.

Undo step loading should be marginally faster (`setup_app_data` itself
is 2-3 times faster, as it does not do remapping anymore, which makes the
whole 'read undo step' process about 20% faster - but the most
time-consuming step on undo is the depsgraph processing, which remains
unchanged here).

This commit also solves some bugs (crashes) in some relatively uncommon
cases, like e.g. if the WM had an IDProperty pointing at an object and
UI is not loaded when opening a new .blend file with the 'Load UI' option
enabled (as in previous code on file opening WM ID would never be
remapped).

From a more technical side, this commit aims mainly at cleaning things
up, in preparation for the introduction of new 'no undo, no readfile'
type of handling (as part of the Brush Assets project):
  - Prevent WM code from doing (too much) horrible ID 'management' on
    its WM when opening a new file. It used to remove current WM from
    the Main database, store it in a temporary own list, and then free
    it itself...
  - Trying to make the complex logic behind WM handling on file reading a
    bit more easy to follow, at least way more documented in code.
  - Keep the handling of 'IDs being re-used from old Main' in a single
    place, as much as possible:
    -- Readfile code itself in undo case (because it's more efficient,
       and undo case is in a way simpler than actual .blend file
       reading case). The whole `blo_lib_link_restore` block of code
       is also removed.
    -- (Mostly) setup_app_data code in actual file reading case.
  - Sanitize the usage of the 'libmap' in readfile code in undo case
    (waaaaay too many pointers were added there, which was hiding some
     other issues in the related code, and potentially causing (in
     rare cases) memory addresses collisions.

Pull Request: https://projects.blender.org/blender/blender/pulls/108016
2023-06-05 13:54:49 +02:00
Campbell Barton
c1ac3621a9 Cleanup: replace list-base count_at_most with is_single for clarity 2023-06-05 12:42:46 +10:00
Campbell Barton
87ff8ee09a Cleanup: disambiguate the term 'path'
Use filepath or dirpath, unless the contents might be either,
in that case note that the contents could be both.
Use `rna_path*` in some cases too.
2023-06-05 10:57:34 +10:00
Campbell Barton
32a5dad2b2 Cleanup: use 'num' suffix for sizes in DNA instead of 'size'
Avoid ambiguity with the term size.
2023-06-04 19:48:14 +10:00
Campbell Barton
784e13170e Cleanup: function style casts, use nullptr, printf & size macros 2023-06-04 19:27:38 +10:00
Campbell Barton
493a1dd7c8 Cleanup: remove NULL literals in C++ (including comments & strings) 2023-06-04 18:35:12 +10:00
Leon Schittek
cd611f7fb8 Merge branch 'blender-v3.6-release' 2023-06-03 12:37:56 +02:00
Leon Schittek
2ce5fc4a3e Fix #108336: Treat node sockets with muted links as linked
Prevent make links operator from creating links to sockets that are
already linked to a muted link.

The `SOCK_IS_LINKED` flag is used to check if there already is a link
connecting to the socket but when the link is muted, the flag wasn't set
leading to issues in parts of the code that used the flag to check
for any type of connected link.
This commit now also sets `SOCK_IS_LINKED` when links are muted and
adds an additional check in places where different behavior is expected
for muted links.

Pull Request: https://projects.blender.org/blender/blender/pulls/108375
2023-06-03 12:34:58 +02:00
Germano Cavalcante
3010f1233b Transform: new feature to edit the 'Snap Base'
This commit implements a new modifier key (`B`) for the transform
operators.

This new key allows changing the 'Snap Base' of a transform by snapping
it to a defined point in the scene.

Ref #66424

# Implementation Details

- This feature is only available in the 3D View.
- This feature is only available for the transform modes:
  - `Move`,
  - `Rotate`,
  - `Scale`,
  - `Vert Slide` and
  - `Edge Slide`.
- The `Snap Base Edit` is enabled while we are transforming and we
  press the key `B`
- The `Snap Base Edit` is confirmed when we press any of the keys:
 `B`, `LMB`, `Enter`
- During um operation, if no snap target is set for an element in the
  scene (Vertex, Edge...), the snap targets to geometry Vertex, Edge,
  Face, Center of Edge and Perpendicular of Edge are set automatically.
- Constraint or similar modal features are not available during the
  `Snap Base Edit` mode.
- Text input is not available during the `Snap Base Edit` mode.
- A prone snap base point is indicated with an small cursor drawing.

Pull Request: https://projects.blender.org/blender/blender/pulls/104443
2023-06-03 04:18:49 +02:00
Hans Goudey
0c0cd10e55 Merge branch 'blender-v3.6-release' 2023-06-02 21:19:37 -04:00
Hans Goudey
214da4b6b4 Fix #108039: Incorrect results when setting custom normals
The solution using `reverse_index_array` didn't work because it lost the
order that the corners were processed in (the order around the vertex).
This is important when setting custom normals because the process
sets sharp edges when the normal of the current and previous corner
is too different.
2023-06-02 21:18:12 -04:00
Campbell Barton
74dd0ed09e Cleanup: remove redundant struct qualifiers 2023-06-03 08:54:37 +10:00
Nathan Vegdahl
f63c56e05c Fix: action's actual users and recorded user count could diverge
The user count decrement and unassigning the action were split
between two different conditionals, which weren't guaranteed
to both execute/not-execute together.
2023-06-02 16:03:26 +02:00
Dalai Felinto
390f8fef76 Merge remote-tracking branch 'origin/blender-v3.6-release' 2023-06-02 11:10:45 +02:00
Dalai Felinto
9d00d13767 Fix #108501: Image Editor glitch after texture painting undo
When doing the second undo, the image wasn't properly marked for full
update.

There reason was that in some cases the partial_updater was
totally reconstructed: `first_changeset_id` and `last_changeset_id` were both 0.

While the `user_imp->last_changeset_id` was still its last value (e.g., 3).

The fix is to have the partial updater validator to check for the
last change set as well (it was only checking for the first change set).

This way we cover both scenarios when user_imp->last_changeset_id is out
of the range of the partial update history.

Pull Request: https://projects.blender.org/blender/blender/pulls/108533
2023-06-02 11:09:38 +02:00
Campbell Barton
5177e2f20b Fix #108495: Pasting a material crashes
References to data-blocks in a material were stored in-memory and could
crash if the data-blocks referenced by the material no longer existed
when pasting.

Resolve by using a blend-file for material copy/paste, matching how the
clipboard works in the 3D view-port.

Currently there is no support for including indirectly linked
data-blocks when pasting the material. Instead, data-blocks are restored
by name, by inspecting the current file.

This also fixes a crash where the `SpaceNode::nodetree` could point to
freed memory when pasting a material.

Ref !108496.

Includes contributions by @mont29.
2023-06-02 10:16:30 +10:00
Campbell Barton
9b97123bf9 Cleanup: spelling in comments, odd comment block spacing 2023-06-02 10:16:16 +10:00
Nathan Vegdahl
355f4164b6 Fix: action's actual users and recorded user count could diverge
The user count decrement and unassigning the action were split
between two different conditionals, which weren't guaranteed
to both execute/not-execute together.
2023-06-01 15:04:19 +02:00
Hans Goudey
50bfe1dfe3 Geometry Nodes: Rewrite mesh delete geometry node
Replace the implementation of the separate and delete geometry nodes
for meshes. The new code makes more use of the `IndexMask` class, which
was recently optimized. The main goal is to make more of the work scale
with the size of the result mesh rather than the input. For example,
instead of keeping a map from input to output elements, the maps used
to copy attributes go from output to input elements.

The new implementation is generally 2-4x faster, depending on the mode
and the number of elements selected. The new code is also able to skip
more work when nothing is removed.

This also allows using more existing attribute interpolation code,
allowing the overall removal of over 300 lines. Some of the attribute
utilities from a similar change for curves (f63cfd8e28) are
reused directly.

The indices of the result changes, so the test file needs to be updated.

Pull Request: https://projects.blender.org/blender/blender/pulls/108435
2023-06-01 14:55:21 +02:00
Falk David
b14cdb440a GPv3: Add operator to create new grease pencil object
This adds the operator `OBJECT_OT_grease_pencil_add` to create a new grease pencil object.

Currently it supports the `EMPTY` and `STROKE` type.
This also replaces the add menu for the legacy grease pencil type in the Shift+A menu when the experimental option is enabled.

Pull Request: https://projects.blender.org/blender/blender/pulls/108462
2023-05-31 18:00:26 +02:00
Falk David
e18325b2b9 GPencil: Fix memory leak when creating layers
Use `MEM_new` and `MEM_delete` to allocate and free the memory.
2023-05-31 17:37:54 +02:00
Sergey Sharybin
c1bc70b711 Cleanup: Add a copyright notice to files and use SPDX format
A lot of files were missing copyright field in the header and
the Blender Foundation contributed to them in a sense of bug
fixing and general maintenance.

This change makes it explicit that those files are at least
partially copyrighted by the Blender Foundation.

Note that this does not make it so the Blender Foundation is
the only holder of the copyright in those files, and developers
who do not have a signed contract with the foundation still
hold the copyright as well.

Another aspect of this change is using SPDX format for the
header. We already used it for the license specification,
and now we state it for the copyright as well, following the
FAQ:

    https://reuse.software/faq/
2023-05-31 16:19:06 +02:00
Bastien Montagne
5251f9d877 Merge branch 'blender-v3.6-release' 2023-05-31 15:44:21 +02:00
Bastien Montagne
12a52c03c8 Fix (unreported) liboverride creation glitches:
- Do not remap local liboverrides from other hierarchies when a
   liboverride hierarchy root is provided (such that in case a linked
   data is overridden as part of one hierarchy, the new liboverride does
   not get assigned to other liboverride hierarchies of the same reference
   data).
 - Do not attempt to instanstiate newly overridden collections or objects
   when they are part of a hierarchy and not the root of that hierarchy
   (as they can be sondiered as already handled through that hierarchy
    processing). Avoids attempts to instantiate them when doing partial
   liboverride into an already existing hierarchy.
2023-05-31 15:27:14 +02:00
Soeren Schmidt-Clausen
fdc3ed798d Geometry Nodes: Add Corners of Edge node
Adds the "Corners of Edge" topology node to geometry nodes.
Combining this node with the "Face of Corner" node allows getting
informations about the faces connected to an edge. The behavior is
slightly non-obvious-- the node only gives the corner neighbors
that come *before* the current edge in directly neighboring faces.
This allows the operation to be easily reversed and reduces
redundancy between nodes.

See the devtalk thread: https://devtalk.blender.org/t/29379

Pull Request: https://projects.blender.org/blender/blender/pulls/107968
2023-05-31 15:25:48 +02:00
Bastien Montagne
688e63f950 Fix (unreported) BKE add_collection allowed to add to liboverride.
Probably typo, should check if collection is a liboverride, not if its
liboverridable.
2023-05-31 15:12:03 +02:00
Philipp Oeser
eae0a24afb Merge branch 'blender-v3.6-release' 2023-05-31 15:02:19 +02:00
Philipp Oeser
eb4ea0b51d Fix #108266: sculpt auto created color attribute not set as render color
When entering sculpt mode on an object without any color attributes and
starting to paint, the newly created color attribute was set active, but
not default (camera icon).

Now set it default as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/108271
2023-05-31 15:00:39 +02:00
Sergey Sharybin
0eecf63907 Cleanup: unused variable warnings
Pull Request: https://projects.blender.org/blender/blender/pulls/108450
2023-05-31 11:51:44 +02:00
YimingWu
397663a7cb Fix #107956: Simulation reset on fps change
Resets simulation cache when frame rate changes, so we don't get
inconsistent accumulations when frame rate is changed in the middle of
the simulation.

Pull Request: https://projects.blender.org/blender/blender/pulls/108004
2023-05-31 10:05:58 +02:00
Campbell Barton
bd23eb4742 Merge branch 'blender-v3.6-release' 2023-05-31 13:51:59 +10:00
Campbell Barton
5242f442a5 Fix crashes accessing freed memory from the material clipboard
Follow up to [0], some material data wasn't accounted for.

- The embedded node-tree's owner_id wasn't set.
- Animation data (both the material & it's embedded node-tree).
- Updating depsgraph relations is needed when animation data is freed
  as part of paste too.

Also report when paste fails.

[0]: 5b5a1e3581
2023-05-31 13:51:10 +10:00
Campbell Barton
3f253af0fb Merge branch 'blender-v3.6-release' 2023-05-31 13:25:26 +10:00
Campbell Barton
12e5241876 BKE_main: simplify & update debugging block for tracking freed ID's
Use a macro to make the ID-free switch more compact & use ID indices
for better readability. Also typedef the enum so missing types in the
switch will report compiler warnings.
2023-05-31 13:22:48 +10:00
Jesse Yurkovich
286edd6b2a Merge branch 'blender-v3.6-release' 2023-05-30 18:02:25 -07:00
Hans Goudey
66d20c8723 Cleanup: Simplofy use of modifier eval context flags 2023-05-30 16:43:02 -04:00
Hans Goudey
1551d7f033 Fix #108273: Mirror modifier resets copied custom normals
The "no custom" normal used to be stored inside the custom normal space
struct, now it's stored separately. Before the normal was modified, but
not the one in the normal space struct. Fixed by storing the original
before modification in a temporary variable.
2023-05-30 16:28:29 -04:00
Hans Goudey
e64b3c8212 Refactor: Remove pre-2.8 function to reevaluate a single object
This function replaced the evaluated mesh with a new one with the given
custom data type mask. That doesn't work in general anymore for a few
reasons: the increased dependence on named attributes (a opposed to
custom data types), and the "all or nothing" approach to reevaluating
the depsgraph. Other objects might depend on the object's evaluated
geometry, so it shouldn't just be replaced. Pushed a bit further, this could
give nice simplifications to mesh modifier evaluation.

There are two breaking changes, `bmesh_from_object` and BVH tree
`FromObject` require the source object to have a proper evaluated
mesh now.

If this causes a regression, it's likely that the object is missing
an update tag when a mode is entered that requires extra evaluated data.

Pull Request: https://projects.blender.org/blender/blender/pulls/106186
2023-05-30 22:25:06 +02:00
Philipp Oeser
243f20ec10 Revert "Particles: remove Halo, Line and Path render options"
broke tests, will check again tomorrow

This reverts commit fbd2bd8154.
2023-05-30 22:20:17 +02:00
Aras Pranckevicius
23afc6161c IO: remove OBJ and PLY Python add-ons (#104503, #104504)
With C++ based built-in implementations having both more features
and way better performance, it's time to retire the add-ons. Implements
#104503 and #104504.

Pull Request: https://projects.blender.org/blender/blender/pulls/108440
2023-05-30 21:41:26 +02:00
Hans Goudey
f75af7cbf5 Mesh: Forward compatibility with generic bevel weight in 4.0
2a56403cb0 changed the way bevel weights are stored in 4.0.
Add versioning for reading the new files that replaces the new generic
attributes with the old non-generic custom data layers. The code is
paranoid with lots fo checks I expect will typically not be necessary.
2023-05-30 15:10:13 -04:00
Philipp Oeser
fbd2bd8154 Particles: remove Halo, Line and Path render options
For emitter particle systems, these were never rendered anyways, Path is
kept for hair systems of course.

As a consequence, the new default for particle systems is:
- render as None (users have to explicitly set this to object/
collection)
- display as point

When changing to Hair type, this automatically gets set back to
- render as Path
- display as Render

Changing back to emitter, will use points as display again (and render
as None -- same here, users have to explicitly set this to object/
collection)

Not sure if this is still for 3.6, patch is for 4.0 for now.

"Fixes" #80197

Pull Request: https://projects.blender.org/blender/blender/pulls/108231
2023-05-30 20:45:32 +02:00
Hans Goudey
c39bb12744 Cleanup: Simplify retrieval of evaluated point cloud for conversion 2023-05-30 14:33:08 -04:00
Brecht Van Lommel
e3ffc8bbfb Cleanup: compiler warnings 2023-05-30 13:51:46 +02:00
Falk David
d21f4efc8e Cleanup: formatting 2023-05-30 11:18:35 +02:00
Falk David
3aaacd6e30 GPencil 3.0: Initial commit
Adds the initial stage for the grease pencil 3.0 project.

This patch includes:
* New ID and new object type.
* New DNA structures.
* New drawing engine for grease pencil (gpencil-next).
* Tests for the new grease pencil data-type.
* A few operators for conversion, switching modes and (simple) drawing.

Exposed to the user:
* An experimental option to switch to the new grease pencil.
   * This will switch the grease pencil render engine to gpencil-next which can only render the new object type.
     Current grease pencil objects will no longer render.
   * Changing this option currently requires a restart of blender (for the keymap to update).
* A conversion setting in the `Object` > `Convert To` operator.
* A drawing operator in `Draw Mode`.

Pull Request: https://projects.blender.org/blender/blender/pulls/106848
2023-05-30 11:14:16 +02:00
Campbell Barton
0a5d0c0ef6 Merge branch 'blender-v3.6-release' 2023-05-30 16:02:31 +10:00
Campbell Barton
5b5a1e3581 Fix crash assessing freed memory when pasting materials
- Pasting a material would free the materials local node-tree,
  leaving it in the depsgraph which would then tag the freed ID
  (from deg_graph_clear_id_recalc_flags).
- texpaintslot, gp_style pointers were copied into the clipboard without
  being cleared or duplicated, allowing for freed memory access later on.
- A shallow copy from the cliboard into the material could also cause
  these pointers to be overwritten and leak memory.

Resolve by calling material_free_data before performing a shallow copy
and adding material_clear_data which ensures these pointers aren't
copied into the clipboard.
2023-05-30 15:50:27 +10:00