a689dce4d70e9d61ea1b0ad95f7965b5298ea2a3
[blender.git] / source / blender / draw / modes / shaders / armature_axes_vert.glsl
1
2 uniform mat4 ViewProjectionMatrix;
3 uniform vec3 screenVecs[3];
4 #ifdef USE_WORLD_CLIP_PLANES
5 uniform mat4 ModelMatrix;
6 #endif
7 /* ---- Instantiated Attrs ---- */
8 in float axis; /* position on the axis. [0.0-1.0] is X axis, [1.0-2.0] is Y, etc... */
9 in vec2 screenPos;
10 in vec3 colorAxis;
11
12 /* ---- Per instance Attrs ---- */
13 in mat4 InstanceModelMatrix;
14 in vec4 color;
15
16 flat out vec4 finalColor;
17
18 void main()
19 {
20   vec3 chosen_axis = InstanceModelMatrix[int(axis)].xyz;
21   vec3 y_axis = InstanceModelMatrix[1].xyz;
22   vec3 bone_loc = InstanceModelMatrix[3].xyz;
23   vec3 wpos = bone_loc + y_axis + chosen_axis * fract(axis);
24   vec3 spos = screenVecs[0].xyz * screenPos.x + screenVecs[1].xyz * screenPos.y;
25   /* Scale uniformly by axis length */
26   spos *= length(chosen_axis);
27
28   vec4 pos_4d = vec4(wpos + spos, 1.0);
29   gl_Position = ViewProjectionMatrix * pos_4d;
30
31   finalColor.rgb = mix(colorAxis, color.rgb, color.a);
32   finalColor.a = 1.0;
33
34 #ifdef USE_WORLD_CLIP_PLANES
35   world_clip_planes_calc_clip_distance((ModelMatrix * pos_4d).xyz);
36 #endif
37 }