Commit Graph

27770 Commits

Author SHA1 Message Date
Hans Goudey
31964ef5ca Cleanup: Move BLI_kdopbvh to C++
Pull Request: https://projects.blender.org/blender/blender/pulls/132031
2024-12-17 21:04:55 +01:00
Bastien Montagne
ef0fcab8b7 Add command-line option to not do liboverride autoresync on fileload.
The new --disable-liboverride-auto-resync commandline option will prevent
running liboverride auto-resync immediately after loading a blendfile.

This is an alternative way to setting the User Preferences Debug option
`No Override Auto Resync`.

-------

Some quick performances tests:
Loading a Gold production file goes from 26.5s to 25.9s.

Combined with the recent `--disable-depsgraph-on-file-load` option, it
goes from 3.5s to 2.9s, so another nice extra 15% speedup when only
bare-metal blendfile loading is needed.

Pull Request: https://projects.blender.org/blender/blender/pulls/132017
2024-12-17 18:59:49 +01:00
Falk David
94120967e7 Curves: Realize Instances: Use attribute fallback values
The realize instances code didn't have a way to use the existing
`#BuiltinAttributeProvider::default_value()`s to initialize attributes that
have to be created.

Now this writes default values of builtin attributes to the curve `attribute_fallbacks`.
Removes the need for the code to explicitly write the `resolution` and
`nurbs_weight`.

The other attributes that are written explicitly (like `radius`) don't have
builtin default values unfortunately. Ideally those would also just be provided
by the respective `BuiltinAttributeProvider`.

Pull Request: https://projects.blender.org/blender/blender/pulls/131799
2024-12-17 18:54:10 +01:00
Falk David
5beff80118 Fix: Grease Pencil: Undefined truncation behavior in legacy conversion
The `double inittime` attribute on strokes is truncated to a `uint32_t`
range. This wasn't done explicitly and the code only did a cast.

The `double` should be clamped to a legal `uint32_t` value before
casting it.

Pull Request: https://projects.blender.org/blender/blender/pulls/131625
2024-12-17 18:45:47 +01:00
Sebastian Parborg
2107dc591e Fix: Jack and Coreaudio would try to sync the scene frame twice
The code tried to sync the playback to audio in two places:
1. In the screen_animation_step_invoke function in screen_ops.cc
2. In wm_event_do_handlers which would trigger on every screen refresh/event

However because of some oversight on how the Audaspace API worked,
the wm_event_do_handlers code was only triggered for JACK and CoreAudio.

Remove this code as we shouldn't need to update the current scene frame
in two places.

The wm_event_do_handlers way would also lead to bugs as it would try to
sync regardless if we were playing back audio or not.
2024-12-17 17:49:06 +01:00
Hans Goudey
75ede253aa Cleanup: Remove unused Grease Pencil legacy code 2024-12-17 11:43:34 -05:00
Jacques Lucke
95852bf42b Fix #107882: subdivided mesh not available on curve
The type check there should not be necessary anymore nowadays. It looks like it
might have been necessary when it was introduced in
eed45d2a23. Back then the object was still passed
into `BKE_mesh_wrapper_ensure_subdivision`.

Pull Request: https://projects.blender.org/blender/blender/pulls/131857
2024-12-17 15:34:16 +01:00
Jacques Lucke
6924be003e Fix #101615: node group pulls in unnecessary data-blocks when linked
The issue here was sometimes an output socket of a `Group Input` node has a
reference to a data-block. The value stored on these output sockets are never
used, and thus is not exposed in the UI which made it impossible for the user to
find that there still is a data-block reference.

The root cause for this seems to have been fixed a few releases ago. I can
reproduce that the pointer was set in 3.3, but not in 3.6.

This patch only adds some versioning to remove the unnecessary data-block
references to fix old files that might have this issue (e.g. the file from the
report).

Pull Request: https://projects.blender.org/blender/blender/pulls/131900
2024-12-17 15:28:57 +01:00
Jacques Lucke
72b4e137c3 Cleanup: use std::function instead of C function pointer 2024-12-17 15:00:06 +01:00
Jacques Lucke
0e28920bd8 BLI: change default hash-table clear behavior
Previously, calling `clear()` on `Map`, `Set` or `VectorSet` would remove all
elements but did not free the already allocated capacity. This is fine in most
cases, but has very bad and non-obvious worst-case behavior as can be seen in
#131793. The issue is that having a huge hash table with only very few elements
is inefficient when having to iterate over it (e.g. when clearing).

