Commit Graph

118968 Commits

Author SHA1 Message Date
Jacques Lucke
cf5a780e7e Fix: memory leak when evaluating closure 2025-04-14 12:21:33 +02:00
Brecht Van Lommel
72b5eff16c Fix: Remove bad ColorBand/CurveMapping/CurveProfile alloc in UI
This code should never get called, but if it did the memory would just leak
and not get stored anywhere.
2025-04-14 11:35:22 +02:00
Omar Emara
08e73814d7 Compositor: Turn Bokeh Image options into inputs
This patch turns the options of the Bokeh Image node into inputs.

Reference #137223.

Pull Request: https://projects.blender.org/blender/blender/pulls/137350
2025-04-14 11:26:55 +02:00
Andrej730
035c0c8606 Fix: PyDocs: document bpy_prop_collection.values() possible None values
Document `bpy_prop_collection.values()` possibility of having
`None` values, unlike `.items()` that seems returns only bpy structs as it's values.

Example snippet with `None` values:
```python
>>> C.object.data.materials
bpy.data.meshes['Cube'].materials
>>> type(C.object.data.materials)
<class 'bpy_prop_collection'>
>>> C.object.data.materials.append(None)
>>> C.object.data.materials.append(None)
>>> C.object.data.materials.append(None)
>>> C.object.data.materials.values()
[bpy.data.materials['Material'], None, None, None]
>>> C.object.data.materials.items()
[('Material', bpy.data.materials['Material'])]
```

Pull Request: https://projects.blender.org/blender/blender/pulls/137302
2025-04-14 11:26:04 +02:00
Pratik Borhade
062c5ab225 Fix #137385: Grease Pencil: Thickness modifier doesn't work with vgroup filter
Use `get_influence_vertex_weights` for thickness modifier. This returns
array of values 0 when group is empty (see `lookup_or_default`).
Function also controls the invert state for vertex group.

Pull Request: https://projects.blender.org/blender/blender/pulls/137455
2025-04-14 10:20:49 +02:00
Jeroen Bakker
b4028ee28f Fix #137395: Vulkan: Memory reset to early
A better solution to solve the memory leak needs to be checked. Partial
revert of 3c70758f00 as it can reset GPUs
or data buffers.
2025-04-14 09:45:14 +02:00
John Kiril Swenson
5a2a6da0a2 VSE: Blade Tool Cursor
This patch adds initial cursor support for the blade tool, with bitmaps
for 16x16, 24x24, and 32x32 cursors.

Additional Changes:
- Locked strips now show a "stop" icon when hovered over.
- Previously, the frame to split was truncated when clicking in between frames.
  Now, round to the closest frame.
- Previously, the blade operator was able to select padded strip handles
  outside of strip bounds. This bug has been resolved, so that selection with
  the blade tool can only happen via box-select passthrough.

Pull Request: https://projects.blender.org/blender/blender/pulls/136749
2025-04-13 22:49:18 +02:00
John Kiril Swenson
fe1e866fb9 VSE: Slip Operator 2.0
This patch completely reworks the slip operator from the ground up,
reorganizing code to be simpler and adding more clarifying documentation.

Major Changes:
- Add modal keymap to the operator along with an interactive status bar.
- Show offset overlays to the left and right of strips whenever slipping.
- Add option to "clamp" slipped strips.
- Rework input to be accumulative, avoiding "jumps" when transitioning in/out
  of precision mode.

Fixes:
- Properly draw header when initializing operator before any events have been
  sent, and reorganize event flow so that all events have an immediate effect.
- Properly clamp subframe slips.

More information in PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/137072
2025-04-13 22:40:46 +02:00
Campbell Barton
dbf6902a19 Fix #137314: Excluded directories ignored when opening from the splash
Regression in [0] which incorrectly swapped the check for the
`use_scripts` property being set with the value it was set to.

Resolve this error as well as the "Recover Last" operator
which never worked.

[0]: 8c688a052c
2025-04-13 12:25:44 +00:00
Campbell Barton
e113c5bb91 Fix: crash drawing poly-line gesture
Regression in [0], buffer overflow reading a short array as floats.

Support short array and fix glitch where the mouse cursor wasn't
included in the poly-line.

