[Bf-blender-cvs] [37b7a5c8b83] master: Fix vertex/weight paint showing edge selection

Campbell Barton noreply at git.blender.org
Thu Feb 14 02:46:24 CET 2019


Commit: 37b7a5c8b83ff7ba1dd306ccbb890d2e9b996096
Author: Campbell Barton
Date:   Thu Feb 14 12:40:21 2019 +1100
Branches: master
https://developer.blender.org/rB37b7a5c8b83ff7ba1dd306ccbb890d2e9b996096

Fix vertex/weight paint showing edge selection

When vertex/face selection are disabled - show all wire
ignoring selection & hidden state.

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

M	source/blender/draw/modes/paint_vertex_mode.c
M	source/blender/draw/modes/paint_weight_mode.c
M	source/blender/draw/modes/shaders/paint_wire_vert.glsl

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

diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
index c11bb1a1064..2e9c65e0ce5 100644
--- a/source/blender/draw/modes/paint_vertex_mode.c
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -47,8 +47,9 @@ extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
 typedef struct PAINT_VERTEX_PassList {
 	struct DRWPass *vcolor_faces;
 	struct DRWPass *wire_overlay;
-	struct DRWPass *face_overlay;
-	struct DRWPass *vert_overlay;
+	struct DRWPass *wire_select_overlay;
+	struct DRWPass *face_select_overlay;
+	struct DRWPass *vert_select_overlay;
 } PAINT_VERTEX_PassList;
 
 typedef struct PAINT_VERTEX_StorageList {
@@ -66,8 +67,9 @@ typedef struct PAINT_VERTEX_Data {
 typedef struct PAINT_VERTEX_Shaders {
 	struct GPUShader *vcolor_face;
 	struct GPUShader *wire_overlay;
-	struct GPUShader *face_overlay;
-	struct GPUShader *vert_overlay;
+	struct GPUShader *wire_select_overlay;
+	struct GPUShader *face_select_overlay;
+	struct GPUShader *vert_select_overlay;
 } PAINT_VERTEX_Shaders;
 
 /* *********** STATIC *********** */
@@ -79,8 +81,9 @@ static struct {
 typedef struct PAINT_VERTEX_PrivateData {
 	DRWShadingGroup *fvcolor_shgrp;
 	DRWShadingGroup *lwire_shgrp;
-	DRWShadingGroup *face_shgrp;
-	DRWShadingGroup *vert_shgrp;
+	DRWShadingGroup *lwire_select_shgrp;
+	DRWShadingGroup *face_select_shgrp;
+	DRWShadingGroup *vert_select_shgrp;
 } PAINT_VERTEX_PrivateData; /* Transient data */
 
 /* *********** FUNCTIONS *********** */
@@ -107,15 +110,20 @@ static void PAINT_VERTEX_engine_init(void *UNUSED(vedata))
 		        .frag = (const char *[]){datatoc_paint_wire_frag_glsl, NULL},
 		        .defs = (const char *[]){sh_cfg_data->def, "#define VERTEX_MODE\n", NULL},
 		});
-		sh_data->face_overlay = GPU_shader_create_from_arrays({
+		sh_data->wire_select_overlay = GPU_shader_create_from_arrays({
+		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_common_globals_lib_glsl, datatoc_paint_wire_vert_glsl, NULL},
+		        .frag = (const char *[]){datatoc_paint_wire_frag_glsl, NULL},
+		        .defs = (const char *[]){sh_cfg_data->def, "#define VERTEX_MODE\n" "#define USE_SELECT\n", NULL},
+		});
+		sh_data->face_select_overlay = GPU_shader_create_from_arrays({
 		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_paint_face_vert_glsl, NULL},
 		        .frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
 		        .defs = (const char *[]){sh_cfg_data->def, NULL},
 		});
-		sh_data->vert_overlay = GPU_shader_create_from_arrays({
+		sh_data->vert_select_overlay = GPU_shader_create_from_arrays({
 		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_common_globals_lib_glsl, datatoc_paint_wire_vert_glsl, NULL},
 		        .frag = (const char *[]){datatoc_paint_vert_frag_glsl, NULL},
-		        .defs = (const char *[]){sh_cfg_data->def, NULL},
+		        .defs = (const char *[]){sh_cfg_data->def, "#define USE_SELECT\n", NULL},
 		});
 	}
 }