There used to be a `clear_and_shrink()` method to avoid this worst-case
behavior. However, it's not obvious that this should be used to improve
performance.

This patch changes the behavior of `clear` to what `clear_and_shrink` did before
to avoid accidentally running in worst-case behavior. The old behavior is still
available with the name `clear_and_keep_capacity`. This is more efficient if
it's known that the hash-table is filled with approximately the same number of
elements or more again.

The main annoying aspect from an API perspective is that for `Vector`, the
default behavior of `clear` is and should stay to not free the memory. `Vector`
does not have the same worst-case behavior when there is a lot of unused
capacity (besides taking up memory), because the extra memory is never looked
at. `std::vector::clear` also does not free the memory, so that's the expected
behavior. While this patch introduces an inconsistency between `Vector` and
`Map/Set/VectorSet` with regards to freeing memory, it makes them more
consistent in that `clear` is the better default when reusing the data-structure
repeatedly.

I went over existing uses of `clear` to see if any of them should be changed to
`clear_and_keep_capacity`. None of them seemed to really benefit from that or
showed that it was impossible to get into the worst-case scenario. Therefore,
this patch slightly changes the behavior of these calls (only performance wise,
semantics are exactly the same).

Pull Request: https://projects.blender.org/blender/blender/pulls/131852
2024-12-17 13:35:07 +01:00
Aras Pranckevicius
59871814ff Cleanup: remove various mentions of "realtime compositor"
Some variable renames, some comment edits.

Pull Request: https://projects.blender.org/blender/blender/pulls/132014
2024-12-17 13:00:50 +01:00
Aras Pranckevicius
496a3749d7 Cleanup: rename namespace realtime_compositor->compositor
Pull Request: https://projects.blender.org/blender/blender/pulls/132008
2024-12-17 11:39:04 +01:00
Bastien Montagne
84c8ce9b40 Add option to not build depsgraph on file load in background mode.
The new `--disable-depsgraph-on-file-load` commandline option, when used
together with the `--background` or `--command` ones, will prevent
building a depsgraph immediately after loading a blendfile.

The goal is to improve performances of batch-processing of blendfiles by
python scripts. It is intended to become the default behavior in Blender
5.0.

Scripts requiring evaluated data then need to explicitly ensure that
an evaluated depsgraph is available (e.g. by calling
`depsgraph = context.evaluated_depsgraph_get()`).

------

This disables the call to `wm_event_do_depsgraph` in `wm_file_read_post`.

Some quick performances tests:
* The whole `blendfile_versioning` tests gain about 2% speedup. These are
almost always small and simple blendfiles.
* Loading a Gold production file however goes from 26.5s to 3.5s (almost
90% faster) when this new option is specified.

Pull Request: https://projects.blender.org/blender/blender/pulls/131978
2024-12-16 19:05:29 +01:00
Jacques Lucke
b8228303bc Materials: take object and geometry material slot counts into account
Previously, the number of material slots on the geometry (e.g. mesh) was the
ground truth. However, this had limitations in the case when the object had more
material slots than the evaluated geometry. All extra slots on the object were
ignored.

This patch changes the definition so that the number of materials used for
rendering is the maximum of the number of material slots on the geometry and on
the object. This also implies that one always needs a reference to an object
when determining that number, but that was fairly straight forward to achieve in
current code.

This patch also cleans up the material count handling a fair amount by using the
`BKE_object_material_*_eval` API more consistently instead of manually accessing
`totcol`. Cycles uses the the same API indirectly through RNA.

Pull Request: https://projects.blender.org/blender/blender/pulls/131869
2024-12-16 18:08:06 +01:00
Campbell Barton
6b75a8206b Cleanup: remove comments referencing Nurb::trim & redundent #undef 2024-12-15 16:39:08 +11:00
Campbell Barton
7e86f188fb Cleanup: variable naming in vfont_curve.cc
UNICODE code points were named "ascii" or "cha",
use the term "charcode" as used elsewhere in BLF and FreeType.

