Commit Graph

106829 Commits

Author SHA1 Message Date
Aras Pranckevicius
ffbc90874b ffmpeg: cache swscale contexts instead of re-creating them
ffmpeg's libswscale is used to do RGB<->YUV conversions on movie reading
and writing. The "context" for the scale operation was being created
and destroyed for each movie clip / animation. Now, maintain a cache
of the scale contexts instead.

E.g. in Gold edit, it only ever needs two contexts (one for reading
source movie clips since they are all exactly the same resolution
and format; and one for rendering the resulting movie).

During playback, on some of the "slow" frames (camera cuts) this
saves 10-20ms (Windows, Ryzen 5950X). Rendering whole movie goes
from 390sec to 376sec.

Pull Request: https://projects.blender.org/blender/blender/pulls/118130
2024-02-15 10:35:02 +01:00
Bastien Montagne
59d59006c4 GPv3: Implement EditMode Undo.
Relatively basic and straightforward implementation.

Further optimizations are possible (and needed), especially regarding
the handling of caches.

Notes:
* All drawings are stored in each undo step. This is needed (also for
  Reference drawings), in case some drawings are added, removed or
  re-ordered between undo steps.
* The whole tree of layers is copied as-is, using the C++ classes copy
  constructors, so they only handle what these constructors copy
  (noticeably, the `Layer` copy constructor does not currently handles
   masks?).
* The active layer pointer is stored and restored by its name.
* The layer customdata is also duplicated using standard `BKE_customdata`
  API.

Pull Request: https://projects.blender.org/blender/blender/pulls/117072
2024-02-15 10:19:52 +01:00
Bastien Montagne
9be522d480 GPv3: Add low-level resize_drawings function. 2024-02-15 10:19:50 +01:00
Bastien Montagne
13887fc427 GPv3: Add assignement operator to LayerGroup class. 2024-02-15 10:19:50 +01:00
Bastien Montagne
f2e481a519 Core: Refactor id_delete.
This commit essentially:
* Remove the 'delete single ID' code path.
  The multi-deletion code has now be around for a long while, so we
  should be able to assume it is mature enough. It is also several times
  faster when deleting a lot of IDs at once.
* Move away from using `LIB_TAG_DOIT` ID tag in internal code, using a
  Set instead to store the IDs to be deleted.

Potential side-effects:
* The 'delete single ID' codepath (removed by this commit) was making
  some dangerous assumptions regarding order of IDs in Main and 'strong'
  dependencies between them. While these assumptions where presumably
  correct in current code/data model context, they were logically wrong
  and could have randomly cause bugs in the future.
* The sanitiing check on usercount performed in the case of the single
  ID deletion cannot be done anymore. Should not be that usefull
  anymore, as there are other places where IDs usercounts are validated.
* Performances:
  * The batch-deletion did not show any significant difference in speed.
  * Massively deleting IDs one by one however, showed a surprising 10%
    speedup.

Pull Request: https://projects.blender.org/blender/blender/pulls/118283
2024-02-15 10:16:32 +01:00
Bastien Montagne
a3bf395a10 Core: IDRemapper: Refactor handling of 'never null' ID usages.
Existing code would allow tagging on request IDs which had a 'never
null' usage potentially cleared by the remapping operation (e.g. if an
Object obdata would have been set to `nullptr`).

While this worked for the current extremely restricted usecase (ID
deletion), this was not the best design, as it forced the ID remapping
user code to be very careful about its own usages of the `LIB_TAG_DOIT`
tag.

This commit replaces internal tagging by adding such IDs to a Set in
`IDRemapper` class, which user code can then use to find which IDs
(would have) had a 'never null' ID pointer cleared.

There are two additional changes induced by this commit:
* `BKE_libblock_unlink` `do_flag_never_null` parameter is removed.
  As it is not used in current codebase, simpler to remove than update
  the code to support it.
* `ID_REMAP_FLAG_NEVER_NULL_USAGE` option is renamed to
  `ID_REMAP_STORE_NEVER_NULL_USAGE`.
  In addition, its behavior is slightly modified:
  * Before, the owner ID would systematically be tagged if it had such
    'never null' ID usages, regardless of whether said ID usages (would)
    have actually been remapped to `nullptr`.
  * Now, the owner ID is only added to the `never_null_users` set if its
    'never null' usages (would) have been cleared.
