Commit Graph

122998 Commits

Author SHA1 Message Date
Habib Gahbiche
bef15f0ec1 Fix #145633: Revert "Fix #144526: Crash on exit with Video_Editing template"
The fix introduced a high severity bug where exiting Blender after
working with the GPU compositor crashes Blender. We consider #144526 to
be less severe than the newly introduced bug, hence the revert for now.

This reverts commit b2b23e3619.

Pull Request: https://projects.blender.org/blender/blender/pulls/146096
2025-09-11 18:08:52 +02:00
Pablo Vazquez
f52f26d481 UI: VSE: Use correct icon for enable modifier
"Enable modifier" was using the eye icon, which usually indicates
only visibility, but this actually affects render.

Also in the future there could be other visibility toggles, like
regular modifiers.

Reviewed with Falk and Dalai in person.
2025-09-11 17:20:22 +02:00
Sergey Sharybin
963569caf4 Fix #146086: Regression: OpenSubdiv: GPU Shaders gets recompiled for each evaluation
Regression in 1e4764a9a5 which accidentally removed use of
the g_subdiv_evaluator_cache.

Pull Request: https://projects.blender.org/blender/blender/pulls/146097
2025-09-11 17:17:30 +02:00
Jeroen Bakker
0c75361516 Vulkan: Add Memory Pool for External Pixel Buffers
Adds a separate memory pool for creating external pixel buffers.
Previous the memory type of images was used, but could not be
compatible.

Pull Request: https://projects.blender.org/blender/blender/pulls/146078
2025-09-11 16:19:23 +02:00
Falk David
929110db04 Fix: Remove unused "Active Modifier Outline" setting
This setting was added in 866fcd0a09
by mistake and shouldn't have been kept.
Removing it again.

Pull Request: https://projects.blender.org/blender/blender/pulls/146092
2025-09-11 16:18:31 +02:00
Jeroen Bakker
819175961b Fix#145961: Vulkan: Pixelbuffer are Never Exported
Pixel buffers will be imported by Cycles in Cuda/OneAPI/HIP
when supported. However the priority and export field is not filled correctly,
resulting in that the priority is always 1 and the buffer is never exported.

Should be backported to 4.5 as Cycles GPU interop isn't working
when using Vulkan.

Regression introduced by: !144422

Pull Request: https://projects.blender.org/blender/blender/pulls/146090
2025-09-11 16:15:14 +02:00
Ray Molenkamp
0bd3e7e213 Fix: Build error with BLI_virtual_array.hh
BLI_virtual_array.hh relies on the <functional> header
without including it, leading to build errors.
2025-09-11 07:30:52 -06:00
Jeroen Bakker
790033e0c3 Cleanup: Vulkan: Remove references to Renderpass and Framebuffer
VkRenderPass and VkFramebuffer are not used in Blender 5.0.

Pull Request: https://projects.blender.org/blender/blender/pulls/146082
2025-09-11 15:03:46 +02:00
Sergey Sharybin
a927c98d5a Fix #146042: Fix when view transform is set to non-existing color space
Some of the color space settings are not validated on load to be set to
a valid values. To deal with those cases better bake it so color management
module does not make assumption on validness of the input data.

This is an oversight in the !140729.

Pull Request: https://projects.blender.org/blender/blender/pulls/146084
2025-09-11 14:09:20 +02:00
Omar Emara
ad6892832f Render: Add start and end frames to render.render()
This patch adds two new optional arguments to the render.render()
operator, allowing the caller to use a custom frame range for animation
render.

Pull Request: https://projects.blender.org/blender/blender/pulls/146022
2025-09-11 12:47:08 +02:00
Clément Foucault
1f94af6aa4 GPU: Shader: Add support for loop unroll using macros
It is usually nice to unroll loops with a different number of
iteration based on a macro. This commit adds this functionality
to our shader preprocessor so that we don't have to manually unroll
these loops.

