Commit Graph

99848 Commits

Author SHA1 Message Date
guishe
cd09c91f69 Cleanup: deduplicate code to create menu for flip region
Ref !108302.
2023-05-26 13:31:56 +10:00
Campbell Barton
e7f88c1050 Cleanup: format 2023-05-26 13:30:14 +10:00
Campbell Barton
393d4a6e14 Cleanup: duplicate words in comments
Also use doxygen-comments in files where this is already the convention.
2023-05-26 12:40:06 +10:00
Campbell Barton
6876372974 License headers: add missing license identifier 2023-05-26 12:24:55 +10:00
Campbell Barton
ac74f3b396 Cleanup: refactor cursor jump type check into a function 2023-05-26 11:45:11 +10:00
YimingWu
99df159ce0 Fix #108098: GPencil: Prevent overwriting mvalo
There are other events besides `MOUSEMOVE` that's passed in during modal
handling, causes the `tgpi->mvalo` variable to be overwritten without
moving the stroke in the first place, this results in inaccurate offsets
during mouse/pen grabbing in primitive gizmo `IN_MOVE` mode. Now fixed.

Also fixed the operator hint to include the grab functionality.

Pull Request: https://projects.blender.org/blender/blender/pulls/108172
2023-05-26 03:30:16 +02:00
Chao Li
72309be398 Mesh: Avoid position copying in corrective smooth modifier
This is a place where copying mesh position is not needed. See #103789.

Pull Request: https://projects.blender.org/blender/blender/pulls/108291
2023-05-25 22:12:11 +02:00
Xavier Hallade
c18cafe748 Merge branch 'blender-v3.6-release' 2023-05-25 20:39:27 +02:00
Xavier Hallade
2533576802 EEVEE: Fix non-deterministic codegen preventing shader cache to work
used_libraries was iterated on to generate shader code depending on
pointers order, which was non-deterministic. It prevented shader caching
by graphics drivers to survive across reboots, as reported in
https://techgage.com/article/blender-3-5-performance-deep-dive-cycles-eevee-viewport/

Co-authored-by: Ray Molenkamp <github@lazydodo.com>

Pull Request: https://projects.blender.org/blender/blender/pulls/108289
2023-05-25 20:37:42 +02:00
Jacques Lucke
dc33a8e974 Geometry Nodes: expose simulation bake path in UI
Longer term we want to have a more centralized place where the bake
paths can be managed, but this is what we can still add in bcon3.

Pull Request: https://projects.blender.org/blender/blender/pulls/108220
2023-05-25 18:56:00 +02:00
Germano Cavalcante
c89461a2bc Fix recent change in transform code
fc854fc252 caused the precision modification to be removed after
navigation was complete.

The ideal is when starting navigation.

This is because the precision button can be released during navigation,
thus confirming the precision change.
2023-05-25 13:33:45 -03:00
Miguel Pozo
55b20cef43 Workbench Next: Add missing texture usage flags 2023-05-25 18:06:45 +02:00
Miguel Pozo
0897be8bb7 EEVEE Next: Ensure correct material settings are used
Add Material::blend_flags to Shaderkey,
to ensure Materials with different settings but the same shader
don't end up using the same pass.

Pull Request: https://projects.blender.org/blender/blender/pulls/108283
2023-05-25 18:01:54 +02:00
Germano Cavalcante
fc854fc252 Transform: remove precision modification upon starting navigation
In order to execute the navigation of type "VIEW3D_OT_move," the user
is required to press both the `Shift` and `MMB` keys.

However, pressing `Shift` also activates the precision modifier for the
transform.

Consequently, while the `MMB` is unpressed, the transform operation
unintentionally remains in precision mode, altering the mouse position.

To address this issue, the solution was to eliminate the precision
changes immediately after the navigation is initiated.

Unfortunately, we have no way of knowing whether the user actually
unintentionally enabled precision, so this solution serves as a
workaround. Ideally, keymap conflicts should be avoided.
2023-05-25 11:58:19 -03:00
Jacques Lucke
2fce65ecfb RNA: improve compatibility of generated code with C++
The goal here is to get us closer to using C++ in RNA code.

