[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