[Bf-blender-cvs] [f0207be4dfa] tmp-batch-cache-cleanup: Mesh Batch Cache: Speedup: Move the prev edit edge hack for edit uv...

Clément Foucault noreply at git.blender.org
Mon Jul 22 12:53:17 CEST 2019


Commit: f0207be4dfa7a1c6a3c2c03b609faf3878663683
Author: Clément Foucault
Date:   Sun Jul 21 17:38:41 2019 +0200
Branches: tmp-batch-cache-cleanup
https://developer.blender.org/rBf0207be4dfa7a1c6a3c2c03b609faf3878663683

Mesh Batch Cache: Speedup: Move the prev edit edge hack for edit uv...

and move it to the only function that needs it: mesh_edituv_data_iter_edit.

===================================================================

M	source/blender/draw/intern/draw_cache_impl_mesh.c

===================================================================

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 85e73bf795e..a394ea48678 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1184,7 +1184,7 @@ typedef struct MeshExtractIterData {
   const MLoopTri *mlooptri;
   /* NULL if not in edit mode. */
   BMVert *eve;
-  BMEdge *eed, *eed_prev;
+  BMEdge *eed;
   BMFace *efa;
   BMLoop *eloop;
   BMLoop **elooptri;
@@ -2841,11 +2841,21 @@ static void mesh_edituv_data_iter_edit(const MeshExtractIterData *iter,
     mesh_render_data_loop_flag(iter->mr, loop, edituv_data->cd_ofs, eldata);
     mesh_render_data_loop_edge_flag(iter->mr, loop, edituv_data->cd_ofs, eldata);
   }
-  else if (iter->efa && (iter->eed || iter->eed_prev)) {
-    /* Mapped points on an edge between two edit verts. */
-    BMEdge *eed = iter->eed ? iter->eed : iter->eed_prev;
-    BMLoop *loop = BM_face_edge_share_loop(iter->efa, eed);
-    mesh_render_data_loop_edge_flag(iter->mr, loop, edituv_data->cd_ofs, eldata);
+  else if (iter->efa) {
+    BMEdge *eed = iter->eed;
+    if (eed == NULL) {
+      int loopend = iter->mpoly->loopstart + iter->mpoly->totloop;
+      int prev_l_idx = (iter->loop_idx == iter->mpoly->loopstart) ? (loopend - 1) :
+                                                                    (iter->loop_idx - 1);
+      int edge_orig_idx = iter->mr->e_origindex[iter->mr->mloop[prev_l_idx].e];
+      eed = ((edge_orig_idx != ORIGINDEX_NONE) ? BM_edge_at_index(iter->mr->bm, edge_orig_idx) :
+                                                 NULL);
+    }
+    if (eed) {
+      /* Mapped points on an edge between two edit verts. */
+      BMLoop *loop = BM_face_edge_share_loop(iter->efa, eed);
+      mesh_render_data_loop_edge_flag(iter->mr, loop, edituv_data->cd_ofs, eldata);
+    }
   }
 }
 static void mesh_edituv_data_finish(const MeshRenderData *UNUSED(mr),
@@ -3710,7 +3720,6 @@ static void mesh_extract_iter_loop(MeshRenderData *mr,
       for (itr.face_idx = 0; itr.face_idx < mr->poly_len; itr.face_idx++, itr.mpoly++) {
         itr.efa = bm_original_face_get(mr->bm, mr->p_origindex[itr.face_idx]);
         int loopend = itr.mpoly->loopstart + itr.mpoly->totloop;
-        itr.eed_prev = bm_original_edge_get(mr->bm, mr->e_origindex[mr->mloop[loopend - 1].e]);
         for (itr.v2 = itr.v1 + 1; itr.v1 < loopend;
              itr.v1++, itr.v2++, itr.loop_idx++, itr.mloop++) {
           if (itr.v2 == loopend) {
@@ -3725,7 +3734,6 @@ static void mesh_extract_iter_loop(MeshRenderData *mr,
           for (int fn = 0; fn < itr_fn_len; fn++) {
             itr_fn[fn].iter(&itr, itr_fn[fn].buffer, itr_fn[fn].user_data);
           }
-          itr.eed_prev = itr.eed;
         }
       }
       break;



More information about the Bf-blender-cvs mailing list