Commit Graph

27451 Commits

Author SHA1 Message Date
Aras Pranckevicius
64198971ea Fix: Reading some old blend files fires assert in Sequencer data read
wdas_cloud.blend file on 4.3+ raises an assert, due to reading some
VSE data:

  readfile.cc:4798, blo_verify_data_address(), at
  'MEM_allocN_len(new_address) >= expected_size' Corrupt .blend
  file, unexpected data size.

This is caused by 30dbb7820d which removed completely unused
data from Sequence struct. But it turns out, Sequence serialization
inside scene_blend_read_data is "somewhat strange", to put it mildly,
and silently assumes that struct offset of seqbase and channels
will never change.

For now, restore the previously expected struct member offset,
ensure it stays like that via static_assert, and add notes on
how someone should fix this in a better way.

Pull Request: https://projects.blender.org/blender/blender/pulls/130296
2024-11-15 11:51:49 +01:00
Thomas Dinges
b8b3f8e723 Release: Bump 4.3 to rc 2024-11-14 18:53:05 +01:00
Pratik Borhade
3b44f84686 Fix #130182: Unique layer name in move to layer popup box
Set unique name for `target_layer_name` to display in pop-up box when
creating a new layer. For that, `unique_layer_name()` is moved to member
function of `GreasePencil`.

Pull Request: https://projects.blender.org/blender/blender/pulls/130208
2024-11-14 18:30:50 +01:00
Julian Eisel
c70e93bd5c Fix: Assert when activating brush asset from the current file
Brush assets from the current file should be supported like other brush
assets.

This assert would fail on startup for example, when opening the
essentials file containing the default brush of this mode.
2024-11-14 11:45:54 +01:00
Bastien Montagne
b863369ae9 Refactor: BKE_image: Allow to load or find existing also in a Library.
This commit refactors `BKE_image_load` and `BKE_image_load_exists` APIs:
* Remove the `_ex` versions (the 'exist' boolean return pointer can have
  default `nullptr` value instead).
* Add `_in_lib` versions, which match signature and behavior of the
  generic ID creation code to allow to find or create a new image ID
  directly in a library 'namespace' (as linked data).

This is required by upcommig fixes for Brush Assets, which are using
linked but editable data-blocks.

Fix #130194: When trying to add a new image from the UI (e.g. for a new
texture) for a local ID, if that same exact image was already loaded by
a linked ID, it would trigger an assert in `BKE_id_move_to_same_lib`,
because `BKE_image_load_exists` would return the matching linked Image ID
instead of creating a new local one. In release builds with no assert,
it would result in making a linked ID 'local', while still being used by
original other linked data.

Passing around the intended final destination of the new Image (local or
in a given library) allows `BKE_image_load_exists` to be more specific
when searching for an already loaded matching image ID, and ensures that
a new local Image ID is created in the case described above.

Pull Request: https://projects.blender.org/blender/blender/pulls/130195
2024-11-13 15:29:29 +01:00
Bastien Montagne
cf0c91a545 Fix BKE_id_move_to_same_lib behavior with invalid parameters.
* Early return in case the given `id` is already in the same library as
  its target `owner_id` (in addition to both being local data).
* Assert with message AND return in case the given `id` is a linked ID
  from a different library.

The second point somewhat mitigates the severity of #130194.
2024-11-13 10:14:57 +01:00
Bastien Montagne
0b3a7cbe69 Cleanup: Move BKE_image.h and related headers to C++.
NOTE: This also required some changes to Cycles code itself, who is now
directly including `BKE_image.hh` instead of declaring a few prototypes
of these functions in its `blender/utils.h` header (due to C++ functions
names mangling, this was not working anymore).

Pull Request: https://projects.blender.org/blender/blender/pulls/130174
2024-11-12 16:53:54 +01:00
Falk David
32c76ee768 Fix: GPv3: Unused parameter in remove_from_vertex_group
Caused by 5585d29d30.
Forgot to remove the parameter.
2024-11-12 11:56:59 +01:00
Pratik Borhade
5585d29d30 Fix: GPv3: Vertex group functions edit all keyframes
Instead of looping through all drawings in the vertex group kernel
function, loop through all/visible drawings in the operators and
pass a single drawing to `remove_from_vertex_group`.