@@ -160,27 +168,39 @@ static void PAINT_VERTEX_cache_init(void *vedata)
 	}
 
 	{
-		psl->face_overlay = DRW_pass_create(
+		psl->wire_select_overlay = DRW_pass_create(
+		        "Wire Mask Pass",
+		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_OFFSET_NEGATIVE);
+
+		stl->g_data->lwire_select_shgrp = DRW_shgroup_create(sh_data->wire_select_overlay, psl->wire_select_overlay);
+		DRW_shgroup_uniform_block(stl->g_data->lwire_select_shgrp, "globalsBlock", G_draw.block_ubo);
+		if (rv3d->rflag & RV3D_CLIPPING) {
+			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->lwire_select_shgrp, rv3d);
+		}
+	}
+
+	{
+		psl->face_select_overlay = DRW_pass_create(
 		        "Face Mask Pass",
 		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND);
 
-		stl->g_data->face_shgrp = DRW_shgroup_create(sh_data->face_overlay, psl->face_overlay);
+		stl->g_data->face_select_shgrp = DRW_shgroup_create(sh_data->face_select_overlay, psl->face_select_overlay);
 		static float col[4] = {1.0f, 1.0f, 1.0f, 0.2f};
-		DRW_shgroup_uniform_vec4(stl->g_data->face_shgrp, "color", col, 1);
+		DRW_shgroup_uniform_vec4(stl->g_data->face_select_shgrp, "color", col, 1);
 		if (rv3d->rflag & RV3D_CLIPPING) {
-			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->face_shgrp, rv3d);
+			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->face_select_shgrp, rv3d);
 		}
 	}
 
 	{
-		psl->vert_overlay = DRW_pass_create(
+		psl->vert_select_overlay = DRW_pass_create(
 		        "Vert Mask Pass",
 		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_OFFSET_NEGATIVE);
 
-		stl->g_data->vert_shgrp = DRW_shgroup_create(sh_data->vert_overlay, psl->vert_overlay);
-		DRW_shgroup_uniform_block(stl->g_data->vert_shgrp, "globalsBlock", G_draw.block_ubo);
+		stl->g_data->vert_select_shgrp = DRW_shgroup_create(sh_data->vert_select_overlay, psl->vert_select_overlay);
+		DRW_shgroup_uniform_block(stl->g_data->vert_select_shgrp, "globalsBlock", G_draw.block_ubo);
 		if (rv3d->rflag & RV3D_CLIPPING) {
-			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->vert_shgrp, rv3d);
+			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->vert_select_shgrp, rv3d);
 		}
 	}
 }
@@ -210,18 +230,19 @@ static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob)
 		}
 
 		if (use_face_sel || use_wire) {
+			DRWShadingGroup *shgrp = use_face_sel ? stl->g_data->lwire_select_shgrp : stl->g_data->lwire_shgrp;
 			geom = DRW_cache_mesh_surface_edges_get(ob);
-			DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat);
+			DRW_shgroup_call_add(shgrp, geom, ob->obmat);
 		}
 
 		if (use_face_sel) {
 			geom = DRW_cache_mesh_surface_get(ob);
-			DRW_shgroup_call_add(stl->g_data->face_shgrp, geom, ob->obmat);
+			DRW_shgroup_call_add(stl->g_data->face_select_shgrp, geom, ob->obmat);
 		}
 
 		if (use_vert_sel) {
 			geom = DRW_cache_mesh_all_verts_get(ob);
-			DRW_shgroup_call_add(stl->g_data->vert_shgrp, geom, ob->obmat);
+			DRW_shgroup_call_add(stl->g_data->vert_select_shgrp, geom, ob->obmat);
 		}
 	}
 }
@@ -231,9 +252,10 @@ static void PAINT_VERTEX_draw_scene(void *vedata)
 	PAINT_VERTEX_PassList *psl = ((PAINT_VERTEX_Data *)vedata)->psl;
 
 	DRW_draw_pass(psl->vcolor_faces);
-	DRW_draw_pass(psl->face_overlay);
 	DRW_draw_pass(psl->wire_overlay);