Pull Request: https://projects.blender.org/blender/blender/pulls/108277
2023-05-25 16:30:16 +02:00
Miguel Pozo
a31875dab6 Cleanup: Fix warnings in Overlay Next 2023-05-25 15:52:13 +02:00
Hans Goudey
986ff5a3a4 Cleanup: Remove IndexRange::as_span() static array and cache
After 2cfcb8b0b8 this was only used in one place that
was easily replaced. In practice this avoids creating a statically
allocated array after the split edges code is called.

Pull Request: https://projects.blender.org/blender/blender/pulls/108249
2023-05-25 15:42:54 +02:00
Hans Goudey
de2c8416a0 Fix #108258: Sculpt mode crash after remesh
4d841e1b35 incorrectly removed the clearing
of mesh topology maps when the object is reevaluated.
2023-05-25 08:53:18 -04:00
Campbell Barton
f97660d4ad Cleanup: spelling in comments 2023-05-25 22:50:30 +10:00
Hans Goudey
1c88721442 Fix: Crash entering vertex paint mode
SculptSession now contains non-trivial types that must be initialized.
2023-05-25 08:02:49 -04:00
Brecht Van Lommel
c6c127bfd3 Fix non-geometry object types being possible to set as light receivers 2023-05-25 13:49:38 +02:00
Brecht Van Lommel
673d066e35 Cleanup: change #define bitflags to enum 2023-05-25 13:49:38 +02:00
Sergey Sharybin
1c3e0f3585 Fix #108250: Cycles: Light Linking disabled after modifying object
The runtime backup/restore logic was slightly wrong: it is possible that
an object requires light linking runtime but does not need light linking
itself. This is typical configuration for the receivers/blockers.

Modified the logic so that the evaluated object light linking is allocated
if there was a runtime field needed.

This required to make it so light linking evaluation takes care of feeing
the light_linking if it is empty. The downside of this approach is a
redundant allocation from the object backup when removing light linking
collection from emitter. But this is not a typical evaluation flow, and
the more typical flows are cheap with this approach.

Pull Request: https://projects.blender.org/blender/blender/pulls/108261
2023-05-25 12:59:45 +02:00
Campbell Barton
21af3f197c Merge branch 'blender-v3.6-release' 2023-05-25 20:34:11 +10:00
Campbell Barton
2708317b25 Merge branch 'blender-v3.6-release' 2023-05-25 20:34:06 +10:00
Sergey Sharybin
5e2f73df30 Fix crash doing viewport animation render
A user-counter mistake caused by shallow-copy of the render result
during its duplication.

Pull Request: https://projects.blender.org/blender/blender/pulls/108265
2023-05-25 12:16:29 +02:00
Jeroen Bakker
f5d159b2a4 Vulkan: Extract Vendor/Driver/Device Information
Extract vendor, driver and device information from the physical device
properties.

Note that driver version is implementation dependent and might fail as
it is unclear which driver is being used. An open source driver could
store the driver version in a different way than a closed source driver.
But as it is not clear which driver version is being used it might
extract the incorrect version.

To solve this issue we check if the extracted version makes sense
depending on the version schema of the driver and if they don't match we
use another approach.

Pull Request: https://projects.blender.org/blender/blender/pulls/107872
2023-05-25 11:55:47 +02:00
Jacques Lucke
1621d790ff Fix #108120: graphic artefacts node editor during cycles render
The issue was that `is_rendering` was used as a proxy to check
whether the interface is locked. Locking the node editor during rendering
is not necessary, but it currently is necessary while baking, because
baking changes original data from a different thread.

The solution is to use the already existing mechanism to tell Blender
which regions should be locked when the interface is locked.
2023-05-25 11:24:45 +02:00
Sergey Sharybin
f669f6cd8c Fix #108243: Crash when save before close with modified image
A mistake in the recent API refactor for the buffer sharing.