[0]: 9d4d1aea98
2025-04-13 22:08:14 +10:00
Jacques Lucke
223412b6d5 Geometry Nodes: name based internal links in Evaluate Closure node
Previously, internal links used the same heuristics as most other nodes. However,
this is more problematic here, because I intend to use the same internal links
for the case when no closure is connected. The behavior in this case should not
change in the future if we decide to change the heuristic for internal links for
muted nodes.
2025-04-13 12:27:01 +02:00
Jacques Lucke
d9a88ce34f Fix: bad index when setting default closure outputs 2025-04-13 12:01:47 +02:00
Jacques Lucke
294a676c59 Fix: Geometry Nodes: prevent evaluating closures recursively 2025-04-13 11:01:37 +02:00
Habib Gahbiche
b3a5d03bd0 Fix: 2D gizmo in 3D shows corner and rotation handles
Corner handles are visible for light gizmo in the 3D viewport:

This was an unintentional side effect of b148593c5d

Pull Request: https://projects.blender.org/blender/blender/pulls/137356
2025-04-12 21:13:32 +02:00
Harley Acheson
d6d6a7e36f Fix #137391: Do Not Restrict Marker Operations on Region Size
Remove the checks for region size in operator_markers_region_active as
that interferes too much. The only thing really interfering with
playhead movement when the area gets too narrow is MARKER_OT_select. So
this PR adds a new poll function for that in particular. That allows a
lot of simplification.

Pull Request: https://projects.blender.org/blender/blender/pulls/137399
2025-04-12 18:18:47 +02:00
Brecht Van Lommel
6655b16207 Refactor: Hydra: Use matching texture format
Vulkan can't convert all the types, so make them match to avoid needing to
do it in the first place.

Ref #135780, #133717

Pull Request: https://projects.blender.org/blender/blender/pulls/137375
2025-04-12 14:39:51 +02:00
Campbell Barton
5affe5fc6d Cleanup: spelling in comments (make check_spelling_*) 2025-04-12 19:31:29 +10:00
Campbell Barton
10e1aaf02c PyAPI: add imbuf.load_from_buffer to support loading images from memory
Add a Python wrapper for IMB_load_image_from_memory.
2025-04-12 18:56:12 +10:00
Campbell Barton
d700bc5f54 Cleanup: remove use of unsafe string functions 2025-04-12 18:42:44 +10:00
Campbell Barton
578bf16537 Fix: integer overflow in rect buffer filling on large buffers
Other changes include:

- Replace buffer out of bounds check with an assert
  (it was only done for the byte).
- Step over pixels on each X span
  instead of calculating the offset for each pixel.
- Use const variables.
2025-04-12 05:48:04 +00:00
Campbell Barton
a30eb69a99 Fix: integer overflow for pixel lookups on large images for geonodes 2025-04-12 15:10:43 +10:00
Campbell Barton
cce9b07965 Cleanup: use shared "dummy" enum items 2025-04-12 15:06:08 +10:00
Campbell Barton
900992da5c Fix: enum values not included in Python docs for NodeTreeTypes
Partially resolves #135228.
2025-04-12 04:32:33 +00:00
Campbell Barton
0fb6cc72fd Cleanup: add STRNLEN macros to prevent incorrect sizeof() use
Missed in recent cleanup.
2025-04-12 13:38:22 +10:00
Campbell Barton
9d5a823246 Cleanup: replace string copy & length with STRNCPY_RLEN 2025-04-12 13:33:48 +10:00
Campbell Barton
2c8bb61187 Cleanup: add STRNLEN macros to prevent incorrect sizeof() use
This would have prevented the error fixed in
be53bab1cb.
2025-04-12 13:03:01 +10:00
Campbell Barton
be53bab1cb Fix: sequencer text insert operator clamps string length
Incorrect use of sizeof() on a pointer instead of a char[] buffer
caused the maximum string length to be clamped to the size of a pointer.
2025-04-12 12:50:31 +10:00
Campbell Barton
fbcdb748cd WM: remove arbitrary path length limit for FS_CATEGORY_OTHER
Paths were checked for being at least 3 characters in length
before being added to FS_CATEGORY_OTHER.

It looks like this was originally done to prevent the preferences
attempting to add "//" paths which is now handled by `BLI_path_is_rel`.
As it happens the old logic prior to [0] was incorrect and asserted
if textures was set to "//textures" for example.

Now only check the path isn't empty.

[0]: 968f156fae
2025-04-12 02:23:49 +00:00
Campbell Barton
272414c096 Linux: hide the "/efi" mount point in the file-browser 2025-04-12 02:09:19 +00:00
Campbell Barton
219e6aa6d6 Linux: correct mount point prefix checks
Excluding "/boot" mount point would also exclude directories
beginning with boot, without being a sub-directory.

