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-10 06:36:30 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-06-10 06:46:10 +0300
commit48ca66cfe7826985f94a72af6cd6f750d797a46b (patch)
tree69f2e7f88ea07d781ed6855625e015cde92be49a /source/blender/draw/intern
parent46e0ec05ef1fb75fb3e5b4a713a5302ace49e546 (diff)
Fix T77195: Crash with edit-mesh viewport measurements enabled
Simplify looping over faces & tessellation data. Regression in 6526c3ced8b5, the index accessed wasn't valid.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/draw_manager_text.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/draw/intern/draw_manager_text.c b/source/blender/draw/intern/draw_manager_text.c
index 23956df71e8..f4601fe4f48 100644
--- a/source/blender/draw/intern/draw_manager_text.c
+++ b/source/blender/draw/intern/draw_manager_text.c
@@ -395,16 +395,19 @@ void DRW_text_edit_mesh_measure_stats(ARegion *region,
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col);
- int i, n, numtri;
+ int i, n;
BMFace *f = NULL;
+ /* Alternative to using `poly_to_tri_count(i, BM_elem_index_get(f->l_first))`
+ * without having to add an extra loop. */
+ int looptri_index = 0;
BM_ITER_MESH_INDEX (f, &iter, em->bm, BM_FACES_OF_MESH, i) {
+ const int f_looptri_len = f->len - 2;
if (BM_elem_flag_test(f, BM_ELEM_SELECT)) {
n = 0;
- numtri = f->len - 2;
area = 0;
zero_v3(vmid);
- BMLoop *(*l)[3] = &em->looptris[poly_to_tri_count(i, BM_elem_index_get(f->l_first))];
- for (int j = 0; j < numtri; j++) {
+ BMLoop *(*l)[3] = &em->looptris[looptri_index];
+ for (int j = 0; j < f_looptri_len; j++) {
if (use_coords) {
copy_v3_v3(v1, vert_coords[BM_elem_index_get(l[j][0]->v)]);
@@ -449,6 +452,7 @@ void DRW_text_edit_mesh_measure_stats(ARegion *region,
DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, 0, txt_flag, col);
}
+ looptri_index += f_looptri_len;
}
}