diff options
Diffstat (limited to 'source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl index eb64947999e..4497828fbd5 100644 --- a/source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl +++ b/source/blender/draw/engines/gpencil/shaders/gpencil_zdepth_mix_frag.glsl @@ -5,6 +5,8 @@ out vec4 FragColor; uniform sampler2D strokeColor; uniform sampler2D strokeDepth; uniform int tonemapping; +uniform vec4 select_color; +uniform int do_select; float srgb_to_linearrgb(float c) { @@ -26,6 +28,20 @@ float linearrgb_to_srgb(float c) } } +bool check_borders(ivec2 uv, int size) +{ + for (int x = -size; x <= size; x++) { + for (int y = -size; y <= size; y++) { + vec4 stroke_color = texelFetch(strokeColor, ivec2(uv.x + x, uv.y + y), 0).rgba; + if (stroke_color.a > 0) { + return true; + } + } + } + + return false; +} + void main() { ivec2 uv = ivec2(gl_FragCoord.xy); @@ -46,4 +62,13 @@ void main() FragColor = clamp(stroke_color, 0.0, 1.0); gl_FragDepth = clamp(stroke_depth, 0.0, 1.0); + + if (do_select == 1) { + if (stroke_color.a == 0) { + if (check_borders(uv, 1)) { + FragColor = select_color; + gl_FragDepth = 0.000001; + } + } + } } |