[Bf-blender-cvs] [7dd24ba6e84] blender2.8: 3D View: use thicker edges when in edge-mode

Campbell Barton noreply at git.blender.org
Thu Aug 30 07:47:20 CEST 2018


Commit: 7dd24ba6e84cf48b0d1ce60abaedfcd94cd5d5f6
Author: Campbell Barton
Date:   Thu Aug 30 15:45:58 2018 +1000
Branches: blender2.8
https://developer.blender.org/rB7dd24ba6e84cf48b0d1ce60abaedfcd94cd5d5f6

3D View: use thicker edges when in edge-mode

Without this there is no visual differentiation between face/edge mode.

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

M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl

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

diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 254afeb59ab..6c86f008e3d 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -316,6 +316,8 @@ static DRWPass *edit_mesh_create_overlay_pass(
         DRWShadingGroup **r_face_shgrp, DRWShadingGroup **r_ledges_shgrp,
         DRWShadingGroup **r_lverts_shgrp, DRWShadingGroup **r_facedot_shgrp)
 {
+	static float edge_width_scale;
+
 	GPUShader *tri_sh, *ledge_sh;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 	RegionView3D *rv3d = draw_ctx->rv3d;
@@ -329,24 +331,32 @@ static DRWPass *edit_mesh_create_overlay_pass(
 	        "Edit Mesh Face Overlay Pass",
 	        DRW_STATE_WRITE_COLOR | DRW_STATE_POINT | statemod);
 
+
+	/* Applies on top of the theme edge width, so edge-mode can have thick edges. */
+	edge_width_scale = (tsettings->selectmode & (SCE_SELECT_EDGE)) ? 1.75f : 1.0f;
+
 	*r_face_shgrp = DRW_shgroup_create(tri_sh, pass);
 	DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo);
 	DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
 	DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", faceAlpha, 1);
+	DRW_shgroup_uniform_float(*r_face_shgrp, "edgeScale", &edge_width_scale, 1);
 
 	*r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass);
 	DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo);
 	DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+	DRW_shgroup_uniform_float(*r_ledges_shgrp, "edgeScale", &edge_width_scale, 1);
 
 	if ((tsettings->selectmode & (SCE_SELECT_VERTEX)) != 0) {
 		*r_lverts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass);
 		DRW_shgroup_uniform_block(*r_lverts_shgrp, "globalsBlock", globals_ubo);
 		DRW_shgroup_uniform_vec2(*r_lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+		DRW_shgroup_uniform_float(*r_lverts_shgrp, "edgeScale", &edge_width_scale, 1);
 	}
 
 	if ((tsettings->selectmode & (SCE_SELECT_FACE)) != 0) {
 		*r_facedot_shgrp = DRW_shgroup_create(e_data.overlay_facedot_sh, pass);
 		DRW_shgroup_uniform_block(*r_facedot_shgrp, "globalsBlock", globals_ubo);
+		DRW_shgroup_uniform_float(*r_facedot_shgrp, "edgeScale", &edge_width_scale, 1);
 	}
 
 	return pass;
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index fe9062a8d50..6551fa81c21 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -10,6 +10,7 @@
  * TODO Refine the range to only affect GPUs. */
 
 uniform float faceAlphaMod;
+uniform float edgeScale;
 
 flat in vec3 edgesCrease;
 flat in vec3 edgesBweight;
@@ -74,10 +75,12 @@ void main()
 	FragColor.a *= faceAlphaMod;
 
 	/* Edges */
+	float sizeEdgeFinal = sizeEdge * edgeScale;
+
 	for (int v = 0; v < 3; ++v) {
 		if ((flag[v] & EDGE_EXISTS) != 0) {
 			/* Outer large edge */
-			float largeEdge = e[v] - sizeEdge * LARGE_EDGE_SIZE;
+			float largeEdge = e[v] - sizeEdgeFinal * LARGE_EDGE_SIZE;
 
 			vec4 large_edge_color = EDIT_MESH_edge_color_outer(flag[v], (flag[0]& FACE_ACTIVE) != 0, edgesCrease[v], edgesBweight[v]);
 
@@ -86,7 +89,7 @@ void main()
 			}
 
 			/* Inner thin edge */
-			float innerEdge = e[v] - sizeEdge;
+			float innerEdge = e[v] - sizeEdgeFinal;
 #ifdef ANTI_ALIASING
 			innerEdge += 0.4;
 #endif



More information about the Bf-blender-cvs mailing list