Commit Graph

112326 Commits

Author SHA1 Message Date
Jacques Lucke
4493842fe7 Cleanup: use ImplicitSharingPtr for volume tree sharing info
This avoids manual user management.
2024-08-16 17:45:25 +02:00
Jacques Lucke
cebffdc060 Cleanup: simplify using ImplicitSharingPtr for raw ImplicitSharingInfo 2024-08-16 17:36:29 +02:00
Jacques Lucke
eb8fb9e5a4 BLI: improve api for getting memory count
This introduces `MemoryCount` which can be used across multiple
`MemoryCounter`. Generally, `MemoryCount` is expected to live
longer (e.g. over the entire life-time of a cache), while `MemoryCounter`
is expected to only exists when actually counting the memory.
2024-08-16 17:20:19 +02:00
Jacques Lucke
37ca8347a2 BLI: support smart pointer for weak implicit sharing pointer
Previously, one always had to do manual user management for weak users.
2024-08-16 17:20:19 +02:00
Jacques Lucke
e40c3e5662 Geometry Nodes: add memory counting for bake state 2024-08-16 17:20:19 +02:00
Hans Goudey
4b71496f56 Fix #120145: mesh_new_from_object crash with evaluated object type change
When the preserve_all_data_layers argument was passed, the object
would be reevaluated, assuming the type of the original object data.
However, the evaluated object type can change compared to the
original, so to reevaluate the original mesh we need to check that
the original object was also a mesh object.

Pull Request: https://projects.blender.org/blender/blender/pulls/126407
2024-08-16 16:56:18 +02:00
Christoph Lendenfeld
ff0c097fa1 Fix #126140: Cycle aware keying not working
The issue was that the code path for layered actions never hit the
function `remap_cyclic_keyframe_location`.

The solution is to move that logic into `insert_vert_fcurve`.
My reason for why this is the correct solution is that
the remapping happens on a per FCurve basis, so it should be within `fcurve.cc`.
Doing so ensures that the layered actions also hit that code.

Pull Request: https://projects.blender.org/blender/blender/pulls/126399
2024-08-16 16:43:17 +02:00
Omar Emara
5e88a1466c Compositor: Support Viewer node in new CPU compositor
This patch supports the viewer node in the new CPU compositor. To do
that, the context viewer output mechanism was refactored to allow CPU
storage by utilizing the result class as opposed to a GPU texture.
2024-08-16 16:40:43 +03:00
Lorenzo Pierfederici
01d5581506 WM: Mark compatibility issues as fixed on save_as
The reasoning in the comment applies to "Save as..." as well, because
the destination file becomes the active one and opened data and active
file on disk match.

When saving a copy the active file is not updated, so existing
compatibility issues would remain.

Pull Request: https://projects.blender.org/blender/blender/pulls/126266
2024-08-16 15:05:51 +02:00
Lorenzo Pierfederici
d8ec92ed0b WM: Don't notify WM when file is saved as copy
When saving a copy, the active file remains unchanged so the "saved"
status and window title shouldn't be updated.
2024-08-16 15:05:47 +02:00
Bastien Montagne
5d0894f06a Packedfile reading: report filepath of missing packed file.
Can be useful info for users to rebuild missing data.
2024-08-16 15:04:21 +02:00
Bastien Montagne
7597f494b9 Fix #126147: Crash on reading blendfile with missing packed data.
Over the year, changes in how image packedfiles were handled broke the
fallback case of missing packed data in a few places, this commit fixes
proper cleanup of invalid packed files in the Image's list of
packedfiles.

In addition, also do not create inplicit sharing info when the read data
is `nullptr`.
2024-08-16 15:04:21 +02:00
Omar Emara
75cc1e4a15 Compositor: Add utility for 2D parallel for 2024-08-16 16:03:16 +03:00
Omar Emara
912284cfa3 Fix: GPU calls in CPU compositor
This patch removes an incorrect GPU call that shouldn't happen in the
CPU compositor, otherwise, it will cause a crash due to a missing
context.
2024-08-16 15:57:15 +03:00
Omar Emara
a54cf472c3 Compositor: Add utils for accessing pixel data 2024-08-16 15:55:29 +03:00
Hans Goudey
a4d94ee5d5 Fix #125565: Clear Parent & Keep Transform doesn't work in redo panel
The second time the operator ran without a depdency graph
evaluation happening for another reason, the object's evaluated
transform matrices weren't calculated. The fix is to make sure the
depsgraph is evaluated when the operator is executed.
2024-08-16 08:50:22 -04:00
Pratik Borhade
d1f0d71b54 GPv3: Few changes to invert weight operator
Cancel operator when active vgroup is locked.
Use new poll function to check if vgroup exists, otherwise grey out the
operator.
And some cleanup.
This addresses the points from !126275