2024-02-15 10:16:30 +01:00
Campbell Barton
5c87dfd269 Cleanup: use BLI_time_ prefix for time functions
Also use the term "now" instead of "check" for clarity.
2024-02-15 13:15:56 +11:00
Hans Goudey
e9fff6124c Merge branch 'blender-v4.1-release' 2024-02-14 21:04:40 -05:00
Hans Goudey
f1cb2fa74b Fix: Crash with logging after recent std::string cleanup
The macro tried to free the string.
2024-02-14 21:04:15 -05:00
Campbell Barton
34ed7ee2d9 Merge branch 'blender-v4.1-release' 2024-02-15 13:00:26 +11:00
Campbell Barton
e8baa8a505 Fix #113395: Invalid selection history after solidify
Clear the selection history since the previously selected
faces are de-selected.
2024-02-15 12:48:09 +11:00
Campbell Barton
c838111571 Merge branch 'blender-v4.1-release' 2024-02-15 11:03:49 +11:00
Campbell Barton
3dde1e9df7 Merge branch 'blender-v4.1-release' 2024-02-15 11:03:45 +11:00
Campbell Barton
7848533395 Fix memory leak in anim.view_curve_in_graph_editor, restore the context
Ensure the selection is freed by the operator, also restore the
windowing context after setting temporary values.
2024-02-15 10:57:21 +11:00
Hans Goudey
c07132b43b Cleanup: Make format 2024-02-14 17:43:03 -05:00
Hans Goudey
c4d0e88e6e Fix: Asset browser crash after recent cleanup
After 57586df687. Turns out the library can be null here.
2024-02-14 17:41:17 -05:00
Hans Goudey
b9ed6ce0a5 Refactor: Various C++ improvements to collection property search
- Use FunctionRef to avoid passing a separate user_data pointer
- Use std::string in arguments struct
- Add search items in one loop after gathering search items
- Use Vector of unique_ptr for search items instead of linked list
2024-02-14 17:23:01 -05:00
Hans Goudey
61e61ce0e1 Cleanup: Use Span instead of Vector const reference
Span is preferrable since it's agnostic of the source container,
makes it clearer that there is no ownership, is 8 bytes smaller,
and can be passed by value.
2024-02-14 17:23:01 -05:00
Hans Goudey
a24d6e7012 Cleanup: Use StringRef instead of StringRefNull
The called function here only needs StringRef, that can apply here too.
2024-02-14 17:23:01 -05:00
Hans Goudey
aef0b6552b Cleanup: Use helper functions to access next and previous face corners 2024-02-14 17:23:01 -05:00
Hans Goudey
57586df687 Cleanup: Remove unnecessary asset system functions
These functions appear to be thin wrappers around the C++ classes
that previously weren't accessible in C code.
2024-02-14 17:23:01 -05:00
Hans Goudey
7098e53c61 Cleanup: Use "this" keyword to access class methods 2024-02-14 17:23:01 -05:00
Iliya Katueshenock
faf056f17b Cleanup: Move mesh utility to create mesh without attributes
Mesh with no attributes is used to build new mesh from scratch.
Some data can be shared, so there is no reason to have allocated attributes.

Pull Request: https://projects.blender.org/blender/blender/pulls/118297
2024-02-14 23:14:12 +01:00
Sergey Sharybin
33af56f13e GPU Compositor: Avoid global DST lock on Linux
It is not required to hold the lock of DST when performing
compositing on GPU, as the compositor implementation uses the
GPU module directly, bypassing the draw manager.

However, currently this is known to cause issues on macOS,
and is not yet tested on Windows.

On Linux it works correctly, and avoids lock while compositor
is running.

There could still be a small locking hiccup, when the GPU
context is created and disposed. This needs to be looked
into.

Pull Request: https://projects.blender.org/blender/blender/pulls/118286
2024-02-14 19:30:38 +01:00
Clément Foucault
7b328390f4 Cleanup: EEVEE-Next: Remove unused mip level in remap shader 2024-02-14 18:52:58 +01:00
Clément Foucault
da72cdee5e EEVEE-Next: Add compute shader to downsample sphere probe
This has no functional change except that it might speed
up probe updates since only updated pixels are processed.

Ref #118256
2024-02-14 18:52:58 +01:00
Hans Goudey
1c3c1e7776 Cleanup: Simplify asset metadata copy function
Also move the destructor declaration to be consistent with the style guide.
2024-02-14 12:06:56 -05:00
Harley Acheson
48dee674f3 UI: Changes to Menu Separator Padding
Add interior horizontal padding to menu separator lines.

Pull Request: https://projects.blender.org/blender/blender/pulls/118227
2024-02-14 17:14:17 +01:00
Hans Goudey
a52323d711 Cleanup: Move BKE_duplilist.hh to C++ 2024-02-14 10:51:46 -05:00
Hans Goudey
ed0be291c8 Cleanup: Use float4x4 matrix type in volume displace modifier 2024-02-14 10:51:46 -05:00
Iliya Katueshenock
85b93772db Fix #118104: Menu Switch shows menu socket in input link-drag-search
The node currently doesn't support outputting the menu socket type.

