From 735fc1d62fffe930dde1ea5d27e3ee65e9625e1b Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Mon, 17 Jul 2017 09:33:05 -0400 Subject: [PATCH] Set canvas size from list of texSizes --- src/backend/web-gl/kernel.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/backend/web-gl/kernel.js b/src/backend/web-gl/kernel.js index 03fb4ef7..9f583c3f 100644 --- a/src/backend/web-gl/kernel.js +++ b/src/backend/web-gl/kernel.js @@ -7,7 +7,8 @@ const Texture = require('../../core/texture'); const fragShaderString = require('./shader-frag'); const vertShaderString = require('./shader-vert'); const kernelString = require('./kernel-string'); - +const canvases = []; +const canvasTexSizes = {}; module.exports = class WebGLKernel extends KernelBase { /** @@ -128,14 +129,28 @@ module.exports = class WebGLKernel extends KernelBase { const texSize = this.texSize; const gl = this._webGl; const canvas = this._canvas; - if (canvas.width < texSize[0]) { - canvas.width = texSize[0]; + let canvasIndex = canvases.indexOf(canvas); + if (canvasIndex === -1) { + canvasIndex = canvases.length; + canvases.push(canvas); + canvasTexSizes[canvasIndex] = []; } - if (canvas.height < texSize[1]) { - canvas.height = texSize[1]; + + const sizes = canvasTexSizes[canvasIndex]; + sizes.push(texSize); + const maxTexSize = [0, 0]; + for (let i = 0; i < sizes.length; i++) { + const size = sizes[i]; + if (maxTexSize[0] < size[0]) { + maxTexSize[0] = size[0]; + } + if (maxTexSize[1] < size[1]) { + maxTexSize[1] = size[1]; + } } + gl.enable(gl.SCISSOR_TEST); - gl.viewport(0, 0, canvas.width, canvas.height); + gl.viewport(0, 0, maxTexSize[0], maxTexSize[1]); const threadDim = this.threadDim = utils.clone(this.dimensions); while (threadDim.length < 3) { threadDim.push(1);