mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-16 08:08:28 +00:00
75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
function addVideoRecordingEffect(canvas) {
|
|
var viewWidth,
|
|
viewHeight,
|
|
canvas = document.getElementById("canvasVideoEffect"),
|
|
ctx;
|
|
// change these settings
|
|
var patternSize = 64,
|
|
patternScaleX = 3,
|
|
patternScaleY = 1,
|
|
patternRefreshInterval = 8,
|
|
patternAlpha = 25; // int between 0 and 255,
|
|
|
|
var patternPixelDataLength = patternSize * patternSize * 4,
|
|
patternCanvas,
|
|
patternCtx,
|
|
patternData,
|
|
frame = 0;
|
|
|
|
// create a canvas which will render the grain
|
|
function initCanvas() {
|
|
viewWidth = canvas.width = canvas.clientWidth;
|
|
viewHeight = canvas.height = canvas.clientHeight;
|
|
ctx = canvas.getContext('2d');
|
|
|
|
ctx.scale(patternScaleX, patternScaleY);
|
|
}
|
|
|
|
// create a canvas which will be used as a pattern
|
|
function initGrain() {
|
|
patternCanvas = document.createElement('canvas');
|
|
patternCanvas.width = patternSize;
|
|
patternCanvas.height = patternSize;
|
|
patternCtx = patternCanvas.getContext('2d');
|
|
patternData = patternCtx.createImageData(patternSize, patternSize);
|
|
}
|
|
|
|
// put a random shade of gray into every pixel of the pattern
|
|
function update() {
|
|
var value;
|
|
|
|
for (var i = 0; i < patternPixelDataLength; i += 1) {
|
|
value = (Math.random() * 155) | 0;
|
|
|
|
patternData.data[i ] = value;
|
|
patternData.data[i + 10] = value;
|
|
patternData.data[i + 15] = value;
|
|
patternData.data[i + 11] = patternAlpha;
|
|
}
|
|
|
|
patternCtx.putImageData(patternData, 0, 0);
|
|
}
|
|
|
|
// fill the canvas using the pattern
|
|
function draw() {
|
|
ctx.clearRect(0, 0, viewWidth, viewHeight);
|
|
|
|
ctx.fillStyle = ctx.createPattern(patternCanvas, 'repeat');
|
|
ctx.fillRect(0, 0, viewWidth, viewHeight);
|
|
}
|
|
|
|
function loop() {
|
|
if (++frame % patternRefreshInterval === 0) {
|
|
update();
|
|
draw();
|
|
}
|
|
|
|
requestAnimationFrame(loop);
|
|
}
|
|
|
|
|
|
|
|
initCanvas();
|
|
initGrain();
|
|
requestAnimationFrame(loop);
|
|
} |