Multi-threading support for transform modes:
bevel-weight, crease, push-pull, rotate, shear, shrink-fatten,
skin-resize, to-sphere, trackball & translate.
This is done using a parallel loop over transform data.
From testing a 1.5million polygon mesh on a 32 core system the
overall performance gains were between ~20-28%
To ensure the code is thread-safe arguments to shared data are const.
Details for review:
- This runs each objects transform data in parallel, instead of splitting the task between multiple objects in multi-object edit-mode. This was done because it's more common to have a few high poly meshes than many low poly objects in edit-mode.
- The non-threaded loops are kept, this allows to easily disable threading if some situations don't support it.
- There was one case of non thread-safe logic (fixed rBf2c52aa0e1a5a6905849daa299ab907e60cab983)
- Rotation was more involved as it caches rotation matrices to avoid expensive recalculation.
- There are a few callbacks that could be converted into constants (isLockConstraint for e.g), this can be done as a separate refactor.