Also use char32_t internally and add a utility function to apply the
small-caps flag.
2024-12-15 16:12:32 +11:00
Campbell Barton
2f3c768208 Cleanup: add/improve code comments for vfont_curve.cc 2024-12-15 15:41:14 +11:00
Campbell Barton
2336b7c6f8 Cleanup: extract vfont character lazy initialization into a function
Sligly reduce the complexity of vfont_to_curve().
2024-12-15 15:41:12 +11:00
Jacques Lucke
b33a7ca6e8 Cleanup: quiet warning 2024-12-14 14:12:01 +01:00
Campbell Barton
bcfeeeecda Fix #122466: Underlines on Text objects have overlapping geometry
Resolve by welding overaps between adjacent underline glyphs.

Besides avoiding overlap, this makes underlines work better when the
text follows a curve.

Also remove increased underline width which was originally added in [0].
This may have been done to avoid gaps - which is no longer needed.
Further, underlines typically don't extend beyond the glyphs bounds
so the increased width isn't expected behavior.

[0]: a07394ef2c
2024-12-14 23:32:24 +11:00
Campbell Barton
57ba4c4892 Cleanup: use more descriptive variable names for character building
Also improve const correctness.
2024-12-14 23:17:50 +11:00
Campbell Barton
94d39aac0c Cleanup: spelling (make check_spelling_*) 2024-12-14 23:17:49 +11:00
Campbell Barton
c1951f6508 Cleanup: remove unused variables 2024-12-14 23:17:48 +11:00
Jacques Lucke
ebfbc7757b Fix #128589: allow disabling node group interface UI for custom node tree types
This adds a new `bl_use_group_interface` property that can be set on custom node
group types. By default it is `true` to avoid this being a breaking change. If
it's set to `false` some UI elements related to the built-in node group
interface are hidden.

Pull Request: https://projects.blender.org/blender/blender/pulls/131877
2024-12-14 11:51:19 +01:00
Campbell Barton
ff2805fd79 Cleanup: improve naming consistency & use doxy groups for vfont* sources 2024-12-14 16:18:00 +11:00
Campbell Barton
c1e275b334 Cleanup: split vfont curve & text layout into its own file
Refactoring functions out of the 3D text layout funciton was
becoming difficult because vfont.cc mixed API's that use VFont
for different purposes (clipboard, text layout, ID management.. etc).

Split VFont to character & text layout into its own file.
2024-12-14 16:18:00 +11:00
Campbell Barton
bbc4cfba6a 3D Text: use placeholder glyph, resolve error handling inconsistencies
Resolve multiple inconsistencies when 3D text could not load fonts.

- When the font wasn't found:
  The default font was used.

- When the font existed but could not be loaded:
  The 3D text would fail to display anything.

- When only the VFont assosiated with a style failed to load:
  The 3D text would fail to display only when the stype existed.

  So toggling bold for example could cause all 3D text to vanish.

Instead of falling back to defaults, display a placeholder glyph
(a hollow rectangle) displayed when the font can't be used.

For the UI fallbacks are fine, for user content, it indicates something
is wrong as needs to be corrected - similar to a bright magenta in
renders when images fail to load. This means it's clear to users when
they have broken paths which need to be corrected.

This also simplifies vfont_to_curve, removing a "goto" to go to the
end of the function to cancel 3D text rendering entirely.
2024-12-14 13:41:37 +11:00
Campbell Barton
569ff08de0 Refactor: move VFontData metrics into their own struct
Prepare to support default metrics for placeholder text.
2024-12-14 13:32:19 +11:00
Jacques Lucke
6217f68d88 Fix #122683: wrong internal links in Capture Attribute node 2024-12-13 21:29:00 +01:00
Jacques Lucke
b3a06149bb Fix #127713: propagate materials in Curve to Mesh node
This adds material propagation in two places to fix the bug:
* Conversion from legacy to new curves.
* From the main curve input to the output mesh in the Curve to Mesh node.

Pull Request: https://projects.blender.org/blender/blender/pulls/131862
2024-12-13 19:36:54 +01:00
Sybren A. Stüvel
efd2e762f7 Refactor: Core, give the IDWALK_CB_… enum an explicit name
Give the `IDWALK_CB_…` enum an explicit name:
`LibraryForeachIDCallbackFlag`. This way the flags are type-safe, and
it's known where values come from. This is much preferred (at least by
me) to just having `int flags`.

Uses of `0` have been replaced with `IDWALK_CB_NOP` as that has the same
value and is of the right type.