Pull Request: https://projects.blender.org/blender/blender/pulls/126313
2024-08-16 13:18:26 +02:00
Christoph Lendenfeld
7547f1e59a Fix #126128: Possible to select invisible keys in the Graph Editor
The issue was that the animation filtering code for layered actions did not take
the `ANIMFILTER_FOREDIT` and `ANIMFILTER_SELEDIT` flags into account.

This also fixes another issue where it was possible to select and edit keys
on locked fcurves.

Pull Request: https://projects.blender.org/blender/blender/pulls/126373
2024-08-16 12:23:23 +02:00
Sean Kim
a2d6808a7a Revert "Fix: Sculpt: Correct asserts in previous commit"
This reverts commit 1602f82f28.

Original commit was correct, the affected functions are working on the
evaluated object, so we should assert that it is *not* the original
object.

Pull Request: https://projects.blender.org/blender/blender/pulls/126388
2024-08-16 06:50:16 +02:00
Campbell Barton
d71d325692 Cleanup: spelling in comments, strings 2024-08-16 09:33:20 +10:00
Sean Kim
e48f98efb0 GPv3: Add ReprojectMode enum and DrawingPlacement constructor
Needed to implement GPv3 version of "Bake Object Transform to Grease
Pencil"

Doesn't implement the `Surface` option, as that is not used in the
previously mentioned operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/126255
2024-08-16 01:32:13 +02:00
Hans Goudey
f6141b3fa7 Cleanup: Formatting 2024-08-15 16:14:23 -04:00
Hans Goudey
1602f82f28 Fix: Sculpt: Correct asserts in previous commit 2024-08-15 16:02:13 -04:00
Hans Goudey
f04fd1fad7 Refactor: Sculpt: Require depsgraph to access mesh positions
Part of #118145.
Similar to cfe69e32bc.
The dependency graph is required to access the evaluated object.
2024-08-15 15:43:17 -04:00
Hans Goudey
220cf67172 Cleanup: Improve object argument name
These functions expect an evaluated object which wasn't clear.
2024-08-15 13:09:28 -04:00
Hans Goudey
0adeeae2c7 Fix: Sculpt: Performance regression in expand operator
Caused by calculating the enabled vertices per node
in dd1454a648.
2024-08-15 12:44:49 -04:00
Hans Goudey
e7e1fd8a20 Fix: Sculpt: Incorrect overlay visibility check
Caused by 9eb7e8bfd1.
2024-08-15 12:44:49 -04:00
Hans Goudey
b793347b1d Sculpt: Specialize expand symmetry, sphere falloff
Parallelize the spherical falloff creation and use just a single
loop over all vertices rather than one per symmetry iteration.
2024-08-15 12:44:49 -04:00
Hans Goudey
3324a27334 Fix: Sculpt: Crash in vertex boundary test 2024-08-15 12:44:49 -04:00
Hans Goudey
294ea108f3 Sculpt: Parallelize some loops in expand operator
Parallelize loops to calculate max falloff and transfer
falloff from vertices to faces. These aren't a bottleneck
but performance should be slightly improved anyway.
2024-08-15 12:44:49 -04:00
Jacques Lucke
ab26dc5817 Nodes: add operator to get node width from parent
This operator sets the new default group node width (from e842966c5e) based on
the parent group node. This makes it easier to initialize the value. Without
this, one had to create and delete the group node potentially many times to find
a good default width.

Pull Request: https://projects.blender.org/blender/blender/pulls/126239
2024-08-15 17:54:56 +02:00
Hans Goudey
cfe69e32bc Refactor: Sculpt: Require object for position access
Part of #118145.
In preparation for removing the duplicated position arrays from the
pbvh::Tree structure, change the API functions that access the arrays
to require object arguments. This will allow retrieving data from the
original mesh or the evaluated deform mesh as necessary.

