29 lines
802 B
GLSL
29 lines
802 B
GLSL
#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));
|
|
}
|
|
}
|