Differential D6296 Diff 20005 source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl
- This file was moved from source/blender/draw/modes/shaders/animviz_mpath_lines_geom.glsl.
| layout(lines) in; | layout(lines) in; | ||||
| layout(triangle_strip, max_vertices = 4) out; | layout(triangle_strip, max_vertices = 4) out; | ||||
| uniform mat4 ProjectionMatrix; | |||||
| uniform vec2 viewportSize; | |||||
| uniform int lineThickness = 2; | uniform int lineThickness = 2; | ||||
| in vec4 finalColor_geom[]; | in vec4 finalColor_geom[]; | ||||
| in vec2 ssPos[]; | in vec2 ssPos[]; | ||||
| out vec4 finalColor; | out vec4 finalColor; | ||||
| vec2 compute_dir(vec2 v0, vec2 v1) | vec2 compute_dir(vec2 v0, vec2 v1) | ||||
| { | { | ||||
| vec2 dir = normalize(v1 - v0 + 1e-8); | vec2 dir = normalize(v1 - v0 + 1e-8); | ||||
| dir = vec2(-dir.y, dir.x); | dir = vec2(-dir.y, dir.x); | ||||
| return dir; | return dir; | ||||
| } | } | ||||
| void main(void) | void main(void) | ||||
| { | { | ||||
| vec2 t; | vec2 t; | ||||
| vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) / viewportSize; | vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * sizeViewportInv.xy; | ||||
| bool is_persp = (ProjectionMatrix[3][3] == 0.0); | bool is_persp = (ProjectionMatrix[3][3] == 0.0); | ||||
| float line_size = float(lineThickness) * sizePixel; | |||||
| #ifdef USE_WORLD_CLIP_PLANES | |||||
| world_clip_planes_set_clip_distance(gl_in[0].gl_ClipDistance); | |||||
| #endif | |||||
| finalColor = finalColor_geom[0]; | finalColor = finalColor_geom[0]; | ||||
| t = edge_dir * (float(lineThickness) * (is_persp ? gl_in[0].gl_Position.w : 1.0)); | 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); | gl_Position = gl_in[0].gl_Position + vec4(t, 0.0, 0.0); | ||||
| EmitVertex(); | EmitVertex(); | ||||
| gl_Position = gl_in[0].gl_Position - vec4(t, 0.0, 0.0); | gl_Position = gl_in[0].gl_Position - vec4(t, 0.0, 0.0); | ||||
| EmitVertex(); | EmitVertex(); | ||||
| #ifdef USE_WORLD_CLIP_PLANES | |||||
| world_clip_planes_set_clip_distance(gl_in[1].gl_ClipDistance); | |||||
| #endif | |||||
| finalColor = finalColor_geom[1]; | finalColor = finalColor_geom[1]; | ||||
| t = edge_dir * (float(lineThickness) * (is_persp ? gl_in[1].gl_Position.w : 1.0)); | 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); | gl_Position = gl_in[1].gl_Position + vec4(t, 0.0, 0.0); | ||||
| EmitVertex(); | EmitVertex(); | ||||
| gl_Position = gl_in[1].gl_Position - vec4(t, 0.0, 0.0); | gl_Position = gl_in[1].gl_Position - vec4(t, 0.0, 0.0); | ||||
| EmitVertex(); | EmitVertex(); | ||||
| EndPrimitive(); | EndPrimitive(); | ||||
| } | } | ||||