The pbvh code isn't really the right place for this, but neither is the
sculpt or paint code in my opinion, since this concept is not specific
to sculpting or painting. For now keep the API in the same place. It
probably makes sense to move a bunch of these functions at some point.

Pull Request: https://projects.blender.org/blender/blender/pulls/126370
2024-08-15 17:07:36 +02:00
Hans Goudey
df6034c869 Cleanup: Sculpt: Make positions span const 2024-08-15 09:53:22 -04:00
Aras Pranckevicius
8903205dd9 Fix: incorrect ffmpeg video length estimation logic
71f2229b0 added a workaround for video files that contain entirely
incorrect stream duration, and corrects that by using container
duration instead. However it used math of `seconds=frames*rate` instead
`seconds=frames/rate`, effectively always ending up falling back to
container instead of stream duration.

Pull Request: https://projects.blender.org/blender/blender/pulls/126368
2024-08-15 15:47:01 +02:00
Lukas Tönne
4e6dff2995 Cleanup: Use boolean operator to combine booleans instead of bitwise OR
There is a reason for the bitwise operator but it's not explained:
The attribute_foreach function callback has side-effects that the
compiler does not know about (everything is const). Simply replacing
the bitwise operator will cause the second term to be skipped, which
breaks tests due to missing attributes.

Now the term is explicitly evaluated first, then combined with actual
boolean operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/126366
2024-08-15 15:05:02 +02:00
Sergey Sharybin
d8913812ef Cleanup: Code format 2024-08-15 14:37:53 +02:00
YimingWu
4f4add5406 Fix #125426: Update paths in animation when renaming IDProperty
Previously when renaming an IDProperty the existing paths in the
animation/driver system isn't updated, this leads to missing animation
after renaming the property. Now `BKE_animdata_fix_paths_rename_all`
will be called so the animation system records the updated name.

Pull Request: https://projects.blender.org/blender/blender/pulls/125474
2024-08-15 13:56:17 +02:00
Jacques Lucke
bda4c8a220 Tools: improve error handling in GDB pretty printers 2024-08-15 13:40:05 +02:00
Christoph Lendenfeld
0a4b5d93c5 Fix #126125: Pose Slider not working with layered actions
The issues was that the `get_item_transform_flags` iterated over the `curves`
list of the action, ignoring the new structure.

Fixed by using the `action_foreach_fcurve` and modifying that to work on legacy actions as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/126357
2024-08-15 13:35:28 +02:00
Campbell Barton
da94978cc4 Cleanup: format 2024-08-15 21:26:12 +10:00
Campbell Barton
b5e0b59736 Cleanup: remove space around identifiers in C-style comments 2024-08-15 20:46:00 +10:00
Jacques Lucke
a8667aa03f Core: introduce MemoryCounter API
We often have the situation where it would be good if we could easily estimate
the memory usage of some value (e.g. a mesh, or volume). Examples of where we
ran into this in the past:
* Undo step size.
* Caching of volume grids.
* Caching of loaded geometries for import geometry nodes.

Generally, most caching systems would benefit from the ability to know how much
memory they currently use to make better decisions about which data to free and
when. The goal of this patch is to introduce a simple general API to count the
memory usage that is independent of any specific caching system. I'm doing this
to "fix" the chicken and egg problem that caches need to know the memory usage,
but we don't really need to count the memory usage without using it for caches.
Implementing caching and memory counting at the same time make both harder than
implementing them one after another.

The main difficulty with counting memory usage is that some memory may be shared
using implicit sharing. We want to avoid double counting such memory. How
exactly shared memory is treated depends a bit on the use case, so no specific
assumptions are made about that in the API. The gathered memory usage is not
expected to be exact. It's expected to be a decent approximation. It's neither a
lower nor an upper bound unless specified by some specific type. Cache systems
generally build on top of heuristics to decide when to free what anyway.

There are two sides to this API:
1. Get the amount of memory used by one or more values. This side is used by
   caching systems and/or systems that want to present the used memory to the
   user.
2. Tell the caller how much memory is used. This side is used by all kinds of
   types that can report their memory usage such as meshes.

