3 hours agoDocs: improve poly_to_tri_count doc-string master
Campbell Barton [Sun, 20 Jun 2021 14:02:09 +0000 (00:02 +1000)]
Docs: improve poly_to_tri_count doc-string

It wasn't obvious this can be used for calculating the triangle index
from the polygon and loop index.

3 hours agoCleanup: remove contents of endif() in cmake
Campbell Barton [Sun, 20 Jun 2021 11:13:19 +0000 (21:13 +1000)]
Cleanup: remove contents of endif() in cmake

This convention is no longer used for Blender's CMake files.

3 hours agoCleanup: use eSpace_Type enum type
Campbell Barton [Sun, 20 Jun 2021 11:05:35 +0000 (21:05 +1000)]
Cleanup: use eSpace_Type enum type

10 hours agoCleanup: make BKE_mesh_loops_to_tessdata a static function
Campbell Barton [Sun, 20 Jun 2021 07:21:50 +0000 (17:21 +1000)]
Cleanup: make BKE_mesh_loops_to_tessdata a static function

10 hours agoDocs: add additional notes on tessellation, update comments
Campbell Barton [Sun, 20 Jun 2021 07:01:09 +0000 (17:01 +1000)]
Docs: add additional notes on tessellation, update comments

12 hours agoMesh: minor optimization to concave quad check for tessellation
Campbell Barton [Sun, 20 Jun 2021 03:47:53 +0000 (13:47 +1000)]
Mesh: minor optimization to concave quad check for tessellation

Use the face normal (when available) for a faster concave quad test.

12 hours agoMesh: optimize object mode face tessellation
Campbell Barton [Sun, 20 Jun 2021 03:21:11 +0000 (13:21 +1000)]
Mesh: optimize object mode face tessellation

- Multi-thread BKE_mesh_recalc_looptri.

- Add BKE_mesh_recalc_looptri_with_normals,
  this skips having to calculate normals for ngons.

Exact performance depends on number of faces, size of ngons and
available CPU cores.

For high poly meshes the isolated improvement to BKE_mesh_recalc_looptri
in my tests was between 6.7x .. 25.0x, with the largest gains seen in
meshes containing ngons with many sides.

The overall speedup for high poly meshes containing quads and triangles
is only ~20% although ngon heavy meshes can be much faster.

14 hours agoCleanup: clang-format
Campbell Barton [Sun, 20 Jun 2021 03:12:27 +0000 (13:12 +1000)]
Cleanup: clang-format

31 hours agoCleanup: use doxy sections
Campbell Barton [Sat, 19 Jun 2021 09:41:44 +0000 (19:41 +1000)]
Cleanup: use doxy sections

32 hours agoCleanup: clang-tidy
Campbell Barton [Sat, 19 Jun 2021 08:42:57 +0000 (18:42 +1000)]
Cleanup: clang-tidy

38 hours agoVSE: Remove seq->tmp usage
Richard Antalik [Sat, 19 Jun 2021 03:04:16 +0000 (05:04 +0200)]
VSE: Remove seq->tmp usage

Remove `seq->tmp` usage from transform code. It was used to tag strips
that need to be "shuffled". Pass these strips in `SeqCollection`

Reviewed By: sergey, mano-wii

Differential Revision:

43 hours agoSpreadsheet Editor: Row Filters
Hans Goudey [Fri, 18 Jun 2021 21:33:02 +0000 (16:33 -0500)]
Spreadsheet Editor: Row Filters

This patch adds support for filtering rows based on rules and values.
Filters will work for any attribute data source, they are a property
of the spreadsheet rather than of the attribute system. The properties
displayed in the row filter can depend on data type of the currently
visible column with that name. If the name is no longer visible, the
row filter filter is grayed out, but it will remember the value until
a column with its name is visible again.

Note: The comments in `screen.c` combined with tagging the sidebar
for redraw after the main region point to a lack of understanding
or technical debt, that is a point to improve in the future.

**Future Improvements**
* T89272: A search menu for visible columns when adding a new filter.
* T89273: Possibly a "Range" operation.

Differential Revision:

47 hours agoFix T89261: Crash when calculating bmesh tessellation
Germano Cavalcante [Fri, 18 Jun 2021 18:20:22 +0000 (15:20 -0300)]
Fix T89261: Crash when calculating bmesh tessellation

Error passing `false` instead of a `BMeshCalcTessellation_Params` struct.

47 hours agoCleanup: Remove dead code
Aaron Carlisle [Fri, 18 Jun 2021 17:13:48 +0000 (13:13 -0400)]
Cleanup: Remove dead code

This code was disabled in 2.8 and all other associated code/comments
have been removed/cleared. These rna properties have been replaced with

2 days agoFix Build Warning
Harley Acheson [Fri, 18 Jun 2021 16:21:51 +0000 (09:21 -0700)]
Fix Build Warning

Removal of unused local variable. Calculation of underline thickness
no longer needed with change to text output of underscore character.

Introduced in aee04d496035

Differential Revision:

2 days agoFix T89259: GPencil Duplicate point doesn't work for last point
Antonio Vazquez [Fri, 18 Jun 2021 16:16:30 +0000 (18:16 +0200)]
Fix T89259: GPencil Duplicate point doesn't work for last point

The loop was checking the len of the island, but if the island started in the last point the copy was not executed.

