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/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc')
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc35
1 files changed, 18 insertions, 17 deletions
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
index d0d97054448..78443f164ef 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_mesh_analysis.cc
@@ -217,9 +217,9 @@ static void statvis_calc_thickness(const MeshRenderData *mr, float *r_thickness)
const MLoopTri *mlooptri = mr->mlooptri;
for (int i = 0; i < mr->tri_len; i++, mlooptri++) {
const int index = mlooptri->poly;
- const float *cos[3] = {mr->mvert[mr->mloop[mlooptri->tri[0]].v].co,
- mr->mvert[mr->mloop[mlooptri->tri[1]].v].co,
- mr->mvert[mr->mloop[mlooptri->tri[2]].v].co};
+ const float *cos[3] = {mr->positions[mr->mloop[mlooptri->tri[0]].v],
+ mr->positions[mr->mloop[mlooptri->tri[1]].v],
+ mr->positions[mr->mloop[mlooptri->tri[2]].v]};
float ray_co[3];
float ray_no[3];
@@ -259,7 +259,7 @@ static void statvis_calc_thickness(const MeshRenderData *mr, float *r_thickness)
}
struct BVHTree_OverlapData {
- const MVert *verts;
+ const float3 *positions;
const MLoop *loops;
const MLoopTri *mlooptri;
float epsilon;
@@ -276,12 +276,12 @@ static bool bvh_overlap_cb(void *userdata, int index_a, int index_b, int /*threa
return false;
}
- const float *tri_a_co[3] = {data->verts[data->loops[tri_a->tri[0]].v].co,
- data->verts[data->loops[tri_a->tri[1]].v].co,
- data->verts[data->loops[tri_a->tri[2]].v].co};
- const float *tri_b_co[3] = {data->verts[data->loops[tri_b->tri[0]].v].co,
- data->verts[data->loops[tri_b->tri[1]].v].co,
- data->verts[data->loops[tri_b->tri[2]].v].co};
+ const float *tri_a_co[3] = {data->positions[data->loops[tri_a->tri[0]].v],
+ data->positions[data->loops[tri_a->tri[1]].v],
+ data->positions[data->loops[tri_a->tri[2]].v]};
+ const float *tri_b_co[3] = {data->positions[data->loops[tri_b->tri[0]].v],
+ data->positions[data->loops[tri_b->tri[1]].v],
+ data->positions[data->loops[tri_b->tri[2]].v]};
float ix_pair[2][3];
int verts_shared = 0;
@@ -342,7 +342,7 @@ static void statvis_calc_intersect(const MeshRenderData *mr, float *r_intersect)
BVHTree *tree = BKE_bvhtree_from_mesh_get(&treeData, mr->me, BVHTREE_FROM_LOOPTRI, 4);
struct BVHTree_OverlapData data = {nullptr};
- data.verts = mr->mvert;
+ data.positions = mr->positions;
data.loops = mr->mloop;
data.mlooptri = mr->mlooptri;
data.epsilon = BLI_bvhtree_get_epsilon(tree);
@@ -454,9 +454,9 @@ static void statvis_calc_distort(const MeshRenderData *mr, float *r_distort)
const MLoop *l_next = &mr->mloop[mp->loopstart + (i + 1) % mp->totloop];
float no_corner[3];
normal_tri_v3(no_corner,
- mr->mvert[l_prev->v].co,
- mr->mvert[l_curr->v].co,
- mr->mvert[l_next->v].co);
+ mr->positions[l_prev->v],
+ mr->positions[l_curr->v],
+ mr->positions[l_next->v]);
/* simple way to detect (what is most likely) concave */
if (dot_v3v3(f_no, no_corner) < 0.0f) {
negate_v3(no_corner);
@@ -534,8 +534,6 @@ static void statvis_calc_sharp(const MeshRenderData *mr, float *r_sharp)
for (int i = 0; i < mp->totloop; i++) {
const MLoop *l_curr = &mr->mloop[mp->loopstart + (i + 0) % mp->totloop];
const MLoop *l_next = &mr->mloop[mp->loopstart + (i + 1) % mp->totloop];
- const MVert *v_curr = &mr->mvert[l_curr->v];
- const MVert *v_next = &mr->mvert[l_next->v];
float angle;
void **pval;
bool value_is_init = BLI_edgehash_ensure_p(eh, l_curr->v, l_next->v, &pval);
@@ -548,7 +546,10 @@ static void statvis_calc_sharp(const MeshRenderData *mr, float *r_sharp)
const float *f1_no = mr->poly_normals[mp_index];
const float *f2_no = static_cast<const float *>(*pval);
angle = angle_normalized_v3v3(f1_no, f2_no);
- angle = is_edge_convex_v3(v_curr->co, v_next->co, f1_no, f2_no) ? angle : -angle;
+ angle = is_edge_convex_v3(
+ mr->positions[l_curr->v], mr->positions[l_next->v], f1_no, f2_no) ?
+ angle :
+ -angle;
/* Tag as manifold. */
*pval = nullptr;
}