Ashflow/resources/circle_brush.glsl
2025-01-18 17:02:53 +01:00

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));
}
}