Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-06-13 06:14:07 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-06-13 06:19:34 +0300
commit9f5833798caf9581c2d781f4e2f8b95acb1560e0 (patch)
tree2c216f13fb90244a2160959faa754f0e327836d7 /source/blender/modifiers
parenta35de34eb78aba5e08938066c0ecdcb05f677a8f (diff)
Modifier: skip edit-mesh conversion for armature, curve & lattice
This is an improvement over 2.7x which converted edit-mesh to mesh (CDDM) for all 3 modifiers. Overall this increases performance in edit-mode by around 15-20%.
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c55
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c43
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c17
3 files changed, 57 insertions, 58 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index c8697f90b95..0cc0680804e 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -163,62 +163,47 @@ static void deformVerts(ModifierData *md,
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- Mesh *mesh,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
-
- /* TODO(Campbell): use edit-mode data only (remove this line). */
- if (mesh_src != NULL) {
- BKE_mesh_wrapper_ensure_mdata(mesh_src);
- }
MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- BKE_armature_deform_coords_with_mesh(amd->object,
- ctx->object,
- vertexCos,
- NULL,
- numVerts,
- amd->deformflag,
- amd->vert_coords_prev,
- amd->defgrp_name,
- mesh_src);
+ BKE_armature_deform_coords_with_editmesh(amd->object,
+ ctx->object,
+ vertexCos,
+ NULL,
+ numVerts,
+ amd->deformflag,
+ amd->vert_coords_prev,
+ amd->defgrp_name,
+ em);
/* free cache */
MEM_SAFE_FREE(amd->vert_coords_prev);
-
- if (mesh_src != mesh) {
- BKE_id_free(NULL, mesh_src);
- }
}
static void deformMatricesEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- Mesh *mesh,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
float (*defMats)[3][3],
int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
- BKE_armature_deform_coords_with_mesh(amd->object,
- ctx->object,
- vertexCos,
- defMats,
- numVerts,
- amd->deformflag,
- NULL,
- amd->defgrp_name,
- mesh_src);
-
- if (mesh_src != mesh) {
- BKE_id_free(NULL, mesh_src);
- }
+ BKE_armature_deform_coords_with_editmesh(amd->object,
+ ctx->object,
+ vertexCos,
+ defMats,
+ numVerts,
+ amd->deformflag,
+ NULL,
+ amd->defgrp_name,
+ em);
}
static void deformMatrices(ModifierData *md,
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index b55e48f46ce..a13bb07f678 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -34,6 +34,7 @@
#include "BKE_context.h"
#include "BKE_curve.h"
+#include "BKE_deform.h"
#include "BKE_editmesh.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
@@ -129,8 +130,9 @@ static void deformVerts(ModifierData *md,
int defgrp_index = -1;
MOD_get_vgroup(ctx->object, mesh_src, cmd->name, &dvert, &defgrp_index);
- /* silly that defaxis and BKE_curve_deform_coords are off by 1
+ /* Silly that defaxis and BKE_curve_deform_coords are off by 1
* but leave for now to save having to call do_versions */
+
BKE_curve_deform_coords(cmd->object,
ctx->object,
vertexCos,
@@ -147,22 +149,41 @@ static void deformVerts(ModifierData *md,
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
- struct BMEditMesh *em,
- Mesh *mesh,
+ BMEditMesh *em,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
+ CurveModifierData *cmd = (CurveModifierData *)md;
+ bool use_dverts = false;
+ int defgrp_index = -1;
- /* TODO(Campbell): use edit-mode data only (remove this line). */
- if (mesh_src != NULL) {
- BKE_mesh_wrapper_ensure_mdata(mesh_src);
+ if (ctx->object->type == OB_MESH && cmd->name[0] != '\0') {
+ defgrp_index = BKE_object_defgroup_name_index(ctx->object, cmd->name);
+ if (defgrp_index != -1) {
+ use_dverts = true;
+ }
}
- deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
-
- if (!ELEM(mesh_src, NULL, mesh)) {
- BKE_id_free(NULL, mesh_src);
+ if (use_dverts) {
+ BKE_curve_deform_coords_with_editmesh(cmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ defgrp_index,
+ cmd->flag,
+ cmd->defaxis - 1,
+ em);
+ }
+ else {
+ BKE_curve_deform_coords(cmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ NULL,
+ defgrp_index,
+ cmd->flag,
+ cmd->defaxis - 1);
}
}
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index a6eaf7e78aa..574ea969be4 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -130,23 +130,16 @@ static void deformVerts(ModifierData *md,
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- struct Mesh *mesh,
+ struct Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
- struct Mesh *mesh_src = MOD_deform_mesh_eval_get(
- ctx->object, em, mesh, NULL, numVerts, false, false);
-
- /* TODO(Campbell): use edit-mode data only (remove this line). */
- if (mesh_src != NULL) {
- BKE_mesh_wrapper_ensure_mdata(mesh_src);
- }
+ LatticeModifierData *lmd = (LatticeModifierData *)md;
- deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
+ MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- if (!ELEM(mesh_src, NULL, mesh)) {
- BKE_id_free(NULL, mesh_src);
- }
+ BKE_lattice_deform_coords_with_editmesh(
+ lmd->object, ctx->object, vertexCos, numVerts, lmd->flag, lmd->name, lmd->strength, em);
}
static void panel_draw(const bContext *C, Panel *panel)