#version 430 #extension GL_KHR_vulkan_glsl : enable layout(set = 0, binding = 0, rgba32f) uniform image2D texture0; uniform vec2 start; uniform vec2 stop; float distance_to_line(vec2 p1, vec2 p2, vec2 p3){ vec2 bvec = normalize(p2-p1); vec2 avec = p3-p1; float linear_projected = clamp(dot(avec, bvec), 0.0, distance(p1, p2)); vec2 projected = (linear_projected * bvec)+p1; return length(p3-projected); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; void main() { ivec2 texel = ivec2(gl_GlobalInvocationID.xy); float dist; if(distance(start, stop)<1){ dist = length(texel-stop); } else { dist = distance_to_line(start, stop, texel); } if(dist<16){ imageStore(texture0, texel, vec4(1.0, 0.0, 0.0, 1.0)); } }