diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-06-11 18:29:31 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-06-11 18:49:19 +0300 |
commit | c84c59c81bc90a915b7e74aa90a0bc1fe8aadd22 (patch) | |
tree | e60399f8cb0e393e975c1ad50173597a4d91f776 /source/blender/draw/modes | |
parent | c5b1e7cd4e86f9aff010fa84192d783b895ce6c7 (diff) |
Fix T65406 Edit Mode: Edge selection is below wireframe overlay
This was due to a double offset of the wireframe. We also reduce
the wireframe offset. The look of the wireframe overlay changes
a little with on distant wires.
Diffstat (limited to 'source/blender/draw/modes')
-rw-r--r-- | source/blender/draw/modes/edit_mesh_mode.c | 6 | ||||
-rw-r--r-- | source/blender/draw/modes/overlay_mode.c | 16 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl | 2 |
3 files changed, 5 insertions, 19 deletions
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 0a63f303db0..cbe7cf89d50 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -175,7 +175,7 @@ typedef struct EDIT_MESH_PrivateData { DRWView *view_faces; DRWView *view_faces_cage; DRWView *view_edges; - DRWView *view_wires; + DRWView *view_verts; int data_mask[4]; int ghost_ob; @@ -333,7 +333,7 @@ static void EDIT_MESH_engine_init(void *vedata) stl->g_data->view_faces = (DRWView *)DRW_view_default_get(); stl->g_data->view_faces_cage = DRW_view_create_with_zoffset(draw_ctx->rv3d, 0.5f); stl->g_data->view_edges = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.0f); - stl->g_data->view_wires = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.5f); + stl->g_data->view_verts = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.5f); } } @@ -791,7 +791,7 @@ static void edit_mesh_draw_components(EDIT_MESH_ComponentPassList *passes, DRW_view_set_active(g_data->view_edges); DRW_draw_pass(passes->edges); - DRW_view_set_active(g_data->view_wires); + DRW_view_set_active(g_data->view_verts); DRW_draw_pass(passes->verts); DRW_view_set_active(NULL); diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c index fe989dbe8cd..aaaeefa81c9 100644 --- a/source/blender/draw/modes/overlay_mode.c +++ b/source/blender/draw/modes/overlay_mode.c @@ -166,7 +166,7 @@ static void overlay_engine_init(void *vedata) #endif } - stl->g_data->view_wires = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.0f); + stl->g_data->view_wires = DRW_view_create_with_zoffset(draw_ctx->rv3d, 0.5f); } static void overlay_cache_init(void *vedata) @@ -178,11 +178,9 @@ static void overlay_cache_init(void *vedata) const DRWContextState *draw_ctx = DRW_context_state_get(); RegionView3D *rv3d = draw_ctx->rv3d; + View3D *v3d = draw_ctx->v3d; OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg]; - const DRWContextState *DCS = DRW_context_state_get(); - - View3D *v3d = DCS->v3d; if (v3d) { g_data->overlay = v3d->overlay; g_data->show_overlays = (v3d->flag2 & V3D_HIDE_OVERLAYS) == 0; @@ -221,15 +219,6 @@ static void overlay_cache_init(void *vedata) DRW_STATE_FIRST_VERTEX_CONVENTION; float wire_size = U.pixelsize * 0.5f; - float winmat[4][4]; - float viewdist = rv3d->dist; - DRW_view_winmat_get(NULL, winmat, false); - /* special exception for ortho camera (viewdist isnt used for perspective cameras) */ - if (rv3d->persp == RV3D_CAMOB && rv3d->is_persp == false) { - viewdist = 1.0f / max_ff(fabsf(rv3d->winmat[0][0]), fabsf(rv3d->winmat[1][1])); - } - const float depth_ofs = bglPolygonOffsetCalc((float *)winmat, viewdist, 1.0f); - const bool use_select = (DRW_state_is_select() || DRW_state_is_depth()); GPUShader *face_wires_sh = use_select ? sh_data->select_wireframe : sh_data->face_wireframe; @@ -238,7 +227,6 @@ static void overlay_cache_init(void *vedata) g_data->face_wires_shgrp = DRW_shgroup_create(face_wires_sh, psl->face_wireframe_pass); DRW_shgroup_uniform_float( g_data->face_wires_shgrp, "wireStepParam", &g_data->wire_step_param, 1); - DRW_shgroup_uniform_float_copy(g_data->face_wires_shgrp, "ofs", depth_ofs); if (use_select || USE_GEOM_SHADER_WORKAROUND) { DRW_shgroup_uniform_float_copy(g_data->face_wires_shgrp, "wireSize", wire_size); DRW_shgroup_uniform_vec2( diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl index 23f64e6e49c..9022456abb2 100644 --- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl +++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl @@ -1,6 +1,5 @@ uniform float wireStepParam; -uniform float ofs; in vec3 pos; in vec3 nor; @@ -31,7 +30,6 @@ flat out float edgeSharpness; void main() { mat4 projmat = ProjectionMatrix; - projmat[3][2] -= ofs; vec4 wpos = ModelMatrix * vec4(pos, 1.0); gl_Position = projmat * (ViewMatrix * wpos); |