46 lines
1 KiB
Text
46 lines
1 KiB
Text
|
#version 330 core
|
||
|
|
||
|
uniform sampler2D sampler;
|
||
|
|
||
|
uniform vec4 color1 = vec4(0, 1, 1, 1);
|
||
|
uniform vec4 color2 = vec4(0, 0, 1, 1);
|
||
|
uniform float time = 0, freq = 1;
|
||
|
uniform bool rgb = true, loop = false, textured = false;
|
||
|
|
||
|
in vec2 iTexCoords;
|
||
|
in float percent;
|
||
|
|
||
|
out vec4 color;
|
||
|
|
||
|
vec4 hsvToRgb(vec4 hsva);
|
||
|
|
||
|
void main() {
|
||
|
vec4 tcolor;
|
||
|
if(textured)
|
||
|
tcolor = texture(sampler, iTexCoords);
|
||
|
if(!textured || tcolor.xyz == vec3(1, 1, 1)) {
|
||
|
float finalPercent = mod((percent + time) * freq, 1);
|
||
|
if(loop) {
|
||
|
if(finalPercent > 0.5)
|
||
|
finalPercent = 1 - finalPercent;
|
||
|
finalPercent *= 2;
|
||
|
}
|
||
|
vec4 interpolated = color1 + (color2 - color1) * finalPercent;
|
||
|
if(rgb)
|
||
|
color = interpolated;
|
||
|
else
|
||
|
color = hsvToRgb(interpolated);
|
||
|
if(textured)
|
||
|
color.w = texture(sampler, iTexCoords).w;
|
||
|
}
|
||
|
else if(tcolor.w != 0)
|
||
|
color = tcolor;
|
||
|
else
|
||
|
discard;
|
||
|
}
|
||
|
|
||
|
vec4 hsvToRgb(vec4 c) {
|
||
|
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||
|
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
||
|
return vec4(c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y), c.w);
|
||
|
}
|