Previously, the subdivision level was clamped to 11. While such high subdivision
levels are rare, there are still use-cases for going above those if hardware
resources allow for it.
This patch sets the hard upper limit to 15. When going above that, even
subdividing a single triangle would result in data that's too large to store in
`Mesh` because it has too many face corners for an `int`. Furthermore, instead
of clamping the subdiv level, there is an error when going above that. This
might help when accidentally connecting a value >= 16 to the subdiv level input.
Pull Request: https://projects.blender.org/blender/blender/pulls/140057
In Grease Pencil, when pasting geometry from the clipboard, the pasted
geometry should always be selected, so that the user can continue
working with it. In some cases though, the geometry wasn't selected.
And selection failed when there was a mismatch between the selection
domain on the clipboard and the active selection domain when pasting
(e.g. selection domain on the clipboard was 'Point' and the active
selection domain was 'Curve').
This PR ensures that the pasted geometry is always selected, in the
correct selection domain.
Pull Request: https://projects.blender.org/blender/blender/pulls/140127
When autokeying properties, it didn't deselect
keys in editors like it does now for other ways of keying.
------
Part of #138877
Not tagging this PR as a fix because it doesn't completely resolve the issue
Pull Request: https://projects.blender.org/blender/blender/pulls/139886
Previously, autokeying properties from the UI (outliner, n-panel)
would snap to full frames even when the current frame is a subframe.
This PR also fixes the display of properties in the
outliner when subframes are used. If the property is keyed
on the current subframe it is now yellow.
Found while trying to fix#136372
Pull Request: https://projects.blender.org/blender/blender/pulls/140117
When applying a pose asset created with 4.4 and later,
autokeyframing no longer worked. That is because poses
are generated without any FCurve groups now, and the
code assumed there to be an FCurve group for every
bone in the pose action.
I decided to remove that assumption and instead use
`BKE_action_find_fcurves_with_bones` which iterates
fcurves in an action+slot combination
and calls the provided callback. This is the logic that
the code to apply a pose uses as well.
Pull Request: https://projects.blender.org/blender/blender/pulls/139794
In 884ef238c0 line art added a safe guard in depsgraph iterator to
properly handle dupli-objects, but it should check original objects id
for inclusion instead of evaluated objects. Now dupli-objects will show
up correctly.
Pull Request: https://projects.blender.org/blender/blender/pulls/140095
Slight adjustment to the minimum area snapping size to ensure that
Properties snaps to a minimum that shows the category tabs. Currently
this snaps nicely at 1X scale but does not show the categories at 2X.
Pull Request: https://projects.blender.org/blender/blender/pulls/140241
This commit effectively reverts the changes introduced in
23951e1b12 that changed how the brush
strength curve calculation works. Since that commit, a number of high
severity regressions have been reported, and the decision to remove
filtering from this method now seems dubious and likely to cause further
problems.
Other interim fixes that were made have not been reverted, as they are
generally correct to do, even if they cause an extra loop over all of
a node's factors & distances. In general, all existing unnecessary calls
to `filter_distances_with_radius` are planned to be removed in 5.0.
Finally, to address the original issue that the mentioned commit was
intended to fix, we now check distance for the constant falloff and
zero out the factor if necessary.
Pull Request: https://projects.blender.org/blender/blender/pulls/140181
As with the previous fix for #119560, this does not address the problem
in OpenColorIO itself but at least catches the exception to avoid crashing.
Which might have also happened with invalid OpenColorIO configurations.
Pull Request: https://projects.blender.org/blender/blender/pulls/140145
The check for Mesa needed to be before the more coarse
check about an AMD GPU. Also, it seems the newer drivers
do not have `X.Org` in the vendor string.
Checking for `Mesa` in the version string seems to be
the correct way.
Pull Request: https://projects.blender.org/blender/blender/pulls/140204
Fixed by not doing async loading and always stage correct
texture reference.
Unfortunately the code is getting a bit messy since the
texture loading is not done at the GPUMaterial level.
So we need one async and one synchronous path inside
`PassBase<T>::material_set`.
`ImageGPUTextures` now contains references to the location
of the future `GPUTexture *`.
Also fix#140001
Pull Request: https://projects.blender.org/blender/blender/pulls/140203
Edit the language list to make it simpler to scan.
- Display languages in a form "Language (Variant)", such as
"English (US)" instead of "American English" and
"Portuguese (Brazil)" instead of "Brazilian Portuguese".
This allows alphabetical sorting by language first.
This does not apply to endonyms (languages in their own language).
- Use a dash instead of parentheses to separate the endonyms.
- Deduplicate languages (Automatic, American English, British
English), which all are in English and don't appear in another
language.
- Remove language categories as headers. They are replaced with
percentages in the language tooltips. The percentages are
generated in utils_languages_menu.py and stored in
locale/languages.
Co-authored-by: Bastien Montagne <bastien@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/140087
When switching render output between different formats (e.g.
ffmpeg video and png images), the previously used ffmpeg settings
were lost if audio codec was set to "No Audio" (which is the default).
Pull Request: https://projects.blender.org/blender/blender/pulls/139878
When calculating the cavity factor, it is possible for the relative
distance of all traversed connected vertices to be zero. This results in
a division by zero which does not get clamped correctly to the expected
[0.0, 1.0] bounds. Prior to 4.2, this would have had no effect, as the
processing of this vertex would be have been skipped entirely. Due to
changes during the brush refactor, this flaw in the existing code was
exposed.
Pull Request: https://projects.blender.org/blender/blender/pulls/140168
Usually, this enum should only ever be compared with `==`.
Confusingly, however, to check if a strip is an effect, one must
'bitwise-and' it instead. This can backfire if e.g. one tries to do
(strip->type & STRIP_TYPE_IMAGE) which doesn't work.
Make sure we only ever 'and' against the type enum when checking if
it is an effect. There was only this one case that didn't adhere.
Partial revert of 5102880f51. That commit decreased pen tablet drag
threshold as pressure is added. Unfortunately, although this allowed a
quicker response to start of drag, this also increased the difficultly
of initiating a press when both actions are available. With numerical
inputs for example, although dragging is more responsive clicking into
the input to edit was more difficult.
Pull Request: https://projects.blender.org/blender/blender/pulls/140066
Introduced with 23951e1b12
The multiplane scrape brush uses two separate distances, one in world
space and the other in local brush space. Both need to be filtered on
for determining the brush strength.
Pull Request: https://projects.blender.org/blender/blender/pulls/140143
Similar to the recent fix 457cccd964.
There was another code path which could pass in the wrong time into USD
for certain Mesh Sequence Cache scenarios.
I was not able to craft a faulty scenario by hand to observe a real
problem though. The scenario begins by importing a USD file needing a
Mesh Sequence Cache modifier and then attaching a particle system (like
Hair) to the object. This will trigger the specific check calling into
`can_use_mesh_for_orco_evaluation` with the wrong time.
This makes the code path more explicit and passes in the correct time to
USD regardless now e.g. frame 28 vs time 1.166666666666667 (24fps)
Pull Request: https://projects.blender.org/blender/blender/pulls/140092
Prevent race conditions caused by calling `GPUWorker::wake_up` when the
worker is not waiting.
Found to be an issue in #139627, since `wake_up` is likely to be called
before the thread has fully started.
Pull Request: https://projects.blender.org/blender/blender/pulls/139842
When pressing Ctrl to snap the playhead while scrubbing,
Blender could crash while trying to snap to the first key.
This would happen if the current frame was higher than the
left keyframe, but the difference was less than the `BEZT_BINARYSEARCH_THRESH`.
Pull Request: https://projects.blender.org/blender/blender/pulls/140122
In Grease Pencil, when using the tools in Sculpt Mode and Vertex Paint
mode, the check on editable layers wasn't entirely accurate. There was
a strict check on an editable _active_ layer, but since the tools work
on _all_ editable layers, the check should be wider: if there is _any_
editable layer, the tool can work.
That is fixed in this PR. Now the tools can be used when, for example,
a layer group is active or when the active layer is hidden, but there
are other editable layers present.
In Vertex Paint mode there was an additional issue: with Auto Keying
enabled, a new keyframe was created for the active layer only. A new
keyframe should be created for _every_ editable layer. As is the case
now with this PR.
Pull Request: https://projects.blender.org/blender/blender/pulls/140119
By definition, Bounds for single points (size zero) are empty (this
matches BLI_rct behavior), so doing an intersect will actually fail.
So to resolve, use the existing `is_point_inside_bounds` for single-
point-curves.
Pull Request: https://projects.blender.org/blender/blender/pulls/140124
Code selecting objects in collections that have been instanced was only
handling objects directly owned by the collection, not the objects in
the hierarchy of children collections.
The objects from the whole hierarchy need to be hanlded here, since
children collections will not be processed (as they are already
instanced by their parent one).
Pull Request: https://projects.blender.org/blender/blender/pulls/140068
Previous implementation allows to move VKBuffers, but didn't do a
proper std::move. On second thought it is a bad idea to be able to move
GPU resources. This PR removes the ability to move the buffer and
replace the usages with a unique ptr.
Pull Request: https://projects.blender.org/blender/blender/pulls/140103
The color picking reads 3 channels from a 4 channel texture. In the
common case the data conversion is required. Data conversion happens on
all 4 channels, but the backed memory only has 3 channels.
This is a workaround as the actual solution needs to work in many
different situations. Previous solution had to many issues that we
reverted the solution. This PR adds a local workaround specific to color
picking.
In Blender 5.0 we want to add test cases for all situations and
implement a solution that works better.
Pull Request: https://projects.blender.org/blender/blender/pulls/140101
Currently, we are forced to use `reinterpret_cast` (or c-style-casts) when
converting between `ID` and the actual data-block types like `Object` and
`Mesh`. While `reinterpret_cast` does preserve constness, it does nothing to
make sure that a cast is actually valid. This patch adds `blender::id_cast`
which can be used as a drop-in replacement of `reinterpret_cast` in supported
cases.
It supports a couple of cases (using `Object` as example for all data-block
types):
* Convert `ID *` to `Object *`. This asserts that the conversion is valid at
run-time if the pointer is not null.
* Convert `ID &` to `Object &`. This always asserts that the conversion is valid
at run-time.
* Convert `Object *` to `ID *`. This is preferred over `&object->id` even if the
result is the same because the latter results in ASAN warnings if `object` is
null.
* Convert `Object &` to `ID &`. Added for good measure. There isn't really much
of a benefit of this over using `object.id` except for maybe in generic code
where the source type can be an `Object &` or `ID &`.
* Identity cast identical id types (e.g. `Object *` to `Object *`). Not really
necessary to add a cast in such a case but may be useful in generic code where
the input can be an `Object *` or `ID *`.
Some additional notes:
* Const-correctness is preserved with this cast.
* When attempting to do a non-id-cast, the function triggers a `static_assert`.
* The data-block types must not be just forward declarations because the actual
type information is necessary.
* Casting to and from `void *` is not supported because that can't provide any
additional type-safety over `static_cast`.
* Casting between different data-block types like `Object` and `Mesh` is not
allowed.
* It does not support casting double-pointer types currently (e.g. `ID **` to
`Object **`).
The new cast is added in `DNA_ID.h`. As part of this patch, I also sprinkled in
a couple of `id_cast` in various places for testing (it's surprisingly tricky to
have the type checks working for all the different combinations of
pointer/referenced/constness/etc.). Replacing more existing `reinterpret_cast`
can be done separately afterwards.
It's nice that `blender::id_cast` has exactly the same length as
`reinterpret_cast`. So formatting should never change when using it in global
scope. Using just `id_cast` when inside of the `blender::` namespace is
preferable of course.
Pull Request: https://projects.blender.org/blender/blender/pulls/139820
The Ellipse/Box Mask nodes recently got their size clamped by their soft
limit, which was not previously the case, breaking compatibility and
limiting the node's use in some setups. The same goes for their
position. We fix this by allowing any size and position.
There have been a number of commits that have introduced regressions
in Sculpt mode where NaN begins to be propagated. While it is visually
very obvious that this is happening, this commit adds an assert so that
any automated testing with asserts on will also catch this issue.
Related to 23951e1b12
Pull Request: https://projects.blender.org/blender/blender/pulls/133992
Introduced with 23951e1b12
The paint brush uses either absolute or local distance values, mapping
this distance to a brush strength requires using different values for
`BKE_brush_calc_curve_factors` and cannot just use
`calc_brush_strength_factors`. To fix this, use the more generic method
instead to allow passing the correct radius.
Pull Request: https://projects.blender.org/blender/blender/pulls/140084
Introduced with 23951e1b12.
When using brushes that use a cube distance, some distances are set to
be float::max(). This breaks assumptions made inside the previously
linked commit, as the operations inside `BKE_brush_calc_curve_factors`
can easily cause this distance value to become infinity, which when
multiplied with the factor value of 0 results in NaN propagation in the
mesh.
To fix this, set the max distance in `calc_cube_distance` to 1.0f.
Pull Request: https://projects.blender.org/blender/blender/pulls/139965
On the Windows platform if you select "Automatic" for language, it
won't actually select correctly for the Chinese languages. This is
because our Windows code returns a locale like ""zh_CN" or "zh_TW",
not the "zh_HANS" and "zh_HANT" expected. This PR checks for language
code "zh" and will then will append "_HANT" if your 2-letter region
is TW (Taiwan), HK (Hong Kong), or MO (Macau), and "_HANS" for other
regions (like China, Malaysia, Singapore, etc).
Pull Request: https://projects.blender.org/blender/blender/pulls/140027
Depending on things like order or processing etc., appending
liboverrides data could generate error message in the console regarding
invalid override hierarchy data.
While this could probably be solved, it feels fairly brittle and risky
to directly make linked liboverride hierarchies locale anyway, so just
alsways make local copies of these on append.