2 days agoArmature: add automatic B-Bone Scale toggles.
Alexander Gavrilov [Tue, 15 Jun 2021 10:51:19 +0000 (13:51 +0300)]
Armature: add automatic B-Bone Scale toggles.

Currently B-Bone scaling can only be controlled via their
properties, thus requiring up to 8 drivers per joint between
B-Bones to transfer scaling factors from the handle bone.

A Scale Easing option is added to multiply the easing value
by the Y scale channels to synchronize them - this produces a
natural scaling effect where both the shape of the curve and
the scale is affected.

In addition, four toggles are added for each handle, which
multiply each of the X, Y, Z and Ease values by the matching
Local Scale channel of the handle bone, thus replacing trivial
drivers. The Scale Easing option has no effect on this process
since it's easy to just enable both Length and Ease buttons.

Differential Revision:

2 days agoArmature: implement lengthwise scaling of B-Bone segments.
Alexander Gavrilov [Tue, 15 Jun 2021 10:09:43 +0000 (13:09 +0300)]
Armature: implement lengthwise scaling of B-Bone segments.

Implement actual behavior for the B-Bone Y Scale channels added
to DNA and UI in the previous commit in addition to the existing
X and Z Scale inputs.

The two length scale inputs control the ratio between the lengths
of the start and end segments of the bone: although for convenience
two inputs are provided, the whole chain is still uniformly scaled
to fit the curve.

Differential Revision:

2 days agoArmature: add B-Bone Y scale channel and extra flag fields to DNA.
Alexander Gavrilov [Fri, 11 Dec 2020 16:17:39 +0000 (19:17 +0300)]
Armature: add B-Bone Y scale channel and extra flag fields to DNA.

In addition to the base bone transformation itself, B-Bones have
controls that affect transformation of its segments. For rotation
the features are quite complete, allowing to both reorient the
Bezier handles via properties, and to control them using custom
handle bones. However for scaling there are two deficiencies.

First, there are only X and Y scale factors (actually X and Z),
while lengthwise all segments have the same scaling. The ease
option merely affects the shape of the curve, and does not cause
actual scaling.

Second, scaling can only be controlled via properties, thus
requiring up to 6 drivers per joint between B-Bones to transfer
scaling factors from the handle bone. This is very inefficient.

Finally, the Z channels are confusingly called Y.

This commit adds a B-Bone Y Scale channel and extra B-Bone flag
fields to DNA with appropriate versioning (including for F-Curves
and drivers) in preparation to addressing these limitations.

Functionality is not changed, so the new fields are not used
until the following commits.

Differential Revision:

2 days agoFix T89246: No Mnemonic Underlines in Dialogs
Harley Acheson [Fri, 18 Jun 2021 15:32:07 +0000 (08:32 -0700)]
Fix T89246: No Mnemonic Underlines in Dialogs

When drawing mnemonic underlines for hotkeys, use text output of
underscore character instead of direct drawing a line. Otherwise these
are not visible in dialog buttons.

Introduced in 0fcc063fd99c

Differential Revision:

Reviewed by Campbell Barton

2 days agoUI: Sequencer: Use ampersand instead of slash for "Sequencer/Preview"
Aaron Carlisle [Fri, 18 Jun 2021 15:13:00 +0000 (11:13 -0400)]
UI: Sequencer: Use ampersand instead of slash for "Sequencer/Preview"

Using an ampersand here is more semantically correct. A slash indicates "or" while an ampersand indicates "and".
An ampersand here is best because the view type shows both the Sequencer and the Preview.

2 days agoGPencil: Missed flag in previous Copy Settings commit
Antonio Vazquez [Fri, 18 Jun 2021 14:47:08 +0000 (16:47 +0200)]
GPencil: Missed flag in previous Copy Settings commit

2 days agoGPencil: Move copy layer settings to function
Antonio Vazquez [Fri, 18 Jun 2021 14:40:31 +0000 (16:40 +0200)]
GPencil: Move copy layer settings to function

Better to have a function that can be reused to duplicate the settings that need to be copied.

2 days agoDrawManager: Multithreaded counting of material buckets.
Jeroen Bakker [Fri, 18 Jun 2021 14:09:35 +0000 (16:09 +0200)]
DrawManager: Multithreaded counting of material buckets.

When having multiple materials in a mesh the triangles are sorted based
on material index. This sorting is done single threaded, but needs two
loops over the data. One to count the bucket size and the second one to
add the triangles to the right position in the buckets.

This patch will do the counting in a multithreaded approach that would
speed up the cache creation. It has been measured that this part is the
most blocking part of the cache creation.

Reviewed By: mano-wii

Differential Revision:

2 days agoBMesh: use threading to count total selection.
Jeroen Bakker [Fri, 18 Jun 2021 13:51:18 +0000 (15:51 +0200)]
BMesh: use threading to count total selection.

During selections the total selection is refreshed at the end. This
process was done single threaded. This patch will do a parallel iter

Master: 0.043612s Threaded 0.017964s.

Master: {F10179586}
This patch: {F10179587}

Reviewed By: mano-wii

Differential Revision:

2 days agoFix T89262: Crash in regular FileBrowser ID listing of 'asset' .blend files.
Bastien Montagne [Fri, 18 Jun 2021 13:45:58 +0000 (15:45 +0200)]
Fix T89262: Crash in regular FileBrowser ID listing of 'asset' .blend files.

