Options
All
  • Public
  • Public/Protected
  • All
Menu

External module "sintium/Modules/Layer/Constants/AnimatedUpdateShaderText"

Index

Variables

Const fragmentShaderText

fragmentShaderText: "precision highp float;uniform float random;uniform float deltaTime;uniform vec2 dataResolution;uniform vec2 range;uniform vec2 v0;uniform vec2 v1;uniform vec2 v2;uniform sampler2D vectors;uniform sampler2D particles;varying vec2 pos;const float RADIUS = 6378137.0;const float PI = 3.1415926535897932384626433832795;const float HALF_SIZE = PI * RADIUS;const float DROP_RATE = 0.005;// bilinear interpolation - texture2d(vectors, pctPos) can be used instead for increased performancevec2 lookup_vector(const vec2 uv) {vec2 px = 1.0 / vec2(dataResolution.x, dataResolution.y);vec2 vc = (floor(uv * vec2(dataResolution.x, dataResolution.y))) * px;vec2 f = fract(uv * vec2(dataResolution.x, dataResolution.y));vec2 tl = texture2D(vectors, vc).rg;vec2 tr = texture2D(vectors, vc + vec2(px.x, 0)).rg;vec2 bl = texture2D(vectors, vc + vec2(0, px.y)).rg;vec2 br = texture2D(vectors, vc + px).rg;return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);}// pseudo-random generatorconst vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);float rand(const vec2 co) {float t = dot(rand_constants.xy, co);return fract(sin(t) * (rand_constants.z + t));}vec2 getRandomPos(const vec2 seed) {return vec2(rand(seed + 1.3),rand(seed + 2.1));}vec2 keepPosOrRandom(const vec2 pos, const vec2 seed) {float should_drop = step(1.0 - DROP_RATE, rand(seed));vec2 random_pos = getRandomPos(seed);return mix(pos, random_pos, should_drop);}void main(void) {vec4 color = texture2D(particles, pos);vec2 pctPos = vec2(color.r / 255.0 + color.b,color.g / 255.0 + color.a);// Move to new position if no data for current positionif (texture2D(vectors, pctPos).a < 1.0) {vec2 pos = getRandomPos(pctPos * random);gl_FragColor = vec4(fract(pos * 255.0),floor(pos * 255.0) / 255.0);return;}vec2 particlePos = vec2((v1-v0) * pctPos.x + (v2-v0) * pctPos.y);vec2 vectorColor = lookup_vector(pctPos);float speedFactor = 3600.0 * (deltaTime / 10.0);float uDelta = mix(range.x, range.y, vectorColor.r) * speedFactor;float vDelta = mix(range.x, range.y, vectorColor.g) * speedFactor;vec2 newPos = vec2(particlePos.x + uDelta,particlePos.y + vDelta);// Convert to fraction of data extentnewPos = fract(1.0 + vec2(newPos.x / distance(v0, v1),newPos.y / distance(v0, v2)));// Decide if time to drop particle or notvec2 seed = (newPos + pos) * random;newPos = keepPosOrRandom(newPos, seed);gl_FragColor = vec4(fract(newPos * 255.0),floor(newPos * 255.0) / 255.0);}" = `precision highp float;uniform float random;uniform float deltaTime;uniform vec2 dataResolution;uniform vec2 range;uniform vec2 v0;uniform vec2 v1;uniform vec2 v2;uniform sampler2D vectors;uniform sampler2D particles;varying vec2 pos;const float RADIUS = 6378137.0;const float PI = 3.1415926535897932384626433832795;const float HALF_SIZE = PI * RADIUS;const float DROP_RATE = 0.005;// bilinear interpolation - texture2d(vectors, pctPos) can be used instead for increased performancevec2 lookup_vector(const vec2 uv) {vec2 px = 1.0 / vec2(dataResolution.x, dataResolution.y);vec2 vc = (floor(uv * vec2(dataResolution.x, dataResolution.y))) * px;vec2 f = fract(uv * vec2(dataResolution.x, dataResolution.y));vec2 tl = texture2D(vectors, vc).rg;vec2 tr = texture2D(vectors, vc + vec2(px.x, 0)).rg;vec2 bl = texture2D(vectors, vc + vec2(0, px.y)).rg;vec2 br = texture2D(vectors, vc + px).rg;return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);}// pseudo-random generatorconst vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);float rand(const vec2 co) {float t = dot(rand_constants.xy, co);return fract(sin(t) * (rand_constants.z + t));}vec2 getRandomPos(const vec2 seed) {return vec2(rand(seed + 1.3),rand(seed + 2.1));}vec2 keepPosOrRandom(const vec2 pos, const vec2 seed) {float should_drop = step(1.0 - DROP_RATE, rand(seed));vec2 random_pos = getRandomPos(seed);return mix(pos, random_pos, should_drop);}void main(void) {vec4 color = texture2D(particles, pos);vec2 pctPos = vec2(color.r / 255.0 + color.b,color.g / 255.0 + color.a);// Move to new position if no data for current positionif (texture2D(vectors, pctPos).a < 1.0) {vec2 pos = getRandomPos(pctPos * random);gl_FragColor = vec4(fract(pos * 255.0),floor(pos * 255.0) / 255.0);return;}vec2 particlePos = vec2((v1-v0) * pctPos.x + (v2-v0) * pctPos.y);vec2 vectorColor = lookup_vector(pctPos);float speedFactor = 3600.0 * (deltaTime / 10.0);float uDelta = mix(range.x, range.y, vectorColor.r) * speedFactor;float vDelta = mix(range.x, range.y, vectorColor.g) * speedFactor;vec2 newPos = vec2(particlePos.x + uDelta,particlePos.y + vDelta);// Convert to fraction of data extentnewPos = fract(1.0 + vec2(newPos.x / distance(v0, v1),newPos.y / distance(v0, v2)));// Decide if time to drop particle or notvec2 seed = (newPos + pos) * random;newPos = keepPosOrRandom(newPos, seed);gl_FragColor = vec4(fract(newPos * 255.0),floor(newPos * 255.0) / 255.0);}`

Const vertexShaderText

vertexShaderText: "precision highp float;attribute vec2 readPos;attribute vec2 writePos;varying vec2 pos;void main(void) {pos = readPos;gl_Position = vec4(writePos,0.0, 1.0);}" = `precision highp float;attribute vec2 readPos;attribute vec2 writePos;varying vec2 pos;void main(void) {pos = readPos;gl_Position = vec4(writePos,0.0, 1.0);}`

Generated using TypeDoc