With Vulkan now having general feature parity with OpenGL, but with
some stability issues, it has become more important to offer ways for
users to quickly launch Blender with the OpenGL or Vulkan backend
in case Blender is unable to open with one of them.
This commit adds three new batch files to help with this:
- `blender_factory_startup_vulkan.cmd`
- Launches Blender with factory settings, but with Vulkan enabled.
Useful for helping test if a Vulkan crash at startup is related to
a addon.
- `blender_startup_opengl.cmd`
- Simply launches Blender with the OpenGL backend. It does not change
any other settings. Useful in case a user has complex user
preferences, enabled Vulkan for testing, and now Blender crashes on
startup. Now they want to switch back to OpenGL and they don't want
to lose their complex user preferences by using
`blender_factory_startup.cmd`
- `blender_startup_vulkan.cmd`
- Simply launches Blender with the Vulkan backend. It does not change
any other settings. Useful for people that encounter #127835 after
a Windows update. This issue can be worked around by using Vulkan.
But if you are experiencing the issue and are on the OpenGL
backend, you can't use the Blender interface and so you can't
easily switch to the Vulkan backend without the command line
or a script like this.
Pull Request: https://projects.blender.org/blender/blender/pulls/142169
Looks like almost everywhere else, the v2d mask size is calculated
as "v2d->mask size plus one". This is the zoom ratio that the V2D
resizing tries to keep constant, etc.
However the VSE timeline drawing code, when calculating the pixel
scaling factors, used the v2d->mask size without adding +1.
This resulted in a very slight zoom ratio change when resizing the
timeline area, which is made larger because thumbnails are often more
wide than narrow, and many of them are laid out next to each other.
Pull Request: https://projects.blender.org/blender/blender/pulls/142952
The performance test was added in 6d93bf6b44, but I don't think
anyone has ever ran it since then. And due to how IMB library
depends on BKE, this drags in "almost all of blender" into the test
executable, resulting in non-trivial link times that everyone
pays for. Just remove it.
The call to `BKE_keyblock_convert_from_mesh` can leave the KeyBlock's
data field null if the passed in mesh has no verts.
Continue to allow the shape keys to be created, but do not attempt to
actually fill them in with data. This seems to match the old FBX
importer's behavior.
Pull Request: https://projects.blender.org/blender/blender/pulls/142995
Separates export_frame() into individual functions for opening file streams
and writing .mtl and .obj data. This makes the code clearer in what and when
data is written to each stream by not interleaving .obj/.mtl writing. It also
simplifies the logic by separating out handling/branching for file streams
and .mtl writing.
Pull Request: https://projects.blender.org/blender/blender/pulls/142918
Previously, we used `SocketInterfaceKey` as identifier for bundle and closure
items. It contained multiple identifiers (although only one was ever used so
far). The idea was that multiple identifiers could provide more flexibility.
E.g. an Evaluate Closure node could work with closures with slightly different
identifier names, or a bundle could be passed into different systems that expect
the same data but named differently.
The added complexity by allowing for this is greater than I anticipated even
though most places didn't even support multiple identifiers yet. In addition to
that, it seems like there may be simpler workaround for many situations where
multiple identifiers were supposed to help. E.g. one could just add the same
value to a bundle twice with different names or one can build a node group that
maps a bundle for one system to one for another system.
Overall, the complexity of `SocketInterfaceKey` didn't seem worth it, and we can
probably just build a better system when we don't allow multiple identifiers per
item.
Pull Request: https://projects.blender.org/blender/blender/pulls/142947
It's simple to skip some work when all the triangles will be rendered
in the UV editor (though theoretically the best option would be to
share the non-UV triangle index buffer in this case).
Avoid function call overhead, add consistency between BMesh
and Mesh, parallelize filling the data and calculating the selection,
and avoid over-allocation in the cases where not all triangles will
be rendered.
Pull Request: https://projects.blender.org/blender/blender/pulls/142880
VSE final image cache invalidation for the newly added effect
strip was invoked before the strip time range values were set,
effectively not invalidating anything.
Pull Request: https://projects.blender.org/blender/blender/pulls/142854
Previously if only Increment/Grid Snap Targets are selected, transform
tools will not allow adding snap targets, although if there are extra
snapping target type enabled, you are still able to add grid points as
new snap points anyways, thus remove the restriction.
Pull Request: https://projects.blender.org/blender/blender/pulls/139534
The behavior was changed by d3f84449ad.
It's unclear whether considering custom normals is the "correct"
behavior here. Intuitively it makes more sense to use the true normals
for solidify because the purpose is generally to create even offsets
from existing goemetry. It's also valuable to just restore the old
behavior. A hypothetical node-based solidify would probably provide the
option to customize the offset vector.
Pull Request: https://projects.blender.org/blender/blender/pulls/142892
When `delta` is significantly larger than the difference between `tmin`
and `tmax`, the precision of `theta_a` and `theta_b` reduces, resulting
in banding artefacts.
For equiangular sampling, we use uniform sampling to fix this case.
For light tree, we use the equality
atan(a) + atan(b) = atan2(a + b, 1 - a*b).
Pull Request: https://projects.blender.org/blender/blender/pulls/142845
The compositor crashes when a group node has an output that is connected
to the compositor output, but the group internally has no Group Output
node. That's because the derived node tree structure would return a null
origin socket for this case, but the null socket is not handled by the
code. To fix this, we assume the input socket in such cases.
Pull Request: https://projects.blender.org/blender/blender/pulls/142944
The bmesh.ops.split operator could include deleted edges as the keys
for `boundary_map`.
Resolve by replacing deleted edges with so the same edge is used for
the key & value, needed so the boundary_map can access the entire
boundary, even when it's source edges have been deleted.
This extends the API for bundles in two main ways:
* Adds support for working with paths to reference nested bundles directly.
* Adds support for typed add/lookup, also taking into account implicit conversions.
Some unit tests have been added as well.
Pull Request: https://projects.blender.org/blender/blender/pulls/142942
Update bookmark UIList, so it appears same as Vertex Groups,
Shape Keys, etc. (by default 3 and 5 rows visible depending on
element count)
See images in PR description
Pull Request: https://projects.blender.org/blender/blender/pulls/141790
Add the new Curves datablock type to the IO report. This was created
for the new hair system but is more generally used for any type of curve
generated within geometry nodes.
The report itself is mostly just a dump of all available attributes for
the object.
Pull Request: https://projects.blender.org/blender/blender/pulls/142925
Use of `*.%s` in string formatting could cause the name to include
partial UTF8 sequences. While these were stripped before ID creation,
they would be set in operator properties which are expected to be UTF8.
Also remove redundant allocation.
The Python API wasn't accounting for structs name properties using
path sub-types, which allow non UTF8 byte sequences.
This meant accessing the SpaceFileBrowser.recent_folders collection
could cause unhandled exceptions because
FileBrowserFSMenuEntry.name uses the PROP_FILENAME sub-type.
Resolve by adding a wrapper around the RNA struct name lookup
that handles path properties properly.
Fixes#142735.
The original clamp patch in #134319 did not add any cases for retiming
key transformation code. A simple solution to the crash would be to
disable the behavior, but this PR opts to bring feature parity to
retiming keys too.
This means that header values are now more accurate, and snap lines do
not erroneously draw when retiming keys get clamped.
It also changes transition key transformation slightly, aligning the
direction of movement with the movement of the two keys. Before, moving
the mouse backwards would have the same effect, which was clunky and
unintuitive.
Pull Request: https://projects.blender.org/blender/blender/pulls/142809
Several changes to make node socket symbols more consistent across
the UI:
* Explicitly use the node editor's theme when looking up the outline
color for node sockets so they are consistent across editors.
* Use the proper socket drawing function in `widget_nodesocket`,
rather than relying on the "widget base" shader to draw a colored
circle
* `uiTemplateNodesocket` now also works in non-embossed layouts.
Pull Request: https://projects.blender.org/blender/blender/pulls/136612
The flags were converted with 96e549c092,
but the new values only used the new `Brush` level properties in
b472570875.
Additionally, the `CurveMapping` structs were not initialized inside
the various operations that depended on them, potentially leading to
a crash if custom curves are used.
This commit fixes what was missing from both previous commitsL
* Conversion of the HSV jitter values and their curves to the new
storage location.
* Correct initialization in relevant operators
Pull Request: https://projects.blender.org/blender/blender/pulls/142104
Quite a few flags in `Strip.flag` were used only at runtime; they were
temporarily set and then cleared thereafter. Move them to
`StripRuntime.flag` instead.
Most of the moves are trivial renames, with some old versioning code for
`SEQ_FLAG_DELETE` deleted. That code fixed a very uncommon edge-case bug
in 2.x which doesn't seem worthwhile to keep deprecated code around for.
Pull Request: https://projects.blender.org/blender/blender/pulls/142776
If screen areas are swapped between windows this can cause an ASAN
heap-use-after-free because of invalid screen->active_region pointer.
That pointer is quickly reassigned as mouse movement indicates the
active region, so just clear them for this operation.
Pull Request: https://projects.blender.org/blender/blender/pulls/142877
Previously, newly added Gaussian Blur effect did not blurring at all,
since blur sizes were set to zero. Make them default to 9 pixel size
blur, which is similar to the amount of blur the Glow effect does by
default.
Pull Request: https://projects.blender.org/blender/blender/pulls/142851
Make `expand_main` a local static function, there is no need for it to
be in the public API anymore.
(It was used in older, pre-'foreach-id' code, as a way to loop over ID
usages. This is no more relevant for quite some time now.)
Use a std::queue to store IDs to be expanded, instead of looping several
times over all IDs of the current library Main until all have been
expanded.
(Cleaner, and will become necessary in upcoming packed IDs change, where
IDs read/loaded from a same blendfile may end up in several different
Mains).
Pull Request: https://projects.blender.org/blender/blender/pulls/142878