32 lines
1.1 KiB
GLSL
32 lines
1.1 KiB
GLSL
// Get a noise value which moves vertically in time.
|
|
vec2 uv = cogl_tex_coord_in[0].st * uSize / vec2(400, 600) / uScale;
|
|
uv.y += uTime * uMovementSpeed;
|
|
|
|
float noise = u3DNoise ? simplex3DFractal(vec3(uv * 4.0, uTime* uMovementSpeed * 1.5))
|
|
: simplex2DFractal(uv * 4.0);
|
|
|
|
// Modulate noise by effect mask.
|
|
vec2 effectMask = effectMask(HIDE_TIME, FADE_WIDTH, EDGE_FADE);
|
|
noise *= effectMask.y;
|
|
|
|
// Map noise value to color.
|
|
vec4 fire = getFireColor(noise);
|
|
|
|
// Get the window texture.
|
|
cogl_color_out = texture2D(uTexture, cogl_tex_coord_in[0].st);
|
|
|
|
// Shell.GLSLEffect uses straight alpha. So we have to convert from premultiplied.
|
|
if (cogl_color_out.a > 0) {
|
|
cogl_color_out.rgb /= cogl_color_out.a;
|
|
}
|
|
|
|
// Fade the window according to the effect mask.
|
|
cogl_color_out.a *= effectMask.x;
|
|
|
|
// Add the fire to the window.
|
|
cogl_color_out = alphaOver(cogl_color_out, fire);
|
|
|
|
// These are pretty useful for understanding how this works.
|
|
// cogl_color_out = vec4(vec3(noise), 1);
|
|
// cogl_color_out = vec4(vec3(effectMask.x), 1);
|
|
// cogl_color_out = vec4(vec3(effectMask.y), 1); |