Pull Request: https://projects.blender.org/blender/blender/pulls/108259
2023-05-25 09:59:23 +02:00
Clément Foucault
0e7b81dd32 Metal: Fix MSL compilation warning 2023-05-25 09:24:53 +02:00
Jason Fielder
03e4325fa9 Fix: High resolution textures in Metal from Integer overflow
Resolve an issue where a high resolution texutre 16k x 8k
did not update in metal due to integer overflow of size parameter.

This patch contains several changes to address size correctness
across multiple use cases within the Metal backend.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/108238
2023-05-25 08:50:14 +02:00
Campbell Barton
21b2393eb2 Fix off by 1 error in BLI_uniquename* clipping an extra character
When the new name was clipped to make room for the number,
the string was clipped by the number size (including the null byte).

Store the length in `numlen` instead of the size (including null byte).
2023-05-25 15:47:02 +10:00
Campbell Barton
9182ebdfde Cleanup: replace strcat with BLI_strncat 2023-05-25 12:30:37 +10:00
Campbell Barton
6eebc06c36 Clenup: remove strcat use 2023-05-25 11:47:17 +10:00
Campbell Barton
23862ec60e Cleanup: quiet RNA warnings from a trailing '.' 2023-05-25 10:34:02 +10:00
Hans Goudey
4a7cfa18e2 Cleanup: Rename loose edge and loose vert variables in draw code
"ledge" and "lvert" sound very word, and "ledge" is also a word. It's
clearer to use the full word and abbeviate the obvious part, "index."
2023-05-24 20:28:18 -04:00
Hans Goudey
5063f7a725 Cleanup: Simplify IndexMask usage in two geometry nodes
Use the weird but at least consistent "from_groups" method in the sample
curves node, and avoid one logarithmic lookups when merging points.
2023-05-24 20:05:42 -04:00
Hans Goudey
1b19f62917 Curves: Improve IndexMask usage in curves sculpt brushes
Unify the handling of masks for affected curves in a few of the sculpt
brushes. In the grow shrink brush, replace a more custom "influences
per thread" solution. In the puff brush, use a full array of weights,
and build the mask earlier. In the snake hook brush, use the selection
properly (I observed a 2-3x improvement with a small selection).
2023-05-24 20:05:42 -04:00
Hans Goudey
379a8b700b Cleanup: Simplify iteration in align euler to vector node
- Handle multithreading in caller, consistent with other multi-functions
- Simplify IndexMask iteration (avoid logarithmic lookup)
2023-05-24 20:05:42 -04:00
Hans Goudey
6bf3831b2c Fix: IndexMask slice and offset ignores offset
The mask was sliced, but the original mask was used from before the
slicing, causing an unsliced mask to be used with the new offsets.
This caused a crash in the hair styles demo file.
2023-05-24 20:05:42 -04:00
Hans Goudey
d049e622bd Cleanup: Corrections in IndexMask comments
Also use "values" and "indices" instead of elements, since they're
more specific terms.
2023-05-24 20:05:42 -04:00
Hans Goudey
2d3bb2787c Fix: Spreadsheet selection filter UI inactive in curves edit mode
Curves edit mode does select the selection filter feature.
2023-05-24 20:05:42 -04:00
Campbell Barton
b567b249d4 Merge branch 'blender-v3.6-release' 2023-05-25 09:21:24 +10:00
Campbell Barton
92b4e74985 Fix out-of-bounds read drawing bundles with custom-colors 2023-05-25 09:15:47 +10:00
Harley Acheson
f37f60937a UI: Updated Windows File Registration Correction
Removal of thumbnail via regsvr32 requires /s argument to be silent
to not show any messageboxes during WIX uninstallation

Pull Request: #107013
2023-05-24 15:26:21 -07:00
Harley Acheson
0e8419246d UI: Text cursor behavior for Apple Devices
MacOS-specific behavior for arrow keys, delete, and backspace. Alt/Opt
modifier to jump by word, CMD modifier to jump to beginning/end.

Pull Request: https://projects.blender.org/blender/blender/pulls/107522
2023-05-24 22:25:43 +02:00
Harley Acheson
9cf77efaa0 UI: Updated Windows File Registration
Windows file associations using ProgID, needed because of the launcher.
This fixes "pin to taskbar" and Recent Documents lists, allow per-
version jump lists and an "Open with" list with multiple versions.

