Move the shader cache to `BKE_appdir_folder_caches`, since the
temporary folder is reset on Linux on every system restart.
Manually delete shader cache files on Blender exit if they have not
been used for more than 30 days.
Pull Request: https://projects.blender.org/blender/blender/pulls/125010
Request one separate compilation batch for each GPUPass so users can
get a better sense of the compilation progress, and to better distribute
texture loading over time.
Pull Request: https://projects.blender.org/blender/blender/pulls/125012
This gives users the ability to control the size of tooltip text
separately from other text styles. This is an accessibility issue
in that users with low vision can choose to make these larger than
the working text.
Pull Request: https://projects.blender.org/blender/blender/pulls/125147
Convert an image to grease pencil strokes by tracing features.
Uses the Potrace library to generate curve on averaged b/w values of the image.
Ported from the GPv2 feature of the same name.
Pull Request: https://projects.blender.org/blender/blender/pulls/125328
Instead just compute the offsets as necessary. This avoids the need
to keep them in sync as the BMesh changes, though it requires passing
a few more arguments in the dynamic topology remeshing code.
This log is owned by SculptSession, it's a bit misleading
to store a pointer to it in the sculpt BVH tree, and having
multiple mutable pointers to objects should generally be
avoided anyway. Now just pass it to the remeshing function
which is the oinly place it was needed anyway.
VSE has three mouse cursors defined, WM_CURSOR_LEFT_HANDLE,
WM_CURSOR_RIGHT_HANDLE, and WM_CURSOR_BOTH_HANDLES that are currently
always using our default cursor format. This format works on all
platforms but does not support multiple sizes or antialiasing. This
PR makes these use custom cursors (created by Pablo Vazquez) on the
Windows platform.
Pull Request: https://projects.blender.org/blender/blender/pulls/125252
Replace the `BKE_scene_cursor` functions with member functions
of the `View3DCursor` DNA struct. This makes using the cursor's
transform simpler, especially in newer C++ code.
Pull Request: https://projects.blender.org/blender/blender/pulls/124903
When typing to search an asset and confirming with enter, the popup
should close.
Mistake in 2781725734.
Steps to reproduce:
- Enter sculpt mode with the default cube active
- Press Shift+Space to open the brush asset selector popup
- Type to search for a brush
- Press enter -- the popup didn't close as it was supposed to
Caused by parallel access to static clipboard storage: Multiple threads
could end up calling `ensure_grease_pencil_clipboard()` in parallel.
Here this resulted in a surprisingly reliable memory leak.
Use a simple mutex lock to prevent unsynchronized access.
Steps to reproduce were:
- Add Grease Pencil object
- Enter grease pencil Sculpt mode
- Select Clone brush asset
- Click in 3D Viewport
- Quit Blender (see console log for leak reports)
Pull Request: https://projects.blender.org/blender/blender/pulls/125428
The fill tool's stroke extension feature has a "radius" mode that was
implemented by just drawing filled circles at the end of strokes.
This should work by creating additional lines instead, the circles are
just indicators of the search range.
The radius mode now does a KDTree search for points inside the circles.
It generates extra extension lines and handles these in the usual way,
just like lines generated in "extension" mode.
GPv2 had an undocumented curvature feature that would also add lines to
interior points if their curvature was large enough. This is quite
obscure, not mentioned in the manual, and adds complexity. For now the
feature is not implemented, but some placeholder TODO comments have been
added.
Pull Request: https://projects.blender.org/blender/blender/pulls/125420
Add an Action Slot selector to the Action editor's header, next to the
Action selector. The selector shows all slots in the action that are
suitable for animating objects (as the Action editor itself is limited
to showing the Action of the active object).
This also considerably simplifies the 'Animation Debug' panel, as some
debugging code has been removed, as well as the display of any animation
layers. The latter can be reintroduced (if necessary) when multi-layer
animation support is added. Most importantly, it removes the
WindowManager property that was used as a hack to assign layered Actions
to objects.
API change: the RNA property `AnimData.slot` is now a pointer property
that reflects the actual slot (it used to be an enum property).
Some small changes to the UI code were necessary to make the selector
show the slot's display name (and not their internal name).
Pull Request: https://projects.blender.org/blender/blender/pulls/125416
Use actual enum types (`eAnimEdit_Context` etc) for enum values in the
`bAnimContext` struct.
This commit also splits the `mode` field into `dopesheet_mode` and
`grapheditor_mode`, so that their values are clearly differentiated.
Before you'd have to check `spacetype` to know how to interpret this
field (but that wasn't described either). You still have to check that
field to know which one of the two you need to look at, but at least
it's now clear what values can be expected there.
No functional changes.
Pull Request: https://projects.blender.org/blender/blender/pulls/125423
Using the clone brush without previously having copied any stroke points
to clone would crash.
Steps to reproduce were:
- Add Grease Pencil object
- Enter grease pencil Sculpt mode
- Select Clone brush asset
- Click in 3D Viewport
Note that there's also a memory leak appearing now, will submit a
separate fix.
Pull Request: https://projects.blender.org/blender/blender/pulls/125425
The GPU compositor transforms are off by half a pixel in some cases.
That's because the realization shader was to perform transforms, and it
includes logic to move images by half a pixel if the domain and image
had different even/odd sizes. To fix this, we only move by half a pixel
if we are doing realization, while transforms are left as is.
Context menu operators to assign/change/remove shortcuts for brush
assets were missing. Reason being that the keymap to add them to and
look them up in was not detected correctly.
Part of #124418.
In the Action editor's channel list:
- always show the 'slot' icon on the left, to indicate the channel
represents a slot (icon design pending #123372), and
- show the slot's ID type icon on the right.
This should help reduce the confusion between "the ID name" and "the slot
name that animates the ID".
Pull Request: https://projects.blender.org/blender/blender/pulls/125314
This is only visible when text color has transparency or is fully
transparent. Desired behavior is that the outline would only be
"outside" the actual text.
Pull Request: https://projects.blender.org/blender/blender/pulls/125372
When the setting "Only Insert Available" is enabled and there is no action yet,
we can exit early because we know that it will not be possible to insert a keyframe.
This prevents an action from being created.
Co-authored by: Pratik Borhade
Pull Request: https://projects.blender.org/blender/blender/pulls/125408
There were two issues:
* The target layer name was not copied over
* The thickness setting was being divided by two when it
resulted in thinner strokes.
These functions can now be called on layered Actions:
- `action.fcurves.new(data_path, array_index)`
- `action.fcurves.find(data_path, array_index)`
- `action.fcurves.remove(fcurve)`
- `action.fcurves.clear()`
These will operate on the first keyframe strip (searching layers bottom
to top), and then its channelbag for the first slot.
If necessary, `fcurves.new()` will create the layer, keyframe strip,
channelbag, and slot.
This backward compatibility layer only kicks in if either of these is
true:
- The Action is empty AND the experimental flag is enabled, or
- The Action already has a layer or a slot (i.e. is already considered
'layered').
If none of these conditions hold, `action.fcurves` just gives access to
the legacy data.
Ref: #124714
Pull Request: https://projects.blender.org/blender/blender/pulls/124996
Rename leftover references to action 'bindings' to 'slot':
- Two comments, and
- bunch of `bind_` variable prefixes, renamed to `slot_`.
No functional changes.
Add `#ifdef WITH_ANIM_BAKLAVA` to the blend file reading/writing code,
so that the Action layers & slots are ignored when Blender is built
without experimental features.
This ensures that any loaded Action is just treated as 'legacy' (which
is the only kind of Action non-experimental Blender should have to deal
with), which will also properly deal with the forward compatible data
written by !125065.
This fix was committed on the `blender-v4.2-release` branch as
1b7485f20892523942752f81239807b2eab0f00b.
Pull Request: https://projects.blender.org/blender/blender/pulls/125068
This affected cursor snapping as well as the `Jump to Keyframes`
operator since both use `sum_selected_keyframes` to get the averaged
values of elements. It was already taking into account the normalization
factor, but the way a single `KeyframeEditData` was created from
multiple `bAnimListElem` was wrong:
- first, we should only add to it if we actually have some keys selected
(not a problem without normalization, but with it, we would add values
there
- second, the offset needs to be taken into account for each selected
key when adding to the absolute values
Could go into LTS probably
Pull Request: https://projects.blender.org/blender/blender/pulls/125221
This is visible in VSE text strip "box" and "outline" options at least.
For some fonts (mostly script/cursive type) BLF_boundbox function
was calculating horizontal bounds purely from pen position and
advance to the next character position. But the actual glyph can extend
beyond the advance distance.
Curiously, blf_font_boundbox_foreach_glyph (used by
blf_str_offset_from_cursor_position and blf_str_offset_to_glyph_bounds)
was already doing the correct thing and taking glyph horizontal bounds
into account.
Pull Request: https://projects.blender.org/blender/blender/pulls/125363
For meshes (in comparison to multires grids and BMesh) there is nothing
special about position, normals, or mask arrays. We can use the same
functions for gathering and scattering all the arrays. This also gives us
a somewhat nicer temporary solution for the issue of the `array_utils`
utilities using multithreading forcing us to use task isolation. Now the
brushes don't use those utilities.