ProjectZombie/src/resources/shader/effectRenderer.fsh

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);
}