Pull Request: https://projects.blender.org/blender/blender/pulls/107013
2023-05-24 21:19:56 +02:00
Hans Goudey
d168df7c23 Fix: Crash with "use sharp" turned off in weighted normal modifier 2023-05-24 13:27:07 -04:00
Bastien Montagne
adb87dd080 Merge branch 'blender-v3.6-release' 2023-05-24 18:14:41 +02:00
Jacques Lucke
2cfcb8b0b8 BLI: refactor IndexMask for better performance and memory usage
Goals of this refactor:
* Reduce memory consumption of `IndexMask`. The old `IndexMask` uses an
  `int64_t` for each index which is more than necessary in pretty much all
  practical cases currently. Using `int32_t` might still become limiting
  in the future in case we use this to index e.g. byte buffers larger than
  a few gigabytes. We also don't want to template `IndexMask`, because
  that would cause a split in the "ecosystem", or everything would have to
  be implemented twice or templated.
* Allow for more multi-threading. The old `IndexMask` contains a single
  array. This is generally good but has the problem that it is hard to fill
  from multiple-threads when the final size is not known from the beginning.
  This is commonly the case when e.g. converting an array of bool to an
  index mask. Currently, this kind of code only runs on a single thread.
* Allow for efficient set operations like join, intersect and difference.
  It should be possible to multi-thread those operations.
* It should be possible to iterate over an `IndexMask` very efficiently.
  The most important part of that is to avoid all memory access when iterating
  over continuous ranges. For some core nodes (e.g. math nodes), we generate
  optimized code for the cases of irregular index masks and simple index ranges.

To achieve these goals, a few compromises had to made:
* Slicing of the mask (at specific indices) and random element access is
  `O(log #indices)` now, but with a low constant factor. It should be possible
  to split a mask into n approximately equally sized parts in `O(n)` though,
  making the time per split `O(1)`.
* Using range-based for loops does not work well when iterating over a nested
  data structure like the new `IndexMask`. Therefor, `foreach_*` functions with
  callbacks have to be used. To avoid extra code complexity at the call site,
  the `foreach_*` methods support multi-threading out of the box.

The new data structure splits an `IndexMask` into an arbitrary number of ordered
`IndexMaskSegment`. Each segment can contain at most `2^14 = 16384` indices. The
indices within a segment are stored as `int16_t`. Each segment has an additional
`int64_t` offset which allows storing arbitrary `int64_t` indices. This approach
has the main benefits that segments can be processed/constructed individually on
multiple threads without a serial bottleneck. Also it reduces the memory
requirements significantly.

For more details see comments in `BLI_index_mask.hh`.

I did a few tests to verify that the data structure generally improves
performance and does not cause regressions:
* Our field evaluation benchmarks take about as much as before. This is to be
  expected because we already made sure that e.g. add node evaluation is
  vectorized. The important thing here is to check that changes to the way we
  iterate over the indices still allows for auto-vectorization.
* Memory usage by a mask is about 1/4 of what it was before in the average case.
  That's mainly caused by the switch from `int64_t` to `int16_t` for indices.
  In the worst case, the memory requirements can be larger when there are many
  indices that are very far away. However, when they are far away from each other,
  that indicates that there aren't many indices in total. In common cases, memory
  usage can be way lower than 1/4 of before, because sub-ranges use static memory.
* For some more specific numbers I benchmarked `IndexMask::from_bools` in
  `index_mask_from_selection` on 10.000.000 elements at various probabilities for
  `true` at every index:
  ```
  Probability      Old        New
  0              4.6 ms     0.8 ms
  0.001          5.1 ms     1.3 ms
  0.2            8.4 ms     1.8 ms
  0.5           15.3 ms     3.0 ms
  0.8           20.1 ms     3.0 ms
  0.999         25.1 ms     1.7 ms
  1             13.5 ms     1.1 ms
  ```

Pull Request: https://projects.blender.org/blender/blender/pulls/104629
2023-05-24 18:11:41 +02:00