Pull Request: https://projects.blender.org/blender/blender/pulls/118110
2024-02-14 16:49:07 +01:00
Clément Foucault
f20425bc4c Fix: EEVEE-Next: Missing Volume Probe update after world update 2024-02-14 16:24:02 +01:00
Hans Goudey
1c0f374ec3 Object: Move transform matrices to runtime struct
The `object_to_world` and `world_to_object` matrices are set during
depsgraph evaluation, calculated from the object's animated location,
rotation, scale, parenting, and constraints. It's confusing and
unnecessary to store them with the original data in DNA.

This commit moves them to `ObjectRuntime` and moves the matrices to
use the C++ `float4x4` type, giving the potential for simplified code
using the C++ abstractions. The matrices are accessible with functions
on `Object` directly since they are used so commonly. Though for write
access, directly using the runtime struct is necessary.

The inverse `world_to_object` matrix is often calculated before it's
used, even though it's calculated as part of depsgraph evaluation.
Long term we might not want to store this in `ObjectRuntime` at all,
and just calculate it on demand. Or at least we should remove the
redundant calculations. That should be done separately though.

Pull Request: https://projects.blender.org/blender/blender/pulls/118210
2024-02-14 16:14:49 +01:00
Clément Foucault
bdd15e827f Fix: EEVEE-Next: Crash in bake caused by motion blur
Motion blur needs to be disabled for volume probe baking.
2024-02-14 15:55:36 +01:00
Omar Emara
357d6fcae1 Cleanup: Format 2024-02-14 16:50:20 +02:00
Brecht Van Lommel
aefd930317 Fix: Build error when not using unity build 2024-02-14 15:13:12 +01:00
Clément Foucault
2d08e16601 Cleanup: EEVEE-Next: Split display sync function 2024-02-14 15:09:31 +01:00
Clément Foucault
ee6c7d8eea Fix: EEVEE-Next: Sphere Probe: Wrong world probe index 2024-02-14 15:09:31 +01:00
Jacques Lucke
d27a1c47fa Nodes: hide uneditable input sockets in sidebar
This hides some labels from the sidebar which look a bit out of place.

Pull Request: https://projects.blender.org/blender/blender/pulls/118264
2024-02-14 14:47:07 +01:00
Sergey Sharybin
a8a05ebba1 Compositor: Switch CPU compositor to Full-Frame
The tiled compositor code is mainly still around, which is only
expected to be a short-lived period. Eventually it will also be
removed.

The OpenCL, Group Buffers, and Chunk size options are already removed.

Pull Request: https://projects.blender.org/blender/blender/pulls/118010
2024-02-14 14:23:49 +01:00
Clément Foucault
1f8fac5082 Fix: EEVEE-Next: Broken light baking from script
The G.is_break was not properly set back to false
and the data was never copied back to the original
object.
2024-02-14 13:02:01 +01:00
Sergey Sharybin
2cec7e3aa5 Fix levels node regression in tiled compositor
Caused by previous change for full-frame compositor.

The determine_canvas() is still used by the tiled compositor,
so restore it to the state which makes both compositors to work.

Pull Request: https://projects.blender.org/blender/blender/pulls/118254
2024-02-14 12:02:59 +01:00
Pratik Borhade
dda277e48c Merge branch 'blender-v4.1-release' 2024-02-14 16:22:28 +05:30
Pratik Borhade
f344823785 UI: Opus files not included in sound files filter
Include `.opus` extension in audio filter list

Fixes #118235

Pull Request: https://projects.blender.org/blender/blender/pulls/118238
2024-02-14 11:39:11 +01:00
Pratik Borhade
18912561b5 Fix #118163: Crash hiding face sets with multires
Caused by ce4ec6d42b
Crash occurs due to accessing `corner_tri_faces` when pbvh tpye is
"grid".
Fix is same as 72d324bd81

Pull Request: https://projects.blender.org/blender/blender/pulls/118183
2024-02-14 11:37:11 +01:00
Sergey Sharybin
a1047e0689 Compositor: Make CPU Level node output single value
This aligns the node behavior to GPU compositor.

The implementation is a bit of a stretch of the full-frame
constant-foldable operations, but this is as good as it can
get in a short time.

The alternative could be to somehow inject a SetValue
operation, but since it expects ahead-of-time known value it
is not as straight forward.

Pull Request: https://projects.blender.org/blender/blender/pulls/118248
2024-02-14 10:54:59 +01:00
Campbell Barton
5a86067ff0 Fix build error from duplicate include 2024-02-14 14:27:58 +11:00
Campbell Barton
291ca4ec8e Cleanup: unused variable, redundant strlen call 2024-02-14 13:59:37 +11:00
Campbell Barton
aa6ab9caf9 Cleanup: various non-functional changes for C++ 2024-02-14 13:56:58 +11:00
Campbell Barton
cdc17751ae Cleanup: format 2024-02-14 13:53:36 +11:00