Pull Request: https://projects.blender.org/blender/blender/pulls/146043
2025-09-11 12:42:11 +02:00
Omar Emara
f699b34689 Fix #146057: Crash when using Convolve node with GPU
The Convolve node crashes Blender if used with GPU device and its output
is used multiple times. This is due to a use after free error, because
the convolve node ignored the reference count of the output.

To fix this, we retain the reference count of the output by stealing the
data of the GPU-side buffer, instead of overwriting the output with it.

Pull Request: https://projects.blender.org/blender/blender/pulls/146074
2025-09-11 12:18:35 +02:00
luz paz
355a805e68 Cleanup: Fix typos in source/blender/freestyle
Fix code comment typos. Found via codespell

Pull Request: https://projects.blender.org/blender/blender/pulls/145832
2025-09-11 11:30:49 +02:00
Damien Picard
a8d366b48a Fix #141142: UI: Emboss status not restored in uiLayout
When using `emboss=False` on a UI prop, if `property_split` was
enabled, all subsequent props in the same layout would also be
unembossed.

This is because of the way the emboss status was set.

When drawing a prop, the previous emboss status was stored in a
temporary variable `prev_emboss`. This status was retrieved from the
uiLayout (`this`), but restored to a `layout` uiLayout that could be
another one, because it could be reassigned in the mean while.

Instead the status should just be restored to `this`, otherwise the
layout can keep the same unembossed status for subsequent props.

Pull Request: https://projects.blender.org/blender/blender/pulls/145883
2025-09-11 11:03:10 +02:00
luz paz
62a5a29d08 Cleanup: Fix typos in source/blender/nodes
Fixes user-facing typos. Found via codespell

Pull Request: https://projects.blender.org/blender/blender/pulls/145970
2025-09-11 10:49:05 +02:00
Jeroen Bakker
6cf0658eee Vulkan: Submission timeline value
Although this doesn't lead to any different behaviour or fixes any issue
it was an oversight as this would not wait for empty render graphs to be
finished in the order of submission

Pull Request: https://projects.blender.org/blender/blender/pulls/146066
2025-09-11 10:36:38 +02:00
Jeroen Bakker
9c9757e52b Cleanup: GPUFence parameter names
Renamed incorrect naming pixbuf->fence

Pull Request: https://projects.blender.org/blender/blender/pulls/146065
2025-09-11 10:36:00 +02:00
Casey Bianco-Davis
4395053115 Fix: Curves: Pen tool virtual destructor compiler warning
The destructor needs to be set to virtual. Otherwise the base object
(`PenToolOperation`) will not be destroyed with the derived object
(`GreasePencilPenToolOperation` or `CurvesPenToolOperation`).

Pull Request: https://projects.blender.org/blender/blender/pulls/146047
2025-09-11 10:28:17 +02:00
Christoph Lendenfeld
baafbd8e95 Anim: Remove PBONE_SELECTABLE macro
This patch replaces the `PBONE_SELECTABLE` macro with functions.
There is a slight functional change in that for pose bones: the visibility
is now correctly accounted for. Before this change it would always look
at the `Bone` visibility. This is no longer the correct way to
check for that since a43359eb88
moved that to the pose bone

Part of #138482

Pull Request: https://projects.blender.org/blender/blender/pulls/145974
2025-09-11 10:00:13 +02:00
Jacques Lucke
1517aa4416 Fix #146051: incorrect parent zone compute contexts when inlining shader nodes
Border links (links going from an outer zone to an inner zone) need special
handling. When requesting the value of a linked socket from outside of the
current zone, the compute context of that parent zone has to be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/146059
2025-09-11 08:02:56 +02:00
Jeroen Bakker
c50c3275be Vulkan: Acquire/release swapchain images
`GHOST_SwapWindowBuffers` doesn't fit well when using swapchains. In
that case an approach where swap chain images are acquired and released
would map better. This PR introduces `GHOST_SwapWindowBufferAcquire`
and `GHOST_SwapWindowBufferRelease` to be more in line with vulkan swap
chains.

Previous implementation would first record all GPU commands based on
the last used swap chain. In case a swapchain needed to be recreated
(window resize, move to other monitor) the recorded commands would
not match the swap chain and could lead to artifacts.

