Commit Graph

150077 Commits

Author SHA1 Message Date
Jacques Lucke
6ddebc0888 Fix #132831: memory leak when deleting simulation zone
The leak happened because the bake data of the removed zone was only partially freed.

Pull Request: https://projects.blender.org/blender/blender/pulls/132867
2025-01-09 18:19:53 +01:00
Falk David
6f46d5e439 Cleanup: Various C++ cleanups to BKE_material.hh
Pull Request: https://projects.blender.org/blender/blender/pulls/132870
2025-01-09 18:11:48 +01:00
Falk David
d413b0064f Cleanup: Move BKE_material.h to C++
The `BKE_material.h` is only renamed to `.hh` to preserve
the history of the file. Changes to the file are done in
the following commit.
2025-01-09 18:11:46 +01:00
Hans Goudey
b05ef8f739 Nodes: Avoid string copy drawing reroute nodes, use StringRef
Also return early to avoid adding an empty label button.
2025-01-09 12:07:53 -05:00
Hans Goudey
0816234d65 Refactor: Make BMesh normals draw extraction similar to Mesh
This creates more boilerplate code, but it's easier to extend,
it's follows the same structure as the mesh extraction, and
it's more aligned to planned future performance improvements.

Pull Request: https://projects.blender.org/blender/blender/pulls/132866
2025-01-09 17:45:54 +01:00
Philipp Oeser
50648c72d7 Fix #132784: Affect only Origins no longer displays an axis
Was missed in the move to Overlay Next.
Now bring it back in `class Axes: Overlay`

Thx @pragma37 making me aware chaging draw state (not writing depth)
can be done using a subpass!

Pull Request: https://projects.blender.org/blender/blender/pulls/132794
2025-01-09 17:40:40 +01:00
Jacques Lucke
038159e96b Refactor: Nodes: improve node tree update API
Main goals of this refactor:
* Make it more obvious which update function should be used.
* Make it more obvious which parameters are required by using references instead
  of pointers.
* Support passing in multiple modified trees instead of just a single one.

No functional changes are expected.

Pull Request: https://projects.blender.org/blender/blender/pulls/132862
2025-01-09 17:00:05 +01:00
Jacques Lucke
259c98fa72 Nodes: add utility method to check node type
The `bNode.type_legacy` is still used in many places to check if a node is a
specific type. However, going forward it's better to rely more on the idname
than on this legacy integer type. Some more information is available in #132858.

The added utility method can be used like so:
`node->is_type("GeometryNodeMenuSwitch")`. Previously one would have written
`node->type_legacy == GEO_NODE_MENU_SWITCH`. The `is_type` method internally
checks that the passed in string is a valid node identifier to make it more
likely that we catch typos early.

Pull Request: https://projects.blender.org/blender/blender/pulls/132863
2025-01-09 16:59:47 +01:00
Julian Eisel
04f570a01f Refactor: UI: Move View2D files into directory
As proposed in #98518, this moves all `View2D` files into
a `source/blender/editors/inteface/view2d/` directory. This helps
keeping the `interface/` directory clean. In general I think we should
promote a more modular thinking, where coherent parts of the code form a
module or sub-module. The directory structure and its files can reflect
that nicely.

Pull Request: https://projects.blender.org/blender/blender/pulls/132853
2025-01-09 16:55:54 +01:00
Bastien Montagne
4032b853c3 RNA: Add basic tests for the path_from_id() function.
Simply load factory startup file, and recursively iterate over
all (valid) `POINTER` and `COLLECTION` properties of all IDs.

NOTE: A few cases are currently returning invalid rna paths (at least
from quick look), these are skipped for now.

Pull Request: https://projects.blender.org/blender/blender/pulls/132809
2025-01-09 16:46:37 +01:00
Nathan Vegdahl
2d1d4000c7 Fix: invalid memory access in animrig::versioning unit tests
The issue was that we were passing a pointer-to-a-pointer to
`BLI_addtail()`, which expects a pointer to something castable to a
`Link`. This in turn led to an invalid memory access when trying to
access the fields of the supposed `Link`.

This fixes the issue by passing a pointer to a zero-initialized `Link`
instead.