Resolve by adding a version of STRPREFIX that delimits on null
terminator or slash.
2025-04-12 12:09:18 +10:00
Campbell Barton
3b2c0b6cd5 Fix: integer overflows calculating the number of pixels
Note that moving to the templated versions of array allocation functions
in [0] caused integer overflow regressions because multiplying by the
`sizeof(type)` caused the following values to be cast to a size_t.

[0]: e85ebb24fe
2025-04-12 01:28:30 +00:00
Campbell Barton
309bdc491b Fix: integer overflow scaling large images 2025-04-12 11:04:53 +10:00
Harley Acheson
3f36ce297a Fix #137365: Do Not Return .notdef for Text Object Control Characters
For Text Objects make sure we don't render a glyph for tab or other
control characters. Return nothing for carriage return and line feed,
and treat the others as a space character.

Pull Request: https://projects.blender.org/blender/blender/pulls/137374
2025-04-12 02:43:00 +02:00
Campbell Barton
3bf92a6e83 Cleanup: rename nullptr to null for null-characters 2025-04-11 23:55:00 +00:00
Campbell Barton
f2e4b35589 Cleanup: rename UTF8 stripping arguments to avoid confusion 2025-04-12 09:50:14 +10:00
Campbell Barton
7e9aab9d57 Fix #137366: UI: wrong render slot names
Regression in [0] caused by passing in the size instead of the string
length to the UTF8 stripping function.

[0]: 94aabc0dbe
2025-04-12 09:50:14 +10:00
Harley Acheson
0354136775 UI: Minimum Height for Timeline Marker Operations
When Timeline (and similar editors) is reduced to a just the height of
two headers you can still change the play head. Except if you have any
markers and then marker selection operator interferes. This PR sets a
minimum area height for marker operations. This minimum differs if you
hide the header.

Pull Request: https://projects.blender.org/blender/blender/pulls/137312
2025-04-12 01:38:14 +02:00
Nicola
0373a4ef94 Sculpt: Add BVH node parent index to optimize bounds update
Previously, the BVH bounds were updated with a top-down approach
starting at the root. As explained in #136471, algorithms that visit
every node of the tree can become a bottleneck when sculpting high-res
meshes.

This patch refactors `flush_bounds_to_parents` by using a bottom-up
approach starting from the dirty leaf nodes. This requires calculating
and storing the parents of the nodes during the BVH build.

The change reduces the overhead measured in #136471 to near zero. The
same tests give the following results:

| Radius | Node Ratio | Speedup |
|--------------|---------|------------|
| 0.10m | 297 | 1.25x |
| 0.25m | 297 | 1.23x |
| 0.50m | 551 | 1.18x |
| 1.00m | 1930 | 1.13x |

where node ratio is the ratio between total nodes and nodes affected by
the brush. For reference, typical ratios when sculpting something like
a character are very roughly:

- tens when sculpting main forms
- low hundreds when sculpting secondary forms
- high hundreds to thousands when sculpting tertiary details

Pull Request: https://projects.blender.org/blender/blender/pulls/137019
2025-04-12 00:50:03 +02:00
Jesse Yurkovich
e45a13118d Fix #116612: Load in USD skeleton rest transforms
Import the initial set of rest transforms as the Armature's rest pose,
even if there's no animation for the bones. The rest transforms are
already being written out during export.

Pull Request: https://projects.blender.org/blender/blender/pulls/135079
2025-04-11 22:47:49 +02:00
Sean Kim
64a9b02644 Cleanup: Change parameters for SCULPT_brush_plane_offset_get
* Switches `Sculpt` for `Brush` since the former was just used to access
  the latter.
* Simplifies the code to a single ternary.
* Renames and moves the method into the ed::sculpt_paint namespace

Pull Request: https://projects.blender.org/blender/blender/pulls/137368
2025-04-11 22:39:37 +02:00
Clément Foucault
9990273d04 GPU: Change Type enum to use lower case values
This is to help for future resource declaration
using macros.

Rel #137261

Pull Request: https://projects.blender.org/blender/blender/pulls/137367
2025-04-11 22:39:01 +02:00
Jacques Lucke
aab2b6004b Geometry Nodes: add compute context cache
For various purposes we traverse the computation done by a node tree (e.g. for
gizmos and socket usage infeferencing). For that we generally have to keep track
of the compute context we're in at any given time. During the traversal, it's
common to enter and exist the same compute contexts multiple times. Currently,
we'd always build a new compute context when that happens. That happens even
though the old one is generally still around, because other data may reference
it. This patch implements a `ComputeContextHash` type that avoids rebuilding the
same compute contexts over and over again.

