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
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
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
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
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
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
- 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
- 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).
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
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
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
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
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
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.
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
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
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
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
A work around ffmpeg issue that everyone (e.g. OBS) seems to be doing.
By default ffmpeg uses built-in VP8/VP9 decoders, however those
do not detect alpha channel (https://trac.ffmpeg.org/ticket/8344 -
the bug filed in 2019, currently still open in ffmpeg 7.1. There's
an older report from 2016 too, https://trac.ffmpeg.org/ticket/5792).
The trick for VP8/VP9 is to explicitly force use of libvpx decoder.
Only do this where alpha_mode=1 metadata is set. Note that in order
to work, the previously initialized format context must be closed
and a fresh one with explicitly requested codec must be created.
Pull Request: https://projects.blender.org/blender/blender/pulls/132795
The input ID evaluation didn't account for data-block types that aren't
handled by the copy-on-evaluation system. For those types, we should
just use the original ID in geometry nodes, just like the modifier.
Pull Request: https://projects.blender.org/blender/blender/pulls/132768
This patch moves wrapped translation from a special case of the general
transform algorithm to the Translate node. Since the Translate node is
the only user of this special case, it doesn't make sense to complicate
a generate algorithm with it. This will make future refactors of this
code easier.
Pull Request: https://projects.blender.org/blender/blender/pulls/132793
When extruding from points on a cyclic stroke (in which case it creates
a new detached stroke), the original stroke should remain cyclic. This
is achieved by gathering curve attributes first then manually set non
cyclic to newly created strokes.
Pull Request: https://projects.blender.org/blender/blender/pulls/132261
Prevent users from creating an invalid bounding box for cropping. The user input is checked and is overridden if it will invert the bounding box, i.e. `xmin > xmax` and `ymin > ymax` of gizmos is not allowed.
Pull Request: https://projects.blender.org/blender/blender/pulls/128550
The issue was that the current frame was already cached, and the cache
was not invalidated when switching CurveMapping "tone"
(standard/filmic) property.
There does not seem to be a good way of doing it, besides scanning
the whole scene searching for which strips use the modified curve
mapping.
Various other properties of curve mapping seem to work right now, as
a byproduct of cache invalidation being done at UI level, not RNA
level. Arguably (see comments on #123821) these should not be done at
UI level, but that's for another day. The reason why "tone" is not
done at UI level is that the UI widget is different (just a button)
and is hard to hook up invalidation logic into that.
Pull Request: https://projects.blender.org/blender/blender/pulls/132742
All other YUV based codecs switch from default 4:2:0 YUV layout
(which is lossy) to a full resolution 4:4:4 YUV. However AV1 was not
doing that, probably by oversight.
Pull Request: https://projects.blender.org/blender/blender/pulls/132738
UnitSettings::scale_length was used to scale reported
values for operators (translate, shrink-fatten, voxel-size).
This isn't expected as the value isn't editable when the unit-system
is set to None.
Add BKE_unit_value_as_string_scaled utility function for clarity &
to ensure scaling is only applied when it should be.
The rest of blender does handle multi-layer EXR images, using the
"combined" or RGBA/RGB layers when the visual result is needed. Make
VSE do the same.
While fixing this, I found several issues in other not well tested code
and had to fix them:
- IMB_buffer_float_from_float_threaded was wrongly using source channels
as destination channels, producing garbage result.
- IMB_scale_into_new was not assigning channels to destination image.
Pull Request: https://projects.blender.org/blender/blender/pulls/132790
Paint cursor polling and drawing should get the active region via
`bScreen.active_region`, since this handles overlapped regions better.
This way the cursor handling will still get the main region while
hovering transparent parts of the sidebar, headers or other overlapped
regions.
Alternative fix to #132226.
Pull Request: https://projects.blender.org/blender/blender/pulls/132765
wm_gizmomap_handler_context_op currently prints an error message to the
console when screen layouts change while modal operations are running.
The operations work, and the comment above it says "this is not an
error to print", and it is confusing for users to see a console message
like this. Looks to be a left-over debugging tool.
Pull Request: https://projects.blender.org/blender/blender/pulls/132778
Changes in 02b1e5a48f don't work correctly in popovers. Which means you
can hover over a numerical input, then off again, and it will show an
incorrect mouse cursor. This PR just uses ED_region_cursor_set which
works there and elsewhere.
Pull Request: https://projects.blender.org/blender/blender/pulls/132775
Since the `usd_path_to_mat_name` map seems to always be used in tandem
with `mat_name_to_mat` to get the material, change it from a map of
[string, string] to [string, Material] and store the Material directly.
This removes the need to do a secondary lookup through `mat_name_to_mat`
and less memory will be used at runtime due to the smaller Value size.
Pull Request: https://projects.blender.org/blender/blender/pulls/132647