This also takes the opportunity to more simply zero-initialize the
`bAction` structs used in the tests as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/132860
2025-01-09 15:57:33 +01:00
Sybren A. Stüvel
c104fa95d9 Fix: don't use nullptr for std::optional<StringRefNull>
`StringRefNull` cannot reference a `nullptr` string, and so
`uiDefAutoButR()` should get a `std::nullopt` instead of `nullptr`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132852
2025-01-09 15:37:36 +01:00
Jacques Lucke
971c96a92c Nodes: rename integer type of nodes to type_legacy
The new description for `bNode.type_legacy`:
```
  /**
   * Legacy integer type for nodes. It does not uniquely identify a node type, only the `idname`
   * does that. For example, all custom nodes use #NODE_CUSTOM but do have different idnames.
   * This is mainly kept for compatibility reasons.
   *
   * Currently, this type is also used in many parts of Blender, but that should slowly be phased
   * out by either relying on idnames, accessor methods like `node.is_reroute()`.
   *
   * A main benefit of this integer type over using idnames currently is that integer comparison is
   * much cheaper than string comparison, especially if many idnames have the same prefix (e.g.
   * "GeometryNode"). Eventually, we could introduce cheap-to-compare runtime identifier for node
   * types. That could mean e.g. using `ustring` for idnames (where string comparison is just
   * pointer comparison), or using a run-time generated integer that is automatically assigned when
   * node types are registered.
   */
```

Pull Request: https://projects.blender.org/blender/blender/pulls/132858
2025-01-09 15:28:57 +01:00
Jacques Lucke
2f04f2184c Nodes: remove unused NOD_static_types.h file
In various previous commits all the remaining usages of this file were removed
(b1d7e8fcb1, b1d7e8fcb1, 2afd946ba, b43e2168e3). Now this file is finally
completely unused, which means we can remove it.

The main reason why we don't want this file is that it heavily relied on the
preprocessor and makes it hard to decentralize implementation details of
individual nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/132855
2025-01-09 14:05:48 +01:00
Alaska
2874da3f25 Tests: Add Cycles test for baking from selected object
This scene consists of two spheres (shade flat and shade smooth)
having their normals baked onto a plane using the "Bake from selected"
option.

