Commit Graph

117289 Commits

Author SHA1 Message Date
Hans Goudey
0e15649bf8 Cleanup: Remove unused dynlib files
This has been unused since the game engine was removed.

Pull Request: https://projects.blender.org/blender/blender/pulls/132186
2024-12-20 20:38:40 +01:00
Brecht Van Lommel
63b4d7ba03 Fix: Uninitialized variable in MTLSafeFreeList
Found by address sanitizer. My understanding is that this bug could cause
too much flushing, but not wrong behavior or crashes. See aca9c131fc.

Pull Request: https://projects.blender.org/blender/blender/pulls/132141
2024-12-20 20:03:41 +01:00
Falk David
a7d3ced570 Refactor: VSE: Rename Strip to StripData
This renames the `Strip` struct to `StripData` and also renames
the `Sequence::strip` member to `Sequence::data`.

This is a first step towards naming the `Sequence` struct to `Strip`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132165
2024-12-20 18:02:31 +01:00
Hans Goudey
c5ba8bd7c2 Fix #125098: uv_seam attribute not accessible procedurally
When moving UV seams from special custom data types to attributes,
I considered them similar to mesh selection or visibility which are
"internal" attributes that aren't accessible procedurally and are
hidden from the UI. In retrospect that was the wrong decision; users
expect UV seams to behave more like bevel weights, and that makes sense.

This PR makes UV seams accessible in modifiers (geometry nodes) by
removing the leading period from the attribute name that indicated their
internal status.

The change of the attribute name is a breaking change of the API to some
extent, even though it's technically only mesh data. To mitigate that
issue, the `mesh.attributes["name"]` lookup function is modified to
support both the old and new names. Versioning code renames the
attribute to the new name when loading older files, and renames the
new name to the old name when saving files. That handling will be
removed as a breaking change in 5.0.

Pull Request: https://projects.blender.org/blender/blender/pulls/129803
2024-12-20 16:47:15 +01:00
Jacques Lucke
c860697515 Fix #103440: spreadsheet does not show result of gpu subdivision
Fix is to just use the proper function to get the `GeometrySet` from an object.
2024-12-20 16:38:37 +01:00
Omar Emara
5a4b5a571f Refactor: Compute distortion bounds deltas independently
This patch refactors the BKE distortion deltas bound computation to
compute each of the bounds independently. This is done to support cases
where the distortion is not symmetric and thus would need to grow the
image in a non-symmetric way.
2024-12-20 16:17:39 +02:00
Richard Antalik
6b5f078b47 Fix #131930: Fake retiming keys aren't realized when adding new key
When adding retiming key to split strip, causes, that new retimed
segments are spanning to exiting retiming keys or strip content bounds.

Realize fake keys at handles before adding new key instead.

Pull Request: https://projects.blender.org/blender/blender/pulls/132166
2024-12-20 14:00:30 +01:00
Hans Goudey
5b053c98de Fix #114872: Point density texture requires face corner byte color
Typically we are more flexibl with the attribute domain and type,
especially in the context of color attributes. This node still used
the old "vertex color" concept (only byte colors on the face corner
domain). It should have been updated for color attributes. Now the
nodes uses the attribute API to retrieve the attribute which
automatically interpolates the domain and type.

Also fix the node's use of the active color attribute to use the new
string based system rather than CustomData. It's incorrect to use the
active color rather than the default, but changing that might break
existin files.

Pull Request: https://projects.blender.org/blender/blender/pulls/132149
2024-12-20 13:54:08 +01:00
Aras Pranckevicius
0e37a287b1 Cleanup: simplify MovieProxyBuilder implementation
No need for empty base class with derived FFmpegIndexBuilderContext,
just use one MovieProxyBuilder
2024-12-20 14:36:16 +02:00
Omar Emara
15e56d169a Refactor: Multi-thread distortion bounds delta computation
This patch multi-threads the distortion bounds delta computations.
Additionally, it removes the 5-step approximation which was used. The
result of this function will be cached in the compositor and the problem
domain is relatively small.
2024-12-20 14:34:08 +02:00
Aras Pranckevicius
560caf63fd Cleanup: rename index_context -> proxy_builder in movie proxy builder code 2024-12-20 14:30:13 +02:00
Aras Pranckevicius
e99252d7fd Refactor: more cleanups and renamed to movie/ffmpeg related files
- All movie related public headers now have MOV_ prefix instead of
  IMB_movie_.