```cpp
/* Get how much memory is used by two meshes together. */
MemoryCounter memory;
mesh_a->count_memory(memory);
mesh_b->count_memory(memory);
int64_t bytes_used = memory.counted_bytes();

/* Tell the caller how much memory is used. */
void Mesh::count_memory(blender::MemoryCounter &memory) const
{
  memory.add_shared(this->runtime->face_offsets_sharing_info,
                    this->face_offsets().size_in_bytes());

  /* Forward memory counting to lower level types. This should be fairly common. */
  CustomData_count_memory(this->vert_data, this->verts_num, memory);
}

void CustomData_count_memory(const CustomData &data,
                             const int totelem,
                             blender::MemoryCounter &memory)
{
  for (const CustomDataLayer &layer : Span{data.layers, data.totlayer}) {
    memory.add_shared(layer.sharing_info, [&](blender::MemoryCounter &shared_memory) {
      /* Not quite correct for all types, but this is only a rough approximation anyway. */
      const int64_t elem_size = CustomData_get_elem_size(&layer);
      shared_memory.add(totelem * elem_size);
    });
  }
}
```

Pull Request: https://projects.blender.org/blender/blender/pulls/126295
2024-08-15 10:54:21 +02:00
Sean Kim
f0c2d4eeed Cleanup: Add int8_t specifier to ED_grease_pencil.hh enum classes
Since these enums won't have more than 255 values, add the `int8_t` specifier.

Pull Request: https://projects.blender.org/blender/blender/pulls/126326
2024-08-15 10:15:06 +02:00
Christoph Lendenfeld
0f5dd1c55c Refactor: pose_utils.cc
No functional changes expected.

This PR refactors the code by:
* passing things by reference if they cannot be a `nullptr`
* Managing indentation by returning early or continuing.
* Cleaning up comments
* Indicating ListBase element types in the declaration

This is in service of #126125 for which the `get_item_transform_flags`
needs to be passed a slot handle as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/126291
2024-08-15 09:47:14 +02:00
Jeroen Bakker
00be586a82 Fix #124565: EEVEE Environment Render Pass
There were a couple of regressions when using the environment render
pass.

- Not working when film transparency was enabled
- Deferred geometry didn't occlude the background

This PR splits the world background shader (eevee_surf_world) into two
shaders. One clears background and render passes and a second one that renders
the background and the environment render pass.

The second shader is moved after the deferred pipeline and an early
depth test is used to occlude the background and environment pass.

NOTE: render test reference images needs to be updated.
Pull Request: https://projects.blender.org/blender/blender/pulls/126274
2024-08-15 08:58:41 +02:00
Jeroen Bakker
925753c83b Fix #125618: EEVEE: Cryptomatte Material Layer Incorrect
Missing oversight in previous fix where incorrect name size where
used to generate the cryptomatte hash.

Pull Request: https://projects.blender.org/blender/blender/pulls/126352
2024-08-15 08:41:12 +02:00
Campbell Barton
9e09351b5b Fix active theme behavior when adding/removing themes
Regression in [0] which displays the filename for the active
theme but still used the label internally.

This meant actions such as removing the theme would not always apply
to the name being displayed.

- Adding a new theme was not setting it active.
- Detecting if a theme was built-in used the run-time label as a lookup.
- Theme removal first require it to be re-selected.

[0]: 0bb6317035
2024-08-15 16:06:13 +10:00
Hans Goudey
6ca352a7b6 Refactor: Sculpt: Remove mesh pointer from BVH tree, pass to drawing code
Part of #118145.
Similar in concept to recent commits removing the usage of
this mesh pointer in favor of fetching the data as necessary.
Also see recent discussion in a recent fix for this area:
https://projects.blender.org/blender/blender/pulls/122850.

And also note the comment for `Tree::mesh_` was incorrect.
The mesh was the original mesh, not the evaluated mesh.
2024-08-15 00:24:12 -04:00
Hans Goudey
b7cbe4d959 Refactor: Sculpt: Pass object instead of SculptSession to vertex access
Part of #118145.
This makes it possible to remove the vertex position array from
the sculpt BVH tree.
2024-08-15 00:17:44 -04:00
Hans Goudey
ae8ecd6e4e Cleanup: Remove unused variables 2024-08-15 00:00:44 -04:00