48 lines
1.2 KiB
GLSL
48 lines
1.2 KiB
GLSL
#version 330
|
|
|
|
in vec2 pPos;
|
|
out vec4 FragColor;
|
|
|
|
uniform float chill;
|
|
uniform float vortex;
|
|
uniform float vsnow;
|
|
uniform float red;
|
|
uniform int red_freq;
|
|
|
|
uniform int time;
|
|
|
|
float pi = 3.14159265358979323;
|
|
|
|
int xorshift(in int value) {
|
|
value ^= value << 13;
|
|
value ^= value >> 17;
|
|
value ^= value << 5;
|
|
return value;
|
|
}
|
|
|
|
float nextFloat(int seed) {
|
|
seed = xorshift(seed);
|
|
return mod(abs(fract(float(seed) / 3141.592653)), 1);
|
|
}
|
|
|
|
float smoothStep(float a) {
|
|
return a * a * (3 - 2 * a);
|
|
}
|
|
|
|
float squared(float a) {
|
|
return a * a;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
float distance = sqrt(pPos.x * pPos.x + pPos.y * pPos.y);
|
|
|
|
//float vsnow_v = nextFloat(xorshift(floatBitsToInt(pPos.x)) + xorshift(floatBitsToInt(pPos.y)) + xorshift(time)) * vsnow;
|
|
float red_v = distance * ((abs(time / red_freq) % 100) / 100.0) * red;
|
|
float vortex_v = (1 - distance) * squared(sin(distance * 10 + (time % 3141) / 100.0)) * vortex;
|
|
float chill_v = (distance - 1 + chill) * nextFloat(xorshift(floatBitsToInt(pPos.x)) + xorshift(floatBitsToInt(pPos.y)));
|
|
|
|
chill_v = (chill_v < 0.25 ? 0 : 1) * chill;
|
|
|
|
FragColor = vec4(red_v, 0, 0, red_v) + vec4(0, 0, 0, vortex_v) + vec4(chill_v, chill_v, chill_v, chill_v);
|
|
} |