Continuing !129789.

Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/129890
2024-11-12 10:44:59 +01:00
Pratik Borhade
1d14390f99 Fix #129297: Gizmo missing for unlocked layer when autolock inactive is on
`set_active_node` call from `grease_pencil_copy_data` resets inactive
layer again as locked before executing the drawing code. Since property
is only operated on layers, it is possible to remove the code from
`set_active_node()` and only have it in `set_active_layer()`.

Pull Request: https://projects.blender.org/blender/blender/pulls/129465
2024-11-12 09:09:28 +05:30
Falk David
0d1d3d12ba Fix: GPv3: Inconsistent behavior when adding a layer group
When a layer group was active, new groups would be created at
the top of the layer tree which is inconsistent with how layers are
added.

This fixes the behavior. When a group is active, newly added groups
are moved into that group.
2024-11-11 18:18:47 +01:00
Falk David
753e6952b9 Fix: GPv3: Inconsistent behavior when updating the active node after removal
The code that was updating the active node after removing a layer/group
was not handling all cases correctly.

The fix updates the logic for setting the active node:
1. If the node is a non-empty group and we're keeping the children, then set
the active node to the top node in the group.
2. Otherwise, if the node has a node below it (in the same group), set it to be the active one.
3. Otherwise, if the node has a node above it (in the same group), set it to be the active one.
4. Otherwise, if the parent is not the root group, set the parent to be the active node.
5. Otherwise, clear the active node.

This behaves the same as in Krita.

Pull Request: https://projects.blender.org/blender/blender/pulls/130126
2024-11-11 18:18:24 +01:00
Pratik Borhade
9a59372f07 Fix #130034: GPv3: Deleting root layer group leads to crash
The code was relying on the layer cache through `groups_for_write`/`layers_for_write`.
The `group->runtime->layer_group_cache_` stores all the child groups instead
of groups on first level. This leads to crash when recursively deleting
group i.e. group at third level has been deleted but `layer_group_cache_`
of first level group will still point to address of freed memory.

The fix removes the use of the cache and iterates over the direct
children in `group.children` and deletes them recursively.

Pull Request: https://projects.blender.org/blender/blender/pulls/130082
2024-11-11 17:54:59 +01:00
Hans Goudey
dd651ef5d6 Fix #130086: Weight/vertex paint non-deform modifiers wrong positions
The PBVH vertex positions accessor functions have to match the logic in
`sculpt_update_object`. When there were topology changing modifiers
before deform modifiers it didn't. `BKE_crazyspace_build_sculpt` just
skips the topology changing modifiers, and the resulting positions
are stored in `ss.deform_cos`, which we need to access here.

Pull Request: https://projects.blender.org/blender/blender/pulls/130139
2024-11-11 17:24:13 +01:00
Bastien Montagne
ac75e37c8e Fix #130113: Copying Object ID never copies its preview.
This was added 7 years ago as 'safe' preservation of previous behavior,
when ID copying was refactored and more control was added over its
behavior.

However, it was never removed since then, even though `NO_PREVIEW` flag
has been part of the `LOCALIZE` copying behavior since many years.

So time to remove this enforced bahevior and use the API as designed. If
this causes new issues, they will have to be fixed in code calling the
ID copy API (most likely by simply adding the `NO_PREVIEW` flag to the
copy options).
2024-11-11 16:13:37 +01:00
Falk David
4ba7950c2c Fix: GPv3: Memory leak with empty drawings array
The `BKE_grease_pencil_duplicate_drawing_array` function
would allocate memory for an empty array. This can be avoided.
2024-11-11 14:12:07 +01:00
Bastien Montagne
5caa74ebf3 Fix (unreported) mistake in code, leading to invalid memory access. 2024-11-11 11:43:47 +01:00
Falk David
6b6bd3bd8f Fix: GPv3: Groups sometimes loose their color tag
The copy constructor of the layer groups class was missing
the `color_tag`. This fixes the issue.
2024-11-08 16:36:36 +01:00
Lukas Tönne
449e7229f3 Fix #129749: Use consistent GPv3 color settings in different modes
Always use the Brush.color setting in the Draw mode side bar.
Technically the "Color" panel in the sidebar can draw in other modes,
but it's polling for explicit tools that limit it to the Draw mode
implicitly.

