Commit Graph

26708 Commits

Author SHA1 Message Date
Falk David
581a01a92d Fix: GPv3: "Chisel Marker" brush size pressure default
The `GP_BRUSH_PRESET_MARKER_CHISEL` did not set
the `BRUSH_SIZE_PRESSURE` flag. Now fixed.
2024-06-26 14:43:17 +02:00
Falk David
3a0236c889 Curves: Return empty span from offsets() if there are no curves
The function `CurvesGeometry::offsets()` would return a span pointing to
`nullptr` with a size of `1` if there were no curves in the geometry.

This was already changed for `offsets_for_write()` in
c3365666e5, which retuns an empty span.
Do the same for `offsets()` now.

Pull Request: https://projects.blender.org/blender/blender/pulls/123772
2024-06-26 14:38:48 +02:00
Campbell Barton
66e422f33d Merge branch 'blender-v4.2-release' 2024-06-26 14:27:40 +10:00
Campbell Barton
8b3ec86561 Merge branch 'blender-v4.2-release' 2024-06-26 14:27:38 +10:00
Campbell Barton
96906536db Extensions: add a Python API for user editable extension directories
Provide a convenient way to access a writable directory for extensions.
This will typically be accessed via:

  bpy.utils.extension_path_user(__package__, create=True)

This API is provided as some extensions on extensions.blender.org
are writing into the extensions own directory which is error prone:

- The extensions own directory is removed when upgrading.
- Users may not have write access to the extensions directory,
  especially with "System" repositories which may be on shared network
  drives for example.

These directories are only removed when:

- Uninstalling the extension.
- Removing the repository and its files.
2024-06-26 14:23:17 +10:00
Campbell Barton
f5aaee39d2 Extensions: prevent recursive file removal for corrupt repositories
When removing a repository & files a valid module name was assumed.
While this should always be the case, add an additional check so in
the unlikely event of memory/file corruption (especially `..`)
recursively removing files outside the repository is never allowed.
2024-06-26 14:22:21 +10:00
Hans Goudey
5998bab73f Cleanup: Sculpt: Remove unused PBVH is_drawing variable
The value was set and transfered to `MeshBatchCache`but never
actually used. Even then, this is clearly not a good solution to the
problem the comments mentioned. If that happens if would be
better to solve it in a different way.
2024-06-25 21:51:20 -04:00
Hans Goudey
9b9ed0a76d Refactor: Sculpt: Remove corner_tris reference from PBVH
Part of #118145.
2024-06-25 21:33:20 -04:00
Hans Goudey
59d6eae116 Sculpt: Reuse existing mesh triangles cache in sculpt mode
Addresses #121240.
Instead of allocating a new array and recalculating mesh triangulation
every time the user enters sculpt mode, reuse the mesh's existing cache.
Currently in order to avoid recalculating triangulation on every brush update
(which would typically be necessary because the triangulation direction
depends on vertex positions), add a mechanism to "freeze" the cache to
skip recalculations until the user exits sculpt mode. That even avoids
recalculation if vertex positions aren't affected. This is necessary because
we can't use the cache in a dirty state; tagging the cache dirty frees the
triangulation array.

Removing the duplicate triangles array reduces memory usage by 384 MB
in a 16 million vertex sculpt, and makes entering sculpt mode 125ms faster
(tested on a Ryzen 7840u).

In the long term, I hope we find a different solution that's a bit more
transparent and hopefully more integrated with the caching system
in general. In the meantime, this is a relatively safe low impact change
that helps document the needs for such a system anyway.

Pull Request: https://projects.blender.org/blender/blender/pulls/123638
2024-06-26 03:04:50 +02:00
Bastien Montagne
fa2c7ccdda Fix (unreported) memleak in some BKE tests in multi-binaries case.
Some tests would access system paths somehow, which implicitely creates
the static `m_systemPaths` variable, but would not explicitely call
`GHOST_DisposeSystemPaths` at the end to release it.

Noticeable when disabling the `WITH_TESTS_SINGLE_BINARY` option.
2024-06-25 17:51:31 +02:00
Bastien Montagne
b53ae4745c Merge branch 'blender-v4.2-release' 2024-06-25 16:43:23 +02:00
Bastien Montagne
fccdfa2b06 Fix (unreported) missing IDTypes init in lib_remapper tests.
This is usualy hidden it'd seem by the `WITH_TESTS_SINGLE_BINARY`
option.
2024-06-25 16:42:30 +02:00
Falk David
56566515d4 GPv3: Update default brush settings
This updates the settings in `BKE_gpencil_brush_preset_set`
to better match the behavior of the brushes in GPv2.