`ED_fileselect_get_asset_params` would only return actual data pointer
when file browser is in ASSET mode.

Calling that whole section only makes sense if filebrowser is in asset
mode anyway.

Regression introduced in rBf6c5af3d4753 I think.

@Severin committing this fix now as this is a fairly critical bug for
the studio, feel free to revert and do proper fix if this one is not the
best solution.

2 days agoPerformance: Limit recounting during selection mode flushing.
Jeroen Bakker [Fri, 18 Jun 2021 13:31:14 +0000 (15:31 +0200)]
Performance: Limit recounting during selection mode flushing.

This patch ensures that selection mode flushing updates total selection
counts internally. This reduces recounting when we are sure that the
input total selection counts were up to date.

For example for circle selection the total selection counts were
correct. But during flushing the selection could have been changed and
therefore the selection was always recounted.

This increased the performance on selected system from 6.90 FPS to 8.25
FPS during circle selection operations.

Before: {F10179981}
After: {F10179982}

Reviewed By: mano-wii

Differential Revision:

2 days agoFix error passing in false as instead of a struct
Campbell Barton [Fri, 18 Jun 2021 13:37:28 +0000 (23:37 +1000)]
Fix error passing in false as instead of a struct

Error in 8a1860bd9aecddf611b64e3e842bdc8c76f15cc6.

2 days agoFix T88394: crash when editing animated Alembic properties
Sybren A. Stüvel [Fri, 18 Jun 2021 11:52:09 +0000 (13:52 +0200)]
Fix T88394: crash when editing animated Alembic properties

When an object, whose mesh gets loaded from Alembic, gets animated in
Blender and the Alembic CacheFile datablock also gets animated, editing
keyframes causes both datablock to be re-copied for evaluation. This
caused a threading issue and a double-free of some memory. This is fixed
by expanding the scope of the spin lock in

2 days agoFix T89240: Crash when moving vertices on a linked duplicate
Germano Cavalcante [Fri, 18 Jun 2021 11:25:36 +0000 (08:25 -0300)]
Fix T89240: Crash when moving vertices on a linked duplicate

There is an attempt to free an illegal pointer in `extract_edge_fac_finish`.

2 days agoFluid: Clang-format cleanup
Sebastián Barschkis [Fri, 18 Jun 2021 10:28:17 +0000 (12:28 +0200)]
Fluid: Clang-format cleanup

Updated fluid source files in extern with clang-format.

2 days agoFluid: Optimization for FLIP neighbor search radius
Sebastián Barschkis [Fri, 18 Jun 2021 10:18:21 +0000 (12:18 +0200)]
Fluid: Optimization for FLIP neighbor search radius

Contributed by @erik85 in D11400. The idea from this patch was placed in
a more generic context: A new FOR macro has been added that loops
over the neighbors of a cell within a given radius.

2 days agoFix T88605: Alembic import crashes when missing `arbGeomParams`
Sybren A. Stüvel [Fri, 18 Jun 2021 09:21:13 +0000 (11:21 +0200)]
Fix T88605: Alembic import crashes when missing `arbGeomParams`

Add check for the `arbGeomParams` property being valid, before attempting
to access a sub-property from it.

2 days agoCleanup: clang format
Jacques Lucke [Fri, 18 Jun 2021 08:50:19 +0000 (10:50 +0200)]
Cleanup: clang format

2 days agoFix invalid polygon normal array access building bake data
Campbell Barton [Fri, 18 Jun 2021 07:36:14 +0000 (17:36 +1000)]
Fix invalid polygon normal array access building bake data

Pre computed normals index wasn't properly aligned.
Regression from 2ec00ea0c1be1ace7cd0c7b68e43cc8e87dd07c7.

2 days agoCleanup: use 'bmesh' prefix for BMesh tessellation utilities
Campbell Barton [Fri, 18 Jun 2021 06:37:43 +0000 (16:37 +1000)]
Cleanup: use 'bmesh' prefix for BMesh tessellation utilities

2 days agoCleanup: rename test_index_face -> BKE_mesh_mface_index_validate
Campbell Barton [Fri, 18 Jun 2021 05:13:52 +0000 (15:13 +1000)]
Cleanup: rename test_index_face -> BKE_mesh_mface_index_validate

2 days agoCleanup: remove unused MFace custom-data utilities
Campbell Barton [Fri, 18 Jun 2021 05:08:23 +0000 (15:08 +1000)]
Cleanup: remove unused MFace custom-data utilities


- BKE_mesh_loops_to_mface_corners
- BKE_mesh_tangent_loops_to_tessdata

2 days agoCleanup: move mesh tessellation into it's own file
Campbell Barton [Fri, 18 Jun 2021 04:38:25 +0000 (14:38 +1000)]
Cleanup: move mesh tessellation into it's own file

This matches BMesh which also has tessellation in it's own file.

Using a separate file helps with organization when
extracting code into smaller functions.

2 days agoCMake: remove workaround for version that's no longer supported
Campbell Barton [Fri, 18 Jun 2021 04:27:43 +0000 (14:27 +1000)]
CMake: remove workaround for version that's no longer supported

2 days agoCleanup: clang-tidy
Campbell Barton [Fri, 18 Jun 2021 04:27:43 +0000 (14:27 +1000)]
Cleanup: clang-tidy

