[Bf-blender-cvs] [3b075d0c8d8] blender2.8: Armature: Make bone outlines thickness variable.

Clément Foucault noreply at git.blender.org
Sat May 5 21:13:57 CEST 2018


Commit: 3b075d0c8d86551e74672866a1a210adb9f24c24
Author: Clément Foucault
Date:   Sat May 5 20:27:22 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB3b075d0c8d86551e74672866a1a210adb9f24c24

Armature: Make bone outlines thickness variable.

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

M	source/blender/draw/intern/draw_common.c
M	source/blender/draw/modes/shaders/armature_envelope_outline_vert.glsl
M	source/blender/draw/modes/shaders/armature_shape_outline_geom.glsl
M	source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
M	source/blender/draw/modes/shaders/armature_sphere_outline_vert.glsl

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

diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 125803fe733..363728c9a33 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -187,7 +187,9 @@ static struct {
 	struct Gwn_VertFormat *instance_camera;
 	struct Gwn_VertFormat *instance_distance_lines;
 	struct Gwn_VertFormat *instance_spot;
+	struct Gwn_VertFormat *instance_bone_outline;
 	struct Gwn_VertFormat *instance_bone_envelope;
+	struct Gwn_VertFormat *instance_bone_envelope_outline;
 	struct Gwn_VertFormat *instance_mball_handles;
 } g_formats = {NULL};
 
@@ -435,16 +437,16 @@ DRWShadingGroup *shgroup_instance_bone_envelope_outline(DRWPass *pass)
 		            datatoc_gpu_shader_flat_color_frag_glsl, NULL);
 	}
 
-	DRW_shgroup_instance_format(g_formats.instance_bone_envelope, {
+	DRW_shgroup_instance_format(g_formats.instance_bone_envelope_outline, {
 		{"headSphere"          , DRW_ATTRIB_FLOAT, 4},
 		{"tailSphere"          , DRW_ATTRIB_FLOAT, 4},
-		{"color"               , DRW_ATTRIB_FLOAT, 4},
+		{"outlineColorSize"    , DRW_ATTRIB_FLOAT, 4},
 		{"xAxis"               , DRW_ATTRIB_FLOAT, 3}
 	});
 
 	DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.bone_envelope_outline,
 	                                                   pass, DRW_cache_bone_envelope_outline_get(),
-	                                                   g_formats.instance_bone_envelope);
+	                                                   g_formats.instance_bone_envelope_outline);
 	DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
 
 	return grp;
@@ -527,14 +529,13 @@ DRWShadingGroup *shgroup_instance_bone_shape_outline(DRWPass *pass, struct Gwn_B
 		            NULL);
 	}
 
-	/* TODO own format? */
-	DRW_shgroup_instance_format(g_formats.instance_color, {
+	DRW_shgroup_instance_format(g_formats.instance_bone_outline, {
 		{"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16},
-		{"color"              , DRW_ATTRIB_FLOAT, 4}
+		{"outlineColorSize"   , DRW_ATTRIB_FLOAT, 4}
 	});
 
 	DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.shape_outline,
-	                                                   pass, geom, g_formats.instance_color);
+	                                                   pass, geom, g_formats.instance_bone_outline);
 	DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
 
 	return grp;
@@ -568,15 +569,14 @@ DRWShadingGroup *shgroup_instance_bone_sphere_outline(DRWPass *pass)
 		            datatoc_gpu_shader_flat_color_frag_glsl, NULL);
 	}
 
