mirror of
https://github.com/Rezmason/matrix.git
synced 2026-04-22 23:59:31 -07:00
Adding intro and skipIntro option
This commit is contained in:
@@ -4,7 +4,7 @@ precision highp float;
|
||||
// It writes falling rain to the channels of a data texture:
|
||||
// R: raindrop brightness
|
||||
// G: whether the cell is a "cursor"
|
||||
// B: unused
|
||||
// B: whether the cell is "activated" — to animate the intro
|
||||
// A: unused
|
||||
|
||||
// Listen.
|
||||
@@ -16,15 +16,14 @@ precision highp float;
|
||||
#define SQRT_2 1.4142135623730951
|
||||
#define SQRT_5 2.23606797749979
|
||||
|
||||
uniform sampler2D previousShineState;
|
||||
uniform sampler2D previousRaindropState, introState;
|
||||
uniform float numColumns, numRows;
|
||||
uniform float time, tick;
|
||||
uniform float animationSpeed, fallSpeed;
|
||||
|
||||
uniform bool loops;
|
||||
uniform bool loops, skipIntro;
|
||||
uniform float brightnessDecay;
|
||||
uniform float baseContrast, baseBrightness;
|
||||
uniform float raindropLength, glyphHeightToWidth;
|
||||
uniform float raindropLength;
|
||||
|
||||
// Helper functions for generating randomness, borrowed from elsewhere
|
||||
|
||||
@@ -61,10 +60,17 @@ float getRainBrightness(float simTime, vec2 glyphPos) {
|
||||
|
||||
// Main function
|
||||
|
||||
vec4 computeResult(float simTime, bool isFirstFrame, vec2 glyphPos, vec2 screenPos, vec4 previous) {
|
||||
vec4 computeResult(float simTime, bool isFirstFrame, vec2 glyphPos, vec4 previous, vec4 intro) {
|
||||
float brightness = getRainBrightness(simTime, glyphPos);
|
||||
float brightnessBelow = getRainBrightness(simTime, glyphPos + vec2(0., -1.));
|
||||
float cursor = brightness > brightnessBelow ? 1.0 : 0.0;
|
||||
|
||||
float introProgress = intro.r - (1. - glyphPos.y / numRows);
|
||||
float introProgressBelow = intro.r - (1. - (glyphPos.y - 1.) / numRows);
|
||||
|
||||
bool activated = bool(previous.b) || skipIntro || introProgress > 0.;
|
||||
bool activatedBelow = skipIntro || introProgressBelow > 0.;
|
||||
|
||||
bool cursor = brightness > brightnessBelow || (activated && !activatedBelow);
|
||||
|
||||
// Blend the glyph's brightness with its previous brightness, so it winks on and off organically
|
||||
if (!isFirstFrame) {
|
||||
@@ -72,7 +78,7 @@ vec4 computeResult(float simTime, bool isFirstFrame, vec2 glyphPos, vec2 screenP
|
||||
brightness = mix(previousBrightness, brightness, brightnessDecay);
|
||||
}
|
||||
|
||||
vec4 result = vec4(brightness, cursor, 0.0, 0.0);
|
||||
vec4 result = vec4(brightness, cursor, activated, introProgress);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -81,6 +87,7 @@ void main() {
|
||||
bool isFirstFrame = tick <= 1.;
|
||||
vec2 glyphPos = gl_FragCoord.xy;
|
||||
vec2 screenPos = glyphPos / vec2(numColumns, numRows);
|
||||
vec4 previous = texture2D( previousShineState, screenPos );
|
||||
gl_FragColor = computeResult(simTime, isFirstFrame, glyphPos, screenPos, previous);
|
||||
vec4 previous = texture2D( previousRaindropState, screenPos );
|
||||
vec4 intro = texture2D( introState, vec2(screenPos.x, 0.) );
|
||||
gl_FragColor = computeResult(simTime, isFirstFrame, glyphPos, previous, intro);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user