2 days agoCleanup: replace 'unsigned in' with 'uint'
Campbell Barton [Fri, 18 Jun 2021 04:27:41 +0000 (14:27 +1000)]
Cleanup: replace 'unsigned in' with 'uint'

2 days agoCleanup: use standard identifier for uint64_t string formatting
Campbell Barton [Fri, 18 Jun 2021 04:27:39 +0000 (14:27 +1000)]
Cleanup: use standard identifier for uint64_t string formatting

2 days agoFix undefs from previous commit
Germano Cavalcante [Fri, 18 Jun 2021 01:27:09 +0000 (22:27 -0300)]
Fix undefs from previous commit

2 days agoFix T89210: Box selection can fail in graphics editor
Germano Cavalcante [Fri, 18 Jun 2021 01:12:03 +0000 (22:12 -0300)]
Fix T89210: Box selection can fail in graphics editor

Test the intersection of segment instead of point.

2 days agoFix T89247: Dereference arguments to comparison function correctly
Fen [Fri, 18 Jun 2021 01:13:09 +0000 (11:13 +1000)]
Fix T89247: Dereference arguments to comparison function correctly

`bm_face_len_cmp` incorrectly interpreted its arguments as `BMFace *`
instead of `BMFace **`, causing an out-of-bounds read.

Ref D11637

2 days agoFix T89233: Incorrect attribute remove warning for curves
Hans Goudey [Thu, 17 Jun 2021 22:22:09 +0000 (17:22 -0500)]
Fix T89233: Incorrect attribute remove warning for curves

The curve attribute delete function didn't return whether it was
successful or not.

2 days agoRaycast geometry node.
Lukas Tönne [Thu, 17 Jun 2021 08:31:53 +0000 (09:31 +0100)]
Raycast geometry node.

The //Raycast// node intersects rays from one geometry onto another.
It computes hit points on the target mesh and returns normals, distances
and any surface attribute specified by the user.

A ray starts on each point of the input //Geometry//. Rays continue
in the //Ray Direction// until they either hit the //Target Geometry//
or reach the //Ray Length// limit. If the target is hit, the value of the
//Is Hit// attribute in the output mesh will be true. //Hit Position//,
//Hit Normal//, //Hit Distance// and //Hit Index// are the properties of the
target mesh at the intersection point. In addition, a //Target Attribute//
can be specified that is interpolated at the hit point and the result
stored in //Hit Attribute//.

Docs: D11620

Reviewed By: HooglyBoogly

Differential Revision:

2 days agoFix T89234: Gpencil Separate doesn't copy settings in Stroke/Point mode
Antonio Vazquez [Thu, 17 Jun 2021 18:41:53 +0000 (20:41 +0200)]
Fix T89234: Gpencil Separate doesn't copy settings in Stroke/Point mode

Some values were not copied from the old layer to the new one as Tint or Opacity factor.

The error affected to Strokes and Point mode

3 days agoGeometry Nodes: Add Curve Subdivision Node
Hans Goudey [Thu, 17 Jun 2021 16:39:23 +0000 (11:39 -0500)]
Geometry Nodes: Add Curve Subdivision Node

This node creates splines with more control points in between the
existing control points. The point is to give the splines more
definition for further tweaking like randomization with white noise,
instead of deforming a resampled poly spline with a noise texture.

For poly splines and NURBS, the node simply interpolates new values
between the existing control points. However, for Bezier splines,
the result follows the existing evaluated shape of the curve, changing
the handle positions and handle types to make that possible.

The number of "cuts" can be controlled by an integer input, or an
attribute can be used. Both spline and point domain attributes are
supported, so the number of cuts can vary using the value from the
point at the start of each segment.

Dynamic curve attributes are interpolated to the result with linear

Differential Revision:

3 days agoGeometry Nodes: support minimum twist normal mode
Jacques Lucke [Thu, 17 Jun 2021 13:23:01 +0000 (15:23 +0200)]
Geometry Nodes: support minimum twist normal mode

The minimum twist mode is important because it allows creating
normals without sudden changes in direction. The disadvantage
of minimum twist normals is that the normals depend on all control
points. So changing one control point can change the normals
everywhere. The computed normals do not match the existing
code exactly, although they do match quite well on non-cyclic and
on some cyclic curves. I also noticed that the existing implementation
has some fairly simple failure cases that I haven't found in the new
implementation so far.

Differential Revision:

3 days agoGeometry Nodes: fix ownership issue in spline to points conversion
Jacques Lucke [Thu, 17 Jun 2021 11:40:08 +0000 (13:40 +0200)]
Geometry Nodes: fix ownership issue in spline to points conversion

Previously, `VArray_For_SplineToPoint` did not take ownership of the
virtual array leading to use-after-free errors.

3 days agoGeometry Nodes: improve node locking in evaluator
Jacques Lucke [Thu, 17 Jun 2021 08:43:32 +0000 (10:43 +0200)]
Geometry Nodes: improve node locking in evaluator