I'm considering to also replace the usage of `ComputeContextBuilder` with this
cache somehow, but will see how that works out.

The reason I'm working on this now is that I have to traverse the node tree a
bit again to find where closures might be evaluated. I wanted to be able to
cache the compute contexts for a while already.

Pull Request: https://projects.blender.org/blender/blender/pulls/137360
2025-04-11 21:36:41 +02:00
Nicola
3c51029ec7 Fix: Plane brush symmetry passes do not use the stabilized normal
The issue is the following:
- The stabilized normal for the main pass is calculated in
`calc_brush_plane`
- The normal is (wrongly) recalculated in `update_sculpt_normal`. This
is a common problem that other brushes have. The specific issue with the
Plane brush is that the recomputed normal is not stabilized.
- For symmetry passes, this non-stabilized normal is then assigned to
the brush in `calc_brush_plane`

This PR fixes the issue by explicitly returning false in
`sculpt_brush_needs_normal` when the Plane brush is used. A more proper
refactor would be needed, but this can easily be ported to 4.4.

Pull Request: https://projects.blender.org/blender/blender/pulls/137271
2025-04-11 21:08:50 +02:00
Hans Goudey
0ee5e6ded7 Depsgraph: Use C++ Stack class
Use `blender::Stack` instead of `BLI_Stack`. Theoretically this can
improve performance because it makes use of inlining to remove function
call overhead and give the compiler more information. I observed a build
time improvement of about 4%, from 1156 to 1113 ms with 30k cube objects.
Notably, now `deg_graph_flush_visibility_flags` doesn't call any
non-inlined functions.

Pull Request: https://projects.blender.org/blender/blender/pulls/137355
2025-04-11 19:55:17 +02:00
Sean Kim
9d57b947d9 Fix: Radial symmetry caculation for planar brushes incorrect
Introduced in e41ed565ff

Pull Request: https://projects.blender.org/blender/blender/pulls/137325
2025-04-11 19:21:14 +02:00
Sean Kim
84f29a0e72 Refactor: Extract plane brush node calculation to plane.cc
This commit renames the `types.hh` file to `brushes.hh` as an attempt to
make brush implementations more independent and begin to unwind and
remove much of the logic in `sculpt.cc`.

As a first step, this moves the node mask calculation exposed for the
plane brush into `plane.cc` and exposes the function header into
`types.hh`.

Pull Request: https://projects.blender.org/blender/blender/pulls/137020
2025-04-11 19:20:22 +02:00
Clément Foucault
bb52754652 GPU: Use f suffix for float literals
They are actually already some literals with the `f` suffix
that are in our shader codebase and we never had problem in
the past 5 years (or even 8 years).

So I think it is safe to do and improves convergence of codestyles.

Pull Request: https://projects.blender.org/blender/blender/pulls/137352
2025-04-11 18:28:45 +02:00
Jacques Lucke
183dfa68c9 Geometry Nodes: log closure evaluations
The goal is to log information about which closures are evaluated where. This
information is not exposed in the UI yet, but will be needed to be able to debug
the evaluation and inspect socket values within closures.

Pull Request: https://projects.blender.org/blender/blender/pulls/137351
2025-04-11 17:58:40 +02:00
Miguel Pozo
7554ceba2b Fix: Metal: textureGather
Metal doesn't support the last textureGather parameter.
2025-04-11 17:22:12 +02:00
Hans Goudey
d1df97bd48 Depsgraph: Use LinearAllocator to allocate Relations
I observed allocation becoming a bottleneck when building the depsgraph
with scenes with many simple data-blocks. One of the main culprits was
the struct that encodes relations between nodes in the graph.

Instead of allocating each `Relation` with a separate allocation call,
combine them into a `LinearAllocator`. That is must faster because it
allocates in large chunks and just bumps an offset on each allocation.

In a test file with 30 thousand cube objects, I observe a 1.18x
improvement in depsgraph evaluation time, from 1370 to 1163 ms.

The depsgraph isn't completely re-allocated when it's rebuilt, so the
allocator added in this PR has to be cleared manually. In the future,
it can be used for other structs or potentially strings.

Pull Request: https://projects.blender.org/blender/blender/pulls/137303
2025-04-11 17:14:07 +02:00