Ref: blender/blender#132716
Ref: blender/blender-test-data!37
2025-01-09 13:38:51 +01:00
Lukas Tönne
fd83be0fa5 Fix: Grease Pencil: Strokes are locked when material index is out-of-range
When the material index of a stroke is out-of-range of the material slots, the
strokes are never editable. This makes it hard to even re-assign the material or
otherwise remove such strokes. A negative index can happen when curves are added
while a Grease Pencil object has no material slots (see #123887).

Since `material_index` is a generic attribute and should be allowed any value,
strokes with out-of-range indices should be considered editable by default.
This patch slightly changes the `get_editable_material_indices` function for
tools, such that only __valid__ materials with the "Locked" flag set are
considered non-editable.

Pull Request: https://projects.blender.org/blender/blender/pulls/132806
2025-01-09 13:34:31 +01:00
Falk David
b4d5e256cb Fix #132828: Grease Pencil: "Smooth Stroke" smooths end points of ranges
The `smooth_curve_attribute` function smoothes individual
ranges of points that are selected within a stroke.

When smoothing a single range, the `gaussian_blur_1D` function
shouldn't treat this range as cyclic.

Instead, we check if the entire curve is selected and only use
the `cyclic` boolean in this case. For ranges, we always
treat them as non-cyclic.

Pull Request: https://projects.blender.org/blender/blender/pulls/132850
2025-01-09 13:19:37 +01:00
Alaska
4ca207a145 Cycles: Align Camera data output between SVM and OSL
The `ZDepth` output of the camera data node was different between SVM
and OSL.

SVM would output the `ZDepth`, with negative distances for points
behind the camera. While OSL would output the absolute of the distance,
which resulted in points behind the camera becoming positive.

Align OSL to SVM and allow outputting the negative distance as it
allows users to differentiate between what's in front or behind the
camera.

Pull Request: https://projects.blender.org/blender/blender/pulls/132837
2025-01-09 12:44:52 +01:00
Jacques Lucke
b1d7e8fcb1 Nodes: define node rna without NOD_static_types.h
This removes the last usage of `NOD_static_types.h` after #132815. It does so by
essentially inlining it into `rna_nodetree.cc` in a more compact way.

To avoid the need for especial cases for some nodes, all node-specific functions
now also take the `BlenderRNA` as parameter instead of only the `StructRNA`.
This allows such node-specific functions to register additional subtypes if
necessary. I think it should be possible to use this to fully define more
complex dynamic nodes such as repeat zone nodes, but that's not included in this
patch.

Now a line to define a node rna struct looks like so: `define("GeometryNode",
"GeometryNodePointsOfCurve");`

The `GeometryNode` part of it is intentionally somewhat redundant to allow for
better searchability.

Pull Request: https://projects.blender.org/blender/blender/pulls/132823
2025-01-09 12:20:56 +01:00
Jacques Lucke
0fa4c6da18 Refactor: Nodes: avoid using NOD_static_types.hh when creating node types
This removes the second to last usage of `NOD_static_types.hh` which we intend
to remove. A nice benefit is that the idname is now finally more explicit when a
node is registered. Previously it was difficult to search for the definition of
a node in the code when one had only the idname, which is the main identifier
for nodes.

The main change is in `node_type_base`.

Pull Request: https://projects.blender.org/blender/blender/pulls/132815
2025-01-09 12:19:57 +01:00
Lukas Tönne
a46def32b4 Fix #123887: Clamp the Grease Pencil material index in GPU buffers to avoid invalid UBO lookup
The material index in Grease Pencil attributes can be negative, since they are a
generic attribute. The shader, however, requires clamping of the material index
to avoid an invalid lookup. This was already happening for the material buffer
setup (`grease_pencil_object_cache_populate`), but not for the actual VBO.

Fixes #131670

Pull Request: https://projects.blender.org/blender/blender/pulls/132804
2025-01-09 11:37:46 +01:00
Jeroen Bakker
59bc024fd8 Fix #132752: Image Engine: Clearing when no image present
When no image is present the depth and color buffers aren't correctly
cleared, resulting in showing the previous buffers.

Replaced the clear on bind with regular clearing operations.

Alternative implementation for !132751

Pull Request: https://projects.blender.org/blender/blender/pulls/132844
2025-01-09 09:31:44 +01:00
Campbell Barton
1fe52f43e4 Fixes #93103: Crash entering negative numbers for some modifiers
Modifiers: Decimate, Smooth, Corrective Smooth, Laplacian Smooth, Laplacian Deform
& Grease Pencil Simplify allowed negative numbers for values
representing iterations/steps.

Ref: !131479

Co-authored-by: Jason C. Wenger <jcwenger@gmail.com>
2025-01-09 13:27:33 +11:00
Campbell Barton
f829fefabe CMake: disable WITH_PIPEWIRE for lite builds 2025-01-09 13:07:54 +11:00
Campbell Barton
9d0aabe64a Tools: add "--skip-last" argument to addr2line_backtrace for convenience
The last address in a backtrace often reference symbols before main()
which aren't found, making the command take much longer to run.
2025-01-09 12:32:08 +11:00
Campbell Barton
8ab4e8c7ad Fix crash in weight paint's loop selection
Finding the closest edge could use an uninitialized value.

Part of #119932.

Co-authored-by: Philipp Oeser <philipp@blender.org>
2025-01-09 10:36:06 +11:00
Jesse Yurkovich
08e63c4f3e USD: Make consistent Primvar checks during attribute import
- Remove redundant .HasValue() calls
  We are calling `GetPrimvarsWithValues` which will do the HasValue
  checks for us already.
- Consistently skip non-array primvars
  We only want to import in the array attributes. Consistently check for
  this in each of our loops.

Pull Request: https://projects.blender.org/blender/blender/pulls/132816
2025-01-09 00:16:18 +01:00
Campbell Barton
69cc4c708d Cleanup: clarify naming & simplify "+" drawing for UV grid
- Prefer term "size" over "width" as this was used for the height.
- Simplify calculation for drawing the "+".
- Add note that the "+" is slightly off-center (ref #112653).
2025-01-09 10:06:43 +11:00
Iliya Katueshenock
9d13e39585 Geometry Nodes: Avoid extra attribute copy in Sort Elements node
Implicit sharing dramatically reduces the cost of coping geometry
which is extremely helpful for read-only and slight modification.
But case of Sort Elements node implies a total rewrite of whole domain,
so implicit sharing only adds redundant cost for write access. This fix
uses kernel API to create domains without attributes, manually forcing
implicit sharing for offset indices and uses kernel attribute copy
functions to force sharing for all attributes when this is possible.
In all other cases new attributes are created from scratch and copied
as re-ordered only once.

In attached example file shown the difference depend on the number of
attributes on the mesh, benchmark result:

| Attributes | Before | After |
| ---------- | ------ | ----- |
| 1          | 2 ms  | 1.5 ms |
| 5          | 5 ms  | 4 ms   |
| 10         | 9 ms  | 6 ms   |
| 50         | 45 ms | 30 ms  |
| 100        | 89 ms | 59 ms  |

Pull Request: https://projects.blender.org/blender/blender/pulls/117910
2025-01-08 23:06:22 +01:00
Hans Goudey
9945563fac Mesh: Avoid computing corner normals for drawing if unnecessary
Only compute face corner normals if they are required for computing
tangents or if it's required because of the combination of sharp edges
and faces.

Pull Request: https://projects.blender.org/blender/blender/pulls/132821
2025-01-08 21:42:20 +01:00
Sean Kim
a3f523fd61 Sculpt: Add multires version of current performance benchmarks
This commit modifies the `performance/api/sculpt.py` test to add a new
set of tests that run with the multires modifier present. New tests
have `multires_` prepended to the brush name to group them separately
from the existing mesh tests.

Part of #130772

Pull Request: https://projects.blender.org/blender/blender/pulls/132822
2025-01-08 21:32:57 +01:00
Harley Acheson
5ec2547ab0 Fix #132386: Scale Tree View Hierarchy Lines with 2D Zoom
As the local zoom in changed, scale the vertical start and end of the
hierarchy lines by the 2D aspect value so they remain lining up with
the other content.

Pull Request: https://projects.blender.org/blender/blender/pulls/132817
2025-01-08 21:02:17 +01:00
Sean Kim
56128cdf9a Cleanup: Add developer docs link in benchmark.py for more information
Pull Request: https://projects.blender.org/blender/blender/pulls/132814
2025-01-08 20:35:51 +01:00
Brecht Van Lommel
1210cc5d52 Fix: Cycles random crash loading images
Add mutex lock to avoid accessing vector while it's getting resized.

Found through a flaky test. Thanks Sergey and Alaska for the help
investigating this.

Pull Request: https://projects.blender.org/blender/blender/pulls/132811
2025-01-08 20:32:31 +01:00
Harley Acheson
dbe50711ce Fix #132097: Color Tooltips Without Alpha
Currently the popup tooltips for colors shows the same display whether
the color supports alpha or not. This can be confusing when what is
shown could imply that alpha is changeable when it is not.  This PR
makes it clear by not showing alpha values for RBA colors.

Pull Request: https://projects.blender.org/blender/blender/pulls/132287
2025-01-08 20:23:38 +01:00
Jacques Lucke
db7ff834c9 Refactor: Nodes: remove context argument from propagation function
The part that used the context does not seem to be necessary anymore. If the
given tree has any update tag set, the same notifiers will be sent anyway by the
`tree_changed_fn` callback.

If it turns out that we are now missing some notifier, then we have to change
the caller. It either has to call the proper `BKE_ntree_update_tag_*` function,
or create the notifier directly.

This change helps to generalize the concept of propagating changes in original
data, because the context is rarely available.

Pull Request: https://projects.blender.org/blender/blender/pulls/132810
2025-01-08 19:45:50 +01:00
Harley Acheson
e65b267a2c Fix #118418: Update Info Editor for Non-Owned OPERATOR_FINISHED
The referenced bug report shows the processing of a report by the UI
creating a status bar banner but not informing the Info editor. This is
because for this type of report we are only sending a notifier of
ND_SPACE_INFO_REPORT when the operator finishes with OPERATOR_CANCELLED
and not with OPERATOR_FINISHED. The report is only shown in Info on the
next refresh. This PR just sends the notifier on both canceled and
finished.

Pull Request: https://projects.blender.org/blender/blender/pulls/132315
2025-01-08 19:34:35 +01:00
Jacques Lucke
26609d3282 Fix: typo in group output node ui name
Caused by 2afd946ba6.
2025-01-08 19:32:43 +01:00
Miguel Pozo
da7de66ade Fix #132156: Overlay-Next: Scaled camera selection
Add missing matrix normalization.
2025-01-08 19:24:30 +01:00
Jacques Lucke
0949a54060 Cleanup: remove unused DefNode macro argument 2025-01-08 18:48:10 +01:00
Julian Eisel
cce7a862dc Fix: UI: Incorrect tree view hierarchy line drawing
Scrolling a tree view could result in incorrectly drawn hierarchy lines, see
https://projects.blender.org/blender/blender/issues/132386#issuecomment-1384663

Two issues:
- The index of the last descendant of an item was off by one
- When a hierarchy line was skipped because it was scrolled out of view, the
  following indices would be wrong.
2025-01-08 18:37:18 +01:00
Sebastian Parborg
a01b70f70a Linux: Remove deprecated KDE flag in our .desktop file
This flag was only used in earlier KDE Plasma 5.x releases.
KDE Frameworks 5.86.0 removed this flag which released in 2021.

From what I can tell there are no maintained versions of Kubuntu, Debian,
etc that ships with an older version, so this should be safe to remove.
2025-01-08 18:22:14 +01:00
Harley Acheson
a7334db09b Fix #70246: Don't Clear Tooltips on Timer Events
While processing handlers we are currently clearing tooltips if we
process any keymap handlers. This behavior was added in 8f8e91987b
so that tooltips didn't remain showing after operators started like
walk navigation. However this keeps any tooltips from showing while
animation is playing. This PR just alters the clearing to not do so
if the event is from a timer. That way we clear tooltips only for
deliberate interactive actions.

Pull Request: https://projects.blender.org/blender/blender/pulls/132539
2025-01-08 18:10:02 +01:00
Hans Goudey
2afd946ba6 Refactor: Nodes: Move UI name out of NOD_static_types.h header
As part of an effort to remove this header, reducing the need for macro/
include magic and making node definitions more independent, move
the node UI name and description definitions to each node's file.
The UI name, description, and idname are also moved to std::string
instead of char arrays.

Similar to b43e2168e3.

Pull Request: https://projects.blender.org/blender/blender/pulls/132708
2025-01-08 18:07:11 +01:00
Jacques Lucke
155fae3316 Fix #127056: Reset to default operator does not work for menu inputs
Two places had to be fixed to support this:
* `RNA_property_enum_get_default` needs to handle the case when the property is
  backed by an `IDProperty`. This is just like in
  `RNA_property_float_get_default`.
* The default value has to be copied from the node group interface to the
  geometry nodes modifier inputs.

Pull Request: https://projects.blender.org/blender/blender/pulls/132740
2025-01-08 16:45:10 +01:00
Jacques Lucke
e853978edb Git: ignore compile_commands.json
The guide for using clang suggests to link the `compile_commands.json` file into
the source repo to make it easier for clangd to find it. This works well in my
test but has the problem that git wants to track that file. This patch adds the
`compile_commands.json` file to `.gitignore` to avoid committing it
accidentally.

Pull Request: https://projects.blender.org/blender/blender/pulls/132796
2025-01-08 16:42:50 +01:00
Hans Goudey
13b79072e2 Refactor: Nodes: Use C++ new, std::string in node/socket/tree types
Make the type structs non-trivial, use new and delete for allocation and
freeing, and use std::string for most strings they contain. Also use
StringRef instead of char pointers in a few places. Mainly this improves
ergonomics when working with the strings.

Pull Request: https://projects.blender.org/blender/blender/pulls/132750
2025-01-08 16:34:41 +01:00
Bastien Montagne
b0e5b6810c Fix building on linux with clang 18.
Yet another missing include, caused by 8f8ae302ba presumably.
2025-01-08 15:58:10 +01:00
Bastien Montagne
be936025ea Cleanup: Replace some asserts by static asserts. 2025-01-08 15:50:52 +01:00
Sergey Sharybin
db6606dab9 Buildbot: Allow specifying explicit HIP version for Linux
Previously it was a single version specification which was only
used by Windows.

In practice we actually have two different SDKs for Linux and
Windows. This change makes it possible to specify explicit HIP
version for Linux which could be different from Windows.

No functional changes expected, the same HIP SDK version is
used, just explicitly.

Ref #131976

Pull Request: https://projects.blender.org/blender/blender/pulls/132694
2025-01-08 15:24:35 +01:00