@amilajack/gaussian-blur
Version:
optimized 9-tap gaussian blur for GLSL
1,673 lines • 210 kB
JavaScript
!(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