OpenGL only implements the release functions as they don't
have a mechanism to acquire a swap chain image. (Need to validate with
the Metal API how this is working and adapt is needed).

Currently when starting blender on a HDR capable display the first frame
would be based on an sRGB surface and presented on an extended RGB
(or other) surface. As these don't match the first frame could be incorrect and
also lead to UBs as another surface is expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/145728
2025-09-11 07:51:30 +02:00
Campbell Barton
9dc6a2d7f3 Cleanup: correct misleading PyArg_Parser formatting 2025-09-11 15:20:20 +10:00
Campbell Barton
62906cb6f4 Cleanup: use a boolean for BMesh::use_toolflags
Bit-fields don't have any advantage in this case, use a boolean.
2025-09-11 14:40:13 +10:00
Jacques Lucke
c3f49cd24e Shader Nodes: add Python API for inlined shader nodes
This makes the shader node inlining from #141936 available to external renderers
which use the Python API. Existing external renderer add-ons need to be updated
to get the inlined node tree from a material like below instead of using the
original node tree of the material directly.

The main contribution are these three methods: `Material.inline_shader_nodes()`,
`Light.inline_shader_nodes()` and `World.inline_shader_nodes()`.

In theory, there could be an inlining API for node trees more generally, but
some aspects of the inlining are specific to shader nodes currently. For example
the detection of output nodes and implicit input handling. Furthermore, having
the method on e.g. `Material` instead of on the node tree might be more future
proof for the case when we want to store input properties of the material on the
`Material` which are then passed into the shader node tree.

Example from API docs:
```python
import bpy

# The materials should be retrieved from the evaluated object to make sure that
# e.g. edits of Geometry Nodes are applied.
depsgraph = bpy.context.view_layer.depsgraph
ob = bpy.context.active_object
ob_eval = depsgraph.id_eval_get(ob)
material_eval = ob_eval.material_slots[0].material

# Compute the inlined shader nodes.
# Important: Do not loose the reference to this object while accessing the inlined
#   node tree. Otherwise there will be a crash due to a dangling pointer.
inline_shader_nodes = material_eval.inline_shader_nodes()

# Get the actual inlined `bpy.types.NodeTree`.
tree = inline_shader_nodes.node_tree

for node in tree.nodes:
    print(node.name)
```

Pull Request: https://projects.blender.org/blender/blender/pulls/145811
2025-09-11 06:08:30 +02:00
Sean Kim
0b19cb35b6 Cleanup: Various organizational changes for brush.cc
* Reformats comment, moves it near related code
* Adds doxygen section
* Reorganizes function order

Pull Request: https://projects.blender.org/blender/blender/pulls/146050
2025-09-11 05:01:37 +02:00
Campbell Barton
1e7587f761 Cleanup: follow our API naming conventions
Minor changes to recently added undo API call.
2025-09-11 12:59:32 +10:00
Campbell Barton
77c76ccdb8 Cleanup: sort files 2025-09-11 12:41:33 +10:00
Campbell Barton
cf807a44bd Cleanup: use view2d prefix for consistency 2025-09-11 12:13:11 +10:00
Sean Kim
e9295fad65 Sculpt: Avoid setting vertex normal to the zero vector
It is possible for the simple vertex normal calculated during Paint
BVH normal updates to have a length of 0 if the connected faces cancel
each other out. This is a generally unlikely scenario, but will almost
always lead to further corruption of the mesh with the new normal.

If we detect this case, set the vertex normal to (0, 0, 1)

Pull Request: https://projects.blender.org/blender/blender/pulls/146004
2025-09-11 01:20:10 +02:00
Sean Kim
391377c804 Fix #145932: Relax Face Set brush can corrupt mesh
Caused by NaN propagation. If a face becomes 0 area, the resulting
normal becomes a zero vector. This normal cannot be used to calculate
the distance to a plane.

To fix this case more generally, we clamp the strength to 1.0 at most
to avoid introducing scenarios where a given vertex can have a zero
vector normal.