Use the appropriate brush or unified color in other GP modes based on
the unified paint settings flag.

Worth noting this was technically broken for a long time:
The default was that unified paint is disabled, so the GP panels would
use the brush color as expected. Enabling unified paint would then break
the colors, probably wasn't done very frequently since GP files
and e.g. mesh sculpting don't mix often. The default was changed in
#129127 to enable unified paint by default, which now breaks GP colors
by default.

Pull Request: https://projects.blender.org/blender/blender/pulls/129790
2024-11-08 10:21:24 +01:00
Bastien Montagne
320c77b963 Fix #123769: Assert when saving a file with deleted workspaces.
Delete sceens when their workspace is deleted.

Also remove `IDTYPE_FLAGS_NEVER_UNUSED` tag from bScreen ID type, there
is no more point to keep these IDs around if they are not used, there
are supposed to be mere sub-data of the Workspaces.

Pull Request: https://projects.blender.org/blender/blender/pulls/129975
2024-11-07 18:22:21 +01:00
Julian Eisel
d9748470fa Fix #125230: Issues when loading file with pinning gpencil brush material
Brushes and changes done to them are preserved now when loading
different files (until Blender closes). Unpin and clear the material
assigned to the brush when loading a different file, since this material
is local to the previous file.

Pull Request: https://projects.blender.org/blender/blender/pulls/128080
2024-11-07 15:52:16 +01:00
Bastien Montagne
0455dbcb4b Fix #129900: GPv3: Invalid handling of unused drawings removal.
Code detecting unused drawings and swapping them with a used one would
fail in a most basic case, leading to invalid state down the line:

```
[used_drawing, unused_drawing]
```

`unused_drawing` was not properly removed, as it is expected.

NOTE: Added an extra assert on (presumably) expected conditions of the
drawing indices and drawings array at the end of the process.

Co-authored-by: Lukas Tönne <lukas@blender.org>
2024-11-07 15:40:57 +01:00
Lukas Tönne
dc04d9abc7 Fix (unreported): GPv3: Incorrect user count for drawing at index 0
The `GreasePencil::update_drawing_users_for_layer` function was using an
incorrect drawing index check, skipping over drawing 0 every time.
As a consequence the first drawing may have zero users despite at least
one frame referencing it.

Pull Request: https://projects.blender.org/blender/blender/pulls/129955
2024-11-07 13:31:34 +01:00
Bastien Montagne
ca1353237f Fix #129797: bpy.data.libraries.write() is no longer saving the asset_data associated with the ID-block.
Do copy asset data when copying an ID into the PartialWriteContext.

Currently there does not seem to be any use-case where this would not be
the desired behavior. This can be made an optional behavior in the
future if needed.
2024-11-06 17:52:41 +01:00
Pratik Borhade
496023691c Fix: Unused parameter warning
Caused by 40162873e0

Pull Request: https://projects.blender.org/blender/blender/pulls/129910
2024-11-06 15:54:42 +01:00
Pratik Borhade
40162873e0 Fix #129632: GPv3: Vgroup operation edits drawings from all keyframes
Verge groups operations such as assign/remove/select/deselect from data
properties tab edits all drawings instead of visible drawings at current
frame. Now fixed with `retrieve_editable_drawings`.
For remove/remove_from operator, separate PR is created: !129890

Pull Request: https://projects.blender.org/blender/blender/pulls/129789
2024-11-06 04:16:48 +01:00
Bastien Montagne
6fb6cd64b1 Fix 'missing files' operator not reporting which ID is using the missing filepath.
No idea why this was not reported before... Kind of critical info here.

Committed directly to 4.2 as:
* This is trivial change with extremely small risk of causing issues.
* Gold team at the studio needs it to better cleanup the production
  files for publication.