-	DRW_draw_pass(psl->vert_overlay);
+	DRW_draw_pass(psl->wire_select_overlay);
+	DRW_draw_pass(psl->vert_select_overlay);
+	DRW_draw_pass(psl->face_select_overlay);
 }
 
 static void PAINT_VERTEX_engine_free(void)
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index 910ffecd9ba..af3421483da 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -46,8 +46,9 @@ extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
 typedef struct PAINT_WEIGHT_PassList {
 	struct DRWPass *weight_faces;
 	struct DRWPass *wire_overlay;
-	struct DRWPass *face_overlay;
-	struct DRWPass *vert_overlay;
+	struct DRWPass *wire_select_overlay;
+	struct DRWPass *face_select_overlay;
+	struct DRWPass *vert_select_overlay;
 } PAINT_WEIGHT_PassList;
 
 typedef struct PAINT_WEIGHT_StorageList {
@@ -65,8 +66,9 @@ typedef struct PAINT_WEIGHT_Data {
 typedef struct PAINT_WEIGHT_Shaders {
 	struct GPUShader *weight_face;
 	struct GPUShader *wire_overlay;
-	struct GPUShader *face_overlay;
-	struct GPUShader *vert_overlay;
+	struct GPUShader *wire_select_overlay;
+	struct GPUShader *face_select_overlay;
+	struct GPUShader *vert_select_overlay;
 } PAINT_WEIGHT_Shaders;
 
 /* *********** STATIC *********** */
@@ -80,8 +82,9 @@ static struct {
 typedef struct PAINT_WEIGHT_PrivateData {
 	DRWShadingGroup *fweights_shgrp;
 	DRWShadingGroup *lwire_shgrp;
+	DRWShadingGroup *lwire_select_shgrp;
 	DRWShadingGroup *face_shgrp;
-	DRWShadingGroup *vert_shgrp;
+	DRWShadingGroup *vert_select_shgrp;
 } PAINT_WEIGHT_PrivateData;
 
 /* *********** FUNCTIONS *********** */
@@ -108,17 +111,21 @@ static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata))
 		        .frag = (const char *[]){datatoc_paint_wire_frag_glsl, NULL},
 		        .defs = (const char *[]){sh_cfg_data->def, "#define WEIGHT_MODE\n", NULL},
 		});
-
-		sh_data->face_overlay = GPU_shader_create_from_arrays({
+		sh_data->wire_select_overlay = GPU_shader_create_from_arrays({
+		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_common_globals_lib_glsl, datatoc_paint_wire_vert_glsl, NULL},
+		        .frag = (const char *[]){datatoc_paint_wire_frag_glsl, NULL},
+		        .defs = (const char *[]){sh_cfg_data->def, "#define WEIGHT_MODE\n" "#define USE_SELECT\n", NULL},
+		});
+		sh_data->face_select_overlay = GPU_shader_create_from_arrays({
 		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_paint_face_vert_glsl, NULL},
 		        .frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
 		        .defs = (const char *[]){sh_cfg_data->def, NULL},
 		});
 
-		sh_data->vert_overlay = GPU_shader_create_from_arrays({
+		sh_data->vert_select_overlay = GPU_shader_create_from_arrays({
 		        .vert = (const char *[]){sh_cfg_data->lib, datatoc_common_globals_lib_glsl, datatoc_paint_wire_vert_glsl, NULL},
 		        .frag = (const char *[]){datatoc_common_globals_lib_glsl, datatoc_paint_vert_frag_glsl, NULL},
-		        .defs = (const char *[]){sh_cfg_data->def, NULL},
+		        .defs = (const char *[]){sh_cfg_data->def, "#define USE_SELECT\n", NULL},
 		});
 	}
 }
@@ -168,11 +175,23 @@ static void PAINT_WEIGHT_cache_init(void *vedata)
 	}
 
 	{
-		psl->face_overlay = DRW_pass_create(
+		psl->wire_select_overlay = DRW_pass_create(
+		        "Wire Mask Pass",
+		        DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_OFFSET_NEGATIVE);
+
+		stl->g_data->lwire_select_shgrp = DRW_shgroup_create(sh_data->wire_select_overlay, psl->wire_overlay);
+		DRW_shgroup_uniform_block(stl->g_data->lwire_select_shgrp, "globalsBlock", G_draw.block_ubo);
+		if (rv3d->rflag & RV3D_CLIPPING) {
+			DRW_shgroup_world_clip_planes_from_rv3d(stl->g_data->lwire_select_shgrp, rv3d);
+		}
+	}
+
+	{
+		psl->face_select_overla

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list