in effects/seriously.tvglitch.js [36:100]
initialize: function (parent) {
var i,
sizeRange,
velocityRange,
particleVertex,
particleFragment,
particles;
gl = this.gl;
lastHeight = this.height;
//initialize particles
particles = [];
sizeRange = maxSize - minSize;
velocityRange = maxVelocity - minVelocity;
for (i = 0; i < particleCount; i++) {
particles.push(Math.random() * 2 - 1); //position
particles.push(Math.random() * velocityRange + minVelocity); //velocity
particles.push(Math.random() * sizeRange + minSize); //size
particles.push(Math.random() * 0.2); //intensity
}
particleBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, particleBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(particles), gl.STATIC_DRAW);
particleBuffer.itemSize = 4;
particleBuffer.numItems = particleCount;
particleVertex = [
'precision mediump float;',
'attribute vec4 particle;',
'uniform float time;',
'uniform float height;',
'varying float intensity;',
'void main(void) {',
' float y = particle.x + time * particle.y;',
' y = fract((y + 1.0) / 2.0) * 4.0 - 2.0;',
' intensity = particle.w;',
' gl_Position = vec4(0.0, -y , 1.0, 2.0);',
//' gl_Position = vec4(0.0, 1.0 , 1.0, 1.0);',
' gl_PointSize = height * particle.z;',
'}'
].join('\n');
particleFragment = [
'precision mediump float;',
'varying float intensity;',
'void main(void) {',
' gl_FragColor = vec4(1.0);',
' gl_FragColor.a = 2.0 * intensity * (1.0 - abs(gl_PointCoord.y - 0.5));',
'}'
].join('\n');
particleShader = new Seriously.util.ShaderProgram(gl, particleVertex, particleFragment);
particleFrameBuffer = new Seriously.util.FrameBuffer(gl, 1, Math.max(1, this.height / 2));
parent();
},