2024-11-05 19:32:05 +01:00
Julian Eisel
fd2d2f225f Fix #128744: Reverting single essentials brush reverts all
Code used library reloading which would reload all data-blocks from a
data-block library. Since the essentials brushes are stored in a single
.blend file (one per mode), they would all be reset. In general this
violates the design where multiple brushes in a single .blend file
should be usable just fine. (A single file per brush is only necessary
to allow saving edits to that file without opening it.)

Instead of library reloading, delete the brush from the current file and
re-link it.

The link/append API should probably get support for reloading a single
data-block (and optionally its dependencies) but for now this is not
supported yet.

Pull Request: https://projects.blender.org/blender/blender/pulls/129866
2024-11-05 17:05:15 +01:00
Iliya Katueshenock
74f98b1e92 Fix: Geometry Nodes: crash when converting layers to instances
The crash/assert happened because the case when there are instances already was not handled.

Pull Request: https://projects.blender.org/blender/blender/pulls/127299
2024-11-05 11:05:28 +01:00
Sean Kim
426ed8c61e Fix #129425: Using Voxel Remesh in sculpt mode can crash
When using the Voxel Remesh operator, there are two possible sources of
crashes currently:
* TBB task stealing in nested parallel loops with thread local data
* Null dereference of PBVH data when pushing sculpt undo steps

To fix the former issue, this commit guards the
`threading::parallel_for` internal function with
`threading::isolate_task` to prevent possible task stealing and
corruption of the thread local data.

Additionally, it has the effect of fixing debug asserts inside
`array_utils::gather` due to the this task stealing.

To fix the latter issue, this commit adds a call to
`BKE_sculpt_update_object_for_edit` to ensure that this data is
populated.

Pull Request: https://projects.blender.org/blender/blender/pulls/129704
2024-11-04 19:50:34 +01:00
Philipp Oeser
bdfb3ea6e7 Fix #129727: GPv3: renaming bones does not rename vertex groups
First issue is that `BKE_modifiers_uses_armature` wasnt working for GP
objects and the second one is that vgroup names are stored in
CurvesGeometry for GP (so that needs special handling, now done, same as
in `BKE_object_defgroup_set_name`).

Pull Request: https://projects.blender.org/blender/blender/pulls/129794
2024-11-04 17:00:51 +01:00
Omar Emara
a1b489ec71 Fix #129670: Curves not drawn outside of clip range
Curve maps in nodes like RGB Curves are not drawn nor evaluated outside
of clipping range. This is a regression in 8812be59a4, where the range
of the curve didn't account for points that lie outside of the clipping
range. That's because the table_range variable was initialized before
the loop that updates the minimum and maximum points of the table.

To fix this, we move the table_range initialization after the loop that
updates the minimum and maximum points of the table.

Pull Request: https://projects.blender.org/blender/blender/pulls/129777
2024-11-04 16:11:43 +01:00
Campbell Barton
4df285ccd5 Cleanup: move function comments into headers or implementation notes
For C/C++ doc-strings should be located in headers,
move function comments into the headers, in some cases merging
with existing doc-strings, in other cases, moving implementation
notes into the function body.
2024-11-02 17:27:09 +11:00
Julian Eisel
a641001207 Fix: UI previews don't refresh outside of properties editor
The preview template (`UILayout.template_preview()`) to display previews
for materials, textures or similar would only work correctly in the
Properties editor. This had explicit logic to trigger rerendering on
changes. When displaying such previews elsewhere (e.g. in the 3D View
sidebar), the only way to have changes reflected would be by resizing
the preview.

This fix makes sure such previews are tagged as dirty and refreshed on
changes to the underlying ID. We do this the same way as tagging the ID
previews as dirty, through a function called by the dependency graph for
such updates.

Pull Request: https://projects.blender.org/blender/blender/pulls/129641
2024-11-01 15:25:24 +01:00
Falk David
e6ade18707 Fix #129266: GPv3: Layer Groups hide masks by default
Previously, we initialized the layers and groups to hide masks.
For layers this makes sense, because they don't have any masks
by default, but for groups it makes more sense to show masks
by default for all the layers inside.

