in effects/seriously.tvglitch.js [177:220]
draw: function (shader, model, uniforms, frameBuffer, parent) {
var doParticles = (lastTime !== this.inputs.time),
vsyncPeriod;
if (lastHeight !== this.height) {
lastHeight = this.height;
doParticles = true;
}
//todo: make this configurable?
uniforms.lineHeight = 1 / this.height;
if (this.inputs.verticalSync) {
vsyncPeriod = 0.2 / this.inputs.verticalSync;
uniforms.vsync = vsyncPeriod;
} else {
vsyncPeriod = 1;
uniforms.vsync = 0;
}
uniforms.time = (this.inputs.time % (1000 * vsyncPeriod));
uniforms.distortion = Math.random() * this.inputs.distortion;
//render particle canvas and attach uniform
//todo: this is a good spot for parallel processing. ParallelArray maybe?
if (doParticles && (this.inputs.lineSync || this.inputs.bars)) {
particleShader.use();
gl.viewport(0, 0, 1, this.height / 2);
gl.bindFramebuffer(gl.FRAMEBUFFER, particleFrameBuffer.frameBuffer);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.enableVertexAttribArray(particleShader.location.particle);
gl.bindBuffer(gl.ARRAY_BUFFER, particleBuffer);
gl.vertexAttribPointer(particleShader.location.particle, particleBuffer.itemSize, gl.FLOAT, false, 0, 0);
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
particleShader.time.set(uniforms.time);
particleShader.height.set(this.height);
gl.drawArrays(gl.POINTS, 0, particleCount);
lastTime = this.inputs.time;
}
uniforms.particles = particleFrameBuffer.texture;
parent(shader, model, uniforms, frameBuffer);
},