Emmanuel BENOîT
68d01ca42e
Shaders are no longer found under /shaders in the project; they can be anywhere. In addition, paths for both (program) instructions in the script and include directives in shader source code are relative to the file which contains them.
114 lines
1.5 KiB
GLSL
114 lines
1.5 KiB
GLSL
//! type library
|
|
|
|
|
|
const float PI = 3.1415926535;
|
|
const float TAU = 2 * PI;
|
|
const float PHI = sqrt( 5 ) * .5 + .5;
|
|
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
float M_Hash(
|
|
in vec2 p )
|
|
{
|
|
p = fract(p * vec2(5.3987, 5.4421));
|
|
p += dot(p.yx, p.xy + vec2(21.5351, 14.3137));
|
|
return fract(p.x * p.y * 95.4307);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
float M_Luminosity(
|
|
in vec3 color )
|
|
{
|
|
return dot( color , vec3( .299 , .587 , .114 ) );
|
|
}
|
|
|
|
vec3 M_NormalizeColor(
|
|
in vec3 color )
|
|
{
|
|
const float l = M_Luminosity( color );
|
|
return l > 0 ? ( color / l ) : vec3( 1 );
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
float M_Saturate(
|
|
in float x )
|
|
{
|
|
return clamp( x , 0. , 1. );
|
|
}
|
|
|
|
float M_LengthSqr(
|
|
in vec3 x )
|
|
{
|
|
return dot( x , x );
|
|
}
|
|
|
|
float M_Sqr(
|
|
in float x )
|
|
{
|
|
return x * x;
|
|
}
|
|
|
|
vec2 M_Sqr(
|
|
in vec2 x )
|
|
{
|
|
return x * x;
|
|
}
|
|
|
|
vec3 M_Sqr(
|
|
in vec3 x )
|
|
{
|
|
return x * x;
|
|
}
|
|
|
|
float M_Sign(
|
|
in float x )
|
|
{
|
|
return ( x < 0 ) ? -1 : 1;
|
|
}
|
|
|
|
vec2 M_Sign(
|
|
in vec2 v )
|
|
{
|
|
return vec2( M_Sign( v.x ) , M_Sign( v.y ) );
|
|
}
|
|
|
|
|
|
float M_VecMax(
|
|
in vec2 v )
|
|
{
|
|
return max( v.x , v.y );
|
|
}
|
|
|
|
float M_VecMax(
|
|
in vec3 v )
|
|
{
|
|
return max( M_VecMax( v.xy ) , v.z );
|
|
}
|
|
|
|
float M_VecMax(
|
|
in vec4 v )
|
|
{
|
|
return max( M_VecMax( v.xy ) , M_VecMax( v.zw ) );
|
|
}
|
|
|
|
|
|
float M_VecMin(
|
|
in vec2 v )
|
|
{
|
|
return min( v.x , v.y );
|
|
}
|
|
|
|
float M_VecMin(
|
|
in vec3 v )
|
|
{
|
|
return min( M_VecMin( v.xy ) , v.z );
|
|
}
|
|
|
|
float M_VecMin(
|
|
in vec4 v )
|
|
{
|
|
return min( M_VecMin( v.xy ) , M_VecMin( v.zw ) );
|
|
}
|