Pull Request: https://projects.blender.org/blender/blender/pulls/129528
2024-10-31 15:38:54 +01:00
Campbell Barton
7a9d3e9973 Fix crash framing the camera to geometry in mesh edit-mode 2024-10-31 18:45:38 +11:00
Sean Kim
d1e78481e2 Fix #129519: Topology automasking stops working on multires level switch
The topology island cache needs to be freed when changing multires
levels so that it can be recalculated and be valid for a given level. To
fix this, this commit adds the `invalidate` call to the
`BKE_sculptsession_free_pbvh` method, which consolidates similar
lifecycle behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/129549
2024-10-29 22:32:53 +01:00
Sean Kim
1dd6cdb172 Fix #129334: Multires displays incorrectly in Sculpt mode with materials
Introduced in 853269aeb0

Prior to this commit, the PBVH partitioning process did not work
correctly for multires meshes with materials. Specifically, it failed
upon mapping the partitioned faces into their corresponding corners.

The rough process here is as follows:
* Flatten out the array of face indices into an array of corner indices.
* Sum up each `GridsNode` `prim_indices` corner count into an array.
* Create an `OffsetIndices` from these sums
* Use the `OffsetIndices` to slice the array created at the beginning
  to assign to each node.

However, this process requires that the main PBVH array of corner
indices has the same order as iterating over the nodes, which the
partitioning algorithm does not do.

To solve this, this commit iterates over the Node `prim_indices` `Span`s
in the same order that the nodes are stored when flatting out the
corner data, ensuring a correct mapping.

Pull Request: https://projects.blender.org/blender/blender/pulls/129392
2024-10-25 20:17:39 +02:00
Sean Kim
420a54a9e4 Fix #129373: Invalid "Cloth" asset shelf category appears in Sculpt mode
The catalog path was updated in
blender/blender-assets@88f1a1caf7 but was
not updated here, resulting in a category that had no effect when
toggled and was not visible in the larger tree view.

Pull Request: https://projects.blender.org/blender/blender/pulls/129387
2024-10-24 23:17:23 +02:00
Anthony Roberts
73974f7beb GPU Subdivision: Disable on Qualcomm GPUs on Windows
This resolves #124515 - albeit a little heavy handedly, as it disables 8cx Gen3 devices which work fine, but for the sake of code cleanliness, this should be okay.

Pull Request: https://projects.blender.org/blender/blender/pulls/129355
2024-10-24 11:55:48 +02:00
Lukas Tönne
71398478b2 Fix #128055: parentinv matrix uninitialized in old GPv2 files
In GPv2 the parentinv matrix is zero initially and only becomes valid
after setting the layer parent. This matrix must not be copied to the
GPv3 layers unless the parent is set.

In addition the parentinv matrix should also be computed when changing
the layer parent. This has been nominally added, except that a full
computation isn't possible without the actual grease pencil Object. This
means a local RNA property cannot update the parentinv matrix, this
needs to become a full-blown operator. The behavior now should be the
same as in GPv2 at least.

Pull Request: https://projects.blender.org/blender/blender/pulls/129304
2024-10-22 09:30:34 +02:00
Campbell Barton
f69fbb41c1 Fix #129225: Crash in modifiers & constraints with invalid enum values
Even though this is generally avoided, drivers don't prevent
invalid values being set. Further files from branches or files
written in the future may contain enum values not yet known.

Resolve by range checking enum values which are used to index arrays.
2024-10-22 15:56:58 +11:00
Falk David
83e562aad4 Fix #129247: GPv3: Removing material doesn't remap some materials correctly
The issue was that the code that remaps the materials for when
a slot is removed was returning when the `material_index` attribute
didn't exist instead of continuing the loop over all drawings.

This issue was present both in `BKE_grease_pencil_material_remap`
and `BKE_grease_pencil_material_index_remove`
but `BKE_grease_pencil_material_remap` forced the `material_index`
attribute to be created, which meant that the early return
was never hit.

The fix fixes both issues:
* Continue instead of return.
* Don't create the `material_index` attribute in `BKE_grease_pencil_material_remap`
  if it doesn't exist.

Pull Request: https://projects.blender.org/blender/blender/pulls/129288
2024-10-21 14:11:11 +02:00
Jacques Lucke
f729d98fa4 Fix #129269: can't load images packed into the .blend file
The issue only happened when compiling with clang which
apparently evaluated the parameters in a different order.

