43 lines
1.3 KiB
GLSL
43 lines
1.3 KiB
GLSL
// -----------------------------------------------------------------------------
|
|
// Copyright (c) 2009-2016 Nicolas P. Rougier. All rights reserved.
|
|
// Distributed under the (new) BSD License.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
/* ---------------------------------------------------------
|
|
Compute antialiased fragment color for a stroke line.
|
|
|
|
Parameters:
|
|
-----------
|
|
|
|
distance : signed distance to border (in pixels)
|
|
linewidth: Stroke line width (in pixels)
|
|
antialias: Stroke antialiased area (in pixels)
|
|
stroke: Stroke color
|
|
|
|
Return:
|
|
-------
|
|
Fragment color (vec4)
|
|
|
|
--------------------------------------------------------- */
|
|
|
|
vec4 stroke(float distance, float linewidth, float antialias, vec4 fg_color)
|
|
{
|
|
vec4 frag_color;
|
|
float t = linewidth/2.0 - antialias;
|
|
float signed_distance = distance;
|
|
float border_distance = abs(signed_distance) - t;
|
|
float alpha = border_distance/antialias;
|
|
alpha = exp(-alpha*alpha);
|
|
|
|
if( border_distance < 0.0 )
|
|
frag_color = fg_color;
|
|
else
|
|
frag_color = vec4(fg_color.rgb, fg_color.a * alpha);
|
|
|
|
return frag_color;
|
|
}
|
|
|
|
vec4 stroke(float distance, float linewidth, float antialias, vec4 fg_color, vec4 bg_color)
|
|
{
|
|
return stroke(distance, linewidth, antialias, fg_color);
|
|
} |