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>2019-01-17 05:20:44 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-17 05:20:44 +0300
commit9d8445d6a9eab25b554bcc1ffc51b272abe373b8 (patch)
tree2667d6428cda5bb1434d066a7a9ddedd2740b26c /source/blender/draw/intern/draw_cache_impl_mesh.c
parent76fdd33df212cc609d3c4d8f01333be2928bdc70 (diff)
Cleanup: de-duplicate loose vert/edge checks
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_mesh.c')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c52
1 files changed, 23 insertions, 29 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 27dcb11b644..ab53ba28bf4 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -320,6 +320,18 @@ static bool bm_edge_has_visible_face(const BMEdge *e)
return false;
}
+BLI_INLINE bool bm_vert_is_loose_and_visible(const BMVert *v)
+{
+ return (!BM_elem_flag_test(v, BM_ELEM_HIDDEN) &&
+ (v->e == NULL || !bm_vert_has_visible_edge(v)));
+}
+
+BLI_INLINE bool bm_edge_is_loose_and_visible(const BMEdge *e)
+{
+ return (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) &&
+ (e->l == NULL || !bm_edge_has_visible_face(e)));
+}
+
/* Return true is all layers in _b_ are inside _a_. */
static bool mesh_cd_layers_type_overlap(
const uchar av[CD_NUMTYPES], const ushort al[CD_NUMTYPES],
@@ -677,11 +689,8 @@ static MeshRenderData *mesh_render_data_create_ex(
BLI_assert((bm->elem_table_dirty & BM_VERT) == 0);
for (int i = 0; i < bm->totvert; i++) {
const BMVert *eve = BM_vert_at_index(bm, i);
- if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
- /* Loose vert */
- if (eve->e == NULL || !bm_vert_has_visible_edge(eve)) {
- lverts[rdata->loose_vert_len++] = i;
- }
+ if (bm_vert_is_loose_and_visible(eve)) {
+ lverts[rdata->loose_vert_len++] = i;
}
}
rdata->loose_verts = MEM_reallocN(lverts, rdata->loose_vert_len * sizeof(int));
@@ -698,11 +707,8 @@ static MeshRenderData *mesh_render_data_create_ex(
const int v_orig = v_origindex[i];
if (v_orig != ORIGINDEX_NONE) {
BMVert *eve = BM_vert_at_index(bm, v_orig);
- if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
- /* Loose vert */
- if (eve->e == NULL || !bm_vert_has_visible_edge(eve)) {
- lverts[rdata->mapped.loose_vert_len++] = i;
- }
+ if (bm_vert_is_loose_and_visible(eve)) {
+ lverts[rdata->mapped.loose_vert_len++] = i;
}
}
}
@@ -720,11 +726,8 @@ static MeshRenderData *mesh_render_data_create_ex(
BLI_assert((bm->elem_table_dirty & BM_EDGE) == 0);
for (int i = 0; i < bm->totedge; i++) {
const BMEdge *eed = BM_edge_at_index(bm, i);
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- /* Loose edge */
- if (eed->l == NULL || !bm_edge_has_visible_face(eed)) {
- ledges[rdata->loose_edge_len++] = i;
- }
+ if (bm_edge_is_loose_and_visible(eed)) {
+ ledges[rdata->loose_edge_len++] = i;
}
}
rdata->loose_edges = MEM_reallocN(ledges, rdata->loose_edge_len * sizeof(int));
@@ -741,11 +744,8 @@ static MeshRenderData *mesh_render_data_create_ex(
const int e_orig = e_origindex[i];
if (e_orig != ORIGINDEX_NONE) {
BMEdge *eed = BM_edge_at_index(bm, e_orig);
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- /* Loose edge */
- if (eed->l == NULL || !bm_edge_has_visible_face(eed)) {
- ledges[rdata->mapped.loose_edge_len++] = i;
- }
+ if (bm_edge_is_loose_and_visible(eed)) {
+ ledges[rdata->mapped.loose_edge_len++] = i;
}
}
}
@@ -2672,9 +2672,7 @@ static void mesh_create_edit_select_id(
}
/* Loose edges */
BM_ITER_MESH (eed, &iter_edge, bm, BM_EDGES_OF_MESH) {
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) &&
- (eed->l == NULL || !bm_edge_has_visible_face(eed)))
- {
+ if (bm_edge_is_loose_and_visible(eed)) {
BM_ITER_ELEM (eve, &iter_vert, eed, BM_VERTS_OF_EDGE) {
if (vbo_pos) {
copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co);
@@ -2692,9 +2690,7 @@ static void mesh_create_edit_select_id(
}
/* Loose verts */
BM_ITER_MESH (eve, &iter_vert, bm, BM_VERTS_OF_MESH) {
- if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) &&
- (eve->e == NULL || !bm_vert_has_visible_edge(eve)))
- {
+ if (bm_vert_is_loose_and_visible(eve)) {
if (vbo_pos) {
copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co);
}
@@ -4044,9 +4040,7 @@ static void mesh_create_loose_edges_lines(
BMIter eiter;
BMEdge *eed;
BM_ITER_MESH(eed, &eiter, bm, BM_EDGES_OF_MESH) {
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) &&
- (eed->l == NULL || !bm_edge_has_visible_face(eed)))
- {
+ if (bm_edge_is_loose_and_visible(eed)) {
GPU_indexbuf_add_line_verts(&elb, BM_elem_index_get(eed->v1), BM_elem_index_get(eed->v2));
}
}