UNPKG

@amilajack/gaussian-blur

Version:

optimized 9-tap gaussian blur for GLSL

1,673 lines 210 kB
!(function(r) { var t = {}; function e(n) { if (t[n]) return t[n].exports; var i = (t[n] = { i: n, l: !1, exports: {} }); return r[n].call(i.exports, i, i.exports, e), (i.l = !0), i.exports; } (e.m = r), (e.c = t), (e.d = function(r, t, n) { e.o(r, t) || Object.defineProperty(r, t, { enumerable: !0, get: n }); }), (e.r = function(r) { 'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(r, Symbol.toStringTag, { value: 'Module' }), Object.defineProperty(r, '__esModule', { value: !0 }); }), (e.t = function(r, t) { if ((1 & t && (r = e(r)), 8 & t)) return r; if (4 & t && 'object' == typeof r && r && r.__esModule) return r; var n = Object.create(null); if ( (e.r(n), Object.defineProperty(n, 'default', { enumerable: !0, value: r }), 2 & t && 'string' != typeof r) ) for (var i in r) e.d( n, i, function(t) { return r[t]; }.bind(null, i) ); return n; }), (e.n = function(r) { var t = r && r.__esModule ? function() { return r.default; } : function() { return r; }; return e.d(t, 'a', t), t; }), (e.o = function(r, t) { return Object.prototype.hasOwnProperty.call(r, t); }), (e.p = ''), e((e.s = 17)); })([ function(r, t) { function e(r, t, e) { (this.shortMessage = t || ''), (this.longMessage = e || ''), (this.rawError = r || ''), (this.message = 'gl-shader: ' + (t || r || '') + (e ? '\n' + e : '')), (this.stack = new Error().stack); } (e.prototype = new Error()), (e.prototype.name = 'GLError'), (e.prototype.constructor = e), (r.exports = e); }, function(r, t, e) { 'use strict'; var n = e(7), i = e(6), a = e(4); r.exports = function(r) { if (arguments.length <= 1) throw new Error( 'gl-texture2d: Missing arguments for texture2d constructor' ); o || (function(r) { (o = [ r.LINEAR, r.NEAREST_MIPMAP_LINEAR, r.LINEAR_MIPMAP_NEAREST, r.LINEAR_MIPMAP_NEAREST ]), (s = [ r.NEAREST, r.LINEAR, r.NEAREST_MIPMAP_NEAREST, r.NEAREST_MIPMAP_LINEAR, r.LINEAR_MIPMAP_NEAREST, r.LINEAR_MIPMAP_LINEAR ]), (u = [r.REPEAT, r.CLAMP_TO_EDGE, r.MIRRORED_REPEAT]); })(r); if ('number' == typeof arguments[1]) return E( r, arguments[1], arguments[2], arguments[3] || r.RGBA, arguments[4] || r.UNSIGNED_BYTE ); if (Array.isArray(arguments[1])) return E( r, 0 | arguments[1][0], 0 | arguments[1][1], arguments[2] || r.RGBA, arguments[3] || r.UNSIGNED_BYTE ); if ('object' == typeof arguments[1]) { var t = arguments[1], e = f(t) ? t : t.raw; if (e) return (function(r, t, e, n, i, a) { var o = g(r); return ( r.texImage2D(r.TEXTURE_2D, 0, i, i, a, t), new c(r, o, e, n, i, a) ); })( r, e, 0 | t.width, 0 | t.height, arguments[2] || r.RGBA, arguments[3] || r.UNSIGNED_BYTE ); if (t.shape && t.data && t.stride) return (function(r, t) { var e = t.dtype, o = t.shape.slice(), s = r.getParameter(r.MAX_TEXTURE_SIZE); if (o[0] < 0 || o[0] > s || o[1] < 0 || o[1] > s) throw new Error('gl-texture2d: Invalid texture size'); var u = _(o, t.stride.slice()), f = 0; 'float32' === e ? (f = r.FLOAT) : 'float64' === e ? ((f = r.FLOAT), (u = !1), (e = 'float32')) : 'uint8' === e ? (f = r.UNSIGNED_BYTE) : ((f = r.UNSIGNED_BYTE), (u = !1), (e = 'uint8')); var h, p, E = 0; if (2 === o.length) (E = r.LUMINANCE), (o = [o[0], o[1], 1]), (t = n(t.data, o, [t.stride[0], t.stride[1], 1], t.offset)); else { if (3 !== o.length) throw new Error('gl-texture2d: Invalid shape for texture'); if (1 === o[2]) E = r.ALPHA; else if (2 === o[2]) E = r.LUMINANCE_ALPHA; else if (3 === o[2]) E = r.RGB; else { if (4 !== o[2]) throw new Error( 'gl-texture2d: Invalid shape for pixel coords' ); E = r.RGBA; } } f !== r.FLOAT || r.getExtension('OES_texture_float') || ((f = r.UNSIGNED_BYTE), (u = !1)); var d = t.size; if (u) h = 0 === t.offset && t.data.length === d ? t.data : t.data.subarray(t.offset, t.offset + d); else { var y = [o[2], o[2] * o[0], 1]; p = a.malloc(d, e); var T = n(p, o, y, 0); ('float32' !== e && 'float64' !== e) || f !== r.UNSIGNED_BYTE ? i.assign(T, t) : l(T, t), (h = p.subarray(0, d)); } var A = g(r); r.texImage2D(r.TEXTURE_2D, 0, E, o[0], o[1], 0, E, f, h), u || a.free(p); return new c(r, A, o[0], o[1], E, f); })(r, t); } throw new Error( 'gl-texture2d: Invalid arguments for texture2d constructor' ); }; var o = null, s = null, u = null; function f(r) { return ( ('undefined' != typeof HTMLCanvasElement && r instanceof HTMLCanvasElement) || ('undefined' != typeof HTMLImageElement && r instanceof HTMLImageElement) || ('undefined' != typeof HTMLVideoElement && r instanceof HTMLVideoElement) || ('undefined' != typeof ImageData && r instanceof ImageData) ); } var l = function(r, t) { i.muls(r, t, 255); }; function h(r, t, e) { var n = r.gl, i = n.getParameter(n.MAX_TEXTURE_SIZE); if (t < 0 || t > i || e < 0 || e > i) throw new Error('gl-texture2d: Invalid texture size'); return ( (r._shape = [t, e]), r.bind(), n.texImage2D( n.TEXTURE_2D, 0, r.format, t, e, 0, r.format, r.type, null ), (r._mipLevels = [0]), r ); } function c(r, t, e, n, i, a) { (this.gl = r), (this.handle = t), (this.format = i), (this.type = a), (this._shape = [e, n]), (this._mipLevels = [0]), (this._magFilter = r.NEAREST), (this._minFilter = r.NEAREST), (this._wrapS = r.CLAMP_TO_EDGE), (this._wrapT = r.CLAMP_TO_EDGE), (this._anisoSamples = 1); var o = this, s = [this._wrapS, this._wrapT]; Object.defineProperties(s, [ { get: function() { return o._wrapS; }, set: function(r) { return (o.wrapS = r); } }, { get: function() { return o._wrapT; }, set: function(r) { return (o.wrapT = r); } } ]), (this._wrapVector = s); var u = [this._shape[0], this._shape[1]]; Object.defineProperties(u, [ { get: function() { return o._shape[0]; }, set: function(r) { return (o.width = r); } }, { get: function() { return o._shape[1]; }, set: function(r) { return (o.height = r); } } ]), (this._shapeVector = u); } var p = c.prototype; function _(r, t) { return 3 === r.length ? 1 === t[2] && t[1] === r[0] * r[2] && t[0] === r[2] : 1 === t[0] && t[1] === r[0]; } function g(r) { var t = r.createTexture(); return ( r.bindTexture(r.TEXTURE_2D, t), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER, r.NEAREST), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MAG_FILTER, r.NEAREST), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE), t ); } function E(r, t, e, n, i) { var a = r.getParameter(r.MAX_TEXTURE_SIZE); if (t < 0 || t > a || e < 0 || e > a) throw new Error('gl-texture2d: Invalid texture shape'); if (i === r.FLOAT && !r.getExtension('OES_texture_float')) throw new Error( 'gl-texture2d: Floating point textures not supported on this platform' ); var o = g(r); return ( r.texImage2D(r.TEXTURE_2D, 0, n, t, e, 0, n, i, null), new c(r, o, t, e, n, i) ); } Object.defineProperties(p, { minFilter: { get: function() { return this._minFilter; }, set: function(r) { this.bind(); var t = this.gl; if ( (this.type === t.FLOAT && o.indexOf(r) >= 0 && (t.getExtension('OES_texture_float_linear') || (r = t.NEAREST)), s.indexOf(r) < 0) ) throw new Error('gl-texture2d: Unknown filter mode ' + r); return ( t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, r), (this._minFilter = r) ); } }, magFilter: { get: function() { return this._magFilter; }, set: function(r) { this.bind(); var t = this.gl; if ( (this.type === t.FLOAT && o.indexOf(r) >= 0 && (t.getExtension('OES_texture_float_linear') || (r = t.NEAREST)), s.indexOf(r) < 0) ) throw new Error('gl-texture2d: Unknown filter mode ' + r); return ( t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, r), (this._magFilter = r) ); } }, mipSamples: { get: function() { return this._anisoSamples; }, set: function(r) { var t = this._anisoSamples; if ( ((this._anisoSamples = 0 | Math.max(r, 1)), t !== this._anisoSamples) ) { var e = this.gl.getExtension('EXT_texture_filter_anisotropic'); e && this.gl.texParameterf( this.gl.TEXTURE_2D, e.TEXTURE_MAX_ANISOTROPY_EXT, this._anisoSamples ); } return this._anisoSamples; } }, wrapS: { get: function() { return this._wrapS; }, set: function(r) { if ((this.bind(), u.indexOf(r) < 0)) throw new Error('gl-texture2d: Unknown wrap mode ' + r); return ( this.gl.texParameteri( this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, r ), (this._wrapS = r) ); } }, wrapT: { get: function() { return this._wrapT; }, set: function(r) { if ((this.bind(), u.indexOf(r) < 0)) throw new Error('gl-texture2d: Unknown wrap mode ' + r); return ( this.gl.texParameteri( this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, r ), (this._wrapT = r) ); } }, wrap: { get: function() { return this._wrapVector; }, set: function(r) { if ((Array.isArray(r) || (r = [r, r]), 2 !== r.length)) throw new Error( 'gl-texture2d: Must specify wrap mode for rows and columns' ); for (var t = 0; t < 2; ++t) if (u.indexOf(r[t]) < 0) throw new Error('gl-texture2d: Unknown wrap mode ' + r); (this._wrapS = r[0]), (this._wrapT = r[1]); var e = this.gl; return ( this.bind(), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, this._wrapS), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, this._wrapT), r ); } }, shape: { get: function() { return this._shapeVector; }, set: function(r) { if (Array.isArray(r)) { if (2 !== r.length) throw new Error('gl-texture2d: Invalid texture shape'); } else r = [0 | r, 0 | r]; return h(this, 0 | r[0], 0 | r[1]), [0 | r[0], 0 | r[1]]; } }, width: { get: function() { return this._shape[0]; }, set: function(r) { return h(this, (r |= 0), this._shape[1]), r; } }, height: { get: function() { return this._shape[1]; }, set: function(r) { return (r |= 0), h(this, this._shape[0], r), r; } } }), (p.bind = function(r) { var t = this.gl; return ( void 0 !== r && t.activeTexture(t.TEXTURE0 + (0 | r)), t.bindTexture(t.TEXTURE_2D, this.handle), void 0 !== r ? 0 | r : t.getParameter(t.ACTIVE_TEXTURE) - t.TEXTURE0 ); }), (p.dispose = function() { this.gl.deleteTexture(this.handle); }), (p.generateMipmap = function() { this.bind(), this.gl.generateMipmap(this.gl.TEXTURE_2D); for ( var r = Math.min(this._shape[0], this._shape[1]), t = 0; r > 0; ++t, r >>>= 1 ) this._mipLevels.indexOf(t) < 0 && this._mipLevels.push(t); }), (p.setPixels = function(r, t, e, o) { var s = this.gl; this.bind(), Array.isArray(t) ? ((o = e), (e = 0 | t[1]), (t = 0 | t[0])) : ((t = t || 0), (e = e || 0)), (o = o || 0); var u = f(r) ? r : r.raw; if (u) { this._mipLevels.indexOf(o) < 0 ? (s.texImage2D( s.TEXTURE_2D, 0, this.format, this.format, this.type, u ), this._mipLevels.push(o)) : s.texSubImage2D(s.TEXTURE_2D, o, t, e, this.format, this.type, u); } else { if (!(r.shape && r.stride && r.data)) throw new Error('gl-texture2d: Unsupported data type'); if ( r.shape.length < 2 || t + r.shape[1] > this._shape[1] >>> o || e + r.shape[0] > this._shape[0] >>> o || t < 0 || e < 0 ) throw new Error( 'gl-texture2d: Texture dimensions are out of bounds' ); !(function(r, t, e, o, s, u, f, h) { var c = h.dtype, p = h.shape.slice(); if (p.length < 2 || p.length > 3) throw new Error( 'gl-texture2d: Invalid ndarray, must be 2d or 3d' ); var g = 0, E = 0, d = _(p, h.stride.slice()); 'float32' === c ? (g = r.FLOAT) : 'float64' === c ? ((g = r.FLOAT), (d = !1), (c = 'float32')) : 'uint8' === c ? (g = r.UNSIGNED_BYTE) : ((g = r.UNSIGNED_BYTE), (d = !1), (c = 'uint8')); if (2 === p.length) (E = r.LUMINANCE), (p = [p[0], p[1], 1]), (h = n(h.data, p, [h.stride[0], h.stride[1], 1], h.offset)); else { if (3 !== p.length) throw new Error('gl-texture2d: Invalid shape for texture'); if (1 === p[2]) E = r.ALPHA; else if (2 === p[2]) E = r.LUMINANCE_ALPHA; else if (3 === p[2]) E = r.RGB; else { if (4 !== p[2]) throw new Error( 'gl-texture2d: Invalid shape for pixel coords' ); E = r.RGBA; } p[2]; } (E !== r.LUMINANCE && E !== r.ALPHA) || (s !== r.LUMINANCE && s !== r.ALPHA) || (E = s); if (E !== s) throw new Error( 'gl-texture2d: Incompatible texture format for setPixels' ); var y = h.size, T = f.indexOf(o) < 0; T && f.push(o); if (g === u && d) 0 === h.offset && h.data.length === y ? T ? r.texImage2D( r.TEXTURE_2D, o, s, p[0], p[1], 0, s, u, h.data ) : r.texSubImage2D( r.TEXTURE_2D, o, t, e, p[0], p[1], s, u, h.data ) : T ? r.texImage2D( r.TEXTURE_2D, o, s, p[0], p[1], 0, s, u, h.data.subarray(h.offset, h.offset + y) ) : r.texSubImage2D( r.TEXTURE_2D, o, t, e, p[0], p[1], s, u, h.data.subarray(h.offset, h.offset + y) ); else { var A; A = u === r.FLOAT ? a.mallocFloat32(y) : a.mallocUint8(y); var b = n(A, p, [p[2], p[2] * p[0], 1]); g === r.FLOAT && u === r.UNSIGNED_BYTE ? l(b, h) : i.assign(b, h), T ? r.texImage2D( r.TEXTURE_2D, o, s, p[0], p[1], 0, s, u, A.subarray(0, y) ) : r.texSubImage2D( r.TEXTURE_2D, o, t, e, p[0], p[1], s, u, A.subarray(0, y) ), u === r.FLOAT ? a.freeFloat32(A) : a.freeUint8(A); } })(s, t, e, o, this.format, this.type, this._mipLevels, r); } }); }, function(r, t, e) { 'use strict'; var n = 'undefined' == typeof WeakMap ? e(18) : WeakMap, i = e(19), a = e(32), o = new n(); r.exports = function(r) { var t = o.get(r), e = t && (t._triangleBuffer.handle || t._triangleBuffer.buffer); if (!e || !r.isBuffer(e)) { var n = i(r, new Float32Array([-1, -1, -1, 4, 4, -1])); ((t = a(r, [ { buffer: n, type: r.FLOAT, size: 2 } ]))._triangleBuffer = n), o.set(r, t); } t.bind(), r.drawArrays(r.TRIANGLES, 0, 3), t.unbind(); }; }, function(r, t, e) { 'use strict'; var n = e(1); r.exports = function(r, t, e, n) { i || ((i = r.FRAMEBUFFER_UNSUPPORTED), (a = r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT), (o = r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS), (s = r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)); var f = r.getExtension('WEBGL_draw_buffers'); !u && f && (function(r, t) { var e = r.getParameter(t.MAX_COLOR_ATTACHMENTS_WEBGL); u = new Array(e + 1); for (var n = 0; n <= e; ++n) { for (var i = new Array(e), a = 0; a < n; ++a) i[a] = r.COLOR_ATTACHMENT0 + a; for (var a = n; a < e; ++a) i[a] = r.NONE; u[n] = i; } })(r, f); Array.isArray(t) && ((n = e), (e = 0 | t[1]), (t = 0 | t[0])); if ('number' != typeof t) throw new Error('gl-fbo: Missing shape parameter'); var l = r.getParameter(r.MAX_RENDERBUFFER_SIZE); if (t < 0 || t > l || e < 0 || e > l) throw new Error('gl-fbo: Parameters are too large for FBO'); var h = 1; if ('color' in (n = n || {})) { if ((h = Math.max(0 | n.color, 0)) < 0) throw new Error( 'gl-fbo: Must specify a nonnegative number of colors' ); if (h > 1) { if (!f) throw new Error( 'gl-fbo: Multiple draw buffer extension not supported' ); if (h > r.getParameter(f.MAX_COLOR_ATTACHMENTS_WEBGL)) throw new Error( 'gl-fbo: Context does not support ' + h + ' draw buffers' ); } } var c = r.UNSIGNED_BYTE, p = r.getExtension('OES_texture_float'); if (n.float && h > 0) { if (!p) throw new Error( 'gl-fbo: Context does not support floating point textures' ); c = r.FLOAT; } else n.preferFloat && h > 0 && p && (c = r.FLOAT); var g = !0; 'depth' in n && (g = !!n.depth); var E = !1; 'stencil' in n && (E = !!n.stencil); return new _(r, t, e, c, h, g, E, f); }; var i, a, o, s, u = null; function f(r) { return [ r.getParameter(r.FRAMEBUFFER_BINDING), r.getParameter(r.RENDERBUFFER_BINDING), r.getParameter(r.TEXTURE_BINDING_2D) ]; } function l(r, t) { r.bindFramebuffer(r.FRAMEBUFFER, t[0]), r.bindRenderbuffer(r.RENDERBUFFER, t[1]), r.bindTexture(r.TEXTURE_2D, t[2]); } function h(r) { switch (r) { case i: throw new Error('gl-fbo: Framebuffer unsupported'); case a: throw new Error('gl-fbo: Framebuffer incomplete attachment'); case o: throw new Error('gl-fbo: Framebuffer incomplete dimensions'); case s: throw new Error('gl-fbo: Framebuffer incomplete missing attachment'); default: throw new Error('gl-fbo: Framebuffer failed for unspecified reason'); } } function c(r, t, e, i, a, o) { if (!i) return null; var s = n(r, t, e, a, i); return ( (s.magFilter = r.NEAREST), (s.minFilter = r.NEAREST), (s.mipSamples = 1), s.bind(), r.framebufferTexture2D(r.FRAMEBUFFER, o, r.TEXTURE_2D, s.handle, 0), s ); } function p(r, t, e, n, i) { var a = r.createRenderbuffer(); return ( r.bindRenderbuffer(r.RENDERBUFFER, a), r.renderbufferStorage(r.RENDERBUFFER, n, t, e), r.framebufferRenderbuffer(r.FRAMEBUFFER, i, r.RENDERBUFFER, a), a ); } function _(r, t, e, n, i, a, o, s) { (this.gl = r), (this._shape = [0 | t, 0 | e]), (this._destroyed = !1), (this._ext = s), (this.color = new Array(i)); for (var _ = 0; _ < i; ++_) this.color[_] = null; (this._color_rb = null), (this.depth = null), (this._depth_rb = null), (this._colorType = n), (this._useDepth = a), (this._useStencil = o); var g = this, E = [0 | t, 0 | e]; Object.defineProperties(E, { 0: { get: function() { return g._shape[0]; }, set: function(r) { return (g.width = r); } }, 1: { get: function() { return g._shape[1]; }, set: function(r) { return (g.height = r); } } }), (this._shapeVector = E), (function(r) { var t = f(r.gl), e = r.gl, n = (r.handle = e.createFramebuffer()), i = r._shape[0], a = r._shape[1], o = r.color.length, s = r._ext, _ = r._useStencil, g = r._useDepth, E = r._colorType; e.bindFramebuffer(e.FRAMEBUFFER, n); for (var d = 0; d < o; ++d) r.color[d] = c(e, i, a, E, e.RGBA, e.COLOR_ATTACHMENT0 + d); 0 === o ? ((r._color_rb = p(e, i, a, e.RGBA4, e.COLOR_ATTACHMENT0)), s && s.drawBuffersWEBGL(u[0])) : o > 1 && s.drawBuffersWEBGL(u[o]); var y = e.getExtension('WEBGL_depth_texture'); y ? _ ? (r.depth = c( e, i, a, y.UNSIGNED_INT_24_8_WEBGL, e.DEPTH_STENCIL, e.DEPTH_STENCIL_ATTACHMENT )) : g && (r.depth = c( e, i, a, e.UNSIGNED_SHORT, e.DEPTH_COMPONENT, e.DEPTH_ATTACHMENT )) : g && _ ? (r._depth_rb = p( e, i, a, e.DEPTH_STENCIL, e.DEPTH_STENCIL_ATTACHMENT )) : g ? (r._depth_rb = p( e, i, a, e.DEPTH_COMPONENT16, e.DEPTH_ATTACHMENT )) : _ && (r._depth_rb = p( e, i, a, e.STENCIL_INDEX, e.STENCIL_ATTACHMENT )); var T = e.checkFramebufferStatus(e.FRAMEBUFFER); if (T !== e.FRAMEBUFFER_COMPLETE) { for ( r._destroyed = !0, e.bindFramebuffer(e.FRAMEBUFFER, null), e.deleteFramebuffer(r.handle), r.handle = null, r.depth && (r.depth.dispose(), (r.depth = null)), r._depth_rb && (e.deleteRenderbuffer(r._depth_rb), (r._depth_rb = null)), d = 0; d < r.color.length; ++d ) r.color[d].dispose(), (r.color[d] = null); r._color_rb && (e.deleteRenderbuffer(r._color_rb), (r._color_rb = null)), l(e, t), h(T); } l(e, t); })(this); } var g = _.prototype; function E(r, t, e) { if (r._destroyed) throw new Error("gl-fbo: Can't resize destroyed FBO"); if (r._shape[0] !== t || r._shape[1] !== e) { var n = r.gl, i = n.getParameter(n.MAX_RENDERBUFFER_SIZE); if (t < 0 || t > i || e < 0 || e > i) throw new Error("gl-fbo: Can't resize FBO, invalid dimensions"); (r._shape[0] = t), (r._shape[1] = e); for (var a = f(n), o = 0; o < r.color.length; ++o) r.color[o].shape = r._shape; r._color_rb && (n.bindRenderbuffer(n.RENDERBUFFER, r._color_rb), n.renderbufferStorage( n.RENDERBUFFER, n.RGBA4, r._shape[0], r._shape[1] )), r.depth && (r.depth.shape = r._shape), r._depth_rb && (n.bindRenderbuffer(n.RENDERBUFFER, r._depth_rb), r._useDepth && r._useStencil ? n.renderbufferStorage( n.RENDERBUFFER, n.DEPTH_STENCIL, r._shape[0], r._shape[1] ) : r._useDepth ? n.renderbufferStorage( n.RENDERBUFFER, n.DEPTH_COMPONENT16, r._shape[0], r._shape[1] ) : r._useStencil && n.renderbufferStorage( n.RENDERBUFFER, n.STENCIL_INDEX, r._shape[0], r._shape[1] )), n.bindFramebuffer(n.FRAMEBUFFER, r.handle); var s = n.checkFramebufferStatus(n.FRAMEBUFFER); s !== n.FRAMEBUFFER_COMPLETE && (r.dispose(), l(n, a), h(s)), l(n, a); } } Object.defineProperties(g, { shape: { get: function() { return this._destroyed ? [0, 0] : this._shapeVector; }, set: function(r) { if ((Array.isArray(r) || (r = [0 | r, 0 | r]), 2 !== r.length)) throw new Error('gl-fbo: Shape vector must be length 2'); var t = 0 | r[0], e = 0 | r[1]; return E(this, t, e), [t, e]; }, enumerable: !1 }, width: { get: function() { return this._destroyed ? 0 : this._shape[0]; }, set: function(r) { return E(this, (r |= 0), this._shape[1]), r; }, enumerable: !1 }, height: { get: function() { return this._destroyed ? 0 : this._shape[1]; }, set: function(r) { return (r |= 0), E(this, this._shape[0], r), r; }, enumerable: !1 } }), (g.bind = function() { if (!this._destroyed) { var r = this.gl; r.bindFramebuffer(r.FRAMEBUFFER, this.handle), r.viewport(0, 0, this._shape[0], this._shape[1]); } }), (g.dispose = function() { if (!this._destroyed) { this._destroyed = !0; var r = this.gl; r.deleteFramebuffer(this.handle), (this.handle = null), this.depth && (this.depth.dispose(), (this.depth = null)), this._depth_rb && (r.deleteRenderbuffer(this._depth_rb), (this._depth_rb = null)); for (var t = 0; t < this.color.length; ++t) this.color[t].dispose(), (this.color[t] = null); this._color_rb && (r.deleteRenderbuffer(this._color_rb), (this._color_rb = null)); } }); }, function(r, t, e) { 'use strict'; (function(r, n) { var i = e(24), a = e(25); r.__TYPEDARRAY_POOL || (r.__TYPEDARRAY_POOL = { UINT8: a([32, 0]), UINT16: a([32, 0]), UINT32: a([32, 0]), INT8: a([32, 0]), INT16: a([32, 0]), INT32: a([32, 0]), FLOAT: a([32, 0]), DOUBLE: a([32, 0]), DATA: a([32, 0]), UINT8C: a([32, 0]), BUFFER: a([32, 0]) }); var o = 'undefined' != typeof Uint8ClampedArray, s = r.__TYPEDARRAY_POOL; s.UINT8C || (s.UINT8C = a([32, 0])), s.BUFFER || (s.BUFFER = a([32, 0])); var u = s.DATA, f = s.BUFFER; function l(r) { if (r) { var t = r.length || r.byteLength, e = i.log2(t); u[e].push(r); } } function h(r) { r = i.nextPow2(r); var t = i.log2(r), e = u[t]; return e.length > 0 ? e.pop() : new ArrayBuffer(r); } function c(r) { return new Uint8Array(h(r), 0, r); } function p(r) { return new Uint16Array(h(2 * r), 0, r); } function _(r) { return new Uint32Array(h(4 * r), 0, r); } function g(r) { return new Int8Array(h(r), 0, r); } function E(r) { return new Int16Array(h(2 * r), 0, r); } function d(r) { return new Int32Array(h(4 * r), 0, r); } function y(r) { return new Float32Array(h(4 * r), 0, r); } function T(r) { return new Float64Array(h(8 * r), 0, r); } function A(r) { return o ? new Uint8ClampedArray(h(r), 0, r) : c(r); } function b(r) { return new DataView(h(r), 0, r); } function v(r) { r = i.nextPow2(r); var t = i.log2(r), e = f[t]; return e.length > 0 ? e.pop() : new n(r); } (t.free = function(r) { if (n.isBuffer(r)) f[i.log2(r.length)].push(r); else { if ( ('[object ArrayBuffer]' !== Object.prototype.toString.call(r) && (r = r.buffer), !r) ) return; var t = r.length || r.byteLength, e = 0 | i.log2(t); u[e].push(r); } }), (t.freeUint8 = t.freeUint16 = t.freeUint32 = t.freeInt8 = t.freeInt16 = t.freeInt32 = t.freeFloat32 = t.freeFloat = t.freeFloat64 = t.freeDouble = t.freeUint8Clamped = t.freeDataView = function( r ) { l(r.buffer); }), (t.freeArrayBuffer = l), (t.freeBuffer = function(r) { f[i.log2(r.length)].push(r); }), (t.malloc = function(r, t) { if (void 0 === t || 'arraybuffer' === t) return h(r); switch (t) { case 'uint8': return c(r); case 'uint16': return p(r); case 'uint32': return _(r); case 'int8': return g(r); case 'int16': return E(r); case 'int32': return d(r); case 'float': case 'float32': return y(r); case 'double': case 'float64': return T(r); case 'uint8_clamped': return A(r); case 'buffer': return v(r); case 'data': case 'dataview': return b(r); default: return null; } return null; }), (t.mallocArrayBuffer = h), (t.mallocUint8 = c), (t.mallocUint16 = p), (t.mallocUint32 = _), (t.mallocInt8 = g), (t.mallocInt16 = E), (t.mallocInt32 = d), (t.mallocFloat32 = t.mallocFloat = y), (t.mallocFloat64 = t.mallocDouble = T), (t.mallocUint8Clamped = A), (t.mallocDataView = b), (t.mallocBuffer = v), (t.clearCache = function() { for (var r = 0; r < 32; ++r) (s.UINT8[r].length = 0), (s.UINT16[r].length = 0), (s.UINT32[r].length = 0), (s.INT8[r].length = 0), (s.INT16[r].length = 0), (s.INT32[r].length = 0), (s.FLOAT[r].length = 0), (s.DOUBLE[r].length = 0), (s.UINT8C[r].length = 0), (u[r].length = 0), (f[r].length = 0); }); }.call(this, e(5), e(20).Buffer)); }, function(r, t) { var e; e = (function() { return this; })(); try { e = e || Function('return this')() || (0, eval)('this'); } catch (r) { 'object' == typeof window && (e = window); } r.exports = e; }, function(r, t, e) { 'use strict'; var n = e(26), i = { body: '', args: [], thisVars: [], localVars: [] }; function a(r) { if (!r) return i; for (var t = 0; t < r.args.length; ++t) { var e = r.args[t]; r.args[t] = 0 === t ? { name: e, lvalue: !0, rvalue: !!r.rvalue, count: r.count || 1 } : { name: e, lvalue: !1, rvalue: !0, count: 1 }; } return ( r.thisVars || (r.thisVars = []), r.localVars || (r.localVars = []), r ); } function o(r) { for (var t = [], e = 0; e < r.args.length; ++e) t.push('a' + e); return new Function( 'P', [ 'return function ', r.funcName, '_ndarrayops(', t.join(','), ') {P(', t.join(','), ');return a0}' ].join('') )( (function(r) { return n({ args: r.args, pre: a(r.pre), body: a(r.body), post: a(r.proc), funcName: r.funcName }); })(r) ); } var s = { add: '+', sub: '-', mul: '*', div: '/', mod: '%', band: '&', bor: '|', bxor: '^', lshift: '<<', rshift: '>>', rrshift: '>>>' }; !(function() { for (var r in s) { var e = s[r]; (t[r] = o({ args: ['array', 'array', 'array'], body: { args: ['a', 'b', 'c'], body: 'a=b' + e + 'c' }, funcName: r })), (t[r + 'eq'] = o({ args: ['array', 'array'], body: { args: ['a', 'b'], body: 'a' + e + '=b' }, rvalue: !0, funcName: r + 'eq' })), (t[r + 's'] = o({ args: ['array', 'array', 'scalar'], body: { args: ['a', 'b', 's'], body: 'a=b' + e + 's' }, funcName: r + 's' })), (t[r + 'seq'] = o({ args: ['array', 'scalar'], body: { args: ['a', 's'], body: 'a' + e + '=s' }, rvalue: !0, funcName: r + 'seq' })); } })(); var u = { not: '!', bnot: '~', neg: '-', recip: '1.0/' }; !(function() { for (var r in u) { var e = u[r]; (t[r] = o({ args: ['array', 'array'], body: { args: ['a', 'b'], body: 'a=' + e + 'b' }, funcName: r })), (t[r + 'eq'] = o({ args: ['array'], body: { args: ['a'], body: 'a=' + e + 'a' }, rvalue: !0, count: 2, funcName: r + 'eq' })); } })(); var f = { and: '&&', or: '||', eq: '===', neq: '!==', lt: '<', gt: '>', leq: '<=', geq: '>=' }; !(function() { for (var r in f) { var e = f[r]; (t[r] = o({ args: ['array', 'array', 'array'], body: { args: ['a', 'b', 'c'], body: 'a=b' + e + 'c' }, funcName: r })), (t[r + 's'] = o({ args: ['array', 'array', 'scalar'], body: { args: ['a', 'b', 's'], body: 'a=b' + e + 's' }, funcName: r + 's' })), (t[r + 'eq'] = o({ args: ['array', 'array'], body: { args: ['a', 'b'], body: 'a=a' + e + 'b' }, rvalue: !0, count: 2, funcName: r + 'eq' })), (t[r + 'seq'] = o({ args: ['array', 'scalar'], body: { args: ['a', 's'], body: 'a=a' + e + 's' }, rvalue: !0, count: 2, funcName: r + 'seq' })); } })(); var l = [ 'abs', 'acos', 'asin', 'atan', 'ceil', 'cos', 'exp', 'floor', 'log', 'round', 'sin', 'sqrt', 'tan' ]; !(function() { for (var r = 0; r < l.length; ++r) { var e = l[r]; (t[e] = o({ args: ['array', 'array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b'], body: 'a=this_f(b)', thisVars: ['this_f'] }, funcName: e })), (t[e + 'eq'] = o({ args: ['array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a'], body: 'a=this_f(a)', thisVars: ['this_f'] }, rvalue: !0, count: 2, funcName: e + 'eq' })); } })(); var h = ['max', 'min', 'atan2', 'pow']; !(function() { for (var r = 0; r < h.length; ++r) { var e = h[r]; (t[e] = o({ args: ['array', 'array', 'array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b', 'c'], body: 'a=this_f(b,c)', thisVars: ['this_f'] }, funcName: e })), (t[e + 's'] = o({ args: ['array', 'array', 'scalar'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b', 'c'], body: 'a=this_f(b,c)', thisVars: ['this_f'] }, funcName: e + 's' })), (t[e + 'eq'] = o({ args: ['array', 'array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b'], body: 'a=this_f(a,b)', thisVars: ['this_f'] }, rvalue: !0, count: 2, funcName: e + 'eq' })), (t[e + 'seq'] = o({ args: ['array', 'scalar'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b'], body: 'a=this_f(a,b)', thisVars: ['this_f'] }, rvalue: !0, count: 2, funcName: e + 'seq' })); } })(); var c = ['atan2', 'pow']; !(function() { for (var r = 0; r < c.length; ++r) { var e = c[r]; (t[e + 'op'] = o({ args: ['array', 'array', 'array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b', 'c'], body: 'a=this_f(c,b)', thisVars: ['this_f'] }, funcName: e + 'op' })), (t[e + 'ops'] = o({ args: ['array', 'array', 'scalar'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b', 'c'], body: 'a=this_f(c,b)', thisVars: ['this_f'] }, funcName: e + 'ops' })), (t[e + 'opeq'] = o({ args: ['array', 'array'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b'], body: 'a=this_f(b,a)', thisVars: ['this_f'] }, rvalue: !0, count: 2, funcName: e + 'opeq' })), (t[e + 'opseq'] = o({ args: ['array', 'scalar'], pre: { args: [], body: 'this_f=Math.' + e, thisVars: ['this_f'] }, body: { args: ['a', 'b'], body: 'a=this_f(b,a)', thisVars: ['this_f'] }, rvalue: !0, count: 2, funcName: e + 'opseq' })); } })(), (t.any = n({ args: ['array'], pre: i, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 1 }], body: 'if(a){return true}', localVars: [], thisVars: [] }, post: { args: [], localVars: [], thisVars: [], body: 'return false' }, funcName: 'any' })), (t.all = n({ args: ['array'], pre: i, body: { args: [{ name: 'x', lvalue: !1, rvalue: !0, count: 1 }], body: 'if(!x){return false}', localVars: [], thisVars: [] }, post: { args: [], localVars: [], thisVars: [], body: 'return true' }, funcName: 'all' })), (t.sum = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=0' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 1 }], body: 'this_s+=a', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return this_s' }, funcName: 'sum' })), (t.prod = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=1' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 1 }], body: 'this_s*=a', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return this_s' }, funcName: 'prod' })), (t.norm2squared = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=0' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 2 }], body: 'this_s+=a*a', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return this_s' }, funcName: 'norm2squared' })), (t.norm2 = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=0' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 2 }], body: 'this_s+=a*a', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return Math.sqrt(this_s)' }, funcName: 'norm2' })), (t.norminf = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=0' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 4 }], body: 'if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return this_s' }, funcName: 'norminf' })), (t.norm1 = n({ args: ['array'], pre: { args: [], localVars: [], thisVars: ['this_s'], body: 'this_s=0' }, body: { args: [{ name: 'a', lvalue: !1, rvalue: !0, count: 3 }], body: 'this_s+=a<0?-a:a', localVars: [], thisVars: ['this_s'] }, post: { args: [], localVars: [], thisVars: ['this_s'], body: 'return this_s' }, funcName: 'norm1' })), (t.sup = n({ args: ['array'], pre: { body: 'this_h=-Infinity', args: [], thisVars: ['this_h'], localVars: [] }, body: { body: 'if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_', args: [{ name: '_inline_1_arg0_', lvalue: !1, rvalue: !0, count: 2 }], thisVars: ['this_h'], localVars: [] }, post: { body: 'return this_h', args: [], thisVars: ['this_h'], localVars: [] } })), (t.inf = n({ args: ['array'], pre: { body: 'this_h=Infinity', args: [], thisVars: ['this_h'], localVars: [] }, body: { body: 'if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_', args: [{ name: '_inline_1_arg0_', lvalue: !1, rvalue: !0, count: 2 }], thisVars: ['this_h'], localVars: [] }, post: { body: 'return this_h', args: [], thisVars: ['this_h'], localVars: [] } })), (t.argmin = n({ args: ['index', 'array', 'shape'], pre: { body: '{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}', args: [ { name: '_inline_0_arg0_', lvalue: !1, rvalue: !1, count: 0 }, { name: '_inline_0_arg1_', lvalue: !1, rvalue: !1, count: 0 }, { name: '_inline_0_arg2_', lvalue: !1, rvalue: !0, count: 1 } ], thisVars: ['this_i', 'this_v'], localVars: [] }, body: { body: '{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}', args: [ { name: '_inline_1_arg0_', lvalue: !1, rvalue: !0, count: 2 }, { name: '_inline_1_arg1_', lvalue: !1, rvalue: !0, count: 2 } ], thisVars: ['this_i', 'this_v'], localVars: ['_inline_1_k'] }, post: { body: '{return this_i}', args: [], thisVars: ['this_i'], localVars: [] } })), (t.argmax = n({ args: ['index', 'array', 'shape'], pre: { body: '{this_v=-Inf