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:
authorClément Foucault <foucault.clem@gmail.com>2019-04-26 18:03:25 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-04-26 18:03:25 +0300
commit8192bcd7c19d41a1706fd31466cdab17a167aaf3 (patch)
tree82b054bd6737161f09f1a89c068070505477973a /source/blender/draw/intern/draw_cache_impl_mesh.c
parentfe7605b710cea9078175861735767753431e4129 (diff)
Fix T63886 Crash in UV Editing after faces display turn off / on
This patch also improve cache locality of the IBO filling. I did not benchmark if it made any difference.
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_mesh.c')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index e52868f613e..436f05cd0a8 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -4594,11 +4594,21 @@ static void uvedit_fill_buffer_data(MeshRenderData *rdata,
}
/* Skip hidden faces. */
- if (elb_face && face_visible) {
- for (i = 0; i < efa->len; ++i) {
- GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
- GPU_indexbuf_add_generic_vert(elb_vert, vidx + i);
- GPU_indexbuf_add_line_verts(elb_edge, vidx + i, vidx + (i + 1) % efa->len);
+ if (face_visible) {
+ if (elb_face) {
+ for (i = 0; i < efa->len; ++i) {
+ GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
+ }
+ }
+ if (elb_vert) {
+ for (i = 0; i < efa->len; ++i) {
+ GPU_indexbuf_add_generic_vert(elb_vert, vidx + i);
+ }
+ }
+ if (elb_edge) {
+ for (i = 0; i < efa->len; ++i) {
+ GPU_indexbuf_add_line_verts(elb_edge, vidx + i, vidx + (i + 1) % efa->len);
+ }
}
}
@@ -4662,18 +4672,24 @@ static void uvedit_fill_buffer_data(MeshRenderData *rdata,
GPU_vertbuf_attr_set(vbo_fdots_data, uv_attr_id.fdots_flag, fdot_idx, &face_flag);
}
/* Skip hidden faces. */
- if (elb_face && face_visible) {
- for (i = 0; i < mpoly->totloop; ++i) {
- GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
- if (e_origindex[l[i].e] != ORIGINDEX_NONE) {
+ if (face_visible) {
+ if (elb_face) {
+ for (i = 0; i < mpoly->totloop; ++i) {
+ GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
+ }
+ GPU_indexbuf_add_generic_vert(elb_face, vidx);
+ GPU_indexbuf_add_primitive_restart(elb_face);
+ }
+ if (elb_edge && e_origindex[l[i].e] != ORIGINDEX_NONE) {
+ for (i = 0; i < mpoly->totloop; ++i) {
GPU_indexbuf_add_line_verts(elb_edge, vidx + i, vidx + (i + 1) % mpoly->totloop);
}
- if (v_origindex[l[i].v] != ORIGINDEX_NONE) {
+ }
+ if (elb_vert && v_origindex[l[i].v] != ORIGINDEX_NONE) {
+ for (i = 0; i < mpoly->totloop; ++i) {
GPU_indexbuf_add_generic_vert(elb_vert, vidx + i);
}
}
- GPU_indexbuf_add_generic_vert(elb_face, vidx);
- GPU_indexbuf_add_primitive_restart(elb_face);
}
for (i = 0; i < mpoly->totloop; i++, l++) {
/* TODO support stretch. */