One invalid use of `IDWALK_NOP` was detected by this change, and is
replaced by `IDWALK_CB_NOP`.

This change might be incomplete; I gave the enum a name, fixed the
compiler errors, and then also updated assignments like `int cb_flag =
cb_data->cb_flag`. I might have missed some assignments to `int` though.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/131865
2024-12-13 17:32:24 +01:00
Sybren A. Stüvel
8dd1eb4e8f Refactor: Core, give the IDWALK_… enum an explicit name
Give the `IDWALK_…` enum an explicit name: `LibraryForeachIDFlag`. This way
the flags are type-safe, and it's known where values come from. This is
much preferred (at least by me) to just having `int flags`.

Uses of `0` have been replaced with `IDWALK_NOP` as that has the same value
and is of the right type.

One invalid use of `IDWALK_CB_NOP` was detected by this change, and is
replaced by `IDWALK_NOP`.

This change might be incomplete; I gave the enum a name, and then fixed
the compiler errors.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/131865
2024-12-13 17:32:24 +01:00
Jacques Lucke
c36567d156 Revert "Materials: take object and geometry material slot counts into account"
This reverts commit 47c255e2da.

There are unexpected problems with mesh rendering. Looks like some `max(1, ...)`
are missing.
2024-12-13 16:54:08 +01:00
Hans Goudey
87a1984b96 Cleanup: Rename node "totr" to "draw_bounds"
Pull Request: https://projects.blender.org/blender/blender/pulls/131864
2024-12-13 16:51:56 +01:00
Hans Goudey
f8b914e004 Cleanup: Remove unused node preview variables
These were only written to, never read.
2024-12-13 10:27:11 -05:00
Jacques Lucke
47c255e2da Materials: take object and geometry material slot counts into account
Previously, the number of material slots on the geometry (e.g. mesh) was the
ground truth. However, this had limitations in the case when the object had more
material slots than the evaluated geometry. All extra slots on the object were
ignored.

This patch changes the definition so that the number of materials used for
rendering is the maximum of the number of material slots on the geometry and on
the object. This also implies that one always needs a reference to an object
when determining that number, but that was fairly straight forward to achieve in
current code.

This patch also cleans up the material count handling a fair amount by using the
`BKE_object_material_*_eval` API more consistently instead of manually accessing
`totcol`. Cycles uses the the same API indirectly through RNA.

Pull Request: https://projects.blender.org/blender/blender/pulls/131761
2024-12-13 15:47:04 +01:00
Hans Goudey
bd8edc7c27 Fix #91917: Animation editor useless names for nodes & geometry nodes
This PR improves the animation editor's display of node socket property
animation names, and names from geometry nodes modifier inputs. In both
cases, the names currently displayed are not very useful.

For geometry nodes inputs, the we now look up the name of the the input
rather than just displaying the identifier from the IDProperty name.

For node sockets, we now display the name of the socket instead of just
"Default Value" (which is technically the name of the RNA property).
We also display the label of the node if it's available. We also display
node labels instead of names for node properties.

Pull Request: https://projects.blender.org/blender/blender/pulls/131766
2024-12-13 15:25:03 +01:00
Sybren A. Stüvel
d426813da4 Cleanup: Node tree: document animatability assumption of embedding ID
Add a comment that documents the assumption that a node tree can only be
embedded by animatable ID types. At this moment this assumption holds.

`blender::animrig::internal::rebuild_slot_user_cache()` uses this for an
optimisation. It fully skips all non-animatable IDs, and would therefore
also not see any hypothetically animated node tree embedded in a
non-animatable ID type.

Pull Request: https://projects.blender.org/blender/blender/pulls/131844
2024-12-13 15:16:21 +01:00
Campbell Barton
c16f56c219 Cleanup: remove unused VChar::index
Also use a uint for the character argument since there is no reason
to use a larger type than a 32 bit integer.
2024-12-13 16:50:23 +11:00
Campbell Barton
c9886ca90a VFont: correct log ID 2024-12-13 12:59:15 +11:00
Campbell Barton
5ce10722ab Revert "Fix #122808: Use Default Font when Vfont Missing"
This reverts commit 26ea1f42c3.

In line with [0] which prevents default characters from being used when
a font is selected, don't return characters from the default font when
the font cannot be loaded.

This should be addressed using place holder characters instead.

