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:
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/intern/MOD_array.c55
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.cc7
-rw-r--r--source/blender/modifiers/intern/MOD_build.c9
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c25
-rw-r--r--source/blender/modifiers/intern/MOD_datatransfer.cc6
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c4
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c42
-rw-r--r--source/blender/modifiers/intern/MOD_mask.cc16
-rw-r--r--source/blender/modifiers/intern/MOD_meshcache.c16
-rw-r--r--source/blender/modifiers/intern/MOD_meshsequencecache.cc7
-rw-r--r--source/blender/modifiers/intern/MOD_multires.cc4
-rw-r--r--source/blender/modifiers/intern/MOD_normal_edit.cc25
-rw-r--r--source/blender/modifiers/intern/MOD_ocean.c20
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c30
-rw-r--r--source/blender/modifiers/intern/MOD_remesh.c10
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c70
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c6
-rw-r--r--source/blender/modifiers/intern/MOD_skin.c62
-rw-r--r--source/blender/modifiers/intern/MOD_solidify_extrude.c65
-rw-r--r--source/blender/modifiers/intern/MOD_solidify_nonmanifold.c20
-rw-r--r--source/blender/modifiers/intern/MOD_surface.c17
-rw-r--r--source/blender/modifiers/intern/MOD_surfacedeform.c4
-rw-r--r--source/blender/modifiers/intern/MOD_util.cc10
-rw-r--r--source/blender/modifiers/intern/MOD_weighted_normal.cc32
-rw-r--r--source/blender/modifiers/intern/MOD_weightvg_util.c2
25 files changed, 243 insertions, 321 deletions
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 2d725af7fe4..a09756b03aa 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -125,15 +125,15 @@ static int svert_sum_cmp(const void *e1, const void *e2)
}
static void svert_from_mvert(SortVertsElem *sv,
- const MVert *mv,
+ const float (*positions)[3],
const int i_begin,
const int i_end)
{
int i;
- for (i = i_begin; i < i_end; i++, sv++, mv++) {
+ for (i = i_begin; i < i_end; i++, sv++) {
sv->vertex_num = i;
- copy_v3_v3(sv->co, mv->co);
- sv->sum_co = sum_v3(mv->co);
+ copy_v3_v3(sv->co, positions[i]);
+ sv->sum_co = sum_v3(positions[i]);
}
}
@@ -145,7 +145,7 @@ static void svert_from_mvert(SortVertsElem *sv,
* The `int doubles_map[verts_source_num]` array must have been allocated by caller.
*/
static void dm_mvert_map_doubles(int *doubles_map,
- const MVert *mverts,
+ const float (*positions)[3],
const int target_start,
const int target_verts_num,
const int source_start,
@@ -166,10 +166,10 @@ static void dm_mvert_map_doubles(int *doubles_map,
sorted_verts_source = MEM_malloc_arrayN(source_verts_num, sizeof(SortVertsElem), __func__);
/* Copy target vertices index and cos into SortVertsElem array */
- svert_from_mvert(sorted_verts_target, mverts + target_start, target_start, target_end);
+ svert_from_mvert(sorted_verts_target, positions, target_start, target_end);
/* Copy source vertices index and cos into SortVertsElem array */
- svert_from_mvert(sorted_verts_source, mverts + source_start, source_start, source_end);
+ svert_from_mvert(sorted_verts_source, positions, source_start, source_end);
/* sort arrays according to sum of vertex coordinates (sumco) */
qsort(sorted_verts_target, target_verts_num, sizeof(SortVertsElem), svert_sum_cmp);
@@ -237,8 +237,8 @@ static void dm_mvert_map_doubles(int *doubles_map,
* then there will be no mapping at all for this source. */
while (best_target_vertex != -1 &&
!ELEM(doubles_map[best_target_vertex], -1, best_target_vertex)) {
- if (compare_len_v3v3(mverts[sve_source->vertex_num].co,
- mverts[doubles_map[best_target_vertex]].co,
+ if (compare_len_v3v3(positions[sve_source->vertex_num],
+ positions[doubles_map[best_target_vertex]],
dist)) {
best_target_vertex = doubles_map[best_target_vertex];
}
@@ -275,11 +275,10 @@ static void mesh_merge_transform(Mesh *result,
{
int *index_orig;
int i;
- MVert *mv;
MEdge *me;
MLoop *ml;
MPoly *mp;
- MVert *result_verts = BKE_mesh_verts_for_write(result);
+ float(*result_positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *result_edges = BKE_mesh_edges_for_write(result);
MPoly *result_polys = BKE_mesh_polys_for_write(result);
MLoop *result_loops = BKE_mesh_loops_for_write(result);
@@ -289,10 +288,8 @@ static void mesh_merge_transform(Mesh *result,
CustomData_copy_data(&cap_mesh->ldata, &result->ldata, 0, cap_loops_index, cap_nloops);
CustomData_copy_data(&cap_mesh->pdata, &result->pdata, 0, cap_polys_index, cap_npolys);
- mv = result_verts + cap_verts_index;
-
- for (i = 0; i < cap_nverts; i++, mv++) {
- mul_m4_v3(cap_offset, mv->co);
+ for (i = 0; i < cap_nverts; i++) {
+ mul_m4_v3(cap_offset, result_positions[cap_verts_index + i]);
}
/* We have to correct normals too, if we do not tag them as dirty later! */
@@ -428,7 +425,6 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
/* Build up offset array, accumulating all settings options. */
unit_m4(offset);
- const MVert *src_verts = BKE_mesh_verts(mesh);
const MEdge *src_edges = BKE_mesh_edges(mesh);
const MPoly *src_polys = BKE_mesh_polys(mesh);
const MLoop *src_loops = BKE_mesh_loops(mesh);
@@ -439,12 +435,8 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
if (amd->offset_type & MOD_ARR_OFF_RELATIVE) {
float min[3], max[3];
- const MVert *src_mv;
-
INIT_MINMAX(min, max);
- for (src_mv = src_verts, j = chunk_nverts; j--; src_mv++) {
- minmax_v3v3_v3(min, max, src_mv->co);
- }
+ BKE_mesh_minmax(mesh, min, max);
for (j = 3; j--;) {
offset[3][j] += amd->scale[j] * (max[j] - min[j]);
@@ -541,7 +533,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
/* Initialize a result dm */
result = BKE_mesh_new_nomain_from_template(
mesh, result_nverts, result_nedges, 0, result_nloops, result_npolys);
- MVert *result_verts = BKE_mesh_verts_for_write(result);
+ float(*result_positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *result_edges = BKE_mesh_edges_for_write(result);
MPoly *result_polys = BKE_mesh_polys_for_write(result);
MLoop *result_loops = BKE_mesh_loops_for_write(result);
@@ -559,10 +551,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
CustomData_copy_data(&mesh->pdata, &result->pdata, 0, 0, chunk_npolys);
/* Subdivision-surface for eg won't have mesh data in the custom-data arrays.
- * Now add #MVert/#MEdge/#MPoly layers. */
- if (!CustomData_has_layer(&mesh->vdata, CD_MVERT)) {
- memcpy(result_verts, src_verts, sizeof(MVert) * mesh->totvert);
- }
+ * Now add #position/#MEdge/#MPoly layers. */
if (!CustomData_has_layer(&mesh->edata, CD_MEDGE)) {
memcpy(result_edges, src_edges, sizeof(MEdge) * mesh->totedge);
}
@@ -599,7 +588,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
/* apply offset to all new verts */
for (i = 0; i < chunk_nverts; i++) {
const int i_dst = vert_offset + i;
- mul_m4_v3(current_offset, result_verts[i_dst].co);
+ mul_m4_v3(current_offset, result_positions[i_dst]);
/* We have to correct normals too, if we do not tag them as dirty! */
if (!use_recalc_normals) {
@@ -643,8 +632,8 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
while (target != -1 && !ELEM(full_doubles_map[target], -1, target)) {
/* If target is already mapped, we only follow that mapping if final target remains
* close enough from current vert (otherwise no mapping at all). */
- if (compare_len_v3v3(result_verts[this_chunk_index].co,
- result_verts[full_doubles_map[target]].co,
+ if (compare_len_v3v3(result_positions[this_chunk_index],
+ result_positions[full_doubles_map[target]],
amd->merge_dist)) {
target = full_doubles_map[target];
}
@@ -658,7 +647,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
}
else {
dm_mvert_map_doubles(full_doubles_map,
- result_verts,
+ result_positions,
(c - 1) * chunk_nverts,
chunk_nverts,
c * chunk_nverts,
@@ -696,7 +685,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
if (use_merge && (amd->flags & MOD_ARR_MERGEFINAL) && (count > 1)) {
/* Merge first and last copies */
dm_mvert_map_doubles(full_doubles_map,
- result_verts,
+ result_positions,
last_chunk_start,
last_chunk_nverts,
first_chunk_start,
@@ -726,7 +715,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
/* Identify doubles with first chunk */
if (use_merge) {
dm_mvert_map_doubles(full_doubles_map,
- result_verts,
+ result_positions,
first_chunk_start,
first_chunk_nverts,
start_cap_start,
@@ -756,7 +745,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
/* Identify doubles with last chunk */
if (use_merge) {
dm_mvert_map_doubles(full_doubles_map,
- result_verts,
+ result_positions,
last_chunk_start,
last_chunk_nverts,
end_cap_start,
diff --git a/source/blender/modifiers/intern/MOD_boolean.cc b/source/blender/modifiers/intern/MOD_boolean.cc
index 21f05158e8b..9924968ea88 100644
--- a/source/blender/modifiers/intern/MOD_boolean.cc
+++ b/source/blender/modifiers/intern/MOD_boolean.cc
@@ -62,6 +62,7 @@
#endif
using blender::Array;
+using blender::float3;
using blender::float4x4;
using blender::IndexRange;
using blender::MutableSpan;
@@ -142,9 +143,9 @@ static Mesh *get_quick_mesh(
invert_m4_m4(imat, ob_self->object_to_world);
mul_m4_m4m4(omat, imat, ob_operand_ob->object_to_world);
- MutableSpan<MVert> verts = result->verts_for_write();
- for (const int i : verts.index_range()) {
- mul_m4_v3(omat, verts[i].co);
+ MutableSpan<float3> positions = result->positions_for_write();
+ for (const int i : positions.index_range()) {
+ mul_m4_v3(omat, positions[i]);
}
BKE_mesh_tag_coords_changed(result);
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 78724d6a2a1..c6bda4a707b 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -75,7 +75,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, struct
const int vert_src_num = mesh->totvert;
const int edge_src_num = mesh->totedge;
const int poly_src_num = mesh->totpoly;
- const MVert *mvert_src = BKE_mesh_verts(mesh);
const MEdge *medge_src = BKE_mesh_edges(mesh);
const MPoly *mpoly_src = BKE_mesh_polys(mesh);
const MLoop *mloop_src = BKE_mesh_loops(mesh);
@@ -202,23 +201,15 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, struct
/* now we know the number of verts, edges and faces, we can create the mesh. */
result = BKE_mesh_new_nomain_from_template(
mesh, BLI_ghash_len(vertHash), BLI_ghash_len(edgeHash), 0, loops_dst_num, faces_dst_num);
- MVert *result_verts = BKE_mesh_verts_for_write(result);
MEdge *result_edges = BKE_mesh_edges_for_write(result);
MPoly *result_polys = BKE_mesh_polys_for_write(result);
MLoop *result_loops = BKE_mesh_loops_for_write(result);
/* copy the vertices across */
GHASH_ITER (gh_iter, vertHash) {
- MVert source;
- MVert *dest;
int oldIndex = POINTER_AS_INT(BLI_ghashIterator_getKey(&gh_iter));
int newIndex = POINTER_AS_INT(BLI_ghashIterator_getValue(&gh_iter));
-
- source = mvert_src[oldIndex];
- dest = &result_verts[newIndex];
-
CustomData_copy_data(&mesh->vdata, &result->vdata, oldIndex, newIndex, 1);
- *dest = source;
}
/* copy the edges across, remapping indices */
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index 82faf08b349..c98c5ce6c65 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -93,7 +93,6 @@ static void deformVerts(ModifierData *md,
{
CollisionModifierData *collmd = (CollisionModifierData *)md;
Mesh *mesh_src;
- MVert *tempVert = NULL;
Object *ob = ctx->object;
/* If collision is disabled, free the stale data and exit. */
@@ -145,11 +144,11 @@ static void deformVerts(ModifierData *md,
if (collmd->time_xnew == -1000) { /* first time */
- collmd->x = MEM_dupallocN(BKE_mesh_verts(mesh_src)); /* frame start position */
+ collmd->x = MEM_dupallocN(BKE_mesh_positions(mesh_src)); /* frame start position */
for (uint i = 0; i < mvert_num; i++) {
/* we save global positions */
- mul_m4_v3(ob->object_to_world, collmd->x[i].co);
+ mul_m4_v3(ob->object_to_world, collmd->x[i]);
}
collmd->xnew = MEM_dupallocN(collmd->x); /* Frame end position. */
@@ -177,25 +176,25 @@ static void deformVerts(ModifierData *md,
}
else if (mvert_num == collmd->mvert_num) {
/* put positions to old positions */
- tempVert = collmd->x;
+ float(*temp)[3] = collmd->x;
collmd->x = collmd->xnew;
- collmd->xnew = tempVert;
+ collmd->xnew = temp;
collmd->time_x = collmd->time_xnew;
- memcpy(collmd->xnew, BKE_mesh_verts(mesh_src), mvert_num * sizeof(MVert));
+ memcpy(collmd->xnew, BKE_mesh_positions(mesh_src), mvert_num * sizeof(float[3]));
bool is_static = true;
for (uint i = 0; i < mvert_num; i++) {
/* we save global positions */
- mul_m4_v3(ob->object_to_world, collmd->xnew[i].co);
+ mul_m4_v3(ob->object_to_world, collmd->xnew[i]);
/* detect motion */
- is_static = is_static && equals_v3v3(collmd->x[i].co, collmd->xnew[i].co);
+ is_static = is_static && equals_v3v3(collmd->x[i], collmd->xnew[i]);
}
- memcpy(collmd->current_xnew, collmd->x, mvert_num * sizeof(MVert));
- memcpy(collmd->current_x, collmd->x, mvert_num * sizeof(MVert));
+ memcpy(collmd->current_xnew, collmd->x, mvert_num * sizeof(float[3]));
+ memcpy(collmd->current_x, collmd->x, mvert_num * sizeof(float[3]));
/* check if GUI setting has changed for bvh */
if (collmd->bvhtree) {
@@ -265,9 +264,9 @@ static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
collmd->xnew = newdataadr(fd, collmd->xnew);
collmd->mfaces = newdataadr(fd, collmd->mfaces);
- collmd->current_x = MEM_calloc_arrayN(collmd->mvert_num, sizeof(MVert), "current_x");
- collmd->current_xnew = MEM_calloc_arrayN(collmd->mvert_num, sizeof(MVert), "current_xnew");
- collmd->current_v = MEM_calloc_arrayN(collmd->mvert_num, sizeof(MVert), "current_v");
+ collmd->current_x = MEM_calloc_arrayN(collmd->mvert_num, sizeof(float[3]), "current_x");
+ collmd->current_xnew = MEM_calloc_arrayN(collmd->mvert_num, sizeof(float[3]), "current_xnew");
+ collmd->current_v = MEM_calloc_arrayN(collmd->mvert_num, sizeof(float[3]), "current_v");
#endif
collmd->x = NULL;
diff --git a/source/blender/modifiers/intern/MOD_datatransfer.cc b/source/blender/modifiers/intern/MOD_datatransfer.cc
index 25e8eb8fa20..494ea23d7e2 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.cc
+++ b/source/blender/modifiers/intern/MOD_datatransfer.cc
@@ -175,12 +175,12 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
BLI_SPACE_TRANSFORM_SETUP(space_transform, ctx->object, ob_source);
}
- const MVert *me_verts = BKE_mesh_verts(me);
+ const float(*me_positions)[3] = BKE_mesh_positions(me);
const MEdge *me_edges = BKE_mesh_edges(me);
- const MVert *result_verts = BKE_mesh_verts(result);
+ const float(*result_positions)[3] = BKE_mesh_positions(result);
const MEdge *result_edges = BKE_mesh_edges(result);
- if (((result == me) || (me_verts == result_verts) || (me_edges == result_edges)) &&
+ if (((result == me) || (me_positions == result_positions) || (me_edges == result_edges)) &&
(dtmd->data_types & DT_TYPES_AFFECT_MESH)) {
/* We need to duplicate data here, otherwise setting custom normals, edges' sharpness, etc.,
* could modify org mesh, see T43671. */
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index fc12a9c2aad..6436bf29bdc 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -157,7 +157,6 @@ typedef struct DisplaceUserdata {
float (*tex_co)[3];
float (*vertexCos)[3];
float local_mat[4][4];
- MVert *mvert;
const float (*vert_normals)[3];
float (*vert_clnors)[3];
} DisplaceUserdata;
@@ -267,7 +266,6 @@ static void displaceModifier_do(DisplaceModifierData *dmd,
const int verts_num)
{
Object *ob = ctx->object;
- MVert *mvert;
const MDeformVert *dvert;
int direction = dmd->direction;
int defgrp_index;
@@ -284,7 +282,6 @@ static void displaceModifier_do(DisplaceModifierData *dmd,
return;
}
- mvert = BKE_mesh_verts_for_write(mesh);
MOD_get_vgroup(ob, mesh, dmd->defgrp_name, &dvert, &defgrp_index);
if (defgrp_index >= 0 && dvert == NULL) {
@@ -337,7 +334,6 @@ static void displaceModifier_do(DisplaceModifierData *dmd,
data.tex_co = tex_co;
data.vertexCos = vertexCos;
copy_m4_m4(data.local_mat, local_mat);
- data.mvert = mvert;
if (direction == MOD_DISP_DIR_NOR) {
data.vert_normals = BKE_mesh_vertex_normals_ensure(mesh);
}
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index b0806fed91c..7d2bf5f65bb 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -91,7 +91,6 @@ static void createFacepa(ExplodeModifierData *emd, ParticleSystemModifierData *p
{
ParticleSystem *psys = psmd->psys;
MFace *fa = NULL, *mface = NULL;
- MVert *mvert = NULL;
ParticleData *pa;
KDTree_3d *tree;
RNG *rng;
@@ -100,7 +99,7 @@ static void createFacepa(ExplodeModifierData *emd, ParticleSystemModifierData *p
int i, p, v1, v2, v3, v4 = 0;
const bool invert_vgroup = (emd->flag & eExplodeFlag_INVERT_VGROUP) != 0;
- mvert = BKE_mesh_verts_for_write(mesh);
+ float(*positions)[3] = BKE_mesh_positions_for_write(mesh);
mface = (MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE);
totvert = mesh->totvert;
totface = mesh->totface;
@@ -160,10 +159,10 @@ static void createFacepa(ExplodeModifierData *emd, ParticleSystemModifierData *p
/* set face-particle-indexes to nearest particle to face center */
for (i = 0, fa = mface; i < totface; i++, fa++) {
- add_v3_v3v3(center, mvert[fa->v1].co, mvert[fa->v2].co);
- add_v3_v3(center, mvert[fa->v3].co);
+ add_v3_v3v3(center, positions[fa->v1], positions[fa->v2]);
+ add_v3_v3(center, positions[fa->v3]);
if (fa->v4) {
- add_v3_v3(center, mvert[fa->v4].co);
+ add_v3_v3(center, positions[fa->v4]);
mul_v3_fl(center, 0.25);
}
else {
@@ -641,7 +640,7 @@ static Mesh *cutEdges(ExplodeModifierData *emd, Mesh *mesh)
Mesh *split_m;
MFace *mf = NULL, *df1 = NULL;
MFace *mface = CustomData_get_layer(&mesh->fdata, CD_MFACE);
- MVert *dupve, *mv;
+ float *dupve;
EdgeHash *edgehash;
EdgeHashIterator *ehi;
int totvert = mesh->totvert;
@@ -730,18 +729,11 @@ static Mesh *cutEdges(ExplodeModifierData *emd, Mesh *mesh)
layers_num = CustomData_number_of_layers(&split_m->fdata, CD_MTFACE);
- const MVert *mesh_verts = BKE_mesh_verts(mesh);
- MVert *split_m_verts = BKE_mesh_verts_for_write(split_m);
+ float(*split_m_positions)[3] = BKE_mesh_positions_for_write(split_m);
/* copy new faces & verts (is it really this painful with custom data??) */
for (i = 0; i < totvert; i++) {
- MVert source;
- MVert *dest;
- source = mesh_verts[i];
- dest = &split_m_verts[i];
-
CustomData_copy_data(&mesh->vdata, &split_m->vdata, i, i, 1);
- *dest = source;
}
/* override original facepa (original pointer is saved in caller function) */
@@ -759,16 +751,13 @@ static Mesh *cutEdges(ExplodeModifierData *emd, Mesh *mesh)
for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
BLI_edgehashIterator_getKey(ehi, &ed_v1, &ed_v2);
esplit = POINTER_AS_INT(BLI_edgehashIterator_getValue(ehi));
- mv = &split_m_verts[ed_v2];
- dupve = &split_m_verts[esplit];
CustomData_copy_data(&split_m->vdata, &split_m->vdata, ed_v2, esplit, 1);
- *dupve = *mv;
-
- mv = &split_m_verts[ed_v1];
+ dupve = split_m_positions[esplit];
+ copy_v3_v3(dupve, split_m_positions[ed_v2]);
- mid_v3_v3v3(dupve->co, dupve->co, mv->co);
+ mid_v3_v3v3(dupve, dupve, split_m_positions[ed_v1]);
}
BLI_edgehashIterator_free(ehi);
@@ -989,26 +978,23 @@ static Mesh *explodeMesh(ExplodeModifierData *emd,
psys_sim_data_init(&sim);
- const MVert *mesh_verts = BKE_mesh_verts(mesh);
- MVert *explode_verts = BKE_mesh_verts_for_write(explode);
+ const float(*positions)[3] = BKE_mesh_positions(mesh);
+ float(*explode_positions)[3] = BKE_mesh_positions_for_write(explode);
/* duplicate & displace vertices */
ehi = BLI_edgehashIterator_new(vertpahash);
for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
- MVert source;
- MVert *dest;
/* get particle + vertex from hash */
BLI_edgehashIterator_getKey(ehi, &ed_v1, &ed_v2);
ed_v2 -= totvert;
v = POINTER_AS_INT(BLI_edgehashIterator_getValue(ehi));
- source = mesh_verts[ed_v1];
- dest = &explode_verts[v];
+ copy_v3_v3(explode_positions[v], positions[ed_v1]);
CustomData_copy_data(&mesh->vdata, &explode->vdata, ed_v1, v, 1);
- *dest = source;
+ copy_v3_v3(explode_positions[v], positions[ed_v1]);
if (ed_v2 != totpart) {
/* get particle */
@@ -1019,7 +1005,7 @@ static Mesh *explodeMesh(ExplodeModifierData *emd,
state.time = ctime;
psys_get_particle_state(&sim, ed_v2, &state, 1);
- vertco = explode_verts[v].co;
+ vertco = explode_positions[v];
mul_m4_v3(ctx->object->object_to_world, vertco);
sub_v3_v3(vertco, birth.co);
diff --git a/source/blender/modifiers/intern/MOD_mask.cc b/source/blender/modifiers/intern/MOD_mask.cc
index 659a1625079..3ae300d22cf 100644
--- a/source/blender/modifiers/intern/MOD_mask.cc
+++ b/source/blender/modifiers/intern/MOD_mask.cc
@@ -49,6 +49,7 @@
#include "BLI_vector.hh"
using blender::Array;
+using blender::float3;
using blender::IndexRange;
using blender::ListBaseWrapper;
using blender::MutableSpan;
@@ -336,19 +337,12 @@ static void copy_masked_verts_to_new_mesh(const Mesh &src_mesh,
Span<int> vertex_map)
{
BLI_assert(src_mesh.totvert == vertex_map.size());
- const Span<MVert> src_verts = src_mesh.verts();
- MutableSpan<MVert> dst_verts = dst_mesh.verts_for_write();
-
for (const int i_src : vertex_map.index_range()) {
const int i_dst = vertex_map[i_src];
if (i_dst == -1) {
continue;
}
- const MVert &v_src = src_verts[i_src];
- MVert &v_dst = dst_verts[i_dst];
-
- v_dst = v_src;
CustomData_copy_data(&src_mesh.vdata, &dst_mesh.vdata, i_src, i_dst, 1);
}
}
@@ -374,11 +368,10 @@ static void add_interp_verts_copy_edges_to_new_mesh(const Mesh &src_mesh,
uint verts_add_num,
MutableSpan<int> r_edge_map)
{
+ using namespace blender;
BLI_assert(src_mesh.totvert == vertex_mask.size());
BLI_assert(src_mesh.totedge == r_edge_map.size());
- const Span<MVert> src_verts = src_mesh.verts();
const Span<MEdge> src_edges = src_mesh.edges();
- MutableSpan<MVert> dst_verts = dst_mesh.verts_for_write();
MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
uint vert_index = dst_mesh.totvert - verts_add_num;
@@ -418,11 +411,6 @@ static void add_interp_verts_copy_edges_to_new_mesh(const Mesh &src_mesh,
float weights[2] = {1.0f - fac, fac};
CustomData_interp(
&src_mesh.vdata, &dst_mesh.vdata, (int *)&e_src.v1, weights, nullptr, 2, vert_index);
- MVert &v = dst_verts[vert_index];
- const MVert &v1 = src_verts[e_src.v1];
- const MVert &v2 = src_verts[e_src.v2];
-
- interp_v3_v3v3(v.co, v1.co, v2.co, fac);
vert_index++;
}
}
diff --git a/source/blender/modifiers/intern/MOD_meshcache.c b/source/blender/modifiers/intern/MOD_meshcache.c
index 822da40edb7..43757c0e95d 100644
--- a/source/blender/modifiers/intern/MOD_meshcache.c
+++ b/source/blender/modifiers/intern/MOD_meshcache.c
@@ -176,17 +176,8 @@ static void meshcache_do(MeshCacheModifierData *mcmd,
BKE_modifier_set_error(ob, &mcmd->modifier, "'Integrate' requires faces");
}
else {
- /* the moons align! */
- int i;
-
- float(*vertexCos_Source)[3] = MEM_malloc_arrayN(
- verts_num, sizeof(*vertexCos_Source), __func__);
float(*vertexCos_New)[3] = MEM_malloc_arrayN(verts_num, sizeof(*vertexCos_New), __func__);
- const MVert *mv = BKE_mesh_verts(me);
-
- for (i = 0; i < verts_num; i++, mv++) {
- copy_v3_v3(vertexCos_Source[i], mv->co);
- }
+ const float(*positions)[3] = BKE_mesh_positions(me);
BKE_mesh_calc_relative_deform(
BKE_mesh_polys(me),
@@ -194,8 +185,8 @@ static void meshcache_do(MeshCacheModifierData *mcmd,
BKE_mesh_loops(me),
me->totvert,
- (const float(*)[3])vertexCos_Source, /* From the original Mesh. */
- (const float(*)[3])vertexCos_Real, /* the input we've been given (shape keys!) */
+ (const float(*)[3])positions, /* From the original Mesh. */
+ (const float(*)[3])vertexCos_Real, /* the input we've been given (shape keys!) */
(const float(*)[3])vertexCos, /* The result of this modifier. */
vertexCos_New /* The result of this function. */
@@ -204,7 +195,6 @@ static void meshcache_do(MeshCacheModifierData *mcmd,
/* write the corrected locations back into the result */
memcpy(vertexCos, vertexCos_New, sizeof(*vertexCos) * verts_num);
- MEM_freeN(vertexCos_Source);
MEM_freeN(vertexCos_New);
}
}
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc
index 13931179b35..6da6dd46507 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc
@@ -60,6 +60,7 @@
# include "usd.h"
#endif
+using blender::float3;
using blender::Span;
static void initData(ModifierData *md)
@@ -176,17 +177,17 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
if (me != nullptr) {
- const Span<MVert> mesh_verts = mesh->verts();
+ const Span<float3> mesh_positions = mesh->positions();
const Span<MEdge> mesh_edges = mesh->edges();
const Span<MPoly> mesh_polys = mesh->polys();
- const Span<MVert> me_verts = me->verts();
+ const Span<float3> me_positions = me->positions();
const Span<MEdge> me_edges = me->edges();
const Span<MPoly> me_polys = me->polys();
/* TODO(sybren+bastien): possibly check relevant custom data layers (UV/color depending on
* flags) and duplicate those too.
* XXX(Hans): This probably isn't true anymore with various CoW improvements, etc. */
- if ((me_verts.data() == mesh_verts.data()) || (me_edges.data() == mesh_edges.data()) ||
+ if ((me_positions.data() == mesh_positions.data()) || (me_edges.data() == mesh_edges.data()) ||
(me_polys.data() == mesh_polys.data())) {
/* We need to duplicate data here, otherwise we'll modify org mesh, see T51701. */
mesh = reinterpret_cast<Mesh *>(
diff --git a/source/blender/modifiers/intern/MOD_multires.cc b/source/blender/modifiers/intern/MOD_multires.cc
index 2bc3763c46b..8c594b061fa 100644
--- a/source/blender/modifiers/intern/MOD_multires.cc
+++ b/source/blender/modifiers/intern/MOD_multires.cc
@@ -219,7 +219,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
mesh->flag & ME_AUTOSMOOTH &&
CustomData_has_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL);
/* NOTE: Orco needs final coordinates on CPU side, which are expected to be
- * accessible via MVert. For this reason we do not evaluate multires to
+ * accessible via mesh vertices. For this reason we do not evaluate multires to
* grids when orco is requested. */
const bool for_orco = (ctx->flag & MOD_APPLY_ORCO) != 0;
/* Needed when rendering or baking will in sculpt mode. */
@@ -244,7 +244,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
sculpt_session->multires.level = mmd->sculptlvl;
sculpt_session->totvert = mesh->totvert;
sculpt_session->totpoly = mesh->totpoly;
- sculpt_session->mvert = nullptr;
+ sculpt_session->positions = nullptr;
sculpt_session->mpoly = nullptr;
sculpt_session->mloop = nullptr;
}
diff --git a/source/blender/modifiers/intern/MOD_normal_edit.cc b/source/blender/modifiers/intern/MOD_normal_edit.cc
index 7d422826cf8..9a1a10f086c 100644
--- a/source/blender/modifiers/intern/MOD_normal_edit.cc
+++ b/source/blender/modifiers/intern/MOD_normal_edit.cc
@@ -47,16 +47,17 @@ static void generate_vert_coordinates(Mesh *mesh,
float (*r_cos)[3],
float r_size[3])
{
+ using namespace blender;
float min_co[3], max_co[3];
float diff[3];
bool do_diff = false;
INIT_MINMAX(min_co, max_co);
- const MVert *mv = BKE_mesh_verts(mesh);
- for (int i = 0; i < mesh->totvert; i++, mv++) {
- copy_v3_v3(r_cos[i], mv->co);
- if (r_size != nullptr && ob_center == nullptr) {
+ const Span<float3> positions = mesh->positions();
+ for (int i = 0; i < mesh->totvert; i++) {
+ copy_v3_v3(r_cos[i], positions[i]);
+ if (r_size != NULL && ob_center == NULL) {
minmax_v3v3_v3(min_co, max_co, r_cos[i]);
}
}
@@ -221,7 +222,7 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd,
const MDeformVert *dvert,
const int defgrp_index,
const bool use_invert_vgroup,
- const MVert *mvert,
+ const float (*positions)[3],
const int verts_num,
MEdge *medge,
const int edges_num,
@@ -329,7 +330,7 @@ static void normalEditModifier_do_radial(NormalEditModifierData *enmd,
BKE_mesh_normals_tag_dirty(mesh);
}
- BKE_mesh_normals_loop_custom_set(mvert,
+ BKE_mesh_normals_loop_custom_set(positions,
BKE_mesh_vertex_normals_ensure(mesh),
verts_num,
medge,
@@ -360,7 +361,7 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd,
const MDeformVert *dvert,
const int defgrp_index,
const bool use_invert_vgroup,
- const MVert *mvert,
+ const float (*positions)[3],
const int verts_num,
MEdge *medge,
const int edges_num,
@@ -445,7 +446,7 @@ static void normalEditModifier_do_directional(NormalEditModifierData *enmd,
BKE_mesh_normals_tag_dirty(mesh);
}
- BKE_mesh_normals_loop_custom_set(mvert,
+ BKE_mesh_normals_loop_custom_set(positions,
BKE_mesh_vertex_normals_ensure(mesh),
verts_num,
medge,
@@ -527,7 +528,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
const int edges_num = result->totedge;
const int loops_num = result->totloop;
const int polys_num = result->totpoly;
- const MVert *verts = BKE_mesh_verts(result);
+ const float(*positions)[3] = BKE_mesh_positions(result);
MEdge *edges = BKE_mesh_edges_for_write(result);
const MPoly *polys = BKE_mesh_polys(result);
MLoop *loops = BKE_mesh_loops_for_write(result);
@@ -549,7 +550,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
loopnors = static_cast<float(*)[3]>(
MEM_malloc_arrayN(size_t(loops_num), sizeof(*loopnors), __func__));
- BKE_mesh_normals_loop_split(verts,
+ BKE_mesh_normals_loop_split(positions,
vert_normals,
verts_num,
edges,
@@ -588,7 +589,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
dvert,
defgrp_index,
use_invert_vgroup,
- verts,
+ positions,
verts_num,
edges,
edges_num,
@@ -611,7 +612,7 @@ static Mesh *normalEditModifier_do(NormalEditModifierData *enmd,
dvert,
defgrp_index,
use_invert_vgroup,
- verts,
+ positions,
verts_num,
edges,
edges_num,
diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c
index bee1bd7795a..c4531f13fe3 100644
--- a/source/blender/modifiers/intern/MOD_ocean.c
+++ b/source/blender/modifiers/intern/MOD_ocean.c
@@ -154,7 +154,7 @@ static bool dependsOnNormals(ModifierData *md)
#ifdef WITH_OCEANSIM
typedef struct GenerateOceanGeometryData {
- MVert *mverts;
+ float (*positions)[3];
MPoly *mpolys;
MLoop *mloops;
MLoopUV *mloopuvs;
@@ -175,7 +175,7 @@ static void generate_ocean_geometry_verts(void *__restrict userdata,
for (x = 0; x <= gogd->res_x; x++) {
const int i = y * (gogd->res_x + 1) + x;
- float *co = gogd->mverts[i].co;
+ float *co = gogd->positions[i];
co[0] = gogd->ox + (x * gogd->sx);
co[1] = gogd->oy + (y * gogd->sy);
co[2] = 0.0f;
@@ -270,7 +270,7 @@ static Mesh *generate_ocean_geometry(OceanModifierData *omd, Mesh *mesh_orig, co
result = BKE_mesh_new_nomain(verts_num, 0, 0, polys_num * 4, polys_num);
BKE_mesh_copy_parameters_for_eval(result, mesh_orig);
- gogd.mverts = BKE_mesh_verts_for_write(result);
+ gogd.positions = BKE_mesh_positions_for_write(result);
gogd.mpolys = BKE_mesh_polys_for_write(result);
gogd.mloops = BKE_mesh_loops_for_write(result);
@@ -363,15 +363,15 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes
CLAMP(cfra_for_cache, omd->bakestart, omd->bakeend);
cfra_for_cache -= omd->bakestart; /* shift to 0 based */
- MVert *verts = BKE_mesh_verts_for_write(result);
- MPoly *polys = BKE_mesh_polys_for_write(result);
+ float(*positions)[3] = BKE_mesh_positions_for_write(result);
+ const MPoly *polys = BKE_mesh_polys(result);
/* add vcols before displacement - allows lookup based on position */
if (omd->flag & MOD_OCEAN_GENERATE_FOAM) {
const int polys_num = result->totpoly;
const int loops_num = result->totloop;
- MLoop *mloops = BKE_mesh_loops_for_write(result);
+ const MLoop *mloops = BKE_mesh_loops(result);
MLoopCol *mloopcols = CustomData_add_layer_named(
&result->ldata, CD_PROP_BYTE_COLOR, CD_SET_DEFAULT, NULL, loops_num, omd->foamlayername);
@@ -386,10 +386,10 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes
}
if (mloopcols) { /* unlikely to fail */
- MPoly *mp;
+ const MPoly *mp;
for (i = 0, mp = polys; i < polys_num; i++, mp++) {
- MLoop *ml = &mloops[mp->loopstart];
+ const MLoop *ml = &mloops[mp->loopstart];
MLoopCol *mlcol = &mloopcols[mp->loopstart];
MLoopCol *mlcolspray = NULL;
@@ -398,7 +398,7 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes
}
for (j = mp->totloop; j--; ml++, mlcol++) {
- const float *vco = verts[ml->v].co;
+ const float *vco = positions[ml->v];
const float u = OCEAN_CO(size_co_inv, vco[0]);
const float v = OCEAN_CO(size_co_inv, vco[1]);
float foam;
@@ -446,7 +446,7 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes
const int verts_num = result->totvert;
for (i = 0; i < verts_num; i++) {
- float *vco = verts[i].co;
+ float *vco = positions[i];
const float u = OCEAN_CO(size_co_inv, vco[0]);
const float v = OCEAN_CO(size_co_inv, vco[1]);
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 46e14dd6bfb..349c850b145 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -315,10 +315,9 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
result = BKE_mesh_new_nomain_from_template(mesh, maxvert, maxedge, 0, maxloop, maxpoly);
- const MVert *orig_mvert = BKE_mesh_verts(mesh);
const MPoly *orig_mpoly = BKE_mesh_polys(mesh);
const MLoop *orig_mloop = BKE_mesh_loops(mesh);
- MVert *mvert = BKE_mesh_verts_for_write(result);
+ float(*positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *edges = BKE_mesh_edges_for_write(result);
MPoly *mpoly = BKE_mesh_polys_for_write(result);
MLoop *mloop = BKE_mesh_loops_for_write(result);
@@ -349,13 +348,9 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
/* set vertices coordinates */
for (k = 0; k < totvert; k++) {
ParticleKey state;
- const MVert *inMV;
int vindex = p_skip * totvert + k;
- MVert *mv = mvert + vindex;
- inMV = orig_mvert + k;
- CustomData_copy_data(&mesh->vdata, &result->vdata, k, p_skip * totvert + k, 1);
- *mv = *inMV;
+ CustomData_copy_data(&mesh->vdata, &result->vdata, k, vindex, 1);
if (vert_part_index != NULL) {
vert_part_index[vindex] = p;
@@ -365,10 +360,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
/* Change orientation based on object trackflag. */
- copy_v3_v3(temp_co, mv->co);
- mv->co[axis] = temp_co[track];
- mv->co[(axis + 1) % 3] = temp_co[(track + 1) % 3];
- mv->co[(axis + 2) % 3] = temp_co[(track + 2) % 3];
+ copy_v3_v3(temp_co, positions[vindex]);
+ positions[vindex][axis] = temp_co[track];
+ positions[vindex][(axis + 1) % 3] = temp_co[(track + 1) % 3];
+ positions[vindex][(axis + 2) % 3] = temp_co[(track + 2) % 3];
/* get particle state */
if ((psys->flag & (PSYS_HAIR_DONE | PSYS_KEYED) || psys->pointcache->flag & PTCACHE_BAKED) &&
@@ -382,13 +377,14 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
state.time = pimd->position * (1.0f - ran);
}
else {
- state.time = (mv->co[axis] - min_co) / (max_co - min_co) * pimd->position * (1.0f - ran);
+ state.time = (positions[vindex][axis] - min_co) / (max_co - min_co) * pimd->position *
+ (1.0f - ran);
if (trackneg) {
state.time = 1.0f - state.time;
}
- mv->co[axis] = 0.0;
+ positions[vindex][axis] = 0.0;
}
psys_get_particle_on_path(&sim, p, &state, 1);
@@ -462,13 +458,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
psys_get_particle_state(&sim, p, &state, 1);
}
- mul_qt_v3(state.rot, mv->co);
+ mul_qt_v3(state.rot, positions[vindex]);
if (pimd->flag & eParticleInstanceFlag_UseSize) {
- mul_v3_fl(mv->co, size[p]);
+ mul_v3_fl(positions[vindex], size[p]);
}
- add_v3_v3(mv->co, state.co);
+ add_v3_v3(positions[vindex], state.co);
- mul_m4_v3(spacemat, mv->co);
+ mul_m4_v3(spacemat, positions[vindex]);
}
/* Create edges and adjust edge vertex indices. */
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index d6241fcb290..20da79897c9 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -60,8 +60,8 @@ static void init_dualcon_mesh(DualConInput *input, Mesh *mesh)
{
memset(input, 0, sizeof(DualConInput));
- input->co = (void *)BKE_mesh_verts(mesh);
- input->co_stride = sizeof(MVert);
+ input->co = (void *)BKE_mesh_positions(mesh);
+ input->co_stride = sizeof(float[3]);
input->totco = mesh->totvert;
input->mloop = (void *)BKE_mesh_loops(mesh);
@@ -79,7 +79,7 @@ static void init_dualcon_mesh(DualConInput *input, Mesh *mesh)
* keep track of the current elements */
typedef struct {
Mesh *mesh;
- MVert *verts;
+ float (*positions)[3];
MPoly *polys;
MLoop *loops;
int curvert, curface;
@@ -95,7 +95,7 @@ static void *dualcon_alloc_output(int totvert, int totquad)
}
output->mesh = BKE_mesh_new_nomain(totvert, 0, 0, 4 * totquad, totquad);
- output->verts = BKE_mesh_verts_for_write(output->mesh);
+ output->positions = BKE_mesh_positions_for_write(output->mesh);
output->polys = BKE_mesh_polys_for_write(output->mesh);
output->loops = BKE_mesh_loops_for_write(output->mesh);
@@ -108,7 +108,7 @@ static void dualcon_add_vert(void *output_v, const float co[3])
BLI_assert(output->curvert < output->mesh->totvert);
- copy_v3_v3(output->verts[output->curvert].co, co);
+ copy_v3_v3(output->positions[output->curvert], co);
output->curvert++;
}
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 4ba274dbd8a..14cf79bb06e 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -116,7 +116,7 @@ static void screwvert_iter_step(ScrewVertIter *iter)
}
static Mesh *mesh_remove_doubles_on_axis(Mesh *result,
- MVert *mvert_new,
+ float (*positions_new)[3],
const uint totvert,
const uint step_tot,
const float axis_vec[3],
@@ -132,18 +132,18 @@ static Mesh *mesh_remove_doubles_on_axis(Mesh *result,
float axis_co[3];
if (use_offset) {
float offset_co[3];
- sub_v3_v3v3(offset_co, mvert_new[i].co, axis_offset);
+ sub_v3_v3v3(offset_co, positions_new[i], axis_offset);
project_v3_v3v3_normalized(axis_co, offset_co, axis_vec);
add_v3_v3(axis_co, axis_offset);
}
else {
- project_v3_v3v3_normalized(axis_co, mvert_new[i].co, axis_vec);
+ project_v3_v3v3_normalized(axis_co, positions_new[i], axis_vec);
}
- const float dist_sq = len_squared_v3v3(axis_co, mvert_new[i].co);
+ const float dist_sq = len_squared_v3v3(axis_co, positions_new[i]);
if (dist_sq <= merge_threshold_sq) {
BLI_BITMAP_ENABLE(vert_tag, i);
tot_doubles += 1;
- copy_v3_v3(mvert_new[i].co, axis_co);
+ copy_v3_v3(positions_new[i], axis_co);
}
}
@@ -242,8 +242,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
MPoly *mp_new;
MLoop *ml_new;
MEdge *med_new, *med_new_firstloop;
- MVert *mv_new, *mv_new_base;
- const MVert *mv_orig;
Object *ob_axis = ltmd->ob_axis;
ScrewVertConnect *vc, *vc_tmp, *vert_connect = NULL;
@@ -383,12 +381,12 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
result = BKE_mesh_new_nomain_from_template(
mesh, (int)maxVerts, (int)maxEdges, 0, (int)maxPolys * 4, (int)maxPolys);
- const MVert *mvert_orig = BKE_mesh_verts(mesh);
+ const float(*positions_orig)[3] = BKE_mesh_positions(mesh);
const MEdge *medge_orig = BKE_mesh_edges(mesh);
const MPoly *mpoly_orig = BKE_mesh_polys(mesh);
const MLoop *mloop_orig = BKE_mesh_loops(mesh);
- MVert *mvert_new = BKE_mesh_verts_for_write(result);
+ float(*positions_new)[3] = BKE_mesh_positions_for_write(result);
MEdge *medge_new = BKE_mesh_edges_for_write(result);
MPoly *mpoly_new = BKE_mesh_polys_for_write(result);
MLoop *mloop_new = BKE_mesh_loops_for_write(result);
@@ -413,8 +411,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
if (ltmd->flag & MOD_SCREW_UV_STRETCH_V) {
- for (i = 0, mv_orig = mvert_orig; i < totvert; i++, mv_orig++) {
- const float v = dist_signed_squared_to_plane_v3(mv_orig->co, uv_axis_plane);
+ for (i = 0; i < totvert; i++) {
+ const float v = dist_signed_squared_to_plane_v3(positions_orig[i], uv_axis_plane);
uv_v_minmax[0] = min_ff(v, uv_v_minmax[0]);
uv_v_minmax[1] = max_ff(v, uv_v_minmax[1]);
}
@@ -428,9 +426,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
/* Set the locations of the first set of verts */
- mv_new = mvert_new;
- mv_orig = mvert_orig;
-
BLI_bitmap *vert_tag = BLI_BITMAP_NEW(totvert, __func__);
/* Copy the first set of edges */
@@ -441,7 +436,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
med_new->v2 = med_orig->v2;
med_new->flag = med_orig->flag & ~ME_LOOSEEDGE;
- /* Tag #MVert as not loose. */
+ /* Tag vertex as not loose. */
BLI_BITMAP_ENABLE(vert_tag, med_orig->v1);
BLI_BITMAP_ENABLE(vert_tag, med_orig->v2);
}
@@ -506,14 +501,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
// printf("\n\n\n\n\nStarting Modifier\n");
/* set edge users */
med_new = medge_new;
- mv_new = mvert_new;
if (ob_axis != NULL) {
/* `mtx_tx` is initialized early on. */
- for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) {
- vc->co[0] = mv_new->co[0] = mv_orig->co[0];
- vc->co[1] = mv_new->co[1] = mv_orig->co[1];
- vc->co[2] = mv_new->co[2] = mv_orig->co[2];
+ for (i = 0; i < totvert; i++, vc++) {
+ vc->co[0] = positions_new[i][0] = positions_orig[i][0];
+ vc->co[1] = positions_new[i][1] = positions_orig[i][1];
+ vc->co[2] = positions_new[i][2] = positions_orig[i][2];
vc->flag = 0;
vc->e[0] = vc->e[1] = NULL;
@@ -528,10 +522,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
}
else {
- for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) {
- vc->co[0] = mv_new->co[0] = mv_orig->co[0];
- vc->co[1] = mv_new->co[1] = mv_orig->co[1];
- vc->co[2] = mv_new->co[2] = mv_orig->co[2];
+ for (i = 0; i < totvert; i++, vc++) {
+ vc->co[0] = positions_new[i][0] = positions_orig[i][0];
+ vc->co[1] = positions_new[i][1] = positions_orig[i][1];
+ vc->co[2] = positions_new[i][2] = positions_orig[i][2];
vc->flag = 0;
vc->e[0] = vc->e[1] = NULL;
@@ -758,11 +752,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
}
else {
- mv_orig = mvert_orig;
- mv_new = mvert_new;
-
- for (i = 0; i < totvert; i++, mv_new++, mv_orig++) {
- copy_v3_v3(mv_new->co, mv_orig->co);
+ for (i = 0; i < totvert; i++) {
+ copy_v3_v3(positions_new[i], positions_orig[i]);
}
}
/* done with edge connectivity based normal flipping */
@@ -790,25 +781,24 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
/* copy a slice */
CustomData_copy_data(&mesh->vdata, &result->vdata, 0, (int)varray_stride, (int)totvert);
- mv_new_base = mvert_new;
- mv_new = &mvert_new[varray_stride]; /* advance to the next slice */
+ for (j = 0; j < totvert; j++) {
+ const int vert_index_new = (int)varray_stride + (int)j;
- for (j = 0; j < totvert; j++, mv_new_base++, mv_new++) {
/* set location */
- copy_v3_v3(mv_new->co, mv_new_base->co);
+ copy_v3_v3(positions_new[vert_index_new], positions_new[j]);
/* only need to set these if using non cleared memory */
// mv_new->mat_nr = mv_new->flag = 0;
if (ob_axis != NULL) {
- sub_v3_v3(mv_new->co, mtx_tx[3]);
+ sub_v3_v3(positions_new[vert_index_new], mtx_tx[3]);
- mul_m4_v3(mat, mv_new->co);
+ mul_m4_v3(mat, positions_new[vert_index_new]);
- add_v3_v3(mv_new->co, mtx_tx[3]);
+ add_v3_v3(positions_new[vert_index_new], mtx_tx[3]);
}
else {
- mul_m4_v3(mat, mv_new->co);
+ mul_m4_v3(mat, positions_new[vert_index_new]);
}
/* add the new edge */
@@ -879,8 +869,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
if (has_mloop_orig == false && mloopuv_layers_tot) {
- uv_v_offset_a = dist_signed_to_plane_v3(mvert_new[medge_new[i].v1].co, uv_axis_plane);
- uv_v_offset_b = dist_signed_to_plane_v3(mvert_new[medge_new[i].v2].co, uv_axis_plane);
+ uv_v_offset_a = dist_signed_to_plane_v3(positions_new[medge_new[i].v1], uv_axis_plane);
+ uv_v_offset_b = dist_signed_to_plane_v3(positions_new[medge_new[i].v2], uv_axis_plane);
if (ltmd->flag & MOD_SCREW_UV_STRETCH_V) {
uv_v_offset_a = (uv_v_offset_a - uv_v_minmax[0]) * uv_v_range_inv;
@@ -1037,7 +1027,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
if (do_remove_doubles) {
result = mesh_remove_doubles_on_axis(result,
- mvert_new,
+ positions_new,
totvert,
step_tot,
axis_vec,
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index df8b9d53a2f..b5e66a1af79 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -56,12 +56,6 @@ static void requiredDataMask(ModifierData *md, CustomData_MeshMasks *r_cddata_ma
if (smd->vgroup_name[0] != '\0') {
r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT;
}
-
- if ((smd->shrinkType == MOD_SHRINKWRAP_PROJECT) &&
- (smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)) {
- /* XXX Really? These should always be present, always... */
- r_cddata_masks->vmask |= CD_MASK_MVERT;
- }
}
static bool isDisabled(const struct Scene *UNUSED(scene),
diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c
index 897a25711cd..992035c5cc1 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -132,12 +132,12 @@ typedef enum {
} SkinNodeFlag;
typedef struct Frame {
- /* Index in the MVert array */
+ /* Index in the vertex array */
BMVert *verts[4];
/* Location of each corner */
float co[4][3];
/* Indicates which corners have been merged with another
- * frame's corner (so they share an MVert index) */
+ * frame's corner (so they share a vertex index) */
struct {
/* Merge to target frame/corner (no merge if frame is null) */
struct Frame *frame;
@@ -520,7 +520,7 @@ static float half_v2(const float v[2])
static void end_node_frames(int v,
SkinNode *skin_nodes,
- const MVert *mvert,
+ const float (*positions)[3],
const MVertSkin *nodes,
const MeshElemMap *emap,
EMat *emat)
@@ -540,8 +540,8 @@ static void end_node_frames(int v,
mat[0][2] = mat[1][0] = mat[2][1] = 1;
/* Caps */
- create_frame(&skin_nodes[v].frames[0], mvert[v].co, rad, mat, avg);
- create_frame(&skin_nodes[v].frames[1], mvert[v].co, rad, mat, -avg);
+ create_frame(&skin_nodes[v].frames[0], positions[v], rad, mat, avg);
+ create_frame(&skin_nodes[v].frames[1], positions[v], rad, mat, -avg);
}
else {
/* For nodes with an incoming edge, create a single (capped) frame */
@@ -557,7 +557,7 @@ static void end_node_frames(int v,
Frame *frame = &skin_nodes[v].frames[0];
/* End frame */
- create_frame(frame, mvert[v].co, rad, mat, 0);
+ create_frame(frame, positions[v], rad, mat, 0);
/* The caps might need to have their normals inverted. So check if they
* need to be flipped when creating faces. */
@@ -605,7 +605,7 @@ static int connection_node_mat(float mat[3][3], int v, const MeshElemMap *emap,
static void connection_node_frames(int v,
SkinNode *skin_nodes,
- const MVert *mvert,
+ const float (*positions)[3],
const MVertSkin *nodes,
const MeshElemMap *emap,
EMat *emat)
@@ -630,14 +630,14 @@ static void connection_node_frames(int v,
if (e1->origin != v) {
negate_v3(mat[0]);
}
- create_frame(&skin_nodes[v].frames[0], mvert[v].co, rad, mat, avg);
+ create_frame(&skin_nodes[v].frames[0], positions[v], rad, mat, avg);
skin_nodes[v].seam_edges[0] = emap[v].indices[0];
copy_m3_m3(mat, e2->mat);
if (e2->origin != v) {
negate_v3(mat[0]);
}
- create_frame(&skin_nodes[v].frames[1], mvert[v].co, rad, mat, avg);
+ create_frame(&skin_nodes[v].frames[1], positions[v], rad, mat, avg);
skin_nodes[v].seam_edges[1] = emap[v].indices[1];
return;
@@ -645,11 +645,14 @@ static void connection_node_frames(int v,
/* Build regular frame */
node_frames_init(&skin_nodes[v], 1);
- create_frame(&skin_nodes[v].frames[0], mvert[v].co, rad, mat, 0);
+ create_frame(&skin_nodes[v].frames[0], positions[v], rad, mat, 0);
}
-static SkinNode *build_frames(
- const MVert *mvert, int verts_num, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
+static SkinNode *build_frames(const float (*positions)[3],
+ int verts_num,
+ const MVertSkin *nodes,
+ const MeshElemMap *emap,
+ EMat *emat)
{
SkinNode *skin_nodes;
int v;
@@ -658,10 +661,10 @@ static SkinNode *build_frames(
for (v = 0; v < verts_num; v++) {
if (emap[v].count <= 1) {
- end_node_frames(v, skin_nodes, mvert, nodes, emap, emat);
+ end_node_frames(v, skin_nodes, positions, nodes, emap, emat);
}
else if (emap[v].count == 2) {
- connection_node_frames(v, skin_nodes, mvert, nodes, emap, emat);
+ connection_node_frames(v, skin_nodes, positions, nodes, emap, emat);
}
else {
/* Branch node generates no frames */
@@ -714,7 +717,7 @@ static void build_emats_stack(BLI_Stack *stack,
const MeshElemMap *emap,
const MEdge *medge,
const MVertSkin *vs,
- const MVert *mvert)
+ const float (*positions)[3])
{
EdgeStackElem stack_elem;
float axis[3], angle;
@@ -741,11 +744,11 @@ static void build_emats_stack(BLI_Stack *stack,
/* If parent is a branch node, start a new edge chain */
if (parent_is_branch) {
- calc_edge_mat(emat[e].mat, mvert[parent_v].co, mvert[v].co);
+ calc_edge_mat(emat[e].mat, positions[parent_v], positions[v]);
}
else {
/* Build edge matrix guided by parent matrix */
- sub_v3_v3v3(emat[e].mat[0], mvert[v].co, mvert[parent_v].co);
+ sub_v3_v3v3(emat[e].mat[0], positions[v], positions[parent_v]);
normalize_v3(emat[e].mat[0]);
angle = angle_normalized_v3v3(stack_elem.mat[0], emat[e].mat[0]);
cross_v3_v3v3(axis, stack_elem.mat[0], emat[e].mat[0]);
@@ -765,7 +768,7 @@ static void build_emats_stack(BLI_Stack *stack,
}
static EMat *build_edge_mats(const MVertSkin *vs,
- const MVert *mvert,
+ const float (*positions)[3],
const int verts_num,
const MEdge *medge,
const MeshElemMap *emap,
@@ -789,7 +792,7 @@ static EMat *build_edge_mats(const MVertSkin *vs,
if (vs[v].flag & MVERT_SKIN_ROOT) {
if (emap[v].count >= 1) {
const MEdge *e = &medge[emap[v].indices[0]];
- calc_edge_mat(stack_elem.mat, mvert[v].co, mvert[BKE_mesh_edge_other_vert(e, v)].co);
+ calc_edge_mat(stack_elem.mat, positions[v], positions[BKE_mesh_edge_other_vert(e, v)]);
stack_elem.parent_v = v;
/* Add adjacent edges to stack */
@@ -809,7 +812,7 @@ static EMat *build_edge_mats(const MVertSkin *vs,
}
while (!BLI_stack_is_empty(stack)) {
- build_emats_stack(stack, visited_e, emat, emap, medge, vs, mvert);
+ build_emats_stack(stack, visited_e, emat, emap, medge, vs, positions);
}
MEM_freeN(visited_e);
@@ -825,7 +828,7 @@ static EMat *build_edge_mats(const MVertSkin *vs,
* nodes, at least two intermediate frames are required. (This avoids
* having any special cases for dealing with sharing a frame between
* two hulls.) */
-static int calc_edge_subdivisions(const MVert *mvert,
+static int calc_edge_subdivisions(const float (*positions)[3],
const MVertSkin *nodes,
const MEdge *e,
const int *degree)
@@ -855,7 +858,7 @@ static int calc_edge_subdivisions(const MVert *mvert,
if (avg_radius != 0.0f) {
/* possible (but unlikely) that we overflow INT_MAX */
float subdivisions_num_fl;
- const float edge_len = len_v3v3(mvert[e->v1].co, mvert[e->v2].co);
+ const float edge_len = len_v3v3(positions[e->v1], positions[e->v2]);
subdivisions_num_fl = (edge_len / avg_radius);
if (subdivisions_num_fl < NUM_SUBDIVISIONS_MAX) {
subdivisions_num = (int)subdivisions_num_fl;
@@ -889,7 +892,7 @@ static Mesh *subdivide_base(const Mesh *orig)
float radrat;
const MVertSkin *orignode = CustomData_get_layer(&orig->vdata, CD_MVERT_SKIN);
- const MVert *origvert = BKE_mesh_verts(orig);
+ const float(*orig_positions)[3] = BKE_mesh_positions(orig);
const MEdge *origedge = BKE_mesh_edges(orig);
const MDeformVert *origdvert = BKE_mesh_deform_verts(orig);
int orig_vert_num = orig->totvert;
@@ -905,7 +908,7 @@ static Mesh *subdivide_base(const Mesh *orig)
/* Per edge, store how many subdivisions are needed */
int *edge_subd = MEM_calloc_arrayN((uint)orig_edge_num, sizeof(int), "edge_subd");
for (i = 0, subd_num = 0; i < orig_edge_num; i++) {
- edge_subd[i] += calc_edge_subdivisions(origvert, orignode, &origedge[i], degree);
+ edge_subd[i] += calc_edge_subdivisions(orig_positions, orignode, &origedge[i], degree);
BLI_assert(edge_subd[i] >= 0);
subd_num += edge_subd[i];
}
@@ -916,7 +919,7 @@ static Mesh *subdivide_base(const Mesh *orig)
Mesh *result = BKE_mesh_new_nomain_from_template(
orig, orig_vert_num + subd_num, orig_edge_num + subd_num, 0, 0, 0);
- MVert *outvert = BKE_mesh_verts_for_write(result);
+ float(*out_positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *outedge = BKE_mesh_edges_for_write(result);
MVertSkin *outnode = CustomData_get_layer(&result->vdata, CD_MVERT_SKIN);
MDeformVert *outdvert = NULL;
@@ -978,7 +981,7 @@ static Mesh *subdivide_base(const Mesh *orig)
float t = powf(r, radrat);
/* Interpolate vertex coord */
- interp_v3_v3v3(outvert[v].co, outvert[e->v1].co, outvert[e->v2].co, t);
+ interp_v3_v3v3(out_positions[v], out_positions[e->v1], out_positions[e->v2], t);
/* Interpolate skin radii */
interp_v3_v3v3(outnode[v].radius, orignode[e->v1].radius, orignode[e->v2].radius, t);
@@ -1910,7 +1913,6 @@ static Mesh *base_skin(Mesh *origmesh, SkinModifierData *smd, eSkinErrorFlag *r_
SkinNode *skin_nodes;
MeshElemMap *emap;
int *emapmem;
- const MVert *mvert;
const MEdge *medge;
const MDeformVert *dvert;
int verts_num, edges_num;
@@ -1918,7 +1920,7 @@ static Mesh *base_skin(Mesh *origmesh, SkinModifierData *smd, eSkinErrorFlag *r_
nodes = CustomData_get_layer(&origmesh->vdata, CD_MVERT_SKIN);
- mvert = BKE_mesh_verts(origmesh);
+ const float(*positions)[3] = BKE_mesh_positions(origmesh);
dvert = BKE_mesh_deform_verts(origmesh);
medge = BKE_mesh_edges(origmesh);
verts_num = origmesh->totvert;
@@ -1926,8 +1928,8 @@ static Mesh *base_skin(Mesh *origmesh, SkinModifierData *smd, eSkinErrorFlag *r_
BKE_mesh_vert_edge_map_create(&emap, &emapmem, medge, verts_num, edges_num);
- emat = build_edge_mats(nodes, mvert, verts_num, medge, emap, edges_num, &has_valid_root);
- skin_nodes = build_frames(mvert, verts_num, nodes, emap, emat);
+ emat = build_edge_mats(nodes, positions, verts_num, medge, emap, edges_num, &has_valid_root);
+ skin_nodes = build_frames(positions, verts_num, nodes, emap, emat);
MEM_freeN(emat);
emat = NULL;
diff --git a/source/blender/modifiers/intern/MOD_solidify_extrude.c b/source/blender/modifiers/intern/MOD_solidify_extrude.c
index 08e9569bd95..5908a13e93c 100644
--- a/source/blender/modifiers/intern/MOD_solidify_extrude.c
+++ b/source/blender/modifiers/intern/MOD_solidify_extrude.c
@@ -215,7 +215,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
MOD_get_vgroup(ctx->object, mesh, smd->defgrp_name, &dvert, &defgrp_index);
- const MVert *orig_mvert = BKE_mesh_verts(mesh);
+ const float(*orig_positions)[3] = BKE_mesh_positions(mesh);
const MEdge *orig_medge = BKE_mesh_edges(mesh);
const MPoly *orig_mpoly = BKE_mesh_polys(mesh);
const MLoop *orig_mloop = BKE_mesh_loops(mesh);
@@ -335,7 +335,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
(int)((loops_num * stride) + newLoops),
(int)((polys_num * stride) + newPolys));
- MVert *mvert = BKE_mesh_verts_for_write(result);
+ float(*positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *medge = BKE_mesh_edges_for_write(result);
MPoly *mpoly = BKE_mesh_polys_for_write(result);
MLoop *mloop = BKE_mesh_loops_for_write(result);
@@ -398,7 +398,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
if (((ofs_new >= ofs_orig) == do_flip) == test) { \
i_end = verts_num; \
do_shell_align = true; \
- mv = mvert; \
+ vert_index = 0; \
} \
else { \
if (do_shell) { \
@@ -409,7 +409,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
i_end = newVerts; \
do_shell_align = false; \
} \
- mv = &mvert[verts_num]; \
+ vert_index = verts_num; \
} \
(void)0
@@ -495,7 +495,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
vert_lens = MEM_malloc_arrayN(verts_num, sizeof(float), "vert_lens");
copy_vn_fl(vert_lens, (int)verts_num, FLT_MAX);
for (uint i = 0; i < edges_num; i++) {
- const float ed_len_sq = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co);
+ const float ed_len_sq = len_squared_v3v3(positions[medge[i].v1], positions[medge[i].v2]);
vert_lens[medge[i].v1] = min_ff(vert_lens[medge[i].v1], ed_len_sq);
vert_lens[medge[i].v2] = min_ff(vert_lens[medge[i].v2], ed_len_sq);
}
@@ -547,7 +547,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
!ELEM(edge_user_pairs[i][1], INVALID_UNUSED, INVALID_PAIR)) {
const float *n0 = poly_nors[edge_user_pairs[i][0]];
const float *n1 = poly_nors[edge_user_pairs[i][1]];
- sub_v3_v3v3(e, orig_mvert[ed->v1].co, orig_mvert[ed->v2].co);
+ sub_v3_v3v3(e, orig_positions[ed->v1], orig_positions[ed->v2]);
normalize_v3(e);
const float angle = angle_signed_on_axis_v3v3_v3(n0, n1, e);
if (do_angle_clamp) {
@@ -571,10 +571,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
ofs_new_vgroup = ofs_new;
- MVert *mv;
+ uint vert_index;
INIT_VERT_ARRAY_OFFSETS(false);
- for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
+ for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) {
const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
if (dvert) {
const MDeformVert *dv = &dvert[i];
@@ -608,10 +608,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
}
}
if (vert_nors) {
- madd_v3_v3fl(mv->co, vert_nors[i], ofs_new_vgroup);
+ madd_v3_v3fl(positions[vert_index], vert_nors[i], ofs_new_vgroup);
}
else {
- madd_v3_v3fl(mv->co, mesh_vert_normals[i], ofs_new_vgroup);
+ madd_v3_v3fl(positions[vert_index], mesh_vert_normals[i], ofs_new_vgroup);
}
}
}
@@ -623,10 +623,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
ofs_new_vgroup = ofs_orig;
/* as above but swapped */
- MVert *mv;
+ uint vert_index;
INIT_VERT_ARRAY_OFFSETS(true);
- for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
+ for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) {
const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig];
if (dvert) {
const MDeformVert *dv = &dvert[i];
@@ -660,10 +660,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
}
}
if (vert_nors) {
- madd_v3_v3fl(mv->co, vert_nors[i], ofs_new_vgroup);
+ madd_v3_v3fl(positions[vert_index], vert_nors[i], ofs_new_vgroup);
}
else {
- madd_v3_v3fl(mv->co, mesh_vert_normals[i], ofs_new_vgroup);
+ madd_v3_v3fl(positions[vert_index], mesh_vert_normals[i], ofs_new_vgroup);
}
}
}
@@ -713,8 +713,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
if (vert_nors == NULL) {
vert_nors = MEM_malloc_arrayN(verts_num, sizeof(float[3]), "mod_solid_vno");
- const MVert *mv;
- for (i = 0, mv = mvert; i < verts_num; i++, mv++) {
+ for (i = 0; i < verts_num; i++) {
copy_v3_v3(vert_nors[i], mesh_vert_normals[i]);
}
}
@@ -730,12 +729,12 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
const MLoop *ml = &mloop[mp->loopstart];
- sub_v3_v3v3(nor_prev, mvert[ml[i_curr - 1].v].co, mvert[ml[i_curr].v].co);
+ sub_v3_v3v3(nor_prev, positions[ml[i_curr - 1].v], positions[ml[i_curr].v]);
normalize_v3(nor_prev);
while (i_next < mp->totloop) {
float angle;
- sub_v3_v3v3(nor_next, mvert[ml[i_curr].v].co, mvert[ml[i_next].v].co);
+ sub_v3_v3v3(nor_next, positions[ml[i_curr].v], positions[ml[i_next].v]);
normalize_v3(nor_next);
angle = angle_normalized_v3v3(nor_prev, nor_next);
@@ -847,7 +846,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
vert_angs[ed->v2] = max_ff(vert_angs[ed->v2], angle);
}
if (do_bevel_convex) {
- sub_v3_v3v3(e, orig_mvert[ed->v1].co, orig_mvert[ed->v2].co);
+ sub_v3_v3v3(e, orig_positions[ed->v1], orig_positions[ed->v2]);
normalize_v3(e);
edge_angs[i] = angle_signed_on_axis_v3v3_v3(n0, n1, e);
if (!do_rim) {
@@ -867,7 +866,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
const float offset_sq = offset * offset;
copy_vn_fl(vert_lens_sq, (int)verts_num, FLT_MAX);
for (i = 0; i < edges_num; i++) {
- const float ed_len = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co);
+ const float ed_len = len_squared_v3v3(positions[medge[i].v1], positions[medge[i].v2]);
vert_lens_sq[medge[i].v1] = min_ff(vert_lens_sq[medge[i].v1], ed_len);
vert_lens_sq[medge[i].v2] = min_ff(vert_lens_sq[medge[i].v2], ed_len);
}
@@ -926,14 +925,15 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
uint i_orig, i_end;
bool do_shell_align;
- MVert *mv;
+ uint vert_index;
INIT_VERT_ARRAY_OFFSETS(false);
- for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
+ for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) {
const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig];
if (vert_accum[i_other]) { /* zero if unselected */
- madd_v3_v3fl(
- mv->co, vert_nors[i_other], ofs_new * (vert_angles[i_other] / vert_accum[i_other]));
+ madd_v3_v3fl(positions[vert_index],
+ vert_nors[i_other],
+ ofs_new * (vert_angles[i_other] / vert_accum[i_other]));
}
}
}
@@ -943,14 +943,15 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
bool do_shell_align;
/* same as above but swapped, intentional use of 'ofs_new' */
- MVert *mv;
+ uint vert_index;
INIT_VERT_ARRAY_OFFSETS(true);
- for (i_orig = 0; i_orig < i_end; i_orig++, mv++) {
+ for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) {
const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig];
if (vert_accum[i_other]) { /* zero if unselected */
- madd_v3_v3fl(
- mv->co, vert_nors[i_other], ofs_orig * (vert_angles[i_other] / vert_accum[i_other]));
+ madd_v3_v3fl(positions[vert_index],
+ vert_nors[i_other],
+ ofs_orig * (vert_angles[i_other] / vert_accum[i_other]));
}
}
}
@@ -1157,10 +1158,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex
#ifdef SOLIDIFY_SIDE_NORMALS
if (do_side_normals) {
normal_quad_v3(nor,
- mvert[ml[j - 4].v].co,
- mvert[ml[j - 3].v].co,
- mvert[ml[j - 2].v].co,
- mvert[ml[j - 1].v].co);
+ positions[ml[j - 4].v],
+ positions[ml[j - 3].v],
+ positions[ml[j - 2].v],
+ positions[ml[j - 1].v]);
add_v3_v3(edge_vert_nos[ed->v1], nor);
add_v3_v3(edge_vert_nos[ed->v2], nor);
diff --git a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
index 9d0b5c30b5e..9c96de884cb 100644
--- a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
+++ b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
@@ -184,7 +184,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
const bool do_flat_faces = dvert && (smd->flag & MOD_SOLIDIFY_NONMANIFOLD_FLAT_FACES);
- const MVert *orig_mvert = BKE_mesh_verts(mesh);
+ const float(*orig_positions)[3] = BKE_mesh_positions(mesh);
const MEdge *orig_medge = BKE_mesh_edges(mesh);
const MPoly *orig_mpoly = BKE_mesh_polys(mesh);
const MLoop *orig_mloop = BKE_mesh_loops(mesh);
@@ -220,7 +220,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
if (len_squared_v3(poly_nors[i]) < 0.5f) {
const MEdge *e = orig_medge + orig_mloop[mp->loopstart].e;
float edgedir[3];
- sub_v3_v3v3(edgedir, orig_mvert[e->v2].co, orig_mvert[e->v1].co);
+ sub_v3_v3v3(edgedir, orig_positions[e->v2], orig_positions[e->v1]);
if (fabsf(edgedir[2]) < fabsf(edgedir[1])) {
poly_nors[i][2] = 1.0f;
}
@@ -293,9 +293,9 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
verts_num, sizeof(*orig_mvert_co), "orig_mvert_co in solidify");
/* Fill in the original vertex positions. */
for (uint i = 0; i < verts_num; i++) {
- orig_mvert_co[i][0] = orig_mvert[i].co[0];
- orig_mvert_co[i][1] = orig_mvert[i].co[1];
- orig_mvert_co[i][2] = orig_mvert[i].co[2];
+ orig_mvert_co[i][0] = orig_positions[i][0];
+ orig_mvert_co[i][1] = orig_positions[i][1];
+ orig_mvert_co[i][2] = orig_positions[i][2];
}
/* Create edge to #NewEdgeRef map. */
@@ -1398,9 +1398,8 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
}
}
- const MVert *mv = orig_mvert;
gs_ptr = orig_vert_groups_arr;
- for (uint i = 0; i < verts_num; i++, mv++, gs_ptr++) {
+ for (uint i = 0; i < verts_num; i++, gs_ptr++) {
if (*gs_ptr) {
EdgeGroup *g = *gs_ptr;
for (uint j = 0; g->valid; j++, g++) {
@@ -1962,7 +1961,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
(int)(new_loops_num),
(int)(new_polys_num));
- MVert *mvert = BKE_mesh_verts_for_write(result);
+ float(*positions)[3] = BKE_mesh_positions_for_write(result);
MEdge *medge = BKE_mesh_edges_for_write(result);
MPoly *mpoly = BKE_mesh_polys_for_write(result);
MLoop *mloop = BKE_mesh_loops_for_write(result);
@@ -2005,7 +2004,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
for (uint j = 0; g->valid; j++, g++) {
if (g->new_vert != MOD_SOLIDIFY_EMPTY_TAG) {
CustomData_copy_data(&mesh->vdata, &result->vdata, (int)i, (int)g->new_vert, 1);
- copy_v3_v3(mvert[g->new_vert].co, g->co);
+ copy_v3_v3(positions[g->new_vert], g->co);
}
}
}
@@ -2115,8 +2114,7 @@ Mesh *MOD_solidify_nonmanifold_modifyMesh(ModifierData *md,
/* Make boundary edges/faces. */
{
gs_ptr = orig_vert_groups_arr;
- const MVert *mv = orig_mvert;
- for (uint i = 0; i < verts_num; i++, gs_ptr++, mv++) {
+ for (uint i = 0; i < verts_num; i++, gs_ptr++) {
EdgeGroup *gs = *gs_ptr;
if (gs) {
EdgeGroup *g = gs;
diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c
index a34d66f394b..98f2715d5e4 100644
--- a/source/blender/modifiers/intern/MOD_surface.c
+++ b/source/blender/modifiers/intern/MOD_surface.c
@@ -125,7 +125,6 @@ static void deformVerts(ModifierData *md,
if (surmd->mesh) {
uint mesh_verts_num = 0, i = 0;
int init = 0;
- MVert *x, *v;
BKE_mesh_vert_coords_apply(surmd->mesh, vertexCos);
@@ -142,8 +141,8 @@ static void deformVerts(ModifierData *md,
surmd->v = NULL;
}
- surmd->x = MEM_calloc_arrayN(mesh_verts_num, sizeof(MVert), "MVert");
- surmd->v = MEM_calloc_arrayN(mesh_verts_num, sizeof(MVert), "MVert");
+ surmd->x = MEM_calloc_arrayN(mesh_verts_num, sizeof(float[3]), __func__);
+ surmd->v = MEM_calloc_arrayN(mesh_verts_num, sizeof(float[3]), __func__);
surmd->verts_num = mesh_verts_num;
@@ -151,19 +150,19 @@ static void deformVerts(ModifierData *md,
}
/* convert to global coordinates and calculate velocity */
- MVert *verts = BKE_mesh_verts_for_write(surmd->mesh);
- for (i = 0, x = surmd->x, v = surmd->v; i < mesh_verts_num; i++, x++, v++) {
- float *vec = verts[i].co;
+ float(*positions)[3] = BKE_mesh_positions_for_write(surmd->mesh);
+ for (i = 0; i < mesh_verts_num; i++) {
+ float *vec = positions[i];
mul_m4_v3(ctx->object->object_to_world, vec);
if (init) {
- v->co[0] = v->co[1] = v->co[2] = 0.0f;
+ surmd->v[i][0] = surmd->v[i][1] = surmd->v[i][2] = 0.0f;
}
else {
- sub_v3_v3v3(v->co, vec, x->co);
+ sub_v3_v3v3(surmd->v[i], vec, surmd->x[i]);
}
- copy_v3_v3(x->co, vec);
+ copy_v3_v3(surmd->x[i], vec);
}
surmd->cfra = cfra;
diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c
index 6a9321a78a2..7dd84375519 100644
--- a/source/blender/modifiers/intern/MOD_surfacedeform.c
+++ b/source/blender/modifiers/intern/MOD_surfacedeform.c
@@ -1169,7 +1169,7 @@ static bool surfacedeformBind(Object *ob,
Mesh *mesh)
{
BVHTreeFromMesh treeData = {NULL};
- const MVert *mvert = BKE_mesh_verts(target);
+ const float(*positions)[3] = BKE_mesh_positions(target);
const MPoly *mpoly = BKE_mesh_polys(target);
const MEdge *medge = BKE_mesh_edges(target);
const MLoop *mloop = BKE_mesh_loops(target);
@@ -1268,7 +1268,7 @@ static bool surfacedeformBind(Object *ob,
invert_m4_m4(data.imat, smd_orig->mat);
for (int i = 0; i < target_verts_num; i++) {
- mul_v3_m4v3(data.targetCos[i], smd_orig->mat, mvert[i].co);
+ mul_v3_m4v3(data.targetCos[i], smd_orig->mat, positions[i]);
}
TaskParallelSettings settings;
diff --git a/source/blender/modifiers/intern/MOD_util.cc b/source/blender/modifiers/intern/MOD_util.cc
index a94fc6732a0..b72bd32b54e 100644
--- a/source/blender/modifiers/intern/MOD_util.cc
+++ b/source/blender/modifiers/intern/MOD_util.cc
@@ -131,17 +131,17 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd,
texmapping = MOD_DISP_MAP_LOCAL;
}
- const MVert *mv = BKE_mesh_verts(mesh);
- for (i = 0; i < verts_num; i++, mv++, r_texco++) {
+ const float(*positions)[3] = BKE_mesh_positions(mesh);
+ for (i = 0; i < verts_num; i++, r_texco++) {
switch (texmapping) {
case MOD_DISP_MAP_LOCAL:
- copy_v3_v3(*r_texco, cos != nullptr ? *cos : mv->co);
+ copy_v3_v3(*r_texco, cos != nullptr ? *cos : positions[i]);
break;
case MOD_DISP_MAP_GLOBAL:
- mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : mv->co);
+ mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : positions[i]);
break;
case MOD_DISP_MAP_OBJECT:
- mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : mv->co);
+ mul_v3_m4v3(*r_texco, ob->object_to_world, cos != nullptr ? *cos : positions[i]);
mul_m4_v3(mapref_imat, *r_texco);
break;
}
diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.cc b/source/blender/modifiers/intern/MOD_weighted_normal.cc
index 1ebd5423d39..d9beb83b327 100644
--- a/source/blender/modifiers/intern/MOD_weighted_normal.cc
+++ b/source/blender/modifiers/intern/MOD_weighted_normal.cc
@@ -71,7 +71,7 @@ struct WeightedNormalData {
int loops_num;
int polys_num;
- const MVert *mvert;
+ const float (*positions)[3];
const float (*vert_normals)[3];
MEdge *medge;
@@ -186,7 +186,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
const int loops_num = wn_data->loops_num;
const int polys_num = wn_data->polys_num;
- const MVert *mvert = wn_data->mvert;
+ const float(*positions)[3] = wn_data->positions;
MEdge *medge = wn_data->medge;
const MLoop *mloop = wn_data->mloop;
@@ -222,7 +222,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
* we do not actually care about computed loop_normals for now... */
loop_normals = static_cast<float(*)[3]>(
MEM_calloc_arrayN(size_t(loops_num), sizeof(*loop_normals), __func__));
- BKE_mesh_normals_loop_split(mvert,
+ BKE_mesh_normals_loop_split(positions,
wn_data->vert_normals,
verts_num,
medge,
@@ -356,7 +356,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
}
}
- BKE_mesh_normals_loop_custom_set(mvert,
+ BKE_mesh_normals_loop_custom_set(positions,
wn_data->vert_normals,
verts_num,
medge,
@@ -387,7 +387,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
copy_v3_v3(vert_normals[mv_index], items_data[mv_index].normal);
}
- BKE_mesh_normals_loop_custom_from_verts_set(mvert,
+ BKE_mesh_normals_loop_custom_from_verts_set(positions,
wn_data->vert_normals,
vert_normals,
verts_num,
@@ -406,7 +406,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
loop_normals = static_cast<float(*)[3]>(
MEM_calloc_arrayN(size_t(loops_num), sizeof(*loop_normals), __func__));
- BKE_mesh_normals_loop_split(mvert,
+ BKE_mesh_normals_loop_split(positions,
wn_data->vert_normals,
verts_num,
medge,
@@ -430,7 +430,7 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd,
}
}
- BKE_mesh_normals_loop_custom_set(mvert,
+ BKE_mesh_normals_loop_custom_set(positions,
wn_data->vert_normals,
verts_num,
medge,
@@ -455,7 +455,7 @@ static void wn_face_area(WeightedNormalModifierData *wnmd, WeightedNormalData *w
{
const int polys_num = wn_data->polys_num;
- const MVert *mvert = wn_data->mvert;
+ const float(*positions)[3] = wn_data->positions;
const MLoop *mloop = wn_data->mloop;
const MPoly *mpoly = wn_data->mpoly;
@@ -467,7 +467,7 @@ static void wn_face_area(WeightedNormalModifierData *wnmd, WeightedNormalData *w
ModePair *f_area = face_area;
for (mp_index = 0, mp = mpoly; mp_index < polys_num; mp_index++, mp++, f_area++) {
- f_area->val = BKE_mesh_calc_poly_area(mp, &mloop[mp->loopstart], mvert);
+ f_area->val = BKE_mesh_calc_poly_area(mp, &mloop[mp->loopstart], positions);
f_area->index = mp_index;
}
@@ -482,7 +482,7 @@ static void wn_corner_angle(WeightedNormalModifierData *wnmd, WeightedNormalData
const int loops_num = wn_data->loops_num;
const int polys_num = wn_data->polys_num;
- const MVert *mvert = wn_data->mvert;
+ const float(*positions)[3] = wn_data->positions;
const MLoop *mloop = wn_data->mloop;
const MPoly *mpoly = wn_data->mpoly;
@@ -500,7 +500,7 @@ static void wn_corner_angle(WeightedNormalModifierData *wnmd, WeightedNormalData
float *index_angle = static_cast<float *>(
MEM_malloc_arrayN(size_t(mp->totloop), sizeof(*index_angle), __func__));
- BKE_mesh_calc_poly_angles(mp, ml_start, mvert, index_angle);
+ BKE_mesh_calc_poly_angles(mp, ml_start, positions, index_angle);
ModePair *c_angl = &corner_angle[mp->loopstart];
float *angl = index_angle;
@@ -526,7 +526,7 @@ static void wn_face_with_angle(WeightedNormalModifierData *wnmd, WeightedNormalD
const int loops_num = wn_data->loops_num;
const int polys_num = wn_data->polys_num;
- const MVert *mvert = wn_data->mvert;
+ const float(*positions)[3] = wn_data->positions;
const MLoop *mloop = wn_data->mloop;
const MPoly *mpoly = wn_data->mpoly;
@@ -542,10 +542,10 @@ static void wn_face_with_angle(WeightedNormalModifierData *wnmd, WeightedNormalD
for (mp_index = 0, mp = mpoly; mp_index < polys_num; mp_index++, mp++) {
const MLoop *ml_start = &mloop[mp->loopstart];
- float face_area = BKE_mesh_calc_poly_area(mp, ml_start, mvert);
+ float face_area = BKE_mesh_calc_poly_area(mp, ml_start, positions);
float *index_angle = static_cast<float *>(
MEM_malloc_arrayN(size_t(mp->totloop), sizeof(*index_angle), __func__));
- BKE_mesh_calc_poly_angles(mp, ml_start, mvert, index_angle);
+ BKE_mesh_calc_poly_angles(mp, ml_start, positions, index_angle);
ModePair *cmbnd = &combined[mp->loopstart];
float *angl = index_angle;
@@ -595,7 +595,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
const int edges_num = result->totedge;
const int loops_num = result->totloop;
const int polys_num = result->totpoly;
- const MVert *mvert = BKE_mesh_verts(result);
+ const float(*positions)[3] = BKE_mesh_positions(result);
MEdge *medge = BKE_mesh_edges_for_write(result);
const MPoly *mpoly = BKE_mesh_polys(result);
const MLoop *mloop = BKE_mesh_loops(result);
@@ -639,7 +639,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
wn_data.loops_num = loops_num;
wn_data.polys_num = polys_num;
- wn_data.mvert = mvert;
+ wn_data.positions = positions;
wn_data.vert_normals = BKE_mesh_vertex_normals_ensure(result);
wn_data.medge = medge;
diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c
index 3302384568b..b15b9cf75f1 100644
--- a/source/blender/modifiers/intern/MOD_weightvg_util.c
+++ b/source/blender/modifiers/intern/MOD_weightvg_util.c
@@ -140,7 +140,7 @@ void weightvg_do_mask(const ModifierEvalContext *ctx,
/* Use new generic get_texture_coords, but do not modify our DNA struct for it...
* XXX Why use a ModifierData stuff here ? Why not a simple, generic struct for parameters?
* What e.g. if a modifier wants to use several textures?
- * Why use only v_co, and not MVert (or both)?
+ * Why use only v_co, and not mesh positions (or both)?
*/
t_map.texture = texture;
t_map.map_object = tex_map_object;