Pull Request: https://projects.blender.org/blender/blender/pulls/145952
2025-09-10 21:45:49 +02:00
John Kiril Swenson
8279e0e95c Fix: VSE: Memory leak with slip operator
An early exit when there were no strips to slip did not have a
corresponding `MEM_delete`.
2025-09-10 21:27:32 +02:00
Casey Bianco-Davis
163dfd7a9a Fix: Grease Pencil: Assert when converting to Catmull Rom or Poly
These `BLI_assert`s could be triggered by converting curves that were
already the desired type.

`curves.is_single_type` Checks if all of the curves are the desired
type, not if all of the selected curves are the type.
So the asserts can be triggered when only the destination type curves
are selected and other curve types exist.

Pull Request: https://projects.blender.org/blender/blender/pulls/145529
2025-09-10 21:01:03 +02:00
Clément Foucault
5561b97aa0 Cleanup: Metal: Avoid MSL warning in curves interpolation shader 2025-09-10 20:26:53 +02:00
Brecht Van Lommel
1439b11de9 Fix: Build error in lite build without USD and Alembic 2025-09-10 19:37:30 +02:00
Falk David
491a39b0c6 VSE: Strip Modifier Icons
Add missing icons to Video Sequencer modifiers:

- [x] Brightness/Contrast
- [x] Color Balance
- [x] Curves
- [x] Hue Correct
- [x] Mask (uses the existing `MOD_MASK`)
- [x] Tone Map
- [x] White Balance

Co-authored-by: Pablo Vazquez <pablo@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/145739
2025-09-10 19:27:43 +02:00
Falk David
02cd00dc75 VSE: Python: Add RNA type for mask modifier
The "Mask" modifier didn't have a corresponding
RNA type.

The mask settings are already stored as part of the
`StripModifierData` which is probably why the type
was never added.

Nevertheless, having an RNA type means we can define
a UI name, description, and icon.

Pull Request: https://projects.blender.org/blender/blender/pulls/146039
2025-09-10 18:40:43 +02:00
Bastien Montagne
d77cd0e8b5 Fix #145848: Crash when switching view layer after undoing ID deletion.
The root of the issue is that depsgraph relies on `ID::session_uid` to
identify and retrieve its own cached evaluation data for an ID,
including the memory for the evaluated ID data (e.g. used as keys to
retrieve IDInfo data stored in `DepsgraphNodeBuilder::id_info_hash_`).

This breaks in undo case, when a previously deleted ID is re-read from
the memfile, as it has not matching 'old' ID which address could be
reused. So while keeping its previous `session_uid`, it has a completely
new address, while the 'cow ID' retrieved from the depsgraph will still
have its `orig_id` point to the old address.

This commit fixes the issue by re-setting the `id_orig` pointer of the
`id_cow` evaluated data, when it already exists and is re-used.

This allows to keep the same `session_uid` for IDs on undo, even when
they are 're-created'. However, it is somewhat more risky than !146028.

Pull Request: https://projects.blender.org/blender/blender/pulls/146029
2025-09-10 17:33:42 +02:00
Sergey Sharybin
3ef2df3893 Cycles: Remove Use Tiling option
Always enforce tiling of some size, up to the 8k tile size.

Rendering very big images without tiles have a lot of challenges.
While solving those challenges is not impossible, it does not seem to
be a practical time investment.

The internals of the way how Cycles work, including Cycles Standalone
is not affected by this change.

A possible downside is that path guiding might not work exactly how one
would expect it to due to lack of information sharing across multiple
tiles. This is something that never worked nicely, and camera animation
and border render has the same issues, so it is not considered a stopper
for this change.

Fixes #145900

Co-authored-by: Brecht Van Lommel <brecht@blender.org>

Pull Request: https://projects.blender.org/blender/blender/pulls/146031
2025-09-10 17:15:07 +02:00
Hans Goudey
5afaa1c4bd Nodes: Move value to Combine XYZ from link-drag-search
Same as was implemented for some other cases in commits like
1a4c16a784