[0]: 6fa5295c1d
2024-12-13 12:57:37 +11:00
Campbell Barton
48bf2c08b7 Fix experemental preference use when "Developer Extras" is disabled
When "Developer Extras" is disabled, the experemental options
must not be used.

Some checks for experemental options weren't using the macro which
checks both are set.

Add comment to avoid this happening in the future.
2024-12-13 11:25:39 +11:00
Hans Goudey
da8ecea151 Refactor: Nodes: Move socket field status to array
Instead of storing an optional in the runtime data of each node,
move the field status for the socket to an array in the node tree's
runtime data. This wasn't possible before because selecting nodes
reordered nodes which caused too much cache recomputation.

The benefit is having less geometry-nodes specific data in the
node socket runtime struct, and a slight move to a more data-
oriented storage format.

Pull Request: https://projects.blender.org/blender/blender/pulls/131822
2024-12-12 23:52:39 +01:00
Harley Acheson
6fa5295c1d 3D Text: only use fallback characters for the default font
When the user selects a font, only use characters from that font,
see code comments in BKE_vfontdata_char_from_freetypefont
for details.

Partially reverts [0] which changed behavior when VFont was
updated to use BLF.

Ref: !131821

[0]: 604ee2d036
2024-12-13 09:01:57 +11:00
Hans Goudey
cd7b901355 Cleanup: Remove unused Grease Pencil legacy functions 2024-12-12 16:17:08 -05:00
Sybren A. Stüvel
7d5143e94c Revert "Refactor: Core, give the IDWALK_… enums an explicit name"
This reverts commit 3ef748789d. It was
landed too hastily, my apologies.

Pull Request: https://projects.blender.org/blender/blender/pulls/131813
2024-12-12 20:03:27 +01:00
Jacques Lucke
8e1aec7664 Fix #108520: Store Named Attribute node does not propagate values if domain changes
Don't just initialize new values to zero but actually take the existing attribute into account.
Once supported, this can also automatically take defaults for built-in attributes into account
without further changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/131794
2024-12-12 18:11:45 +01:00
Hans Goudey
4ca3f02601 Refactor: Nodes: Improve socket node lookup functions
- Use return values instead of return arguments
- Remove the socket index lookup which was only used once
- Always use the topology cache for node_find_node
- Improve the documentation
- Add a const version of node_find_node

Overall, I think always using the topology cache will give more
predictable performance. Though it may require more cache
rebuilds after the node tree is changed, in practice there are
plenty of other things that require that already. This way, code
that doesn't change the node tree will get better performance
without having to think about the caching.

Pull Request: https://projects.blender.org/blender/blender/pulls/131811
2024-12-12 18:04:36 +01:00
Sybren A. Stüvel
3ef748789d Refactor: Core, give the IDWALK_… enums an explicit name
Two commits that basically do the same thing for two `enum`s: give
them a name.

- the `IDWALK_…` enum → `LibraryForeachIDFlag`.
- the `IDWALK_CB_…` enum → `LibraryForeachIDCallbackFlag`.

This way the flags are type-safe, and it's known where values come
from. This is much preferred (at least by me) to just having `int
flags`.

Uses of `0` have been replaced with `IDWALK_NOP` and `IDWALK_CB_NOP`,
as those have the same value and are of the right type.

One invalid use of `IDWALK_NOP` was detected by this change, and is
replaced by `IDWALK_CB_NOP`. And another one in the opposite
direction.

This change might be incomplete; I gave the enum a name, fixed the
compiler errors, and then also updated assignments like `int cb_flag =
cb_data->cb_flag`. I might have missed some assignments to `int`
though.

No functional changes.

----------

I intend to land this PR as its two separate commits. I just put them in the same PR so the buildbot can handle them in one go, and we don't have a stack of highly relatled PRs.

In the future this could also apply to the `IDWALK_RET_…` enum. This one I left out, though, because a proper cleanup there would also have to include their ambiguity on whether they are bitflags (like the enums in this PR) or not. Their values and the code in `BKE_lib_query_foreachid_process()` implies they are bitflags, but in practice they are never or'ed together and just used as discrete values.

Pull Request: https://projects.blender.org/blender/blender/pulls/131803
2024-12-12 17:28:28 +01:00
Falk David
635c9c8303 Cleanup: Grease Pencil: Remove using namespace math
This was causing issues after updating tbb and compiling on msvc.
2024-12-12 16:49:11 +01:00