Differential D16101 Diff 56896 source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_vert_no_geom.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/overlay/shaders/overlay_motion_path_line_vert_no_geom.glsl
| Show First 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | void main() | ||||
| * | * | ||||
| * Note: Primitive is LineStrip for this shader. */ | * Note: Primitive is LineStrip for this shader. */ | ||||
| int base_vertex_id = quad_id; | int base_vertex_id = quad_id; | ||||
| /* Fetch attributes for self and neighboring vertex. */ | /* Fetch attributes for self and neighboring vertex. */ | ||||
| vec3 in_pos0 = vertex_fetch_attribute(base_vertex_id, pos, vec3); | vec3 in_pos0 = vertex_fetch_attribute(base_vertex_id, pos, vec3); | ||||
| vec3 in_pos1 = vertex_fetch_attribute(base_vertex_id + 1, pos, vec3); | vec3 in_pos1 = vertex_fetch_attribute(base_vertex_id + 1, pos, vec3); | ||||
| vec4 out_pos0 = ProjectionMatrix * (ViewMatrix * vec4(in_pos0, 1.0)); | vec4 out_pos0 = drw_view.winmat * (drw_view.viewmat * vec4(in_pos0, 1.0)); | ||||
| vec4 out_pos1 = ProjectionMatrix * (ViewMatrix * vec4(in_pos1, 1.0)); | vec4 out_pos1 = drw_view.winmat * (drw_view.viewmat * vec4(in_pos1, 1.0)); | ||||
| /* Final calculations required for Geometry Shader alternative. | /* Final calculations required for Geometry Shader alternative. | ||||
| * We need to calculate values for each vertex position to correctly determine the final output | * We need to calculate values for each vertex position to correctly determine the final output | ||||
| * position. */ | * position. */ | ||||
| vec2 ssPos[2]; | vec2 ssPos[2]; | ||||
| vec4 finalColor_geom[2]; | vec4 finalColor_geom[2]; | ||||
| do_vertex_shader(out_pos0, base_vertex_id, ssPos[0], finalColor_geom[0]); | do_vertex_shader(out_pos0, base_vertex_id, ssPos[0], finalColor_geom[0]); | ||||
| do_vertex_shader(out_pos1, base_vertex_id + 1, ssPos[0], finalColor_geom[0]); | do_vertex_shader(out_pos1, base_vertex_id + 1, ssPos[0], finalColor_geom[0]); | ||||
| /* Geometry shader alternative -- Output is trianglelist consisting of 6 vertices. | /* Geometry shader alternative -- Output is trianglelist consisting of 6 vertices. | ||||
| * Each vertex shader invocation is one vertex in the output primitive, so outptut | * Each vertex shader invocation is one vertex in the output primitive, so outptut | ||||
| * required ID. */ | * required ID. */ | ||||
| vec2 t; | vec2 t; | ||||
| vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * sizeViewportInv; | vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * sizeViewportInv; | ||||
| bool is_persp = (ProjectionMatrix[3][3] == 0.0); | bool is_persp = (ProjectionMatrix[3][3] == 0.0); | ||||
| float line_size = float(lineThickness) * sizePixel; | float line_size = float(lineThickness) * sizePixel; | ||||
| if (quad_vertex_id == 0) { | if (quad_vertex_id == 0) { | ||||
| view_clipping_distances(out_pos0); | view_clipping_distances(out_pos0.xyz); | ||||
| interp.color = finalColor_geom[0]; | interp.color = finalColor_geom[0]; | ||||
| t = edge_dir * (line_size * (is_persp ? out_pos0.w : 1.0)); | t = edge_dir * (line_size * (is_persp ? out_pos0.w : 1.0)); | ||||
| gl_Position = out_pos0 + vec4(t, 0.0, 0.0); | gl_Position = out_pos0 + vec4(t, 0.0, 0.0); | ||||
| } | } | ||||
| else if (quad_vertex_id == 1 || quad_vertex_id == 3) { | else if (quad_vertex_id == 1 || quad_vertex_id == 3) { | ||||
| view_clipping_distances(out_pos0); | view_clipping_distances(out_pos0.xyz); | ||||
| interp.color = finalColor_geom[0]; | interp.color = finalColor_geom[0]; | ||||
| t = edge_dir * (line_size * (is_persp ? out_pos0.w : 1.0)); | t = edge_dir * (line_size * (is_persp ? out_pos0.w : 1.0)); | ||||
| gl_Position = out_pos0 - vec4(t, 0.0, 0.0); | gl_Position = out_pos0 - vec4(t, 0.0, 0.0); | ||||
| } | } | ||||
| else if (quad_vertex_id == 2 || quad_vertex_id == 5) { | else if (quad_vertex_id == 2 || quad_vertex_id == 5) { | ||||
| view_clipping_distances(out_pos1); | view_clipping_distances(out_pos1.xyz); | ||||
| interp.color = finalColor_geom[1]; | interp.color = finalColor_geom[1]; | ||||
| t = edge_dir * (line_size * (is_persp ? out_pos1.w : 1.0)); | t = edge_dir * (line_size * (is_persp ? out_pos1.w : 1.0)); | ||||
| gl_Position = out_pos1 + vec4(t, 0.0, 0.0); | gl_Position = out_pos1 + vec4(t, 0.0, 0.0); | ||||
| } | } | ||||
| else if (quad_vertex_id == 4) { | else if (quad_vertex_id == 4) { | ||||
| view_clipping_distances(out_pos1); | view_clipping_distances(out_pos1.xyz); | ||||
| interp.color = finalColor_geom[1]; | interp.color = finalColor_geom[1]; | ||||
| t = edge_dir * (line_size * (is_persp ? out_pos1.w : 1.0)); | t = edge_dir * (line_size * (is_persp ? out_pos1.w : 1.0)); | ||||
| gl_Position = out_pos1 - vec4(t, 0.0, 0.0); | gl_Position = out_pos1 - vec4(t, 0.0, 0.0); | ||||
| } | } | ||||
| } | } | ||||