`IMB_steal_encoded_buffer` sets `ibuf->encoded_size` to 0.
2024-10-21 13:13:58 +02:00
Falk David
1906446716 Fix: GPv3: Newly added objects don't have the Use Lights setting set
The issue was that the code checked for the `OB_GPENCIL_LEGACY`
type instead of `OB_GREASE_PENCIL`.
2024-10-18 18:09:10 +02:00
Julian Eisel
c8e75c03c3 Grease Pencil: Enable available catalogs by default in asset shelf
In grease pencil draw mode, enable the Draw, Erase and Utilities
catalogs by default for the asset shelf, meaning they will show up as
tabs in the shelf. For grease pencil sculpt mode it's the Contrast,
Transform and Utilities mode (consistent with mesh sculpt mode).

This makes the assets of the corresponding types easily available, even
without requiring the "Filter Brushes by Tool" asset shelf option
enabled. It also makes the catalogs and the contained brushes more
discoverable as an organization helper.

These catalogs were added in 09bd5a5777.
2024-10-18 14:42:51 +02:00
Julian Eisel
3a708a27f9 Sculpt/Paint: Disable asset shelf filtering by tool by default
Disables the "Filter Brushes by Tool" toggle of the brush asset shelf
options by default.

After further feedback, we want to keep this option disabled by default.
It's useful to be able to access all brushes from the asset shelf,
regardless of what the active tool is. In many cases you'd see the asset
shelf with only one brush, which wastes space and isn't a good look
design quality wise. The following commit will also enable some more
asset catalogs by default which should be useful for filtering brushes,
and reduce the need for filtering by active tool.

So all things considered, while having this option is useful, it can
remain disabled by default.
2024-10-18 14:16:58 +02:00
John Kiril Swenson
d5d81c5078 VSE: Switch to box select default for timeline
PR #128051 made some improvements to code by cleaning up properties and
simplifying logic.

However, the default tool in most spaces is box select. By switching to
box select default, there should be more front-facing consistency across
spaces while still retaining near-identical behavior.

This patch would fix the small bug listed in #128671 while keeping the
simplified code benefits from #128051.

Also:
- Move selection keymap items up in the Sequencer (Global) keymap so it
  is more visible (similar to Node Editor ordering).
- Split `side_of_frame` property for ctrl press keymap item into a
  separate keymap item on ctrl click for both LCS and RCS to avoid
  clashing with ctrl+drag for box selects in RCS.

Pull Request: https://projects.blender.org/blender/blender/pulls/129028
2024-10-18 05:50:09 +02:00
Falk David
c539ea792c Fix: GPv3: Reduce draw tool performance regression
During the painting operation, the `GreasePencilDrawing` is updated in-place.
Previously, we simply tagged the whole drawing for a topology update.
This meant that the triangulation and curve normals were recomputed
for (pretty much) every new input sample.

Since the draw tool only creates one new stroke, we can copy the
triangulation of all the other strokes and only recompute the triangulation
of the newly drawn stroke(s).

First, a new `triangle_offsets_cache` is added that is lazily computed.
The computation for this should be pretty cheap.
Then, a new function `Drawing::tag_topology_changed(const IndexMask &curves_to_update)`
is added. This function takes an index mask of curves and only updates
their triangle cache. The cache for the other curves is copied.

In a test file with around 400k points, recomputing the triangle cache
(every input sample) took around 45ms. This meant that there was a noticable
drop in frame rate. With this patch, the time for each sample goes down to
less than 0.1ms. The frame rate feels much better.

But, drawing a longer and longer stroke still makes this time go up,
because the triangulation for the single stroke becomes more and
more expensive. This will have to be improved further.

Part of #124149.

Pull Request: https://projects.blender.org/blender/blender/pulls/129115
2024-10-17 15:28:44 +02:00
Jacques Lucke
1564e02a8f Fix #128994: crash when extracting point meshes
The domain interpolation can fail when e.g. converting from an
empty to a non-empty domain.
2024-10-17 13:15:54 +02:00