- All movie related public functions now have MOV_ prefix as well,
  instead of IMB_movie_ or IMB_anim_.
- IMB_anim.hh -> MOV_read.hh (also ImBufAnim -> MovieReader), and
  various utility functions not related to playback were split off
  into MOV_util.hh.
- Other function name tweaks for clarity, e.g. IMB_suffix_anim
  -> MOV_set_multiview_suffix and so on.
- All except one usages of MOV_get_fps (nee IMB_anim_get_fps) were
  ultimately just converting returned value into a float. So make
  MOV_get_fps just return that directly. For the (exactly just one)
  place that needs numerator and denominator, have
  MOV_get_fps_num_denom.
- Code comments on the public header functions.
- Removed never-used code paths inside movie timecode proxy building
  file.

It might be easier to review each commit separately.

Pull Request: https://projects.blender.org/blender/blender/pulls/132145
2024-12-20 13:23:08 +01:00
Bastien Montagne
eb8632e71f Fix #132029: Purge can delete actualy used linked Objects.
Work-around the issue until we actually have correct refcounting usage
handling of Objects: For now, consider all linked objects used by
another used ID as used, even if their usercount is null.

NOTE: This _may_ have side-effects on liboverride (especially the resync
process), by leaving more 'unused' data behind. Since these are linked
though, and presumably not instanced in the Scene, this is probably an
acceptable compromise.

Pull Request: https://projects.blender.org/blender/blender/pulls/132076
2024-12-20 11:42:06 +01:00
Jacques Lucke
5af0a965f7 BLI: optimize Vector move-construction for common cases
This optimizes the move-constructor for `blender::Vector` when all of the
following are true:
* The source and destination vector have exactly the same type.
* The stored type is trivial.
* The inline buffer is `<= 32` bytes large (this value is a heuristic that could
  be changed).

The basic idea of the optimization is that under these circumstances one can
just copy the entire inline-buffer over instead of only copying it partially
based on the vector size. While that can mean that more bytes have to be copied,
the machine code that does the copying can be more efficient due to less
branching and the hardcoded size.

The performance impact is quite measurable. Note that the speedup depends on how
many elements are in vector and thus how many elements of the inline buffer are
used. The following table shows the move construction performance of a
`Vector<void *, 4>`. Starting at 5 elements, the performance doesn't change much
anymore, because the inline buffer is just ignored.

| Elements | Old  | New  |
|----------|------|------|
| 0        | 20.3 | 14.6 |
| 1        | 22.7 | 21.5 |
| 2        | 36.4 | 21.6 |
| 3        | 36.4 | 21.5 |
| 4        | 36.5 | 21.6 |
| 5        | 21.4 | 21.1 |
| 6        | 21.3 | 21.1 |
| 7        | 21.4 | 21.1 |
| 8        | 21.5 | 21.0 |
| 9        | 21.4 | 20.9 |
| 10       | 21.3 | 20.9 |

The binary size stays effectively unchanged (< 2kb change).

Pull Request: https://projects.blender.org/blender/blender/pulls/131841
2024-12-20 11:36:44 +01:00
Bastien Montagne
4b89a0047f Doc: Updated comments for the 'corner space' of custom normals. 2024-12-20 11:13:19 +01:00
Jesse Yurkovich
175ad18368 USD: Import subdivision edge creases and UV/Boundary smoothing options
Import edge crease values and properly configure any added subdivision
modifiers with correct UV and boundary settings. These were already
exported so this now completes our subdivision support.

Pull Request: https://projects.blender.org/blender/blender/pulls/131569
2024-12-20 01:31:31 +01:00
Gerard Taulats
f63fbccf76 Fix: Snap to text origin
Fixes bug where "Snap to vertex" tool would snap to text origins when it shouldn't.

Introduced from ab3e470b35