Pull Request: https://projects.blender.org/blender/blender/pulls/146033
2025-09-10 16:59:29 +02:00
Brecht Van Lommel
6d25aad41f Cycles: Remove Alembic procedural
This was added for a fairly specialezed use case and is no longer being used
as far as we know. A future replacement would be to add a USD/Hydra procedural,
for which most of the groundwork already exists.

Pull Request: https://projects.blender.org/blender/blender/pulls/146021
2025-09-10 16:39:01 +02:00
Clément Foucault
6148d50105 GPU: Shader: Remove section of code guarded by #if directives
These lines can be removed to avoid parsing them.
This allow to keep the same processing for shared host files.

Also removes a few lines of code to reduce the size of
shader sources.

This also contains a rewrite of the include parsing using
the shader parser.

Pull Request: https://projects.blender.org/blender/blender/pulls/146025
2025-09-10 16:35:41 +02:00
Jacques Lucke
f89b24ba8d Fix #146020: bad assert for supported socket types
The tree-type argument for the `supports_socket_type` type should be
allowed to be anything. There doesn't seem to be a great benefit in
restricting it. Always returning false when the tree type is not supported
makes sense.

In addition it would also be good to double-check that one can't add
the bundle and closure nodes in the compositor yet. From my basic tests,
that seems to work as expected.
2025-09-10 16:09:45 +02:00
Jacques Lucke
10353b3d69 BLI: reduce binary size for non-performance sensitive virtual arrays
This adds a `VArray::from_std_func` next to the existing `VArray::from_func`. It
does almost the same but inserts some type erasure by using `std::function`
which avoids the need to instantiate the full virtual array. This has is a bit
slower at run-time, but in practice there are some cases where it doesn't
matter. Currently, this patch reduces binary size by ~35kb. Not too much, but
still good or such a simple change.

Pull Request: https://projects.blender.org/blender/blender/pulls/146011
2025-09-10 15:45:56 +02:00
Habib Gahbiche
ac84e076db Nodes: Deactivate viewer if shortcut exists and viewer is active
Original right click select:
https://blender.community/c/rightclickselect/wRzz/

Pressing 1,2,3,... to activate a viewer with shortcut now toggles that
viewer instead of always activating it. See PR description for examples

The code is generic but the compositor requires one viewer to be active
so only geometry nodes viewers are supported.

Pull Request: https://projects.blender.org/blender/blender/pulls/145509
2025-09-10 15:17:16 +02:00
Leon Schittek
c954d6cdfd Nodes: Add tools for "Mute Links" and "Add Reroute" operator
Expose the "Mute Links" add "Add Reroute" operator as active tools
in the node editor similar to the "Links Cut" tool.

This also works around #134153 by adding additional tools in the same
button group to the toolbar.

Pull Request: https://projects.blender.org/blender/blender/pulls/140429
2025-09-10 15:12:37 +02:00
Clément Foucault
19fb5652af Cleanup: GPU: Avoid warning in shader parser code 2025-09-10 12:48:31 +02:00
Clément Foucault
36b80971de Cleanup: EEVEE: Typo in interlieved_gradient_noise 2025-09-10 12:47:49 +02:00
Clément Foucault
455d749c52 Fix: GPU: Implicit cast from int to bool in assert()
These are not valid in GLSL.
2025-09-10 12:20:59 +02:00
Clément Foucault
f0806ac6b4 Fix #145743: EEVEE: Instance leak when Stereoscopy is enabled
The `eevee_render_to_image` can be called multiple time in the
case of multiview rendering.

To avoid the leak, free the previous instance before allocating
the new one. Reusing the instance doesn't seems to work here.

Another fix will follow this one to fix it more gracefuly.
This fix is kept simple for backporting purpose.

Pull Request: https://projects.blender.org/blender/blender/pulls/146015
2025-09-10 12:18:49 +02:00
Clément Foucault
b3dec6617a Fix: GPU: Avoid accessing GLContext after it is destroyed
This error showed up inside an ASAN build.

Candidate for backporting in 4.5 as this can happen when simply
rendering with EEVEE or Workbench.

Pull Request: https://projects.blender.org/blender/blender/pulls/146017
2025-09-10 12:17:43 +02:00