This makes the parts where a node is locked more explicit. Also, now the thread
is isolated when the node is locked. This prevents some kinds of deadlocks
(which haven't happened in practice yet).

3 days agoCleanup: use doxy sections for rna_mesh.c
Campbell Barton [Thu, 17 Jun 2021 06:41:01 +0000 (16:41 +1000)]
Cleanup: use doxy sections for rna_mesh.c

3 days agoCleanup: rename rna_Mesh_update_data to rna_Mesh_update_data_deg_all
Campbell Barton [Thu, 17 Jun 2021 06:27:20 +0000 (16:27 +1000)]
Cleanup: rename rna_Mesh_update_data to rna_Mesh_update_data_deg_all

It's ambiguous what rna_Mesh_update_data does compared with functions
that use `rna_Mesh_update_data_*` as a prefix.

Noticed by @sybren D11377 review.

3 days agoCleanup: improved comment for skipping updated with zero user meshes
Campbell Barton [Thu, 17 Jun 2021 06:19:23 +0000 (16:19 +1000)]
Cleanup: improved comment for skipping updated with zero user meshes

Noticed by @sybren D11377 review.

3 days agoCleanup: split BKE_mesh_copy_settings into two functions
Campbell Barton [Thu, 17 Jun 2021 04:56:39 +0000 (14:56 +1000)]
Cleanup: split BKE_mesh_copy_settings into two functions

- BKE_mesh_copy_parameters_for_eval to be used for evaluated meshes only
  as it doesn't handle ID user-counts.

- BKE_mesh_copy_parameters is a general function for copying parameters
  between meshes.

3 days agoCleanup: spelling
Campbell Barton [Thu, 17 Jun 2021 01:19:52 +0000 (11:19 +1000)]
Cleanup: spelling

3 days agoCleanup: unused argument, function & shadow variable warning
Campbell Barton [Thu, 17 Jun 2021 01:19:43 +0000 (11:19 +1000)]
Cleanup: unused argument, function & shadow variable warning

3 days agoVSE: Refactor transform operator code
Richard Antalik [Thu, 17 Jun 2021 02:02:53 +0000 (04:02 +0200)]
VSE: Refactor transform operator code

Refactor function `freeSeqData` so it is readable.

One strip can have multiple transform operations defined. To prevent
processing strip multiple times, build `SeqCollection` and use
sequencer iterator instead of iterating `TransData` directly.

No functional changes.

Differential Revision:

3 days agoVSE: Reduce transform code complexity
Richard Antalik [Thu, 17 Jun 2021 01:40:44 +0000 (03:40 +0200)]
VSE: Reduce transform code complexity

Reduce complexity of sequencer transform code by removing recursivity.
This is possible by treating meta strips (mostly) as any other strip and
containing all transform code within SEQ_ functions.

Unfortunately internally meta strips still require special treatment,
but all complexity from code all over transform code seems to be
possible to contain within one function.

Functional change:
Previously adjusting handle of single image strip moved animation.
Now animation is not moved, which is behavior for all other strips.

Reviewed By: sergey, mano-wii

Differential Revision:

3 days agoRevert "Fix T89204: slow repeated rendering with GPUOffscreen.draw_view3d"
Brecht Van Lommel [Thu, 17 Jun 2021 00:06:26 +0000 (02:06 +0200)]
Revert "Fix T89204: slow repeated rendering with GPUOffscreen.draw_view3d"

This reverts commit d03b26edbdc3a9fe87fde44bd8db8c4a67a36757. There is some
refresh issue that needs to be solved before this can be enabled.

3 days agoFix T88342: 'To Sphere' and 'Push/Pull' not working in Pose mode
Germano Cavalcante [Wed, 16 Jun 2021 19:47:34 +0000 (16:47 -0300)]
Fix T88342: 'To Sphere' and 'Push/Pull' not working in Pose mode

Some modes don't take into account that `TransData` may be in data space.

3 days agoFix T89204: slow repeated rendering with GPUOffscreen.draw_view3d
Brecht Van Lommel [Wed, 16 Jun 2021 18:07:24 +0000 (20:07 +0200)]
Fix T89204: slow repeated rendering with GPUOffscreen.draw_view3d

Cache the GPUViewport so the framebuffers and associated textures are not
reallocated each time.

3 days agoEdge-scrolling for node editor
Lukas Tönne [Wed, 16 Jun 2021 17:17:07 +0000 (18:17 +0100)]
Edge-scrolling for node editor

Starts scrolling when dragging a node or node link and going outside the current window.
Largely copied from the VIEW2D_OT_edge_pan operator.

Edge panning operator customdata and supporting functions now in
UI_view2d.h, so they could be used by operators in other editor
libraries. The VIEW2D_OT_edge_pan operator also uses this customdata and
shared functions now. Operators properties can be used to configure
edge panning margins and speed for each use case, rather than using
hardcoded values.

The speed function for edge panning has been tweaked somewhat:
* "Speed per pixel" has been replaced with a "speed ramp" distance.
  This is more intuitive and also creates an upper bound for the speed,
  which can otherwise become extreme with large cursor distance.
* "Max speed" is reached at the end of the speed ramp.
* Padding the region inside and outside is applied as before, but both
  values are operator properties now.

Node transform operator also supports edge panning. This requires
an offset for changes in the view2d rect, otherwise nodes are "stuck"
to the original view.

Transform operator had cursor wrapping categorically enabled, but this
gets quite confusing with the edge scrolling mechanism. A new TransInfo
option T_NO_CURSOR_WRAP has been introduced to disable this behavior.
The double negative is a bit annoying, but want to avoid affecting the
existing transform modes, so by default it should still set the
OP_IS_MODAL_GRAB_CURSOR flag (which then sets the WM_CURSOR_WRAP_XY
flag during modal execution).

Reviewed By: HooglyBoogly, JacquesLucke

Differential Revision:

4 days agoLineArt: Cached calculation for modifiers in the same stack.
YimingWu [Wed, 16 Jun 2021 14:38:47 +0000 (22:38 +0800)]
LineArt: Cached calculation for modifiers in the same stack.

This allows line art to run only once for each modifier stacks,
with an option to toggle a specific line art modifier should
use cache or re-do their own calculations.

Reviewed By: Sebastian Parborg (zeddb), Hans Goudey (HooglyBoogly)

Differential Revision:

4 days agoBLI: add C++ wrapper for task isolation
Jacques Lucke [Wed, 16 Jun 2021 14:29:21 +0000 (16:29 +0200)]
BLI: add C++ wrapper for task isolation

This makes it easier to use task isolation in c++ code.
Previously, one either had to check `WITH_TBB` (possibly indirectly
through `WITH_OPENVDB`) or one had to use the C function which
is less convenient.

4 days agoBLI: add threading namespace
Jacques Lucke [Wed, 16 Jun 2021 14:13:53 +0000 (16:13 +0200)]
BLI: add threading namespace

This namespace groups threading related functions/classes. This avoids
adding more threading related stuff to the blender namespace. Also it
makes naming a bit easier, e.g. the c++ version of BLI_task_isolate could
become blender::threading::isolate_task or something similar.

Differential Revision:

4 days agoShaderFX operators: Tweak a bit poll functions, forbid in liboverride cases.
Bastien Montagne [Wed, 16 Jun 2021 14:05:43 +0000 (16:05 +0200)]
ShaderFX operators: Tweak a bit poll functions, forbid in liboverride cases.

Similar to what we do for constraints and modifiers, except that
currently adding or editing shaderfx in liboverride objects is
completely unsuported.

Fix T88974.

4 days agoShaderFX/LibOverride: Add `BKE_shaderfx_is_nonlocal_in_liboverride` util.
Bastien Montagne [Wed, 16 Jun 2021 14:03:35 +0000 (16:03 +0200)]
ShaderFX/LibOverride: Add `BKE_shaderfx_is_nonlocal_in_liboverride` util.

Used to detect if a shaderfx is purely local, or comes from linked data,
in case of a liboverride.

Not actually used yet since we do not currently support adding
shaderfx's to overrides, but will be in the future, and matches
constraints and modifiers code.

4 days agoTweaks to Constraints operators poll functions.
Bastien Montagne [Wed, 16 Jun 2021 13:52:56 +0000 (15:52 +0200)]
Tweaks to Constraints operators poll functions.

* Make `ED_operator_object_active_editable_ex` properly report poll
  messages on failure.
* Add `ED_operator_object_active_local_editable_posemode_exclusive` for
  bone constraints requiring pure local Object (non-override one).
* General cleanup and adding more poll messages on failures.

4 days agoFix: Image node alpha socket converted to operations twice
Manuel Castilla [Wed, 16 Jun 2021 12:04:24 +0000 (14:04 +0200)]
Fix: Image node alpha socket converted to operations twice

On selecting a multi-layer image with a combined pass, a "Combined"
socket is created and default combined pass socket "Image" is
disabled by setting `SOCK_UNAVAIL` flag. When converting into
operations, `ImageNode` converts alpha socket on finding any socket with
a combined pass without checking the flag.

Since commit rB93e2491ee724 an assertion fails when mapping sockets
twice because now map `add_new` is used.

Reviewed By: jbakker

Differential Revision:

4 days agoCompositor: Full frame Value node
Manuel Castilla [Wed, 16 Jun 2021 12:02:08 +0000 (14:02 +0200)]
Compositor: Full frame Value node

Adds full frame implementation to Value node operation.
No functional changes.

Reviewed By: jbakker

Differential Revision:

4 days agoCompositor: Full frame RGB node
Manuel Castilla [Wed, 16 Jun 2021 12:00:05 +0000 (14:00 +0200)]
Compositor: Full frame RGB node

Adds full frame implementation to RGB node operation.
No functional changes.

Reviewed By: jbakker

Differential Revision:

4 days agoGeometry Nodes: fix z-up spline normal calculation
Jacques Lucke [Wed, 16 Jun 2021 10:20:10 +0000 (12:20 +0200)]
Geometry Nodes: fix z-up spline normal calculation

Previously it didn't work when the tangents were collinear to the z axis.

4 days agoAlembic procedural: support reading per-vertex UV sets
Kévin Dietrich [Wed, 16 Jun 2021 07:39:26 +0000 (09:39 +0200)]
Alembic procedural: support reading per-vertex UV sets

This adds support for importing UV sets which are defined per vertex,
instead of per face corners. Such UV sets can be generated when the
mesh is split according to UV islands, or when there is only one UV
island, in which cases only a single UV value can be stored per
vertex since vertices will never be on a seam.

4 days agoCleanup: minor simplification to status allocation
Campbell Barton [Wed, 16 Jun 2021 07:13:09 +0000 (17:13 +1000)]
Cleanup: minor simplification to status allocation

4 days agoFix pose-mode statistics with multi-object editing
Campbell Barton [Wed, 16 Jun 2021 07:05:13 +0000 (17:05 +1000)]
Fix pose-mode statistics with multi-object editing

- Include all objects in pose mode.
- Show the number of objects in pose mode.
- Show the number of objects in edit mode for all types of objects
  (not just meshes).

4 days agoCleanup: sculpt mode checks when calculating stats
Campbell Barton [Wed, 16 Jun 2021 06:56:17 +0000 (16:56 +1000)]
Cleanup: sculpt mode checks when calculating stats

Sculpting dynamic topology used to code-path for counting object
then never used the result.

Match object mode checks in string access & drawing.

4 days agoAlembic: support reading per-vertex UV sets
Kévin Dietrich [Tue, 15 Jun 2021 00:11:07 +0000 (02:11 +0200)]
Alembic: support reading per-vertex UV sets

This adds support for importing UV sets which are defined per vertex,
instead of per face corners. Such UV sets can be generated when the
mesh is split according to UV islands, or when there is only one UV
island, in which cases only a single UV value can be stored per
vertex since vertices will never be on a seam.

Reviewed By: sybren

Differential Revision:

4 days agoCleanup: reduce warnings when compiling release builds.
Jeroen Bakker [Wed, 16 Jun 2021 06:00:52 +0000 (08:00 +0200)]
Cleanup: reduce warnings when compiling release builds.

4 days agoGeometry Nodes: Separate Components Node
Johnny Matthews [Wed, 16 Jun 2021 03:31:57 +0000 (22:31 -0500)]
Geometry Nodes: Separate Components Node

Implementation of T86970. This node takes a geometry input with
multiple components and outputs them by component type. Meshes,
Curves, and Point Clouds support combining multiple input instances,
while volumes will only output the first volume component input until
suitable instance realization for multiple volumes is finished.

When direct geometry instancing is implemented it will be possible to
avoid realizing instances in this node.

Differential Revision:

4 days agoScreen: simplify internal logic for new full-screen areas
Campbell Barton [Wed, 16 Jun 2021 02:30:48 +0000 (12:30 +1000)]
Screen: simplify internal logic for new full-screen areas

Creating a new full screen area had it's area initialized as empty,
updating the screen then set the area to a 3D view (as a fallback),
before the actual area type was set.

This made setting the intended space-type run the 3D views exit callback
on a 3D view without a View3D struct allocated, which the exit callback
needed to account for.

Resolve by calling ED_screen_change after the area type has been set.

4 days agoCleanup: unused warning
Campbell Barton [Wed, 16 Jun 2021 02:29:44 +0000 (12:29 +1000)]
Cleanup: unused warning

4 days agoCleanup: Fix inconsistent parameter name warning
Hans Goudey [Wed, 16 Jun 2021 02:11:18 +0000 (21:11 -0500)]
Cleanup: Fix inconsistent parameter name warning

4 days agoUI - LOCAL View3D overlay stats
Harley Acheson [Wed, 16 Jun 2021 02:01:53 +0000 (19:01 -0700)]
UI - LOCAL View3D overlay stats

This patch improves the 3DView statistics overlay to show LOCAL stats
while in local view. This means the stats can vary between 3DViews and
the statusbar when views are in local view, but this gives a much more
accurate count of the objects, and their components, that you are
directly working with rather than just scene values.

Differential Revision:

Reviewed by Campbell Barton

4 days agoFix T88263: Incorrect image offset from old file
Richard Antalik [Tue, 15 Jun 2021 22:44:37 +0000 (00:44 +0200)]
Fix T88263: Incorrect image offset from old file

Versioning code for converting strip offset property doesn't work, when
property was animated and disabled or when crop was used.

When offset property is animated and offset is enabled, animation is
converted to be used with new transform design. When offset is disabled,
animation is left untouched. New transform design doesn't have option
to disable offset, and therefore old unconverted animation is used
instead of converted static value.

Remove animation from propery if it was unused.

Another issue was that both X and Y offset animation was being corrected
by factor caluclated for X channel.

Reviewed By: sergey

Differential Revision:

4 days agoVSE: Improve animation evaluation performance
Richard Antalik [Tue, 15 Jun 2021 22:29:17 +0000 (00:29 +0200)]
VSE: Improve animation evaluation performance

Use lookup string callback function for `sequences_all` RNA property
`rna_SequenceEditor_sequences_all_lookup_string` using a GHash for faster lookups.

When names are changed or strips are added/removed the lookup is tagged invalid.
The next time the lookup is used it will rebuild it.

Reviewed By: sergey, jbakker

Differential Revision:

4 days agoGeometry Nodes: Allow int attribute input fields with single value
Hans Goudey [Tue, 15 Jun 2021 21:38:28 +0000 (16:38 -0500)]
Geometry Nodes: Allow int attribute input fields with single value

Just like the way we often have a choice between an attribute input and
a single float, this adds the ability to choose between attribute and
integer input sockets, useful for D11421.

4 days agoCleanup: Expose function publicly, rename
Hans Goudey [Tue, 15 Jun 2021 21:31:08 +0000 (16:31 -0500)]
Cleanup: Expose function publicly, rename

There is no particular reason these two functions shouldn't be used
outside of the bezier spline implementation since they don't do anything
particularly controversial.

4 days agoSplines: Add resize method to CurveEval
Hans Goudey [Tue, 15 Jun 2021 21:24:11 +0000 (16:24 -0500)]
Splines: Add resize method to CurveEval

This helps when adding splines to a new curve in parallel.

4 days agoDRW: sanitize 'DRW_mesh_batch_cache_dirty_tag'
Germano Cavalcante [Mon, 14 Jun 2021 11:00:42 +0000 (08:00 -0300)]
DRW: sanitize 'DRW_mesh_batch_cache_dirty_tag'

Create maps that specify which batches have vbo or ibo as a reference
and use these maps to discard batches along with buffers.

Differential Revision:

4 days agoCleanup: Add files for version independent versioning helpers
Julian Eisel [Tue, 15 Jun 2021 17:28:24 +0000 (19:28 +0200)]
Cleanup: Add files for version independent versioning helpers

Adds `source/blender/blendloader/intern/` and
`versioning_common.h` for version independent versioning functions.

I only placed `do_versions_add_region_if_not_found()` in there for now.
`blo_do_version_old_trackto_to_constraints()` could also be added, but
that's so old, I prefer keeping that in `versioning_legacy.c`.

5 days agoUI: Support right aligned non-shortcut hints in widgets
Julian Eisel [Tue, 15 Jun 2021 16:53:32 +0000 (18:53 +0200)]
UI: Support right aligned non-shortcut hints in widgets

Widget drawing code already supported drawing right-aligned, grayed out
shortcut strings. This patch generalizes things a bit so this can also
be used to draw other hints in the same way. There have been a few
instances in the past where this would've been useful, D11046 being the
latest one.

Note that besides some manual regression testing, I didn't check if this
works yet, as there is no code actually using it (other than the
shortcuts). Can be checked as part of further development for D11046.

A possible further improvement would be providing a way to define how
clipping should be done. E.g. sometimes the right-aligned text should be
clipped first (because it's just a hint), in other cases it should be
left untouched (like current code explicitly does it for shortcuts).

Removes the `UI_BUT_HAS_SHORTCUT` flag, which isn't needed anymore.

5 days agoBLI: use explicit task isolation, no longer part of parallel operations
Brecht Van Lommel [Mon, 14 Jun 2021 13:50:24 +0000 (23:50 +1000)]
BLI: use explicit task isolation, no longer part of parallel operations

After looking into task isolation issues with Sergey, we couldn't find the
reason behind the deadlocks that we are getting in T87938 and a Sprite Fright
file involving motion blur renders.

There is no apparent place where we adding or waiting on tasks in a task group
from different isolation regions, which is what is known to cause problems. Yet
it still hangs. Either we do not understand some limitation of TBB isolation,
or there is a bug in TBB, but we could not figure it out.

Instead the idea is to use isolation only where we know we need it: when
holding a mutex lock and then doing some multithreaded operation within that
locked region. Three places where we do this now:
* Generated images
* Cached BVH tree building
* OpenVDB lazy grid loading

Compared to the more automatic approach previously used, there is the downside
that it is easy to miss places where we need isolation. Yet doing it more
automatically is also causing unexpected issue and bugs that we found no
solution for, so this seems better.

Patch implemented by Sergey and me.

Differential Revision:

5 days agoDraw Cache: avoid recalculating 'poly_normals'
Germano Cavalcante [Tue, 15 Jun 2021 14:00:02 +0000 (11:00 -0300)]
Draw Cache: avoid recalculating 'poly_normals'

Call `BKE_mesh_ensure_normals_for_display` to avoid recalculating

|looptris_test:|Average: 3.995076 FPS|Average: 4.047470 FPS
||rdata 11ms iter 91ms (frame 235ms)|rdata 11ms iter 86ms (frame 233ms)
|subdiv_mesh_cage_and_final:|Average: 1.884492 FPS|Average: 1.900114 FPS
||rdata 7ms iter 42ms (frame 268ms)|rdata 7ms iter 39ms (frame 265ms)
||rdata 7ms iter 44ms (frame 259ms)|rdata 7ms iter 42ms (frame 257ms)
|subdiv_mesh_final_only:|Average: 6.245944 FPS|Average: 6.289000 FPS
||rdata 3ms iter 23ms (frame 153ms)|rdata 3ms iter 21ms (frame 154ms)
|subdiv_mesh_final_only_ledge:|Average: 6.263482 FPS|Average: 6.187218 FPS
||rdata 3ms iter 23ms (frame 156ms)|rdata 3ms iter 22ms (frame 154ms)

Reviewed By: jbakker

Differential Revision:

5 days agoCleanup: use back-slash for doxygen comments
Campbell Barton [Tue, 15 Jun 2021 14:04:04 +0000 (00:04 +1000)]
Cleanup: use back-slash for doxygen comments

5 days agoCMake: disable TBB when not found
Campbell Barton [Tue, 15 Jun 2021 14:02:39 +0000 (00:02 +1000)]
CMake: disable TBB when not found

5 days agoDrawManager: Cache material offsets.
Jeroen Bakker [Tue, 15 Jun 2021 13:31:17 +0000 (15:31 +0200)]
DrawManager: Cache material offsets.

When using multiple materials in a single mesh the most time is spend in
counting the offsets of each material for the sorting.

This patch moves the counting of the offsets to render mesh data and
caches it as long as the geometry doesn't change.

This patch doesn't include multithreading of this code.

Reviewed By: mano-wii

Differential Revision:

5 days agoFix warning treated as an error
Germano Cavalcante [Tue, 15 Jun 2021 12:57:57 +0000 (09:57 -0300)]
Fix warning treated as an error

"void' function returning a value".