Pull Request: https://projects.blender.org/blender/blender/pulls/131767
2024-12-19 23:48:10 +01:00
Harley Acheson
8b386af223 Refactor: Move blender::bke::preferences Function Doc
Just moving a comment to immediately before a function declaration
rather than before a namespace block.
2024-12-19 13:22:42 -08:00
Harley Acheson
b801615431 Fix #123702: Don't Change TransOpt Flags with Language If Current Profile
We are currently setting all the Language "affect" options when
changing Language (Tooltips, Interface, Reports, New Data). This is
so that setting a language in a NEW config from the Quick Setup splash
screen will have those enabled. This PR keeps that but allows loading
old configs and keeping those options (#123702 & #112054). It also
allows changing language in Preferences without those changing as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/132046
2024-12-19 22:13:23 +01:00
Harley Acheson
88f8e1798c Refactor: Separate Function to Test for Current Preferences File
We have two uses of identical code that checks to see if we have a
current preferences file (false for first run of new version). This PR
extracts that to new function `blender::bke::preferences::exists()` as
there will soon be a third use (#132046). Otherwise no behavior change.

Pull Request: https://projects.blender.org/blender/blender/pulls/132140
2024-12-19 21:12:49 +01:00
Gerard Taulats
f7aa58dbab Fix #132062: Proper Snap to Volume memory free
Resolve MEM_new/MEM_freeN mismatch.

Pull Request: https://projects.blender.org/blender/blender/pulls/132138
2024-12-19 21:05:19 +01:00
Hans Goudey
1940e8283b Fix #91022: Property editor node link menu shows hidden node groups 2024-12-19 15:04:03 -05:00
Hans Goudey
be70e52e5b Cleanup: Remove useless loop in node property editor linking menu
Nothing happened in this loop.
2024-12-19 15:02:24 -05:00
Hans Goudey
9686092cd5 Cleanup: Quiet unused variable warning without ffmpeg 2024-12-19 15:01:02 -05:00
Hans Goudey
aa50f0ba07 Cleanup: Use LISTBASE_FOREACH macro for node groups 2024-12-19 15:01:02 -05:00
Miguel Pozo
7655784981 Fix #128388: GPU: Always forward viewport/layer from geometry shader
Ensure `gl_ViewportIndex` and `gl_Layer` are properly forwarded from the
geometry shader, and don't write to them from the vertex shader if
there's a geometry shader stage.

Fixes the Displacement "dicing" render tests on Nvidia OpenGL.

Pull Request: https://projects.blender.org/blender/blender/pulls/131875
2024-12-19 20:22:06 +01:00
Hans Goudey
e3981bad76 Geometry Nodes: Avoid rebuilding point cloud BVH trees in sample nearest
Currently the node rebuilds the target point cloud BVH tree on every call,
potentially thousands of times if the field is evaluated on many elements.
Instead, build the BVH tree once and store it in the function.

Pull Request: https://projects.blender.org/blender/blender/pulls/132073
2024-12-19 18:22:31 +01:00
Hans Goudey
d11d9e1648 Cleanup: Use unique_ptr for point cloud BVH trees 2024-12-19 18:22:29 +01:00
Hans Goudey
d75afd32ef Refactor: Split BVH tree data creation function
Instead of a single function that handles all the BVH tree types,
split the BVHTreeFromMesh creation to separate functions.
2024-12-19 18:22:29 +01:00
Hans Goudey
e719cb078b Fix: Use correct BVH cache for snapping utility 2024-12-19 18:22:29 +01:00
Hans Goudey
fc970a5178 Refactor: Mesh: Deduplicate and simplify BVH construction
Currently there are three entry points to building BVH trees for mesh
ata: the caches on the mesh, an older set of functions used in the mesh
remap code, and a new set of functions used in some geometry nodes
sampling nodes. This commit unifies their implementations and switches
some functions from bit spans to index masks for representing a
selection of geometry.
2024-12-19 18:22:29 +01:00
Hans Goudey
9fc11c5aa9 Cleanup: Remove unused include from BVH header 2024-12-19 18:22:29 +01:00
Hans Goudey
671fa08e72 Cleanup: Return Mesh BVH data by value 2024-12-19 18:22:29 +01:00
Hans Goudey
625bd70dd7 Cleanup: Remove unused variable 2024-12-19 18:22:29 +01:00
Hans Goudey
bcfe4c34da Cleanup: Move BVH utils to C++ namespace 2024-12-19 18:22:29 +01:00
Aras Pranckevicius
87259ba9f2 Fix: compile warning (mismatched #if vs #ifdef) 2024-12-19 19:22:04 +02:00
Hans Goudey
b43e2168e3 Refactor: Nodes: Remove legacy enum name from NOD_static_types.h
A followup for 5e7f3e5c84.

Make the NOD_static_types.h file less important by moving `enum_name_legacy`
to be defined in the register function of every node. This helps our gradual transition
away from this file.

Also add a fallback to the node idname so that newly added nodes no longer need
to define the string value.

Pull Request: https://projects.blender.org/blender/blender/pulls/132131
2024-12-19 18:12:05 +01:00
Richard Antalik
8ce5356522 VSE: Text editing in preview
This commit implements most features needed for simple text editing.

Active text strip can be edited in preview by pressing tab key, which
enabled text editing mode. With this mode active, outline matches text
boundary box and cursor is drawn.

Cursor can be moved with usual keys. Pressing shift starts selection.
Selection and navigation works when text is scaled or rotated. Mirrored
text is not supported in this PR. it can be done, but the text is
unreadable that way, so I kept it simple.

Multi line text is supported. Pressing return key starts new line.

Copy/paste operator uses OS copy paste buffer, so text from other apps
can be pasted.

Text is still limited to 512 characters. Text string property still
exists in side panel and is limited to single line. Individual
characters can not be styled in different way like in 3D viewport, but
the code is mostly ready for such feature.

Ref: #126547

Pull Request: https://projects.blender.org/blender/blender/pulls/127239
2024-12-19 15:56:54 +01:00
Pratik Borhade
9d86fada03 Fix #130708: Grease Pencil: Cannot transform strokes with individual origin pivot
When using the "individual origin" pivot mode, calculate the center
based on the following:

* If the stroke is a Bézier stroke, use the center of each handle as the pivot.
* Otherwise, if the stroke is not a Bézier stroke, compute the mean position
  of the selected control points in the stroke and use this as the center.

This center value is then used e.g. by the rotation or scale transform modes.

Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/130723
2024-12-19 15:39:58 +01:00
Omar Emara
2bb4136e56 Fix #132015: Cryptomatte from image with unnamed layer fails
Cryptomatte meta-data are not loaded from EXR images with unnamed
layers. That's because the code assumed the layer is always named, and
thus had full names with a dot prefix, which didn't match the
Cryptomatte type name. To fix this, only add the dot when the layer is
named.
2024-12-19 15:47:11 +02:00
Pratik Borhade
5c07d52240 Fix #131745: Grease Pencil: Removing vertex group hits assert
Caused by 5585d29d30.
Return `false` from `BKE_object_defgroup_remove` when called
with `GreasePencil` ID.

Pull Request: https://projects.blender.org/blender/blender/pulls/131776
2024-12-19 14:17:45 +01:00
Sybren A. Stüvel
898beab1ee Refactor: Anim, make generic_slot_for_autoassign() a public function
This function will be used by other code in the future, and thus needs to
be publicly available.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/132114
2024-12-19 14:12:25 +01:00
Sybren A. Stüvel
9f4a0d230f Core: when swapping IDs, invalidate action slot user caches
Action Slots point to the IDs they animate, and after swapping IDs they
also need some swappage (as the Action that first animated `id_a` will
now animate `id_b`, and vice versa).

Instead of doing this in the `id_swap()` function (and requiring
knowledge of how that's supposed to be done), just mark these pointers
as dirty so that they're rebuilt at first use.

This commit contains a little more code than strictly necessary, to add
a function in BKE for this cache invalidation. This avoids having to
have a dependency on the animrig module just for this purpose.

Fixes: #130136

Pull Request: https://projects.blender.org/blender/blender/pulls/131809
2024-12-19 14:10:48 +01:00
Omar Emara
33f758dcd1 Cleanup: Remove mention of realtime compositor 2024-12-19 14:43:02 +02:00
Sybren A. Stüvel
de6c65b347 Anim: change how action_foreach_id() reports action slot user pointers
Change how `action_foreach_id()` reports action slot users. This contains
two changes:

- Report the correct pointer reference, so that the ID remapping code
  can actually change the pointers in the cache (necessary, for example,
  to nil pointers to deleted IDs).
- Never report anything when it's known the slot user cache is dirty.

Pull Request: https://projects.blender.org/blender/blender/pulls/131808
2024-12-19 13:07:25 +01:00
Aras Pranckevicius
974efe7d23 Refactor: move ffmpeg/video related code into one place
Previously, code related to reading/writing movie files via ffmpeg was
scattered around: some under blenkernel, some directly in generic
imbuf headers, some under intern/ffmpeg. Some of the files were named
with not exactly clear names. Some parts not directly related to movies
were including ffmpeg headers directly (rna_scene.cc).

What is in this PR:

Movie and ffmpeg related code is now under imbuf/movie:
- IMB_anim.hh: movie reading, proxy querying, various utility functions.
- IMB_movie_enums.hh: simple enum definitions,
- IMB_movie_write.hh: movie writing functions.
- intern: actual implementation and private headers.
    - ffmpeg_compat.h: various ffmpeg version difference handling
      utilities,
    - ffmpeg_swscale.hh/cc: scaling and format conversion utilities
      for ffmpeg libswscale,
    - ffmpeg_util.hh/cc: misc utilities related to ffmpeg,
    - movie_proxy_indexer.hh/cc: proxies and timecode indexing for movies,
    - movie_read.hh/cc: decoding of movies into images,
    - movie_write.cc: encoding of images into movies.
- tests: basic ffmpeg library unit tests that previously
  lived under intern/ffmpeg.

Interface changes (at C++ level, no Python API changes):
- Mostly just movie related functions that were BKE_ previously, are now IMB_.
- I did one large-ish change though, and that is to remove bMovieHandle
  struct that had pointers to several functions. Now that is
  IMB_movie_write_begin, IMB_movie_write_append, IMB_movie_write_end
  functions using a single opaque struct handle. As a result, usages
  of that in pipeline.cc and render_opengl.cc have changed.

Pull Request: https://projects.blender.org/blender/blender/pulls/132074
2024-12-19 12:34:30 +01:00
Pratik Borhade
307f50f3f0 Fix #131889: Grease Pencil: Select stroke by material fails with points
When in point mode, select stroke by material fails. This seems to
happen due to ignored case of point selection attribute in exec function
written in 7ae8e1dc07.

Pull Request: https://projects.blender.org/blender/blender/pulls/131961
2024-12-19 12:11:23 +01:00
Bastien Montagne
e5b299cda5 Fix LibOverride bug when clearing invalid liboverride data.
Do not try to check liboverride properties on a freed liboverride
data.

Found while investigating #132075.
2024-12-19 12:02:35 +01:00
Omar Emara
0a6b43c827 Compositor: Make transformed realized domains symmetric
This patch changes how transformations are realized by adjusting the
computed size of the new domain after transformation. Previously, this
was computed with the lower left corner of the domain as the origin of
transformation, while now, the center of the domain is used as the
origin. Consequently, domains shrinks/grows around their center, which
results in a more stable output as transforms are animated.

A consequence of this change is that we can no longer scale odd sized
domains to even sized domains or vice versa, since it grows/shrinks by
the same amount on both sides. Supporting this case requires further
investigation and will probably require passing down information to the
realization functions themselves.
2024-12-19 12:48:44 +02:00
Julian Eisel
4b23a7d74b Refactor: Tools: Avoid passing context to functions
Better to make sure that these functions operate on the passed in data,
and do not access the current context in some way. Generally that's more
predictable, but also makes sure these functions can be called on
inactive spaces (e.g. to update the active tool in the image editor on
changes in the 3D View, see #131062).
2024-12-19 11:37:28 +01:00