diff options
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_geom.glsl | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_geom.glsl b/source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_geom.glsl new file mode 100644 index 00000000000..25e13e7c212 --- /dev/null +++ b/source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_geom.glsl @@ -0,0 +1,37 @@ + +#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl) +#pragma BLENDER_REQUIRE(common_view_lib.glsl) + +vec2 compute_dir(vec2 v0, vec2 v1) +{ + vec2 dir = normalize(v1 - v0 + 1e-8); + dir = vec2(-dir.y, dir.x); + return dir; +} + +void main(void) +{ + vec2 t; + vec2 edge_dir = compute_dir(interp_in[0].ss_pos, interp_in[1].ss_pos) * + drw_view.viewport_size_inverse; + + bool is_persp = (drw_view.winmat[3][3] == 0.0); + float line_size = float(lineThickness) * sizePixel; + + view_clipping_distances_set(gl_in[0]); + interp_out.color = interp_in[0].color; + t = edge_dir * (line_size * (is_persp ? gl_in[0].gl_Position.w : 1.0)); + gl_Position = gl_in[0].gl_Position + vec4(t, 0.0, 0.0); + EmitVertex(); + gl_Position = gl_in[0].gl_Position - vec4(t, 0.0, 0.0); + EmitVertex(); + + view_clipping_distances_set(gl_in[1]); + interp_out.color = interp_in[1].color; + t = edge_dir * (line_size * (is_persp ? gl_in[1].gl_Position.w : 1.0)); + gl_Position = gl_in[1].gl_Position + vec4(t, 0.0, 0.0); + EmitVertex(); + gl_Position = gl_in[1].gl_Position - vec4(t, 0.0, 0.0); + EmitVertex(); + EndPrimitive(); +} |