Changes:
* Use a default spacing of 100%. Only the airbrush and the rough pencil need a lower spacing (higher density).
* Use the pen pressure setting for the radius.
* Update the `draw_angle_factor` for the marker chisel.
2024-06-25 14:34:50 +02:00
Jeroen Bakker
50bda25f10 Cleanup: make format 2024-06-25 11:00:17 +02:00
Hans Goudey
4919b5681d Merge branch 'blender-v4.2-release' 2024-06-24 15:39:02 -04:00
Hans Goudey
1b80125a67 Fix: Leak of initialized but not pushed undo step
In some cases, sculpt code currently creates undo steps that are stored
in `step_init` in the undo stack, but then skips actually pushing them.
That can happen when an operator is cancelled (like the transform
operator in #123172) or because pushes in "nested operator calls"
are currently explicitly disabled. That happens when calling the brush
operator from a script.

It turns out the undo code never freed the `step_init`, probably because
it assumed it would be pushed to be part of the stack afterwards.

Personally I'm not convinced that separating undo step creation into
two stages with `step_encode_init` and `step_encode` is a great design
or a necessary one, but I'm trying not to get into that deeper right now.

Fixes #123172

Pull Request: https://projects.blender.org/blender/blender/pulls/123331
2024-06-24 21:38:21 +02:00
Bastien Montagne
65c5721c5a Fix (unreported): MEM_new/MEM_freeN mistaches.
Calling `MEM_freeN` on data allocated with `MEM_new` is bad, since it
will not call a destructor matching the one invoked as part of
`MEM_new`.

While in practice cases fixed below were 'not a problem' currently, as
they are trivial Cpp types (and therefore their destructor is doing
nothing), `MEM_freeN` has no way to ensure it is dealing with such a
trivial data type, so allowing such mismatch is dirty and dangerous.

Note that almost all fixed cases look more like unintentional mistakes
(mis-usages of `MEM_new` instead of `MEM_cnew`).

NOTE: There is one more (known!) case in the asset code, which fix is
slightly less trivial, and will go through a separate PR.

NOTE: This is a by-product of some work to detect such invalid usages of
`MEM_freeN` on memory chunks allocated with `MEM_new`.

Pull Request: https://projects.blender.org/blender/blender/pulls/123691
2024-06-24 18:42:26 +02:00
Devashish Lal
3e28b6c7f1 Nodes: File path socket subtype for string sockets
This commit adds a new socket subtype for the string socket type
for file paths. Like other subtypes, this doesn't influence the data
stored in the socket or passed between nodes, it adds a file browser
popup operator to the socket button in the node.

From the file import nodes GSoC project:
https://devtalk.blender.org/t/gsoc-2024-geometry-nodes-file-import-nodes/34482

Pull Request: https://projects.blender.org/blender/blender/pulls/123250
2024-06-24 16:28:33 +02:00
Hans Goudey
e14d153edf Cleanup: Formatting 2024-06-24 08:42:07 -04:00
Bastien Montagne
9688462349 Merge branch 'blender-v4.2-release' 2024-06-24 13:34:48 +02:00
Bastien Montagne
a94798d31c Fix (unreported) assert in recursive 'foreach id' iterating code.
owner ID pointer needs to be reset after initial usage, for the
recursively processed 'children' IDs.
2024-06-24 13:33:21 +02:00
Campbell Barton
07de3d4499 Merge branch 'blender-v4.2-release' 2024-06-23 14:50:05 +10:00
Campbell Barton
52b63777a1 Extensions: use the full path for remote "file://" repositories
The logic to use a domain name was being applied to file:// paths,
causing only the first directory to be used.
2024-06-23 14:35:06 +10:00
Campbell Barton
f6b48e18f5 Merge branch 'blender-v4.2-release' 2024-06-23 13:02:10 +10:00
Campbell Barton
7632c528de Docs: remove references to "above" in code comments & corrections
Reference identifiers instead of "above" in code comments as these
tends to become outdated. Even when declarations are removed it's at
least clear that the reference no longer exists instead of referring to
whatever is currently above the declaration.
It's also straightforward to search history for a removed identifier.

Corrected 4 cases of references to things that were no longer above
the doc-strings. Noticed other references which look to be incorrect
but need further investigation.
2024-06-23 12:14:19 +10:00
Jesse Yurkovich
096ab60a9c Merge branch 'blender-v4.2-release' 2024-06-21 11:53:50 -07:00
Jesse Yurkovich
9d8a90d53c Fix: Disable collection export for linked collections
If a non-instanced collection is linked, any collection exporters on the
linked collection would be active and invokable. This is probably not
desired as it could inadvertently overwrite files from the original.
Disable the operators in this case.

See PR for how each of the various append/link scenarios behave.

Pull Request: https://projects.blender.org/blender/blender/pulls/123149
2024-06-21 20:52:18 +02:00
Jacques Lucke
197c03c633 Merge branch 'blender-v4.2-release' 2024-06-21 15:54:41 +02:00
Jacques Lucke
e72730d763 Fix: assert when switching to sculpt mode
This is an alternative fix to #123524.

This is necessary, because `sculpt_update_object` is run after
the mesh is evaluated, but before the geometry depsgraph operation
is done. Only after this depsgraph node is done, `DEG_object_geometry_is_evaluated`
will return true.

This approach of `unchecked` methods has been preferred for now
over moving the call to `BKE_sculpt_update_object_after_eval`
to a separate depsgraph node or after depsgraph evaluation.
2024-06-21 15:19:10 +02:00
Weizhen Huang
f26e84098a Merge branch 'blender-v4.2-release' 2024-06-21 15:09:47 +02:00
Weizhen Huang
23e497d1af Fix: Memory leak in volume with packed file
Pull Request: https://projects.blender.org/blender/blender/pulls/123556
2024-06-21 15:08:55 +02:00
Dalai Felinto
49725106af Fix extensions update not showing on the status bar by default
Ref !123495
2024-06-21 12:30:10 +10:00
Pablo Vazquez
abb233dd1e VSE: Update theme colors for strips
Some of the existing colors were hard to read with the new
strips design.

Tried following the concept from 2.83 redesign rationale:
* Same saturation for regular strips.
* Lower saturation for effect strips.
* Tried to reduce the hue shift between certain similar effects.

Other changes:
* Match saturation of all regular strips.
* Reduce value and saturation (mostly value) of color tags so
  they are readable in both light and dark text.
* Image: Follow node editor Image node socket color.
* Color: Use the same hue as the color node socket.
* Text: Change it so it doesn’t use the same as Image.
* Sound: Use a greener color, less movie-like blue.
* Scene: Light gray, similar fashion to Collections.
* Other strips had minor adjustments.

Images and details in the pull request.

Pull Request: https://projects.blender.org/blender/blender/pulls/123446
2024-06-20 20:22:12 +02:00
Hans Goudey
89ba454fe8 Cleanup: Sculpt: Use const for original data undo nodes 2024-06-20 13:39:33 -04:00
Hans Goudey
385cc4fb3b Cleanup: Sculpt: Use references for SculptSession variables 2024-06-20 13:39:33 -04:00
Falk David
6226a66054 Fix: GPv3: Crash on conversion for files with editcurves
Blender would crash if it tried to convert a grease pencil
data-block with strokes that used the editcurve.

This was because of a wrong assertion that assumed
to work with a poly curve.

The fix moves the assertion to the correct place where
we handle the poly curves.
2024-06-20 16:01:25 +02:00
Jacques Lucke
a1a13bad06 Merge branch 'blender-v4.2-release' 2024-06-20 15:30:41 +02:00
Jacques Lucke
ada367a0e9 Fix #119589: use-after-free when accessing not-fully-evaluated object geometry
While the evaluated result is not well defined, we expect Blender to not crash
when there are dependency cycles.

The evaluation of one object often takes the evaluated geometry of another
object into account. This works fine if the other object is already fully
evaluated. However, if there is a dependency cycle, the other object may not be
evaluated already. Currently, we have no way to check for this and were mostly
just relying on luck that the other objects geometry is in some valid state
(even if it's not the fully evaluated geometry).

This patch adds the ability to explicitly check if an objects geometry is fully
evaluated already, so that it can be accessed by other objects. If there are not
dependency cycles, this should always be true. If not, it may be false
sometimes, and in this case the other objects geometry should be ignored. The
same also applies to the object transforms and the geometry of a collection.

For that, new functions are added in `DEG_depsgraph_query.hh`. Those should be
used whenever accessing another objects or collections object during depsgraph
evaluation. More similar functions may be added in the future.
```
bool DEG_object_geometry_is_evaluated(const Object &object);
bool DEG_object_transform_is_evaluated(const Object &object);
bool DEG_collection_geometry_is_evaluated(const Collection &collection);
```

To determine if the these components are fully evaluated, a reference to the
corresponding depsgraph is needed. A possible solution to that is to pass the
depsgraph through the call stack to these functions. While possible, there are a
couple of annoyances. For one, the parameter would need to be added in many new
places. I don't have an exact number, but it's like 50 or so. Another
complication is that under some circumstances, multiple depsgraphs may have to
be passed around, for example when evaluating node tools (also see
`GeoNodesOperatorDepsgraphs`).

To simplify the patch and other code in the future, a different route is taken
where the depsgraph pointer is added to `ID_Runtime`, making it readily
accessible similar to the `ID.orig_id`. The depsgraph pointer is set in the same
place where the `orig_id` is set.

As a nice side benefit, this also improves the situation in simple cases like
having two cubes with a boolean modifier and they union each other.

Pull Request: https://projects.blender.org/blender/blender/pulls/123444
2024-06-20 15:24:38 +02:00
Jeroen Bakker
af72c1f21d EEVEE: Light probe resolution
EEVEE stores light probes using octahedral mapping. Compared to the previous
cubemap storage octahedral has less pixels. The 64x64 is becoming useless
and can be removed. This PR also enables generating light probe maps upto 4k.

Some issues were found: the offset of the sphere inside the atlas
was always set to mipmap level 0 offset. This was hidden because of the texture
wrapping. Also the offset was substracted from the local texture
coordinate when calculating the direction of the pixel. Might be that due
to the incorrect offset (mipmap level 0), the latter issue was never detected.

Pull Request: https://projects.blender.org/blender/blender/pulls/123074
2024-06-20 15:02:11 +02:00
Brecht Van Lommel
a18ab98785 Fix #122131: Image undo issues with editable linked images
Store library filepath so we can find the right datablock.

Tested to work with the brush assets project branch, as this
currently does not affect anything in main.

Pull Request: https://projects.blender.org/blender/blender/pulls/123449
2024-06-20 14:13:50 +02:00
Jacques Lucke
a9a047c0e3 Core: use implicit sharing for PackedFile data
Found this bottleneck when checking #122281. With this patch, `ED_undo_pop` in
the provided file speeds up from `132 ms` to `18 ms`.

Pull Request: https://projects.blender.org/blender/blender/pulls/123243
2024-06-20 14:09:29 +02:00
Jacques Lucke
d3157699e2 BLO: remove unused packedmap from read file data
I found that `packedmap` is effectively unused when I worked on #123243.
The only function that wrote to it was `blo_make_packed_pointer_map`
and that is never called. Packed data already used the normal `datamap` as fallback.

Pull Request: https://projects.blender.org/blender/blender/pulls/123244
2024-06-20 13:51:48 +02:00
Sybren A. Stüvel
4c0a77ee8f Anim: avoid logged warnings when visiting layered Action in NLA evaluation
Avoid logging actions about `action->idroot` not matching, when evaluating
the NLA and visiting a layered Action. Layered Actions are not limited to
a single data-block type, and so the code should ignore `action->idroot`.
2024-06-20 10:05:34 +02:00
Sybren A. Stüvel
aa0e5368e7 Anim: add layered Action support to BKE_action_frame_range_calc()
Add layered Action support to `BKE_action_frame_range_calc()`, by
looping over all F-Curves of all Bindings in the Action.

Introduce `animrig::fcurves_all(action)`, which returns a vector of all
F-Curves in the Action, both for legacy and layered Actions.

No functional changes for legacy Actions.
2024-06-20 10:05:34 +02:00
Sybren A. Stüvel
54ed2a927e Refactor: Anim, simplify BKE_action_frame_range_calc()
Simplify `BKE_action_frame_range_calc()` by returning early and replacing
`short` with `bool`.

No functional changes.
2024-06-20 10:05:34 +02:00
Hans Goudey
90c4c48bbf Sculpt: Specialize mask gesture writing
Part of #118145.
Use the recently added utility for base mesh data, and for BMesh and
multires add a compromise that gets some benefits of simpler loops
but still avoids some duplication.

Also add move a recently added utility to only affect visible grid
vertices to the relevant header and reuse it. I expect this won't be a
permanent part of the API but for now it's better than duplicating
all the loops twice.
2024-06-19 13:56:47 -04:00
Hans Goudey
2639b1833c Sculpt: Avoid depsgraph evaluation when adding mask attribute
For base mesh sculpting, we already draw the original data instead of the
evaluated data, so the evaluated mesh doesn't have to be updated to
contain the new attribute. This is different from multires sculpting
because sculpt brushes and drawing only deal with the evaluated
SubdivCCG, not the original multires modifier data. Removing the
unnecessary update removes a noticeable pause when clearing and
adding a mask.
2024-06-19 13:56:47 -04:00
Falk David
bd67c3b8ef GPv3: Update names of layers in modifier filters when layer name changes
This adds additional logic to `GreasePencil::rename_node` to rename
the strings in the modifier influence data.

This is similar to how `ED_armature_bone_rename` handles renaming of
strings.

Resolves #123321.

Pull Request: https://projects.blender.org/blender/blender/pulls/123365
2024-06-19 18:57:09 +02:00
Falk David
60de2752be GPv3: Hide the paint cursor while drawing
This matches the behavior of GPv2. While drawing a stroke
the paint cursor is not shown.
2024-06-19 16:26:19 +02:00
Jacques Lucke
5b572bd913 Merge branch 'blender-v4.2-release' 2024-06-19 12:18:07 +02:00