[Bf-blender-cvs] [d9949c351d2] blender2.8: Pass selection to weight paint vert overlay instead of colors

Luca Rood noreply at git.blender.org
Fri May 5 18:24:52 CEST 2017


Commit: d9949c351d20bf911d273d0b43bbdad624741ddf
Author: Luca Rood
Date:   Fri May 5 18:22:07 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBd9949c351d20bf911d273d0b43bbdad624741ddf

Pass selection to weight paint vert overlay instead of colors

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/draw/modes/paint_weight_mode.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 4b5efe60eae..64371d74960 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -153,6 +153,7 @@ data_to_c_simple(modes/shaders/object_grid_frag.glsl SRC)
 data_to_c_simple(modes/shaders/object_grid_vert.glsl SRC)
 data_to_c_simple(modes/shaders/paint_wire_frag.glsl SRC)
 data_to_c_simple(modes/shaders/paint_wire_vert.glsl SRC)
+data_to_c_simple(modes/shaders/paint_vert_frag.glsl SRC)
 
 list(APPEND INC
 )
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index e17f3700bf6..a75ea6fa11c 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1403,7 +1403,7 @@ static bool mesh_render_data_tri_cos_sel_get(
 
 static bool mesh_render_data_vert_cos_sel_get(
         MeshRenderData *rdata, const int vert_idx,
-        float r_vert_co[3], float r_vert_col[3])
+        float r_vert_co[3], int *r_vert_sel)
 {
 	BLI_assert(rdata->types & (MR_DATATYPE_VERT));
 
@@ -1414,14 +1414,10 @@ static bool mesh_render_data_vert_cos_sel_get(
 		const MVert *mv = &rdata->mvert[vert_idx];
 
 		if (mv->flag & SELECT) {
-			r_vert_col[0] = 1.0f;
-			r_vert_col[1] = 1.0f;
-			r_vert_col[2] = 1.0f;
+			*r_vert_sel = true;
 		}
 		else {
-			r_vert_col[0] = 0.4f;
-			r_vert_col[1] = 0.4f;
-			r_vert_col[2] = 0.4f;
+			*r_vert_sel = false;
 		}
 
 		copy_v3_v3(r_vert_co, mv->co);
@@ -2364,11 +2360,11 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
 		unsigned int vidx = 0, cidx = 0;
 
 		static VertexFormat format = { 0 };
-		static unsigned int pos_id, col_id;
+		static unsigned int pos_id, sel_id;
 		if (format.attrib_ct == 0) {
 			/* initialize vertex format */
 			pos_id = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
-			col_id = VertexFormat_add_attrib(&format, "select", COMP_U8, 1, KEEP_INT);
+			sel_id = VertexFormat_add_attrib(&format, "select", COMP_U8, 1, KEEP_INT);
 		}
 
 		const int edge_len = mesh_render_data_edges_len_get(rdata);
@@ -2386,8 +2382,8 @@ static VertexBuffer *mesh_batch_cache_get_edge_pos_with_sel(
 			if (mesh_render_data_edge_cos_sel_get(
 			        rdata, i, edge_vert_cos, &edge_vert_sel, use_wire, use_sel))
 			{
-				VertexBuffer_set_attrib(vbo, col_id, cidx++, &edge_vert_sel);
-				VertexBuffer_set_attrib(vbo, col_id, cidx++, &edge_vert_sel);
+				VertexBuffer_set_attrib(vbo, sel_id, cidx++, &edge_vert_sel);
+				VertexBuffer_set_attrib(vbo, sel_id, cidx++, &edge_vert_sel);
 
 				VertexBuffer_set_attrib(vbo, pos_id, vidx++, edge_vert_cos[0]);
 				VertexBuffer_set_attrib(vbo, pos_id, vidx++, edge_vert_cos[1]);
@@ -2456,11 +2452,11 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
 		unsigned int vidx = 0, cidx = 0;
 
 		static VertexFormat format = { 0 };
-		static unsigned int pos_id, col_id;
+		static unsigned int pos_id, sel_id;
 		if (format.attrib_ct == 0) {
 			/* initialize vertex format */
 			pos_id = VertexFormat_add_attrib(&format, "pos", COMP_F32, 3, KEEP_FLOAT);
-			col_id = VertexFormat_add_attrib(&format, "color", COMP_F32, 3, KEEP_FLOAT);
+			sel_id = VertexFormat_add_attrib(&format, "select", COMP_I8, 1, KEEP_INT);
 		}
 
 		const int vert_len = mesh_render_data_verts_len_get(rdata);
@@ -2472,12 +2468,13 @@ static VertexBuffer *mesh_batch_cache_get_vert_pos_with_sel(MeshRenderData *rdat
 		VertexBuffer_allocate_data(vbo, vbo_len_capacity);
 
 		for (int i = 0; i < vert_len; i++) {
-			static float vert_co[3], vert_col[3];
+			static float vert_co[3];
+			static int vert_sel;
 
 			if (mesh_render_data_vert_cos_sel_get(
-			        rdata, i, vert_co, vert_col))
+			        rdata, i, vert_co, &vert_sel))
 			{
-				VertexBuffer_set_attrib(vbo, col_id, cidx++, vert_col);
+				VertexBuffer_set_attrib(vbo, sel_id, cidx++, &vert_sel);
 				VertexBuffer_set_attrib(vbo, pos_id, vidx++, vert_co);
 			}
 		}
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index 10e798f1fc3..98ead1dc9fc 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -42,6 +42,7 @@ extern struct GlobalsUboStorage ts; /* draw_common.c */
 
 extern char datatoc_paint_wire_vert_glsl[];
 extern char datatoc_paint_wire_frag_glsl[];
+extern char datatoc_paint_vert_frag_glsl[];
 extern char datatoc_common_globals_lib_glsl[];
 
 /* *********** LISTS *********** */
@@ -110,7 +111,10 @@ static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata))
 	}
 
 	if (!e_data.vert_overlay_shader) {
-		e_data.vert_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+		e_data.vert_overlay_shader = DRW_shader_create_with_lib(
+		        datatoc_paint_wire_vert_glsl, NULL,
+		        datatoc_paint_vert_frag_glsl,
+		        datatoc_common_globals_lib_glsl, NULL);
 	}
 }
 
@@ -208,6 +212,7 @@ static void PAINT_WEIGHT_draw_scene(void *vedata)
 static void PAINT_WEIGHT_engine_free(void)
 {
 	DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader);
+	DRW_SHADER_FREE_SAFE(e_data.vert_overlay_shader);
 }
 
 void PAINT_WEIGHT_collection_settings_create(IDProperty *properties)




More information about the Bf-blender-cvs mailing list