-	/* TODO own format? */
-	DRW_shgroup_instance_format(g_formats.instance_color, {
+	DRW_shgroup_instance_format(g_formats.instance_bone_outline, {
 		{"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16},
-		{"color"              , DRW_ATTRIB_FLOAT, 4}
+		{"outlineColorSize"   , DRW_ATTRIB_FLOAT, 4}
 	});
 
 	DRWShadingGroup *grp = DRW_shgroup_instance_create(g_shaders.bone_sphere_outline,
 	                                                   pass, DRW_cache_bone_point_wire_outline_get(),
-	                                                   g_formats.instance_color);
+	                                                   g_formats.instance_bone_outline);
 	DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
 
 	return grp;
diff --git a/source/blender/draw/modes/shaders/armature_envelope_outline_vert.glsl b/source/blender/draw/modes/shaders/armature_envelope_outline_vert.glsl
index e534e8cef1d..a836d7fa9e1 100644
--- a/source/blender/draw/modes/shaders/armature_envelope_outline_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_envelope_outline_vert.glsl
@@ -16,7 +16,7 @@ in vec2 pos2;
 /* Assumed to be in world coordinate already. */
 in vec4 headSphere;
 in vec4 tailSphere;
-in vec4 color;
+in vec4 outlineColorSize;
 in vec3 xAxis;
 
 flat out vec4 finalColor;
@@ -145,12 +145,12 @@ void main()
 	vec2 edge_dir = compute_dir(ss0, ss1, ss2);
 
 	bool outer = ((gl_VertexID & 1) == 1);
-	vec2 t = lineThickness / viewportSize;
+	vec2 t = outlineColorSize.w * (lineThickness / viewportSize);
 	t *= pres_fac;
 	t  = (outer) ? t : vec2(0.0);
 
 	gl_Position = p1;
 	gl_Position.xy += t * edge_dir;
 
-	finalColor = color;
+	finalColor = vec4(outlineColorSize.rgb, 1.0);
 }
diff --git a/source/blender/draw/modes/shaders/armature_shape_outline_geom.glsl b/source/blender/draw/modes/shaders/armature_shape_outline_geom.glsl
index 07eea8a1f34..dc7ed5e202a 100644
--- a/source/blender/draw/modes/shaders/armature_shape_outline_geom.glsl
+++ b/source/blender/draw/modes/shaders/armature_shape_outline_geom.glsl
@@ -8,7 +8,7 @@ in float vZ[];
 in float vFacing[];
 in vec2 ssPos[];
 in vec2 ssNor[];
-in vec4 vCol[];
+in vec4 vColSize[];
 
 flat out vec4 finalColor;
 uniform mat4 ProjectionMatrix;
@@ -53,9 +53,9 @@ void emit_corner(const int e, vec2 thick, bool is_persp)
 
 void main(void)
 {
-	finalColor = vCol[0];
+	finalColor = vec4(vColSize[0].rgb, 1.0);
 
-	vec2 thick = lineThickness / viewportSize;
+	vec2 thick = vColSize[0].w * (lineThickness / viewportSize);
 	bool is_persp = (ProjectionMatrix[3][3] == 0.0);
 
 	const ivec3 edges = ivec3(0, 2, 4);
diff --git a/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl b/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
index 2bfac594493..73916163b9a 100644
--- a/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
@@ -12,14 +12,14 @@ in vec3 snor;
 
 /* ---- Per instance Attribs ---- */
 in mat4 InstanceModelMatrix;
-in vec4 color;
+in vec4 outlineColorSize;
 
 out vec4 pPos;
 out float vZ;
 out float vFacing;
 out vec2 ssPos;
 out vec2 ssNor;
-out vec4 vCol;
+out vec4 vColSize;
 
 /* project to screen space */
 vec2 proj(vec4 pos)
@@ -49,5 +49,5 @@ void main()
 
 	ssPos = proj(pPos);
 
-	vCol = color;
+	vColSize = outlineColorSize;
 }
diff --git a/source/blender/draw/modes/shaders/armature_sphere_outline_vert.glsl b/source/blender/draw/modes/shaders/armature_sphere_outline_vert.glsl
index b5601e56210..a169facd45a 100644
--- a/source/blender/draw/modes/shaders/armature_sphere_outline_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_sphere_outline_vert.glsl
@@ -10,7 +10,7 @@ in vec2 pos1;
 
 /* ---- Per instance Attribs ---- */
 in mat4 InstanceModelMatrix;
-in vec4 color;
+in vec4 outlineColorSize;
 
 flat out vec4 finalColor;
 
@@ -91,12 +91,12 @@ void main()
 
 	bool outer = ((gl_VertexID & 1) == 1);
 
-	vec2 t = lineThickness / viewportSize;
+	vec2 t = outlineColorSize.w * (lineThickness / viewportSize);
 	t *= (is_persp) ? abs(V.z) : 1.0;
 	t  = (outer) ? t : vec2(0.0);
 
 	gl_Position = p0;
 	gl_Position.xy += t * edge_dir;
 
-	finalColor = color;
+	finalColor = vec4(outlineColorSize.rgb, 1.0);
 }



More information about the Bf-blender-cvs mailing list