diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-06-22 18:30:45 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-06-22 18:31:51 +0300 |
commit | 336a8f283f4b612b687dc26ea0c86a2c82bf514d (patch) | |
tree | 693d50dcf2a80ef78856dbc771a909db20be9c91 /source/blender/editors | |
parent | b175bb2503bd1c93464349c9c2a583b642de6d5f (diff) |
Fix T62917 UV editor: Edge overlay not shown when edge overlay type is Dash
Fix by changing the shader to always compute dash for uv and just change
dash size to something really big for other overlay types.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/uvedit/uvedit_draw.c | 98 |
1 files changed, 39 insertions, 59 deletions
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index 897e2f13774..df6e4f70e99 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -409,70 +409,49 @@ static void draw_uvs(SpaceImage *sima, GPU_blend(true); } - switch (sima->dt_uv) { - case SI_UVDT_DASH: { - float dash_colors[2][4] = { - {0.56f, 0.56f, 0.56f, overlay_alpha}, - {0.07f, 0.07f, 0.07f, overlay_alpha}, - }; - float viewport_size[4]; - GPU_viewport_size_get_f(viewport_size); - - GPU_line_width(1.0f); - GPU_batch_program_set_builtin(batch->edges, GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR); - GPU_batch_uniform_4fv_array(batch->edges, "colors", 2, (float *)dash_colors); - GPU_batch_uniform_2f(batch->edges, - "viewport_size", - viewport_size[2] / UI_DPI_FAC, - viewport_size[3] / UI_DPI_FAC); - GPU_batch_uniform_1i(batch->edges, "colors_len", 2); /* "advanced" mode */ - GPU_batch_uniform_1f(batch->edges, "dash_width", 4.0f); - GPU_batch_uniform_1f(batch->edges, "dash_factor", 0.5f); - GPU_batch_draw(batch->edges); - break; - } - case SI_UVDT_BLACK: - case SI_UVDT_WHITE: - case SI_UVDT_OUTLINE: { - /* We could modify the vbo's data filling - * instead of modifying the provoking vert. */ - glProvokingVertex(GL_FIRST_VERTEX_CONVENTION); - - UI_GetThemeColor3fv(TH_EDGE_SELECT, col2); - col2[3] = overlay_alpha; - - GPU_batch_program_set_builtin( - batch->edges, (interpedges) ? GPU_SHADER_2D_UV_EDGES_SMOOTH : GPU_SHADER_2D_UV_EDGES); - - if (sima->dt_uv == SI_UVDT_OUTLINE) { - /* Black Outline. */ - GPU_line_width(3.0f); - GPU_batch_uniform_4f(batch->edges, "edgeColor", 0.0f, 0.0f, 0.0f, overlay_alpha); - GPU_batch_uniform_4f(batch->edges, "selectColor", 0.0f, 0.0f, 0.0f, overlay_alpha); - GPU_batch_draw(batch->edges); - - UI_GetThemeColor3fv(TH_WIRE_EDIT, col1); - } - else if (sima->dt_uv == SI_UVDT_WHITE) { - copy_v3_fl3(col1, 1.0f, 1.0f, 1.0f); - } - else { - copy_v3_fl3(col1, 0.0f, 0.0f, 0.0f); - } - col1[3] = overlay_alpha; + { + /* We could modify the vbo's data filling + * instead of modifying the provoking vert. */ + glProvokingVertex(GL_FIRST_VERTEX_CONVENTION); + + UI_GetThemeColor3fv(TH_EDGE_SELECT, col2); + col2[3] = overlay_alpha; - /* Inner Line. Use depth test to insure selection is drawn on top. */ - GPU_depth_test(true); - GPU_line_width(1.0f); - GPU_batch_uniform_4fv(batch->edges, "edgeColor", col1); - GPU_batch_uniform_4fv(batch->edges, "selectColor", col2); + float dash_width = (sima->dt_uv & SI_UVDT_DASH) ? (4.0f * UI_DPI_FAC) : 9999.0f; + + GPU_batch_program_set_builtin( + batch->edges, (interpedges) ? GPU_SHADER_2D_UV_EDGES_SMOOTH : GPU_SHADER_2D_UV_EDGES); + + if (sima->dt_uv == SI_UVDT_OUTLINE) { + /* Black Outline. */ + GPU_line_width(3.0f); + GPU_batch_uniform_4f(batch->edges, "edgeColor", 0.0f, 0.0f, 0.0f, overlay_alpha); + GPU_batch_uniform_4f(batch->edges, "selectColor", 0.0f, 0.0f, 0.0f, overlay_alpha); + GPU_batch_uniform_1f(batch->edges, "dashWidth", dash_width); GPU_batch_draw(batch->edges); - GPU_depth_test(false); - glProvokingVertex(GL_LAST_VERTEX_CONVENTION); - break; + UI_GetThemeColor3fv(TH_WIRE_EDIT, col1); + } + else if (sima->dt_uv == SI_UVDT_BLACK) { + copy_v3_fl3(col1, 0.0f, 0.0f, 0.0f); } + else { + copy_v3_fl3(col1, 1.0f, 1.0f, 1.0f); + } + col1[3] = overlay_alpha; + + /* Inner Line. Use depth test to insure selection is drawn on top. */ + GPU_depth_test(true); + GPU_line_width(1.0f); + GPU_batch_uniform_4fv(batch->edges, "edgeColor", col1); + GPU_batch_uniform_4fv(batch->edges, "selectColor", col2); + GPU_batch_uniform_1f(batch->edges, "dashWidth", dash_width); + GPU_batch_draw(batch->edges); + GPU_depth_test(false); + + glProvokingVertex(GL_LAST_VERTEX_CONVENTION); } + if (sima->flag & SI_SMOOTH_UV) { GPU_line_smooth(false); GPU_blend(false); @@ -481,6 +460,7 @@ static void draw_uvs(SpaceImage *sima, GPU_blend(false); } } + if (batch->verts || batch->facedots) { UI_GetThemeColor4fv(TH_VERTEX_SELECT, col2); if (batch->verts) { |