@deephaven/chart 0.104.1-virtual-webgl.1 → 0.104.1-virtual-webgl.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import 'virtual-webgl/src/virtual-webgl.js';
2
1
  export { default as Chart } from './LazyChart';
3
2
  export { default as ChartModelFactory } from './ChartModelFactory';
4
3
  export { default as ChartModel } from './ChartModel';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,oCAAoC,CAAC;AAE5C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // Used to show many WebGL plots on the same page
2
2
  // https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page
3
- import 'virtual-webgl/src/virtual-webgl.js';
3
+ import { initializeVirtualWebGL } from "./virtual-webgl.js";
4
+ initializeVirtualWebGL();
4
5
  export { default as Chart } from "./LazyChart.js";
5
6
  export { default as ChartModelFactory } from "./ChartModelFactory.js";
6
7
  export { default as ChartModel } from "./ChartModel.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\nimport 'virtual-webgl/src/virtual-webgl.js';\n\nexport { default as Chart } from './LazyChart';\nexport { default as ChartModelFactory } from './ChartModelFactory';\nexport { default as ChartModel } from './ChartModel';\nexport { default as ChartUtils } from './ChartUtils';\nexport * from './ChartUtils';\nexport * from './DownsamplingError';\nexport { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/LazyPlot';\nexport * from './ChartTheme';\nexport * from './ChartThemeProvider';\nexport { default as isFigureChartModel } from './isFigureChartModel';\nexport * from './useChartTheme';\n"],"mappings":"AAAA;AACA;AACA,OAAO,oCAAoC;AAAC,SAEnCA,OAAO,IAAIC,KAAK;AAAA,SAChBD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,UAAU;AAAA;AAAA;AAAA,SAGrBJ,OAAO,IAAIK,gBAAgB;AAAA,SAC3BL,OAAO,IAAIM,cAAc;AAAA,SACzBN,OAAO,IAAIO,IAAI;AAAA;AAAA;AAAA,SAGfP,OAAO,IAAIQ,kBAAkB;AAAA"}
1
+ {"version":3,"file":"index.js","names":["initializeVirtualWebGL","default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\nimport { initializeVirtualWebGL } from './virtual-webgl';\n\ninitializeVirtualWebGL();\n\nexport { default as Chart } from './LazyChart';\nexport { default as ChartModelFactory } from './ChartModelFactory';\nexport { default as ChartModel } from './ChartModel';\nexport { default as ChartUtils } from './ChartUtils';\nexport * from './ChartUtils';\nexport * from './DownsamplingError';\nexport { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/LazyPlot';\nexport * from './ChartTheme';\nexport * from './ChartThemeProvider';\nexport { default as isFigureChartModel } from './isFigureChartModel';\nexport * from './useChartTheme';\n"],"mappings":"AAAA;AACA;AAAA,SACSA,sBAAsB;AAE/BA,sBAAsB,CAAC,CAAC;AAAC,SAEhBC,OAAO,IAAIC,KAAK;AAAA,SAChBD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,UAAU;AAAA;AAAA;AAAA,SAGrBJ,OAAO,IAAIK,gBAAgB;AAAA,SAC3BL,OAAO,IAAIM,cAAc;AAAA,SACzBN,OAAO,IAAIO,IAAI;AAAA;AAAA;AAAA,SAGfP,OAAO,IAAIQ,kBAAkB;AAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function initializeVirtualWebGL(): void;
2
+ //# sourceMappingURL=virtual-webgl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-webgl.d.ts","sourceRoot":"","sources":["../src/virtual-webgl.ts"],"names":[],"mappings":"AAqCA,wBAAgB,sBAAsB,SAylCrC"}
@@ -0,0 +1,915 @@
1
+ /* eslint-disable */
2
+ // @ts-nocheck
3
+ // Copied from https://github.com/greggman/virtual-webgl
4
+ // Used to show many WebGL plots on the same page
5
+ // https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page
6
+ /*
7
+ * Copyright 2018, Gregg Tavares.
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions are
12
+ * met:
13
+ *
14
+ * * Redistributions of source code must retain the above copyright
15
+ * notice, this list of conditions and the following disclaimer.
16
+ *
17
+ * * Redistributions in binary form must reproduce the above
18
+ * copyright notice, this list of conditions and the following disclaimer
19
+ * in the documentation and/or other materials provided with the
20
+ * distribution.
21
+ *
22
+ * * Neither the name of Gregg Tavares. nor the names of his
23
+ * contributors may be used to endorse or promote products derived from
24
+ * this software without specific prior written permission.
25
+ *
26
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
+ */
38
+ export function initializeVirtualWebGL() {
39
+ var settings = {
40
+ disableWebGL2: false,
41
+ compositorCreator() {}
42
+ };
43
+ var canvasToVirtualContextMap = new Map();
44
+ var extensionInfo = {
45
+ webgl_draw_buffers: {
46
+ wrapperFnMakerFn: makeWEBGL_draw_buffersWrapper,
47
+ saveRestoreMakerFn: makeWEBGL_drawBuffersSaveRestoreHelper
48
+ },
49
+ oes_vertex_array_object: {
50
+ wrapperFnMakerFn: makeOES_vertex_array_objectWrapper
51
+ },
52
+ angle_instanced_arrays: {
53
+ wrapperFnMakerFn: makeANGLE_instanced_arraysWrapper
54
+ }
55
+ };
56
+ var extensionSaveRestoreHelpersArray = [];
57
+ var extensionSaveRestoreHelpers = {};
58
+ var currentVirtualContext = null;
59
+ var someContextsNeedRendering;
60
+ var sharedWebGLContext = document.createElement('canvas').getContext('webgl');
61
+ var sharedVAOExtension = sharedWebGLContext.getExtension('OES_vertex_array_object');
62
+ var sharedInstanceExtension = sharedWebGLContext.getExtension('ANGLE_instanced_arrays');
63
+ var numAttributes = sharedWebGLContext.getParameter(sharedWebGLContext.MAX_VERTEX_ATTRIBS);
64
+ var numTextureUnits = sharedWebGLContext.getParameter(sharedWebGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS);
65
+ var numDrawBuffers;
66
+ var baseState = makeDefaultState(300, 150);
67
+ var vs = "\n attribute vec4 position;\n varying vec2 v_texcoord;\n void main() {\n gl_Position = position;\n v_texcoord = position.xy * .5 + .5;\n }\n ";
68
+ var fs = "\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n }\n ";
69
+ var fs2 = "\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n ";
70
+ var premultplyAlphaTrueProgram = createProgram(sharedWebGLContext, [vs, fs]);
71
+ var premultplyAlphaFalseProgram = createProgram(sharedWebGLContext, [vs, fs2]);
72
+ if (sharedVAOExtension) {
73
+ var vao = sharedVAOExtension.createVertexArrayOES();
74
+ sharedVAOExtension.bindVertexArrayOES(vao);
75
+ baseState.vertexArray = vao;
76
+ }
77
+ {
78
+ var gl = sharedWebGLContext;
79
+ var positionLoc = 0; // hard coded in createProgram
80
+
81
+ var buffer = gl.createBuffer();
82
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
83
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), gl.STATIC_DRAW);
84
+ gl.enableVertexAttribArray(positionLoc);
85
+ gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);
86
+ }
87
+ saveAllState(baseState);
88
+ HTMLCanvasElement.prototype.getContext = function (origFn) {
89
+ return function (type, contextAttributes) {
90
+ if (type === 'webgl' || type === 'experimental-webgl') {
91
+ return createOrGetVirtualWebGLContext(this, type, contextAttributes);
92
+ } else if (type === 'webgl2' && settings.disableWebGL2) {
93
+ return null;
94
+ }
95
+ return origFn.call(this, type, contextAttributes);
96
+ };
97
+ }(HTMLCanvasElement.prototype.getContext);
98
+ function valueOrDefault(value, defaultValue) {
99
+ return value === undefined ? defaultValue : value;
100
+ }
101
+ function errorDisposedContext(fnName) {
102
+ return function () {
103
+ throw new Error("tried to call ".concat(fnName, " on disposed context"));
104
+ };
105
+ }
106
+ class DefaultCompositor {
107
+ constructor(canvas) {
108
+ this._ctx = canvas.getContext('2d');
109
+ }
110
+ composite(gl, texture, canvas, contextAttributes) {
111
+ // note: not entirely sure what to do here. We need this canvas to be at least as large
112
+ // as the canvas we're drawing to. Resizing a canvas is slow so I think just making
113
+ // sure we never get smaller than the largest canvas. At the moment though I'm too lazy
114
+ // to make it smaller.
115
+ var ctx = this._ctx;
116
+ var width = canvas.width;
117
+ var height = canvas.height;
118
+ var maxWidth = Math.max(gl.canvas.width, width);
119
+ var maxHeight = Math.max(gl.canvas.height, height);
120
+ if (gl.canvas.width !== maxWidth || gl.canvas.height !== maxHeight) {
121
+ gl.canvas.width = maxWidth;
122
+ gl.canvas.height = maxHeight;
123
+ }
124
+ gl.viewport(0, 0, width, height);
125
+ gl.useProgram(contextAttributes.premultipliedAlpha ? premultplyAlphaTrueProgram : premultplyAlphaFalseProgram);
126
+
127
+ // draw the drawingbuffer's texture to the offscreen canvas
128
+ gl.bindTexture(gl.TEXTURE_2D, texture);
129
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
130
+
131
+ // copy it to target canvas
132
+ ctx.globalCompositeOperation = 'copy';
133
+ ctx.drawImage(gl.canvas, 0, maxHeight - height, width, height,
134
+ // src rect
135
+ 0, 0, width, height); // dest rect
136
+ }
137
+
138
+ dispose() {}
139
+ }
140
+ class VirtualWebGLContext {
141
+ constructor(canvas) {
142
+ var contextAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
143
+ var compositor = arguments.length > 2 ? arguments[2] : undefined;
144
+ var disposeHelper = arguments.length > 3 ? arguments[3] : undefined;
145
+ var gl = sharedWebGLContext;
146
+ this.canvas = canvas;
147
+ // Should use Symbols or someting to hide these variables from the outside.
148
+
149
+ this._compositor = compositor;
150
+ this._disposeHelper = disposeHelper;
151
+ this._extensions = {};
152
+ // based on context attributes and canvas.width, canvas.height
153
+ // create a texture and framebuffer
154
+ this._drawingbufferTexture = gl.createTexture();
155
+ this._drawingbufferFramebuffer = gl.createFramebuffer();
156
+ this._contextAttributes = {
157
+ alpha: valueOrDefault(contextAttributes.alpha, true),
158
+ antialias: false,
159
+ depth: valueOrDefault(contextAttributes.depth, true),
160
+ failIfMajorPerformanceCaveat: false,
161
+ premultipliedAlpha: valueOrDefault(contextAttributes.premultipliedAlpha, true),
162
+ stencil: valueOrDefault(contextAttributes.stencil, false)
163
+ };
164
+ this._preserveDrawingbuffer = valueOrDefault(contextAttributes.preserveDrawingBuffer, false);
165
+ var oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);
166
+ var oldFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
167
+ gl.bindTexture(gl.TEXTURE_2D, this._drawingbufferTexture);
168
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
169
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
170
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
171
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
172
+ // this._drawingbufferTexture.id = canvas.id;
173
+ // this._drawingbufferFramebuffer.id = canvas.id;
174
+
175
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._drawingbufferFramebuffer);
176
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._drawingbufferTexture, 0);
177
+ if (this._contextAttributes.depth) {
178
+ var oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);
179
+ this._depthRenderbuffer = gl.createRenderbuffer();
180
+ gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderbuffer);
181
+ var attachmentPoint = this._contextAttributes.stencil ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
182
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachmentPoint, gl.RENDERBUFFER, this._depthRenderbuffer);
183
+ gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);
184
+ }
185
+ gl.bindTexture(gl.TEXTURE_2D, oldTexture);
186
+ gl.bindFramebuffer(gl.FRAMEBUFFER, oldFramebuffer);
187
+
188
+ // remember all WebGL state (default bindings, default texture units,
189
+ // default attributes and/or vertex shade object, default program,
190
+ // default blend, stencil, zbuffer, culling, viewport etc... state
191
+ this._state = makeDefaultState(canvas.width, canvas.height);
192
+ this._state.framebuffer = this._drawingbufferFramebuffer;
193
+ if (sharedVAOExtension) {
194
+ this._state.vertexArray = sharedVAOExtension.createVertexArrayOES();
195
+ this._defaultVertexArray = this._state.vertexArray;
196
+ }
197
+ }
198
+ dispose() {
199
+ this._disposeHelper();
200
+ var gl = sharedWebGLContext;
201
+ gl.deleteFramebuffer(this._drawingbufferFramebuffer);
202
+ gl.deleteTexture(this._drawingbufferTexture);
203
+ if (this._depthRenderbuffer) {
204
+ gl.deleteRenderbuffer(this._depthRenderbuffer);
205
+ }
206
+ if (this._compositor.dispose) {
207
+ this._compositor.dispose();
208
+ }
209
+ for (var [key, value] of Object.entries(this)) {
210
+ if (typeof value === 'function') {
211
+ this[key] = errorDisposedContext(key);
212
+ }
213
+ }
214
+ for (var [_key, _value] of Object.entries(VirtualWebGLContext.prototype)) {
215
+ if (typeof _value === 'function') {
216
+ this[_key] = errorDisposedContext(_key);
217
+ }
218
+ }
219
+ }
220
+ get drawingBufferWidth() {
221
+ return this.canvas.width;
222
+ }
223
+ get drawingBufferHeight() {
224
+ return this.canvas.height;
225
+ }
226
+ composite(gl) {
227
+ this._compositor.composite(gl, this._drawingbufferTexture, this.canvas, this._contextAttributes);
228
+ if (!this._preserveDrawingbuffer) {
229
+ this._needClear = true;
230
+ }
231
+ }
232
+ }
233
+ function makeDefaultState(width, height) {
234
+ var gl = WebGLRenderingContext;
235
+ var state = {
236
+ arrayBuffer: null,
237
+ renderbuffer: null,
238
+ framebuffer: null,
239
+ blend: false,
240
+ cullFace: false,
241
+ depthTest: false,
242
+ dither: false,
243
+ polygonOffsetFill: false,
244
+ sampleAlphaToCoverage: false,
245
+ sampleCoverage: false,
246
+ scissorTest: false,
247
+ stencilTest: false,
248
+ activeTexture: gl.TEXTURE0,
249
+ packAlignment: 4,
250
+ unpackAlignment: 4,
251
+ unpackColorspaceConversion: gl.BROWSER_DEFAULT_WEBGL,
252
+ unpackFlipY: 0,
253
+ unpackPremultiplyAlpha: 0,
254
+ currentProgram: null,
255
+ viewport: [0, 0, width, height],
256
+ scissor: [0, 0, 0, 0],
257
+ blendSrcRgb: gl.ONE,
258
+ blendDstRgb: gl.ZERO,
259
+ blendSrcAlpha: gl.ONE,
260
+ blendDstAlpha: gl.ZERO,
261
+ blendEquationRgb: gl.FUNC_ADD,
262
+ blendEquationAlpha: gl.FUNC_ADD,
263
+ blendColor: [0, 0, 0, 0],
264
+ colorClearValue: [0, 0, 0, 0],
265
+ colorMask: [true, true, true, true],
266
+ cullFaceMode: gl.BACK,
267
+ depthClearValue: 1,
268
+ depthFunc: gl.LESS,
269
+ depthRange: [0, 1],
270
+ depthMask: true,
271
+ frontFace: gl.CCW,
272
+ generateMipmapHint: gl.DONT_CARE,
273
+ lineWidth: 1,
274
+ polygonOffsetFactor: 0,
275
+ polygonOffsetUnits: 0,
276
+ sampleCoverageValue: 1,
277
+ sampleCoverageUnits: false,
278
+ stencilBackFail: gl.KEEP,
279
+ stencilBackFunc: gl.ALWAYS,
280
+ stencilBackPassDepthFail: gl.KEEP,
281
+ stencilBackPassDepthPass: gl.KEEP,
282
+ stencilBackRef: 0,
283
+ stencilBackValueMask: 0xffffffff,
284
+ stencilBackWriteMask: 0xffffffff,
285
+ stencilClearValue: 0,
286
+ stencilFail: gl.KEEP,
287
+ stencilFunc: gl.ALWAYS,
288
+ stencilPassDepthFail: gl.KEEP,
289
+ stencilPassDepthPass: gl.KEEP,
290
+ stencilRef: 0,
291
+ stencilValueMask: 0xffffffff,
292
+ stencilWriteMask: 0xffffffff,
293
+ textureUnits: []
294
+ };
295
+ if (sharedVAOExtension) {
296
+ state.vertexArray = null;
297
+ } else {
298
+ state.elementArrayBuffer = null;
299
+ state.attributes = [];
300
+ for (var i = 0; i < numAttributes; ++i) {
301
+ var attrib = {
302
+ buffer: null,
303
+ enabled: false,
304
+ size: 4,
305
+ stride: 0,
306
+ type: gl.FLOAT,
307
+ normalized: false,
308
+ value: [0, 0, 0, 1]
309
+ };
310
+ if (sharedInstanceExtension) {
311
+ attrib.divisor = 0;
312
+ }
313
+ state.attributes.push(attrib);
314
+ }
315
+ }
316
+ for (var _i = 0; _i < numTextureUnits; ++_i) {
317
+ state.textureUnits.push({
318
+ texture2D: null,
319
+ textureCubemap: null
320
+ });
321
+ }
322
+ return state;
323
+ }
324
+
325
+ // copy all WebGL constants and functions to the prototype of
326
+ // VirtualWebGLContext
327
+ for (var key in WebGLRenderingContext.prototype) {
328
+ var propDesc = Object.getOwnPropertyDescriptor(WebGLRenderingContext.prototype, key);
329
+ if (propDesc.get) {
330
+ // it's a getter/setter ?
331
+ var virtualPropDesc = Object.getOwnPropertyDescriptor(VirtualWebGLContext.prototype, key);
332
+ if (!virtualPropDesc) {
333
+ console.warn("WebGLRenderingContext.".concat(key, " is not supported"));
334
+ }
335
+ continue;
336
+ }
337
+ switch (key) {
338
+ default:
339
+ {
340
+ var value = WebGLRenderingContext.prototype[key];
341
+ var newValue = value;
342
+ switch (key) {
343
+ case 'getContextAttributes':
344
+ newValue = virtualGetContextAttributes;
345
+ break;
346
+ case 'getExtension':
347
+ newValue = createGetExtensionWrapper(value);
348
+ break;
349
+ case 'bindFramebuffer':
350
+ newValue = virtualBindFramebuffer;
351
+ break;
352
+ case 'getParameter':
353
+ newValue = virtualGetParameter;
354
+ break;
355
+ case 'readPixels':
356
+ newValue = virtualReadPixels;
357
+ break;
358
+ case 'clear':
359
+ case 'drawArrays':
360
+ case 'drawElements':
361
+ newValue = createDrawWrapper(value);
362
+ break;
363
+ default:
364
+ if (typeof value === 'function') {
365
+ newValue = createWrapper(value);
366
+ }
367
+ break;
368
+ }
369
+ VirtualWebGLContext.prototype[key] = newValue;
370
+ break;
371
+ }
372
+ }
373
+ }
374
+ function createGetExtensionWrapper(origFn) {
375
+ return function (extensionName) {
376
+ extensionName = extensionName.toLowerCase();
377
+ // just like the real context each extension needs a virtual class because each use
378
+ // of the extension might be modified (as in people adding properties to it)
379
+ var existingExt = this._extensions[extensionName];
380
+ if (existingExt) {
381
+ return existingExt;
382
+ }
383
+ var ext = origFn.call(sharedWebGLContext, extensionName);
384
+ var wrapperInfo = extensionInfo[extensionName] || {};
385
+ var wrapperFnMakerFn = wrapperInfo.wrapperFnMakerFn || (() => {
386
+ console.log('trying to get extension:', extensionName);
387
+ });
388
+ var saveRestoreHelper = extensionSaveRestoreHelpers[extensionName];
389
+ if (!saveRestoreHelper) {
390
+ var saveRestoreMakerFn = wrapperInfo.saveRestoreMakerFn;
391
+ if (saveRestoreMakerFn) {
392
+ var saveRestore = saveRestoreMakerFn(ext);
393
+ extensionSaveRestoreHelpers[extensionName] = saveRestore;
394
+ extensionSaveRestoreHelpersArray.push(saveRestore);
395
+ }
396
+ }
397
+ var wrapper = {
398
+ _context: this
399
+ };
400
+ for (var _key2 in ext) {
401
+ var _value2 = ext[_key2];
402
+ if (typeof _value2 === 'function') {
403
+ _value2 = wrapperFnMakerFn(ext, _value2, extensionName);
404
+ }
405
+ wrapper[_key2] = _value2;
406
+ }
407
+ this._extensions[extensionName] = wrapper;
408
+ return wrapper;
409
+ };
410
+ }
411
+ function isFramebufferBindingNull(vctx) {
412
+ return vctx._state.framebuffer === vctx._drawingbufferFramebuffer;
413
+ }
414
+ function makeOES_vertex_array_objectWrapper(ext, origFn, name) {
415
+ switch (name) {
416
+ case 'bindVertexArrayOES':
417
+ return virutalbindVertexArrayOES;
418
+ }
419
+ return function () {
420
+ makeCurrentContext(this._context);
421
+ resizeCanvasIfChanged(this._context);
422
+ for (var _len = arguments.length, args = new Array(_len), _key3 = 0; _key3 < _len; _key3++) {
423
+ args[_key3] = arguments[_key3];
424
+ }
425
+ return origFn.call(ext, ...args);
426
+ };
427
+ }
428
+ function virutalbindVertexArrayOES(vao) {
429
+ makeCurrentContext(this._context);
430
+ resizeCanvasIfChanged(this._context);
431
+ if (!vao) {
432
+ vao = this._context._defaultVertexArray;
433
+ }
434
+ sharedVAOExtension.bindVertexArrayOES(vao);
435
+ }
436
+ function makeANGLE_instanced_arraysWrapper(ext, origFn, name) {
437
+ switch (name) {
438
+ case 'drawArraysInstancedANGLE':
439
+ case 'drawElementsInstancedANGLE':
440
+ return createExtDrawWrapper(ext, origFn);
441
+ break;
442
+ }
443
+ return function () {
444
+ makeCurrentContext(this._context);
445
+ resizeCanvasIfChanged(this._context);
446
+ for (var _len2 = arguments.length, args = new Array(_len2), _key4 = 0; _key4 < _len2; _key4++) {
447
+ args[_key4] = arguments[_key4];
448
+ }
449
+ return origFn.call(ext, ...args);
450
+ };
451
+ }
452
+ function createExtDrawWrapper(ext, origFn) {
453
+ return function () {
454
+ // a rendering function was called so we need to copy are drawingBuffer
455
+ // to the canvas for this context after the current event.
456
+ beforeDraw(this._context);
457
+ for (var _len3 = arguments.length, args = new Array(_len3), _key5 = 0; _key5 < _len3; _key5++) {
458
+ args[_key5] = arguments[_key5];
459
+ }
460
+ var result = origFn.call(exts, ...args);
461
+ afterDraw(this._context);
462
+ return result;
463
+ };
464
+ }
465
+ function makeWEBGL_draw_buffersWrapper(ext, origFn, name) {
466
+ var gl = sharedWebGLContext;
467
+ var backBuffer = [gl.COLOR_ATTACHMENT0];
468
+ return function (drawingBuffers) {
469
+ makeCurrentContext(this._context);
470
+ resizeCanvasIfChanged(this._context);
471
+ // if the virtual context is bound to canvas then fake it
472
+ if (isFramebufferBindingNull(this._context)) {
473
+ // this really isn't checking everything
474
+ // for example if the user passed in array.length != 1
475
+ // then we are supposed to generate an error
476
+ if (drawingBuffers[0] === gl.BACK) {
477
+ drawingBuffers = backBuffer;
478
+ }
479
+ }
480
+ origFn.call(ext, drawingBuffers);
481
+ };
482
+ }
483
+ function makeWEBGL_drawBuffersSaveRestoreHelper(ext) {
484
+ var gl = sharedWebGLContext;
485
+ var maxDrawBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);
486
+ var defaultBackDrawBuffers = [gl.BACK];
487
+ var defaultFBDrawBuffers = [gl.COLOR_ATTACHMENT0];
488
+ for (var i = 1; i < maxDrawBuffers; ++i) {
489
+ defaultFBDrawBuffers.push(gl.NONE);
490
+ }
491
+ function initDrawBufferState(state) {
492
+ state.drawBuffers = state.framebuffer ? defaultFBDrawBuffers.slice() : defaultBackDrawBuffers.slice();
493
+ }
494
+ function save(state) {
495
+ if (!state.drawBuffers) {
496
+ initDrawBufferState(state);
497
+ }
498
+ // remember state.framebuffer is only null for the offscreen canvas
499
+ var drawBuffers = state.drawBuffers;
500
+ for (var _i2 = 0; _i2 < drawBuffers.length; ++_i2) {
501
+ drawBuffers[_i2] = gl.getParameter(ext.DRAW_BUFFER0_WEBGL + _i2);
502
+ }
503
+ }
504
+ function restore(state) {
505
+ if (!state.drawBuffers) {
506
+ initDrawBufferState(state);
507
+ }
508
+ ext.drawBuffersWEBGL(state.drawBuffers);
509
+ }
510
+ return {
511
+ save,
512
+ restore
513
+ };
514
+ }
515
+ function virtualGetContextAttributes() {
516
+ return this._contextAttributes;
517
+ }
518
+ function virtualReadPixels() {
519
+ makeCurrentContext(this);
520
+ resizeCanvasIfChanged(this);
521
+ clearIfNeeded(this);
522
+ var gl = sharedWebGLContext;
523
+ return gl.readPixels(...arguments);
524
+ }
525
+ function virtualGetParameter(pname) {
526
+ makeCurrentContext(this);
527
+ resizeCanvasIfChanged(this);
528
+ var gl = sharedWebGLContext;
529
+ var value = gl.getParameter(pname);
530
+ switch (pname) {
531
+ case gl.FRAMEBUFFER_BINDING:
532
+ if (value === this._drawingbufferFramebuffer) {
533
+ return null;
534
+ }
535
+ break;
536
+ case 0x8825:
537
+ // DRAW_BUFFER0_WEBGL
538
+ if (isFramebufferBindingNull(this)) {
539
+ if (value === gl.COLOR_ATTACHMENT0) {
540
+ return gl.BACK;
541
+ }
542
+ }
543
+ break;
544
+ case 0x85b5:
545
+ // VERTEX_ARRAY_BINDING_OES
546
+ if (value === this._defaultVertexArray) {
547
+ return null;
548
+ }
549
+ break;
550
+ }
551
+ return value;
552
+ }
553
+ function virtualBindFramebuffer(bindpoint, framebuffer) {
554
+ makeCurrentContext(this);
555
+ resizeCanvasIfChanged(this);
556
+ var gl = sharedWebGLContext;
557
+ if (bindpoint === WebGLRenderingContext.FRAMEBUFFER) {
558
+ if (framebuffer === null) {
559
+ // bind our drawingBuffer
560
+ framebuffer = this._drawingbufferFramebuffer;
561
+ }
562
+ }
563
+ gl.bindFramebuffer(bindpoint, framebuffer);
564
+ this._state.framebuffer = framebuffer;
565
+ }
566
+ function createWrapper(origFn) {
567
+ // lots of optimization could happen here depending on specific functions
568
+ return function () {
569
+ makeCurrentContext(this);
570
+ resizeCanvasIfChanged(this);
571
+ for (var _len4 = arguments.length, args = new Array(_len4), _key6 = 0; _key6 < _len4; _key6++) {
572
+ args[_key6] = arguments[_key6];
573
+ }
574
+ return origFn.call(sharedWebGLContext, ...args);
575
+ };
576
+ }
577
+ function clearIfNeeded(vctx) {
578
+ if (vctx._needClear) {
579
+ vctx._needClear = false;
580
+ var _gl = sharedWebGLContext;
581
+ _gl.bindFramebuffer(_gl.FRAMEBUFFER, vctx._drawingbufferFramebuffer);
582
+ _gl.disable(_gl.SCISSOR_TEST);
583
+ _gl.clear(_gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT | _gl.STENCIL_BUFFER_BIT);
584
+ enableDisable(_gl, _gl.SCISSOR_TEST, vctx._state.scissorTest);
585
+ _gl.bindFramebuffer(_gl.FRAMEBUFFER, vctx._state.framebuffer);
586
+ }
587
+ }
588
+ function beforeDraw(vctx) {
589
+ makeCurrentContext(vctx);
590
+ resizeCanvasIfChanged(vctx);
591
+ clearIfNeeded(vctx);
592
+ }
593
+ function afterDraw(vctx) {
594
+ if (isFramebufferBindingNull(vctx)) {
595
+ vctx._needComposite = true;
596
+ if (!someContextsNeedRendering) {
597
+ someContextsNeedRendering = true;
598
+ setTimeout(renderAllDirtyVirtualCanvases, 0);
599
+ }
600
+ }
601
+ }
602
+ function createDrawWrapper(origFn) {
603
+ return function () {
604
+ // a rendering function was called so we need to copy are drawingBuffer
605
+ // to the canvas for this context after the current event.
606
+ beforeDraw(this);
607
+ for (var _len5 = arguments.length, args = new Array(_len5), _key7 = 0; _key7 < _len5; _key7++) {
608
+ args[_key7] = arguments[_key7];
609
+ }
610
+ var result = origFn.call(sharedWebGLContext, ...args);
611
+ afterDraw(this);
612
+ return result;
613
+ };
614
+ }
615
+ function makeCurrentContext(vctx) {
616
+ if (currentVirtualContext === vctx) {
617
+ return;
618
+ }
619
+
620
+ // save all current WebGL state on the previous current virtual context
621
+ if (currentVirtualContext) {
622
+ saveAllState(currentVirtualContext._state, currentVirtualContext);
623
+ }
624
+
625
+ // restore all state for the new context
626
+ restoreAllState(vctx._state, vctx);
627
+
628
+ // check if the current state is supposed to be rendering to the canvas.
629
+ // if so bind vctx._drawingbuffer
630
+
631
+ currentVirtualContext = vctx;
632
+ }
633
+ function resizeCanvasIfChanged(vctx) {
634
+ var width = vctx.canvas.width;
635
+ var height = vctx.canvas.height;
636
+ if (width !== vctx._width || height !== vctx._height) {
637
+ vctx._width = width;
638
+ vctx._height = height;
639
+ var _gl2 = sharedWebGLContext;
640
+ var oldTexture = _gl2.getParameter(_gl2.TEXTURE_BINDING_2D);
641
+ var format = vctx._contextAttributes.alpha ? _gl2.RGBA : _gl2.RGB;
642
+ _gl2.bindTexture(_gl2.TEXTURE_2D, vctx._drawingbufferTexture);
643
+ _gl2.texImage2D(_gl2.TEXTURE_2D, 0, format, width, height, 0, format, _gl2.UNSIGNED_BYTE, null);
644
+ _gl2.bindTexture(_gl2.TEXTURE_2D, oldTexture);
645
+ if (vctx._depthRenderbuffer) {
646
+ var oldRenderbuffer = _gl2.getParameter(_gl2.RENDERBUFFER_BINDING);
647
+ var internalFormat = vctx._contextAttributes.stencil ? _gl2.DEPTH_STENCIL : _gl2.DEPTH_COMPONENT16;
648
+ _gl2.bindRenderbuffer(_gl2.RENDERBUFFER, vctx._depthRenderbuffer);
649
+ _gl2.renderbufferStorage(_gl2.RENDERBUFFER, internalFormat, width, height);
650
+ _gl2.bindRenderbuffer(_gl2.RENDERBUFFER, oldRenderbuffer);
651
+ }
652
+ }
653
+ }
654
+ function createOrGetVirtualWebGLContext(canvas, type, contextAttributes) {
655
+ // check if this canvas already has a context
656
+ var existingVirtualCtx = canvasToVirtualContextMap.get(canvas);
657
+ if (existingVirtualCtx) {
658
+ return existingVirtualCtx;
659
+ }
660
+ var compositor = settings.compositorCreator(canvas, type, contextAttributes) || new DefaultCompositor(canvas, type, contextAttributes);
661
+ var newVirtualCtx = new VirtualWebGLContext(canvas, contextAttributes, compositor, () => {
662
+ canvasToVirtualContextMap.delete(canvas);
663
+ });
664
+ canvasToVirtualContextMap.set(canvas, newVirtualCtx);
665
+ return newVirtualCtx;
666
+ }
667
+ function createProgram(gl, shaderSources) {
668
+ var program = gl.createProgram();
669
+ [gl.VERTEX_SHADER, gl.FRAGMENT_SHADER].forEach((type, ndx) => {
670
+ var shader = gl.createShader(type);
671
+ gl.shaderSource(shader, shaderSources[ndx]);
672
+ gl.compileShader(shader);
673
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
674
+ console.error(gl.getShaderInfoLog(shader)); // eslint-disable-line
675
+ }
676
+
677
+ gl.attachShader(program, shader);
678
+ });
679
+ gl.bindAttribLocation(program, 0, 'position');
680
+ gl.linkProgram(program);
681
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
682
+ console.error(gl.getProgramInfoLog(program)); // eslint-disable-line
683
+ }
684
+
685
+ return program;
686
+ }
687
+ function saveAllState(state, vctx) {
688
+ // save all WebGL state (current bindings, current texture units,
689
+ // current attributes and/or vertex shade object, current program,
690
+ // current blend, stencil, zbuffer, culling, viewport etc... state
691
+ var gl = sharedWebGLContext;
692
+ state.activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);
693
+
694
+ // save texture units
695
+ for (var i = 0; i < numTextureUnits; ++i) {
696
+ gl.activeTexture(gl.TEXTURE0 + i);
697
+ var unit = state.textureUnits[i];
698
+ unit.texture2D = gl.getParameter(gl.TEXTURE_BINDING_2D);
699
+ unit.textureCubemap = gl.getParameter(gl.TEXTURE_BINDING_CUBE_MAP);
700
+ }
701
+
702
+ // bindings
703
+ state.arrayBuffer = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
704
+ state.renderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);
705
+ state.framebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
706
+
707
+ // save attributes
708
+ if (sharedVAOExtension) {
709
+ state.vertexArray = gl.getParameter(sharedVAOExtension.VERTEX_ARRAY_BINDING_OES);
710
+ } else {
711
+ for (var _i3 = 0; _i3 < numAttributes; ++_i3) {
712
+ var attrib = state.attributes[_i3];
713
+ attrib.buffer = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
714
+ attrib.enabled = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_ENABLED);
715
+ attrib.size = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_SIZE);
716
+ attrib.stride = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_STRIDE);
717
+ attrib.type = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_TYPE);
718
+ attrib.normalized = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_NORMALIZED);
719
+ attrib.value = gl.getVertexAttrib(_i3, gl.CURRENT_VERTEX_ATTRIB);
720
+ attrib.offset = gl.getVertexAttribOffset(_i3, gl.VERTEX_ATTRIB_ARRAY_POINTER);
721
+ if (sharedInstanceExtension) {
722
+ attrib.divisor = gl.getVertexAttrib(_i3, sharedInstanceExtension.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);
723
+ }
724
+ }
725
+ state.elementArrayBuffer = gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING);
726
+ }
727
+ state.blend = gl.getParameter(gl.BLEND);
728
+ state.cullFace = gl.getParameter(gl.CULL_FACE);
729
+ state.depthTest = gl.getParameter(gl.DEPTH_TEST);
730
+ state.dither = gl.getParameter(gl.DITHER);
731
+ state.polygonOffsetFill = gl.getParameter(gl.POLYGON_OFFSET_FILL);
732
+ state.sampleAlphaToCoverage = gl.getParameter(gl.SAMPLE_ALPHA_TO_COVERAGE);
733
+ state.sampleCoverage = gl.getParameter(gl.SAMPLE_COVERAGE);
734
+ state.scissorTest = gl.getParameter(gl.SCISSOR_TEST);
735
+ state.stencilTest = gl.getParameter(gl.STENCIL_TEST);
736
+ state.packAlignment = gl.getParameter(gl.PACK_ALIGNMENT);
737
+ state.unpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);
738
+ state.unpackColorspaceConversion = gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL);
739
+ state.unpackFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);
740
+ state.unpackPremultiplyAlpha = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);
741
+ state.currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
742
+ state.viewport = gl.getParameter(gl.VIEWPORT);
743
+ state.scissor = gl.getParameter(gl.SCISSOR_BOX);
744
+ state.blendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB);
745
+ state.blendDstRgb = gl.getParameter(gl.BLEND_DST_RGB);
746
+ state.blendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);
747
+ state.blendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);
748
+ state.blendEquationRgb = gl.getParameter(gl.BLEND_EQUATION_RGB);
749
+ state.blendEquationAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);
750
+ state.blendColor = gl.getParameter(gl.BLEND_COLOR);
751
+ state.colorClearValue = gl.getParameter(gl.COLOR_CLEAR_VALUE);
752
+ state.colorMask = gl.getParameter(gl.COLOR_WRITEMASK);
753
+ state.cullFaceMode = gl.getParameter(gl.CULL_FACE_MODE);
754
+ state.depthClearValue = gl.getParameter(gl.DEPTH_CLEAR_VALUE);
755
+ state.depthFunc = gl.getParameter(gl.DEPTH_FUNC);
756
+ state.depthRange = gl.getParameter(gl.DEPTH_RANGE);
757
+ state.depthMask = gl.getParameter(gl.DEPTH_WRITEMASK);
758
+ state.frontFace = gl.getParameter(gl.FRONT_FACE);
759
+ state.generateMipmapHint = gl.getParameter(gl.GENERATE_MIPMAP_HINT);
760
+ state.lineWidth = gl.getParameter(gl.LINE_WIDTH);
761
+ state.polygonOffsetFactor = gl.getParameter(gl.POLYGON_OFFSET_FACTOR);
762
+ state.polygonOffsetUnits = gl.getParameter(gl.POLYGON_OFFSET_UNITS);
763
+ state.sampleCoverageValue = gl.getParameter(gl.SAMPLE_COVERAGE_VALUE);
764
+ state.sampleCoverageUnits = gl.getParameter(gl.SAMPLE_COVERAGE_INVERT);
765
+ state.stencilBackFail = gl.getParameter(gl.STENCIL_BACK_FAIL);
766
+ state.stencilBackFunc = gl.getParameter(gl.STENCIL_BACK_FUNC);
767
+ state.stencilBackPassDepthFail = gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_FAIL);
768
+ state.stencilBackPassDepthPass = gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_PASS);
769
+ state.stencilBackRef = gl.getParameter(gl.STENCIL_BACK_REF);
770
+ state.stencilBackValueMask = gl.getParameter(gl.STENCIL_BACK_VALUE_MASK);
771
+ state.stencilBackWriteMask = gl.getParameter(gl.STENCIL_BACK_WRITEMASK);
772
+ state.stencilClearValue = gl.getParameter(gl.STENCIL_CLEAR_VALUE);
773
+ state.stencilFail = gl.getParameter(gl.STENCIL_FAIL);
774
+ state.stencilFunc = gl.getParameter(gl.STENCIL_FUNC);
775
+ state.stencilPassDepthFail = gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);
776
+ state.stencilPassDepthPass = gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);
777
+ state.stencilRef = gl.getParameter(gl.STENCIL_REF);
778
+ state.stencilValueMask = gl.getParameter(gl.STENCIL_VALUE_MASK);
779
+ state.stencilWriteMask = gl.getParameter(gl.STENCIL_WRITEMASK);
780
+ for (var fns of extensionSaveRestoreHelpersArray) {
781
+ fns.save(state, vctx);
782
+ }
783
+ }
784
+ function restoreAllState(state, vctx) {
785
+ // restore all WebGL state (current bindings, current texture units,
786
+ // current attributes and/or vertex shade object, current program,
787
+ // current blend, stencil, zbuffer, culling, viewport etc... state
788
+ // save all WebGL state (current bindings, current texture units,
789
+ // current attributes and/or vertex shade object, current program,
790
+ // current blend, stencil, zbuffer, culling, viewport etc... state
791
+ var gl = sharedWebGLContext;
792
+
793
+ // restore texture units
794
+ for (var i = 0; i < numTextureUnits; ++i) {
795
+ gl.activeTexture(gl.TEXTURE0 + i);
796
+ var unit = state.textureUnits[i];
797
+ gl.bindTexture(gl.TEXTURE_2D, unit.texture2D);
798
+ gl.bindTexture(gl.TEXTURE_CUBE_MAP, unit.textureCubemap);
799
+ }
800
+ gl.activeTexture(state.activeTexture);
801
+
802
+ // restore attributes
803
+ if (sharedVAOExtension) {
804
+ sharedVAOExtension.bindVertexArrayOES(state.vertexArray);
805
+ } else {
806
+ for (var _i4 = 0; _i4 < numAttributes; ++_i4) {
807
+ var attrib = state.attributes[_i4];
808
+ if (attrib.enabled) {
809
+ gl.enableVertexAttribArray(_i4);
810
+ } else {
811
+ gl.disableVertexAttribArray(_i4);
812
+ }
813
+ gl.vertexAttrib4fv(_i4, attrib.value);
814
+ gl.bindBuffer(gl.ARRAY_BUFFER, attrib.buffer);
815
+ gl.vertexAttribPointer(_i4, attrib.size, attrib.type, attrib.normalized, attrib.stride, attrib.offset);
816
+ if (sharedInstanceExtension) {
817
+ sharedInstanceExtension.vertexAttribDivisorANGLE(_i4, attrib.divisor);
818
+ }
819
+ }
820
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, state.elementArrayBuffer);
821
+ }
822
+
823
+ // bindings'
824
+ gl.bindBuffer(gl.ARRAY_BUFFER, state.arrayBuffer);
825
+ gl.bindRenderbuffer(gl.RENDERBUFFER, state.renderbuffer);
826
+ gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);
827
+ enableDisable(gl, gl.BLEND, state.blend);
828
+ enableDisable(gl, gl.CULL_FACE, state.cullFace);
829
+ enableDisable(gl, gl.DEPTH_TEST, state.depthTest);
830
+ enableDisable(gl, gl.DITHER, state.dither);
831
+ enableDisable(gl, gl.POLYGON_OFFSET_FILL, state.polygonOffsetFill);
832
+ enableDisable(gl, gl.SAMPLE_ALPHA_TO_COVERAGE, state.sampleAlphaToCoverage);
833
+ enableDisable(gl, gl.SAMPLE_COVERAGE, state.sampleCoverage);
834
+ enableDisable(gl, gl.SCISSOR_TEST, state.scissorTest);
835
+ enableDisable(gl, gl.STENCIL_TEST, state.stencilTest);
836
+ gl.pixelStorei(gl.PACK_ALIGNMENT, state.packAlignment);
837
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, state.unpackAlignment);
838
+ gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, state.unpackColorspaceConversion);
839
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, state.unpackFlipY);
840
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, state.unpackPremultiplyAlpha);
841
+ gl.useProgram(state.currentProgram);
842
+ gl.viewport(...state.viewport);
843
+ gl.scissor(...state.scissor);
844
+ gl.blendFuncSeparate(state.blendSrcRgb, state.blendDstRgb, state.blendSrcAlpha, state.blendDstAlpha);
845
+ gl.blendEquationSeparate(state.blendEquationRgb, state.blendEquationAlpha);
846
+ gl.blendColor(...state.blendColor);
847
+ gl.clearColor(...state.colorClearValue);
848
+ gl.colorMask(...state.colorMask);
849
+ gl.cullFace(state.cullFaceMode);
850
+ gl.clearDepth(state.depthClearValue);
851
+ gl.depthFunc(state.depthFunc);
852
+ gl.depthRange(...state.depthRange);
853
+ gl.depthMask(state.depthMask);
854
+ gl.frontFace(state.frontFace);
855
+ gl.hint(gl.GENERATE_MIPMAP_HINT, state.generateMipmapHint);
856
+ gl.lineWidth(state.lineWidth);
857
+ gl.polygonOffset(state.polygonOffsetFactor, state.polygonOffsetUnits);
858
+ gl.sampleCoverage(state.sampleCoverageValue, state.sampleCoverageUnits);
859
+ gl.stencilFuncSeparate(gl.BACK, state.stencilBackFunc, state.stencilBackRef, state.stencilBackValueMask);
860
+ gl.stencilFuncSeparate(gl.FRONT, state.stencilFunc, state.stencilRef, state.stencilValueMask);
861
+ gl.stencilOpSeparate(gl.BACK, state.stencilBackFail, state.stencilBackPassDepthFail, state.stencilBackPassDepthPass);
862
+ gl.stencilOpSeparate(gl.FRONT, state.stencilFail, state.stencilPassDepthFail, state.stencilPassDepthPass);
863
+ gl.stencilMaskSeparate(gl.BACK, state.stencilBackWriteMask);
864
+ gl.stencilMaskSeparate(gl.FRONT, state.stencilWriteMask);
865
+ gl.clearStencil(state.stencilClearValue);
866
+ for (var fns of extensionSaveRestoreHelpersArray) {
867
+ fns.restore(state, vctx);
868
+ }
869
+ }
870
+ function enableDisable(gl, feature, enable) {
871
+ if (enable) {
872
+ gl.enable(feature);
873
+ } else {
874
+ gl.disable(feature);
875
+ }
876
+ }
877
+ function renderAllDirtyVirtualCanvases() {
878
+ if (!someContextsNeedRendering) {
879
+ return;
880
+ }
881
+ someContextsNeedRendering = false;
882
+
883
+ // save all current WebGL state on the previous current virtual context
884
+ if (currentVirtualContext) {
885
+ saveAllState(currentVirtualContext._state, currentVirtualContext);
886
+ currentVirtualContext = null;
887
+ }
888
+
889
+ // set the state back to the one for drawing the canvas
890
+ restoreAllState(baseState);
891
+ for (var vctx of canvasToVirtualContextMap.values()) {
892
+ if (!vctx._needComposite) {
893
+ continue;
894
+ }
895
+ vctx._needComposite = false;
896
+ vctx.composite(sharedWebGLContext);
897
+ }
898
+ }
899
+ window.requestAnimationFrame = function (origFn) {
900
+ return function (callback) {
901
+ return origFn.call(window, time => {
902
+ var result = callback(time);
903
+ renderAllDirtyVirtualCanvases();
904
+ return result;
905
+ });
906
+ };
907
+ }(window.requestAnimationFrame);
908
+ function setup(options) {
909
+ Object.assign(settings, options);
910
+ }
911
+ window.virtualWebGL = {
912
+ setup
913
+ };
914
+ }
915
+ //# sourceMappingURL=virtual-webgl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-webgl.js","names":["initializeVirtualWebGL","settings","disableWebGL2","compositorCreator","canvasToVirtualContextMap","Map","extensionInfo","webgl_draw_buffers","wrapperFnMakerFn","makeWEBGL_draw_buffersWrapper","saveRestoreMakerFn","makeWEBGL_drawBuffersSaveRestoreHelper","oes_vertex_array_object","makeOES_vertex_array_objectWrapper","angle_instanced_arrays","makeANGLE_instanced_arraysWrapper","extensionSaveRestoreHelpersArray","extensionSaveRestoreHelpers","currentVirtualContext","someContextsNeedRendering","sharedWebGLContext","document","createElement","getContext","sharedVAOExtension","getExtension","sharedInstanceExtension","numAttributes","getParameter","MAX_VERTEX_ATTRIBS","numTextureUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","numDrawBuffers","baseState","makeDefaultState","vs","fs","fs2","premultplyAlphaTrueProgram","createProgram","premultplyAlphaFalseProgram","vao","createVertexArrayOES","bindVertexArrayOES","vertexArray","gl","positionLoc","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","saveAllState","HTMLCanvasElement","prototype","origFn","type","contextAttributes","createOrGetVirtualWebGLContext","call","valueOrDefault","value","defaultValue","undefined","errorDisposedContext","fnName","Error","concat","DefaultCompositor","constructor","canvas","_ctx","composite","texture","ctx","width","height","maxWidth","Math","max","maxHeight","viewport","useProgram","premultipliedAlpha","bindTexture","TEXTURE_2D","drawArrays","TRIANGLES","globalCompositeOperation","drawImage","dispose","VirtualWebGLContext","arguments","length","compositor","disposeHelper","_compositor","_disposeHelper","_extensions","_drawingbufferTexture","createTexture","_drawingbufferFramebuffer","createFramebuffer","_contextAttributes","alpha","antialias","depth","failIfMajorPerformanceCaveat","stencil","_preserveDrawingbuffer","preserveDrawingBuffer","oldTexture","TEXTURE_BINDING_2D","oldFramebuffer","FRAMEBUFFER_BINDING","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","oldRenderbuffer","RENDERBUFFER_BINDING","_depthRenderbuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","attachmentPoint","DEPTH_STENCIL_ATTACHMENT","DEPTH_ATTACHMENT","framebufferRenderbuffer","_state","framebuffer","_defaultVertexArray","deleteFramebuffer","deleteTexture","deleteRenderbuffer","key","Object","entries","drawingBufferWidth","drawingBufferHeight","_needClear","WebGLRenderingContext","state","arrayBuffer","renderbuffer","blend","cullFace","depthTest","dither","polygonOffsetFill","sampleAlphaToCoverage","sampleCoverage","scissorTest","stencilTest","activeTexture","TEXTURE0","packAlignment","unpackAlignment","unpackColorspaceConversion","BROWSER_DEFAULT_WEBGL","unpackFlipY","unpackPremultiplyAlpha","currentProgram","scissor","blendSrcRgb","ONE","blendDstRgb","ZERO","blendSrcAlpha","blendDstAlpha","blendEquationRgb","FUNC_ADD","blendEquationAlpha","blendColor","colorClearValue","colorMask","cullFaceMode","BACK","depthClearValue","depthFunc","LESS","depthRange","depthMask","frontFace","CCW","generateMipmapHint","DONT_CARE","lineWidth","polygonOffsetFactor","polygonOffsetUnits","sampleCoverageValue","sampleCoverageUnits","stencilBackFail","KEEP","stencilBackFunc","ALWAYS","stencilBackPassDepthFail","stencilBackPassDepthPass","stencilBackRef","stencilBackValueMask","stencilBackWriteMask","stencilClearValue","stencilFail","stencilFunc","stencilPassDepthFail","stencilPassDepthPass","stencilRef","stencilValueMask","stencilWriteMask","textureUnits","elementArrayBuffer","attributes","i","attrib","enabled","size","stride","normalized","divisor","push","texture2D","textureCubemap","propDesc","getOwnPropertyDescriptor","get","virtualPropDesc","console","warn","newValue","virtualGetContextAttributes","createGetExtensionWrapper","virtualBindFramebuffer","virtualGetParameter","virtualReadPixels","createDrawWrapper","createWrapper","extensionName","toLowerCase","existingExt","ext","wrapperInfo","log","saveRestoreHelper","saveRestore","wrapper","_context","isFramebufferBindingNull","vctx","name","virutalbindVertexArrayOES","makeCurrentContext","resizeCanvasIfChanged","_len","args","Array","_key3","createExtDrawWrapper","_len2","_key4","beforeDraw","_len3","_key5","result","exts","afterDraw","backBuffer","drawingBuffers","maxDrawBuffers","MAX_DRAW_BUFFERS_WEBGL","defaultBackDrawBuffers","defaultFBDrawBuffers","NONE","initDrawBufferState","drawBuffers","slice","save","DRAW_BUFFER0_WEBGL","restore","drawBuffersWEBGL","clearIfNeeded","readPixels","pname","bindpoint","_len4","_key6","disable","SCISSOR_TEST","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","enableDisable","_needComposite","setTimeout","renderAllDirtyVirtualCanvases","_len5","_key7","restoreAllState","_width","_height","format","RGBA","RGB","texImage2D","UNSIGNED_BYTE","internalFormat","DEPTH_STENCIL","DEPTH_COMPONENT16","renderbufferStorage","existingVirtualCtx","newVirtualCtx","delete","set","shaderSources","program","VERTEX_SHADER","FRAGMENT_SHADER","forEach","ndx","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","error","getShaderInfoLog","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","ACTIVE_TEXTURE","unit","TEXTURE_BINDING_CUBE_MAP","ARRAY_BUFFER_BINDING","VERTEX_ARRAY_BINDING_OES","getVertexAttrib","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","CURRENT_VERTEX_ATTRIB","offset","getVertexAttribOffset","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","ELEMENT_ARRAY_BUFFER_BINDING","BLEND","CULL_FACE","DEPTH_TEST","DITHER","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","STENCIL_TEST","PACK_ALIGNMENT","UNPACK_ALIGNMENT","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","CURRENT_PROGRAM","VIEWPORT","SCISSOR_BOX","BLEND_SRC_RGB","BLEND_DST_RGB","BLEND_SRC_ALPHA","BLEND_DST_ALPHA","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","BLEND_COLOR","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","CULL_FACE_MODE","DEPTH_CLEAR_VALUE","DEPTH_FUNC","DEPTH_RANGE","DEPTH_WRITEMASK","FRONT_FACE","GENERATE_MIPMAP_HINT","LINE_WIDTH","POLYGON_OFFSET_FACTOR","POLYGON_OFFSET_UNITS","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","STENCIL_BACK_FAIL","STENCIL_BACK_FUNC","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","STENCIL_CLEAR_VALUE","STENCIL_FAIL","STENCIL_FUNC","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","fns","TEXTURE_CUBE_MAP","disableVertexAttribArray","vertexAttrib4fv","vertexAttribDivisorANGLE","ELEMENT_ARRAY_BUFFER","pixelStorei","blendFuncSeparate","blendEquationSeparate","clearColor","clearDepth","hint","polygonOffset","stencilFuncSeparate","FRONT","stencilOpSeparate","stencilMaskSeparate","clearStencil","feature","enable","values","window","requestAnimationFrame","callback","time","setup","options","assign","virtualWebGL"],"sources":["../src/virtual-webgl.ts"],"sourcesContent":["/* eslint-disable */\n// @ts-nocheck\n// Copied from https://github.com/greggman/virtual-webgl\n// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\n/*\n * Copyright 2018, Gregg Tavares.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *\n * * Neither the name of Gregg Tavares. nor the names of his\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nexport function initializeVirtualWebGL() {\n const settings = {\n disableWebGL2: false,\n compositorCreator() {},\n };\n const canvasToVirtualContextMap = new Map();\n const extensionInfo = {\n webgl_draw_buffers: {\n wrapperFnMakerFn: makeWEBGL_draw_buffersWrapper,\n saveRestoreMakerFn: makeWEBGL_drawBuffersSaveRestoreHelper,\n },\n oes_vertex_array_object: {\n wrapperFnMakerFn: makeOES_vertex_array_objectWrapper,\n },\n angle_instanced_arrays: {\n wrapperFnMakerFn: makeANGLE_instanced_arraysWrapper,\n },\n };\n const extensionSaveRestoreHelpersArray = [];\n const extensionSaveRestoreHelpers = {};\n\n let currentVirtualContext = null;\n let someContextsNeedRendering;\n\n const sharedWebGLContext = document\n .createElement('canvas')\n .getContext('webgl');\n const sharedVAOExtension = sharedWebGLContext.getExtension(\n 'OES_vertex_array_object'\n );\n const sharedInstanceExtension = sharedWebGLContext.getExtension(\n 'ANGLE_instanced_arrays'\n );\n const numAttributes = sharedWebGLContext.getParameter(\n sharedWebGLContext.MAX_VERTEX_ATTRIBS\n );\n const numTextureUnits = sharedWebGLContext.getParameter(\n sharedWebGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS\n );\n let numDrawBuffers;\n const baseState = makeDefaultState(300, 150);\n\n const vs = `\n attribute vec4 position;\n varying vec2 v_texcoord;\n void main() {\n gl_Position = position;\n v_texcoord = position.xy * .5 + .5;\n }\n `;\n\n const fs = `\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n }\n `;\n\n const fs2 = `\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n `;\n\n const premultplyAlphaTrueProgram = createProgram(sharedWebGLContext, [\n vs,\n fs,\n ]);\n const premultplyAlphaFalseProgram = createProgram(sharedWebGLContext, [\n vs,\n fs2,\n ]);\n\n if (sharedVAOExtension) {\n const vao = sharedVAOExtension.createVertexArrayOES();\n sharedVAOExtension.bindVertexArrayOES(vao);\n baseState.vertexArray = vao;\n }\n\n {\n const gl = sharedWebGLContext;\n const positionLoc = 0; // hard coded in createProgram\n\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW\n );\n\n gl.enableVertexAttribArray(positionLoc);\n gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);\n }\n\n saveAllState(baseState);\n\n HTMLCanvasElement.prototype.getContext = (function (origFn) {\n return function (type, contextAttributes) {\n if (type === 'webgl' || type === 'experimental-webgl') {\n return createOrGetVirtualWebGLContext(this, type, contextAttributes);\n } else if (type === 'webgl2' && settings.disableWebGL2) {\n return null;\n }\n return origFn.call(this, type, contextAttributes);\n };\n })(HTMLCanvasElement.prototype.getContext);\n\n function valueOrDefault(value, defaultValue) {\n return value === undefined ? defaultValue : value;\n }\n\n function errorDisposedContext(fnName) {\n return function () {\n throw new Error(`tried to call ${fnName} on disposed context`);\n };\n }\n\n class DefaultCompositor {\n constructor(canvas) {\n this._ctx = canvas.getContext('2d');\n }\n composite(gl, texture, canvas, contextAttributes) {\n // note: not entirely sure what to do here. We need this canvas to be at least as large\n // as the canvas we're drawing to. Resizing a canvas is slow so I think just making\n // sure we never get smaller than the largest canvas. At the moment though I'm too lazy\n // to make it smaller.\n const ctx = this._ctx;\n const width = canvas.width;\n const height = canvas.height;\n const maxWidth = Math.max(gl.canvas.width, width);\n const maxHeight = Math.max(gl.canvas.height, height);\n if (gl.canvas.width !== maxWidth || gl.canvas.height !== maxHeight) {\n gl.canvas.width = maxWidth;\n gl.canvas.height = maxHeight;\n }\n\n gl.viewport(0, 0, width, height);\n\n gl.useProgram(\n contextAttributes.premultipliedAlpha\n ? premultplyAlphaTrueProgram\n : premultplyAlphaFalseProgram\n );\n\n // draw the drawingbuffer's texture to the offscreen canvas\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // copy it to target canvas\n ctx.globalCompositeOperation = 'copy';\n ctx.drawImage(\n gl.canvas,\n 0,\n maxHeight - height,\n width,\n height, // src rect\n 0,\n 0,\n width,\n height\n ); // dest rect\n }\n dispose() {}\n }\n\n class VirtualWebGLContext {\n constructor(canvas, contextAttributes = {}, compositor, disposeHelper) {\n const gl = sharedWebGLContext;\n this.canvas = canvas;\n // Should use Symbols or someting to hide these variables from the outside.\n\n this._compositor = compositor;\n this._disposeHelper = disposeHelper;\n this._extensions = {};\n // based on context attributes and canvas.width, canvas.height\n // create a texture and framebuffer\n this._drawingbufferTexture = gl.createTexture();\n this._drawingbufferFramebuffer = gl.createFramebuffer();\n this._contextAttributes = {\n alpha: valueOrDefault(contextAttributes.alpha, true),\n antialias: false,\n depth: valueOrDefault(contextAttributes.depth, true),\n failIfMajorPerformanceCaveat: false,\n premultipliedAlpha: valueOrDefault(\n contextAttributes.premultipliedAlpha,\n true\n ),\n stencil: valueOrDefault(contextAttributes.stencil, false),\n };\n this._preserveDrawingbuffer = valueOrDefault(\n contextAttributes.preserveDrawingBuffer,\n false\n );\n\n const oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n const oldFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n gl.bindTexture(gl.TEXTURE_2D, this._drawingbufferTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n // this._drawingbufferTexture.id = canvas.id;\n // this._drawingbufferFramebuffer.id = canvas.id;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._drawingbufferFramebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n this._drawingbufferTexture,\n 0\n );\n\n if (this._contextAttributes.depth) {\n const oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n this._depthRenderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderbuffer);\n const attachmentPoint = this._contextAttributes.stencil\n ? gl.DEPTH_STENCIL_ATTACHMENT\n : gl.DEPTH_ATTACHMENT;\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n attachmentPoint,\n gl.RENDERBUFFER,\n this._depthRenderbuffer\n );\n gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, oldTexture);\n gl.bindFramebuffer(gl.FRAMEBUFFER, oldFramebuffer);\n\n // remember all WebGL state (default bindings, default texture units,\n // default attributes and/or vertex shade object, default program,\n // default blend, stencil, zbuffer, culling, viewport etc... state\n this._state = makeDefaultState(canvas.width, canvas.height);\n this._state.framebuffer = this._drawingbufferFramebuffer;\n\n if (sharedVAOExtension) {\n this._state.vertexArray = sharedVAOExtension.createVertexArrayOES();\n this._defaultVertexArray = this._state.vertexArray;\n }\n }\n dispose() {\n this._disposeHelper();\n const gl = sharedWebGLContext;\n gl.deleteFramebuffer(this._drawingbufferFramebuffer);\n gl.deleteTexture(this._drawingbufferTexture);\n if (this._depthRenderbuffer) {\n gl.deleteRenderbuffer(this._depthRenderbuffer);\n }\n if (this._compositor.dispose) {\n this._compositor.dispose();\n }\n for (const [key, value] of Object.entries(this)) {\n if (typeof value === 'function') {\n this[key] = errorDisposedContext(key);\n }\n }\n for (const [key, value] of Object.entries(\n VirtualWebGLContext.prototype\n )) {\n if (typeof value === 'function') {\n this[key] = errorDisposedContext(key);\n }\n }\n }\n get drawingBufferWidth() {\n return this.canvas.width;\n }\n get drawingBufferHeight() {\n return this.canvas.height;\n }\n composite(gl) {\n this._compositor.composite(\n gl,\n this._drawingbufferTexture,\n this.canvas,\n this._contextAttributes\n );\n if (!this._preserveDrawingbuffer) {\n this._needClear = true;\n }\n }\n }\n\n function makeDefaultState(width, height) {\n const gl = WebGLRenderingContext;\n const state = {\n arrayBuffer: null,\n renderbuffer: null,\n framebuffer: null,\n\n blend: false,\n cullFace: false,\n depthTest: false,\n dither: false,\n polygonOffsetFill: false,\n sampleAlphaToCoverage: false,\n sampleCoverage: false,\n scissorTest: false,\n stencilTest: false,\n\n activeTexture: gl.TEXTURE0,\n\n packAlignment: 4,\n unpackAlignment: 4,\n unpackColorspaceConversion: gl.BROWSER_DEFAULT_WEBGL,\n unpackFlipY: 0,\n unpackPremultiplyAlpha: 0,\n\n currentProgram: null,\n viewport: [0, 0, width, height],\n scissor: [0, 0, 0, 0],\n blendSrcRgb: gl.ONE,\n blendDstRgb: gl.ZERO,\n blendSrcAlpha: gl.ONE,\n blendDstAlpha: gl.ZERO,\n blendEquationRgb: gl.FUNC_ADD,\n blendEquationAlpha: gl.FUNC_ADD,\n blendColor: [0, 0, 0, 0],\n colorClearValue: [0, 0, 0, 0],\n colorMask: [true, true, true, true],\n cullFaceMode: gl.BACK,\n depthClearValue: 1,\n depthFunc: gl.LESS,\n depthRange: [0, 1],\n depthMask: true,\n frontFace: gl.CCW,\n generateMipmapHint: gl.DONT_CARE,\n lineWidth: 1,\n polygonOffsetFactor: 0,\n polygonOffsetUnits: 0,\n sampleCoverageValue: 1,\n sampleCoverageUnits: false,\n stencilBackFail: gl.KEEP,\n stencilBackFunc: gl.ALWAYS,\n stencilBackPassDepthFail: gl.KEEP,\n stencilBackPassDepthPass: gl.KEEP,\n stencilBackRef: 0,\n stencilBackValueMask: 0xffffffff,\n stencilBackWriteMask: 0xffffffff,\n stencilClearValue: 0,\n stencilFail: gl.KEEP,\n stencilFunc: gl.ALWAYS,\n stencilPassDepthFail: gl.KEEP,\n stencilPassDepthPass: gl.KEEP,\n stencilRef: 0,\n stencilValueMask: 0xffffffff,\n stencilWriteMask: 0xffffffff,\n\n textureUnits: [],\n };\n\n if (sharedVAOExtension) {\n state.vertexArray = null;\n } else {\n state.elementArrayBuffer = null;\n state.attributes = [];\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = {\n buffer: null,\n enabled: false,\n size: 4,\n stride: 0,\n type: gl.FLOAT,\n normalized: false,\n value: [0, 0, 0, 1],\n };\n if (sharedInstanceExtension) {\n attrib.divisor = 0;\n }\n state.attributes.push(attrib);\n }\n }\n\n for (let i = 0; i < numTextureUnits; ++i) {\n state.textureUnits.push({\n texture2D: null,\n textureCubemap: null,\n });\n }\n\n return state;\n }\n\n // copy all WebGL constants and functions to the prototype of\n // VirtualWebGLContext\n for (let key in WebGLRenderingContext.prototype) {\n const propDesc = Object.getOwnPropertyDescriptor(\n WebGLRenderingContext.prototype,\n key\n );\n if (propDesc.get) {\n // it's a getter/setter ?\n const virtualPropDesc = Object.getOwnPropertyDescriptor(\n VirtualWebGLContext.prototype,\n key\n );\n if (!virtualPropDesc) {\n console.warn(`WebGLRenderingContext.${key} is not supported`);\n }\n continue;\n }\n switch (key) {\n default: {\n const value = WebGLRenderingContext.prototype[key];\n let newValue = value;\n switch (key) {\n case 'getContextAttributes':\n newValue = virtualGetContextAttributes;\n break;\n case 'getExtension':\n newValue = createGetExtensionWrapper(value);\n break;\n case 'bindFramebuffer':\n newValue = virtualBindFramebuffer;\n break;\n case 'getParameter':\n newValue = virtualGetParameter;\n break;\n case 'readPixels':\n newValue = virtualReadPixels;\n break;\n case 'clear':\n case 'drawArrays':\n case 'drawElements':\n newValue = createDrawWrapper(value);\n break;\n default:\n if (typeof value === 'function') {\n newValue = createWrapper(value);\n }\n break;\n }\n VirtualWebGLContext.prototype[key] = newValue;\n break;\n }\n }\n }\n\n function createGetExtensionWrapper(origFn) {\n return function (extensionName) {\n extensionName = extensionName.toLowerCase();\n // just like the real context each extension needs a virtual class because each use\n // of the extension might be modified (as in people adding properties to it)\n const existingExt = this._extensions[extensionName];\n if (existingExt) {\n return existingExt;\n }\n\n const ext = origFn.call(sharedWebGLContext, extensionName);\n const wrapperInfo = extensionInfo[extensionName] || {};\n const wrapperFnMakerFn =\n wrapperInfo.wrapperFnMakerFn ||\n (() => {\n console.log('trying to get extension:', extensionName);\n });\n const saveRestoreHelper = extensionSaveRestoreHelpers[extensionName];\n if (!saveRestoreHelper) {\n const saveRestoreMakerFn = wrapperInfo.saveRestoreMakerFn;\n if (saveRestoreMakerFn) {\n const saveRestore = saveRestoreMakerFn(ext);\n extensionSaveRestoreHelpers[extensionName] = saveRestore;\n extensionSaveRestoreHelpersArray.push(saveRestore);\n }\n }\n\n const wrapper = {\n _context: this,\n };\n for (let key in ext) {\n let value = ext[key];\n if (typeof value === 'function') {\n value = wrapperFnMakerFn(ext, value, extensionName);\n }\n wrapper[key] = value;\n }\n\n this._extensions[extensionName] = wrapper;\n\n return wrapper;\n };\n }\n\n function isFramebufferBindingNull(vctx) {\n return vctx._state.framebuffer === vctx._drawingbufferFramebuffer;\n }\n\n function makeOES_vertex_array_objectWrapper(ext, origFn, name) {\n switch (name) {\n case 'bindVertexArrayOES':\n return virutalbindVertexArrayOES;\n }\n\n return function (...args) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n return origFn.call(ext, ...args);\n };\n }\n\n function virutalbindVertexArrayOES(vao) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n if (!vao) {\n vao = this._context._defaultVertexArray;\n }\n sharedVAOExtension.bindVertexArrayOES(vao);\n }\n\n function makeANGLE_instanced_arraysWrapper(ext, origFn, name) {\n switch (name) {\n case 'drawArraysInstancedANGLE':\n case 'drawElementsInstancedANGLE':\n return createExtDrawWrapper(ext, origFn);\n break;\n }\n\n return function (...args) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n return origFn.call(ext, ...args);\n };\n }\n\n function createExtDrawWrapper(ext, origFn) {\n return function (...args) {\n // a rendering function was called so we need to copy are drawingBuffer\n // to the canvas for this context after the current event.\n beforeDraw(this._context);\n const result = origFn.call(exts, ...args);\n afterDraw(this._context);\n return result;\n };\n }\n\n function makeWEBGL_draw_buffersWrapper(ext, origFn, name) {\n const gl = sharedWebGLContext;\n const backBuffer = [gl.COLOR_ATTACHMENT0];\n\n return function (drawingBuffers) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n // if the virtual context is bound to canvas then fake it\n if (isFramebufferBindingNull(this._context)) {\n // this really isn't checking everything\n // for example if the user passed in array.length != 1\n // then we are supposed to generate an error\n if (drawingBuffers[0] === gl.BACK) {\n drawingBuffers = backBuffer;\n }\n }\n origFn.call(ext, drawingBuffers);\n };\n }\n\n function makeWEBGL_drawBuffersSaveRestoreHelper(ext) {\n const gl = sharedWebGLContext;\n const maxDrawBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);\n const defaultBackDrawBuffers = [gl.BACK];\n const defaultFBDrawBuffers = [gl.COLOR_ATTACHMENT0];\n for (let i = 1; i < maxDrawBuffers; ++i) {\n defaultFBDrawBuffers.push(gl.NONE);\n }\n\n function initDrawBufferState(state) {\n state.drawBuffers = state.framebuffer\n ? defaultFBDrawBuffers.slice()\n : defaultBackDrawBuffers.slice();\n }\n\n function save(state) {\n if (!state.drawBuffers) {\n initDrawBufferState(state);\n }\n // remember state.framebuffer is only null for the offscreen canvas\n const drawBuffers = state.drawBuffers;\n for (let i = 0; i < drawBuffers.length; ++i) {\n drawBuffers[i] = gl.getParameter(ext.DRAW_BUFFER0_WEBGL + i);\n }\n }\n\n function restore(state) {\n if (!state.drawBuffers) {\n initDrawBufferState(state);\n }\n ext.drawBuffersWEBGL(state.drawBuffers);\n }\n\n return {\n save,\n restore,\n };\n }\n\n function virtualGetContextAttributes() {\n return this._contextAttributes;\n }\n\n function virtualReadPixels(...args) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n clearIfNeeded(this);\n const gl = sharedWebGLContext;\n return gl.readPixels(...args);\n }\n\n function virtualGetParameter(pname) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n const gl = sharedWebGLContext;\n const value = gl.getParameter(pname);\n switch (pname) {\n case gl.FRAMEBUFFER_BINDING:\n if (value === this._drawingbufferFramebuffer) {\n return null;\n }\n break;\n case 0x8825: // DRAW_BUFFER0_WEBGL\n if (isFramebufferBindingNull(this)) {\n if (value === gl.COLOR_ATTACHMENT0) {\n return gl.BACK;\n }\n }\n break;\n case 0x85b5: // VERTEX_ARRAY_BINDING_OES\n if (value === this._defaultVertexArray) {\n return null;\n }\n break;\n }\n return value;\n }\n\n function virtualBindFramebuffer(bindpoint, framebuffer) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n const gl = sharedWebGLContext;\n if (bindpoint === WebGLRenderingContext.FRAMEBUFFER) {\n if (framebuffer === null) {\n // bind our drawingBuffer\n framebuffer = this._drawingbufferFramebuffer;\n }\n }\n\n gl.bindFramebuffer(bindpoint, framebuffer);\n this._state.framebuffer = framebuffer;\n }\n\n function createWrapper(origFn) {\n // lots of optimization could happen here depending on specific functions\n return function (...args) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n return origFn.call(sharedWebGLContext, ...args);\n };\n }\n\n function clearIfNeeded(vctx) {\n if (vctx._needClear) {\n vctx._needClear = false;\n const gl = sharedWebGLContext;\n gl.bindFramebuffer(gl.FRAMEBUFFER, vctx._drawingbufferFramebuffer);\n gl.disable(gl.SCISSOR_TEST);\n gl.clear(\n gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT\n );\n enableDisable(gl, gl.SCISSOR_TEST, vctx._state.scissorTest);\n gl.bindFramebuffer(gl.FRAMEBUFFER, vctx._state.framebuffer);\n }\n }\n\n function beforeDraw(vctx) {\n makeCurrentContext(vctx);\n resizeCanvasIfChanged(vctx);\n clearIfNeeded(vctx);\n }\n\n function afterDraw(vctx) {\n if (isFramebufferBindingNull(vctx)) {\n vctx._needComposite = true;\n if (!someContextsNeedRendering) {\n someContextsNeedRendering = true;\n setTimeout(renderAllDirtyVirtualCanvases, 0);\n }\n }\n }\n\n function createDrawWrapper(origFn) {\n return function (...args) {\n // a rendering function was called so we need to copy are drawingBuffer\n // to the canvas for this context after the current event.\n beforeDraw(this);\n const result = origFn.call(sharedWebGLContext, ...args);\n afterDraw(this);\n return result;\n };\n }\n\n function makeCurrentContext(vctx) {\n if (currentVirtualContext === vctx) {\n return;\n }\n\n // save all current WebGL state on the previous current virtual context\n if (currentVirtualContext) {\n saveAllState(currentVirtualContext._state, currentVirtualContext);\n }\n\n // restore all state for the new context\n restoreAllState(vctx._state, vctx);\n\n // check if the current state is supposed to be rendering to the canvas.\n // if so bind vctx._drawingbuffer\n\n currentVirtualContext = vctx;\n }\n\n function resizeCanvasIfChanged(vctx) {\n const width = vctx.canvas.width;\n const height = vctx.canvas.height;\n\n if (width !== vctx._width || height !== vctx._height) {\n vctx._width = width;\n vctx._height = height;\n const gl = sharedWebGLContext;\n const oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n const format = vctx._contextAttributes.alpha ? gl.RGBA : gl.RGB;\n gl.bindTexture(gl.TEXTURE_2D, vctx._drawingbufferTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n format,\n width,\n height,\n 0,\n format,\n gl.UNSIGNED_BYTE,\n null\n );\n gl.bindTexture(gl.TEXTURE_2D, oldTexture);\n\n if (vctx._depthRenderbuffer) {\n const oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n const internalFormat = vctx._contextAttributes.stencil\n ? gl.DEPTH_STENCIL\n : gl.DEPTH_COMPONENT16;\n gl.bindRenderbuffer(gl.RENDERBUFFER, vctx._depthRenderbuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);\n gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n }\n }\n }\n\n function createOrGetVirtualWebGLContext(canvas, type, contextAttributes) {\n // check if this canvas already has a context\n const existingVirtualCtx = canvasToVirtualContextMap.get(canvas);\n if (existingVirtualCtx) {\n return existingVirtualCtx;\n }\n\n const compositor =\n settings.compositorCreator(canvas, type, contextAttributes) ||\n new DefaultCompositor(canvas, type, contextAttributes);\n const newVirtualCtx = new VirtualWebGLContext(\n canvas,\n contextAttributes,\n compositor,\n () => {\n canvasToVirtualContextMap.delete(canvas);\n }\n );\n canvasToVirtualContextMap.set(canvas, newVirtualCtx);\n\n return newVirtualCtx;\n }\n\n function createProgram(gl, shaderSources) {\n const program = gl.createProgram();\n [gl.VERTEX_SHADER, gl.FRAGMENT_SHADER].forEach((type, ndx) => {\n const shader = gl.createShader(type);\n gl.shaderSource(shader, shaderSources[ndx]);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error(gl.getShaderInfoLog(shader)); // eslint-disable-line\n }\n gl.attachShader(program, shader);\n });\n gl.bindAttribLocation(program, 0, 'position');\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error(gl.getProgramInfoLog(program)); // eslint-disable-line\n }\n\n return program;\n }\n\n function saveAllState(state, vctx) {\n // save all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n const gl = sharedWebGLContext;\n\n state.activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);\n\n // save texture units\n for (let i = 0; i < numTextureUnits; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n const unit = state.textureUnits[i];\n unit.texture2D = gl.getParameter(gl.TEXTURE_BINDING_2D);\n unit.textureCubemap = gl.getParameter(gl.TEXTURE_BINDING_CUBE_MAP);\n }\n\n // bindings\n state.arrayBuffer = gl.getParameter(gl.ARRAY_BUFFER_BINDING);\n state.renderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n state.framebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n // save attributes\n if (sharedVAOExtension) {\n state.vertexArray = gl.getParameter(\n sharedVAOExtension.VERTEX_ARRAY_BINDING_OES\n );\n } else {\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = state.attributes[i];\n attrib.buffer = gl.getVertexAttrib(\n i,\n gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\n );\n attrib.enabled = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_ENABLED);\n attrib.size = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_SIZE);\n attrib.stride = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_STRIDE);\n attrib.type = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_TYPE);\n attrib.normalized = gl.getVertexAttrib(\n i,\n gl.VERTEX_ATTRIB_ARRAY_NORMALIZED\n );\n attrib.value = gl.getVertexAttrib(i, gl.CURRENT_VERTEX_ATTRIB);\n attrib.offset = gl.getVertexAttribOffset(\n i,\n gl.VERTEX_ATTRIB_ARRAY_POINTER\n );\n if (sharedInstanceExtension) {\n attrib.divisor = gl.getVertexAttrib(\n i,\n sharedInstanceExtension.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\n );\n }\n }\n state.elementArrayBuffer = gl.getParameter(\n gl.ELEMENT_ARRAY_BUFFER_BINDING\n );\n }\n\n state.blend = gl.getParameter(gl.BLEND);\n state.cullFace = gl.getParameter(gl.CULL_FACE);\n state.depthTest = gl.getParameter(gl.DEPTH_TEST);\n state.dither = gl.getParameter(gl.DITHER);\n state.polygonOffsetFill = gl.getParameter(gl.POLYGON_OFFSET_FILL);\n state.sampleAlphaToCoverage = gl.getParameter(gl.SAMPLE_ALPHA_TO_COVERAGE);\n state.sampleCoverage = gl.getParameter(gl.SAMPLE_COVERAGE);\n state.scissorTest = gl.getParameter(gl.SCISSOR_TEST);\n state.stencilTest = gl.getParameter(gl.STENCIL_TEST);\n\n state.packAlignment = gl.getParameter(gl.PACK_ALIGNMENT);\n state.unpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);\n state.unpackColorspaceConversion = gl.getParameter(\n gl.UNPACK_COLORSPACE_CONVERSION_WEBGL\n );\n state.unpackFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);\n state.unpackPremultiplyAlpha = gl.getParameter(\n gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL\n );\n\n state.currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n state.viewport = gl.getParameter(gl.VIEWPORT);\n state.scissor = gl.getParameter(gl.SCISSOR_BOX);\n state.blendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB);\n state.blendDstRgb = gl.getParameter(gl.BLEND_DST_RGB);\n state.blendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);\n state.blendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);\n state.blendEquationRgb = gl.getParameter(gl.BLEND_EQUATION_RGB);\n state.blendEquationAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);\n state.blendColor = gl.getParameter(gl.BLEND_COLOR);\n state.colorClearValue = gl.getParameter(gl.COLOR_CLEAR_VALUE);\n state.colorMask = gl.getParameter(gl.COLOR_WRITEMASK);\n state.cullFaceMode = gl.getParameter(gl.CULL_FACE_MODE);\n state.depthClearValue = gl.getParameter(gl.DEPTH_CLEAR_VALUE);\n state.depthFunc = gl.getParameter(gl.DEPTH_FUNC);\n state.depthRange = gl.getParameter(gl.DEPTH_RANGE);\n state.depthMask = gl.getParameter(gl.DEPTH_WRITEMASK);\n state.frontFace = gl.getParameter(gl.FRONT_FACE);\n state.generateMipmapHint = gl.getParameter(gl.GENERATE_MIPMAP_HINT);\n state.lineWidth = gl.getParameter(gl.LINE_WIDTH);\n state.polygonOffsetFactor = gl.getParameter(gl.POLYGON_OFFSET_FACTOR);\n state.polygonOffsetUnits = gl.getParameter(gl.POLYGON_OFFSET_UNITS);\n state.sampleCoverageValue = gl.getParameter(gl.SAMPLE_COVERAGE_VALUE);\n state.sampleCoverageUnits = gl.getParameter(gl.SAMPLE_COVERAGE_INVERT);\n state.stencilBackFail = gl.getParameter(gl.STENCIL_BACK_FAIL);\n state.stencilBackFunc = gl.getParameter(gl.STENCIL_BACK_FUNC);\n state.stencilBackPassDepthFail = gl.getParameter(\n gl.STENCIL_BACK_PASS_DEPTH_FAIL\n );\n state.stencilBackPassDepthPass = gl.getParameter(\n gl.STENCIL_BACK_PASS_DEPTH_PASS\n );\n state.stencilBackRef = gl.getParameter(gl.STENCIL_BACK_REF);\n state.stencilBackValueMask = gl.getParameter(gl.STENCIL_BACK_VALUE_MASK);\n state.stencilBackWriteMask = gl.getParameter(gl.STENCIL_BACK_WRITEMASK);\n state.stencilClearValue = gl.getParameter(gl.STENCIL_CLEAR_VALUE);\n state.stencilFail = gl.getParameter(gl.STENCIL_FAIL);\n state.stencilFunc = gl.getParameter(gl.STENCIL_FUNC);\n state.stencilPassDepthFail = gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);\n state.stencilPassDepthPass = gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);\n state.stencilRef = gl.getParameter(gl.STENCIL_REF);\n state.stencilValueMask = gl.getParameter(gl.STENCIL_VALUE_MASK);\n state.stencilWriteMask = gl.getParameter(gl.STENCIL_WRITEMASK);\n\n for (const fns of extensionSaveRestoreHelpersArray) {\n fns.save(state, vctx);\n }\n }\n\n function restoreAllState(state, vctx) {\n // restore all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n // save all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n const gl = sharedWebGLContext;\n\n // restore texture units\n for (let i = 0; i < numTextureUnits; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n const unit = state.textureUnits[i];\n gl.bindTexture(gl.TEXTURE_2D, unit.texture2D);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, unit.textureCubemap);\n }\n gl.activeTexture(state.activeTexture);\n\n // restore attributes\n if (sharedVAOExtension) {\n sharedVAOExtension.bindVertexArrayOES(state.vertexArray);\n } else {\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = state.attributes[i];\n if (attrib.enabled) {\n gl.enableVertexAttribArray(i);\n } else {\n gl.disableVertexAttribArray(i);\n }\n gl.vertexAttrib4fv(i, attrib.value);\n gl.bindBuffer(gl.ARRAY_BUFFER, attrib.buffer);\n gl.vertexAttribPointer(\n i,\n attrib.size,\n attrib.type,\n attrib.normalized,\n attrib.stride,\n attrib.offset\n );\n if (sharedInstanceExtension) {\n sharedInstanceExtension.vertexAttribDivisorANGLE(i, attrib.divisor);\n }\n }\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, state.elementArrayBuffer);\n }\n\n // bindings'\n gl.bindBuffer(gl.ARRAY_BUFFER, state.arrayBuffer);\n gl.bindRenderbuffer(gl.RENDERBUFFER, state.renderbuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);\n\n enableDisable(gl, gl.BLEND, state.blend);\n enableDisable(gl, gl.CULL_FACE, state.cullFace);\n enableDisable(gl, gl.DEPTH_TEST, state.depthTest);\n enableDisable(gl, gl.DITHER, state.dither);\n enableDisable(gl, gl.POLYGON_OFFSET_FILL, state.polygonOffsetFill);\n enableDisable(gl, gl.SAMPLE_ALPHA_TO_COVERAGE, state.sampleAlphaToCoverage);\n enableDisable(gl, gl.SAMPLE_COVERAGE, state.sampleCoverage);\n enableDisable(gl, gl.SCISSOR_TEST, state.scissorTest);\n enableDisable(gl, gl.STENCIL_TEST, state.stencilTest);\n\n gl.pixelStorei(gl.PACK_ALIGNMENT, state.packAlignment);\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, state.unpackAlignment);\n gl.pixelStorei(\n gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n state.unpackColorspaceConversion\n );\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, state.unpackFlipY);\n gl.pixelStorei(\n gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,\n state.unpackPremultiplyAlpha\n );\n\n gl.useProgram(state.currentProgram);\n\n gl.viewport(...state.viewport);\n gl.scissor(...state.scissor);\n gl.blendFuncSeparate(\n state.blendSrcRgb,\n state.blendDstRgb,\n state.blendSrcAlpha,\n state.blendDstAlpha\n );\n gl.blendEquationSeparate(state.blendEquationRgb, state.blendEquationAlpha);\n gl.blendColor(...state.blendColor);\n gl.clearColor(...state.colorClearValue);\n gl.colorMask(...state.colorMask);\n gl.cullFace(state.cullFaceMode);\n gl.clearDepth(state.depthClearValue);\n gl.depthFunc(state.depthFunc);\n gl.depthRange(...state.depthRange);\n gl.depthMask(state.depthMask);\n gl.frontFace(state.frontFace);\n gl.hint(gl.GENERATE_MIPMAP_HINT, state.generateMipmapHint);\n gl.lineWidth(state.lineWidth);\n gl.polygonOffset(state.polygonOffsetFactor, state.polygonOffsetUnits);\n gl.sampleCoverage(state.sampleCoverageValue, state.sampleCoverageUnits);\n gl.stencilFuncSeparate(\n gl.BACK,\n state.stencilBackFunc,\n state.stencilBackRef,\n state.stencilBackValueMask\n );\n gl.stencilFuncSeparate(\n gl.FRONT,\n state.stencilFunc,\n state.stencilRef,\n state.stencilValueMask\n );\n gl.stencilOpSeparate(\n gl.BACK,\n state.stencilBackFail,\n state.stencilBackPassDepthFail,\n state.stencilBackPassDepthPass\n );\n gl.stencilOpSeparate(\n gl.FRONT,\n state.stencilFail,\n state.stencilPassDepthFail,\n state.stencilPassDepthPass\n );\n gl.stencilMaskSeparate(gl.BACK, state.stencilBackWriteMask);\n gl.stencilMaskSeparate(gl.FRONT, state.stencilWriteMask);\n gl.clearStencil(state.stencilClearValue);\n\n for (const fns of extensionSaveRestoreHelpersArray) {\n fns.restore(state, vctx);\n }\n }\n\n function enableDisable(gl, feature, enable) {\n if (enable) {\n gl.enable(feature);\n } else {\n gl.disable(feature);\n }\n }\n\n function renderAllDirtyVirtualCanvases() {\n if (!someContextsNeedRendering) {\n return;\n }\n someContextsNeedRendering = false;\n\n // save all current WebGL state on the previous current virtual context\n if (currentVirtualContext) {\n saveAllState(currentVirtualContext._state, currentVirtualContext);\n currentVirtualContext = null;\n }\n\n // set the state back to the one for drawing the canvas\n restoreAllState(baseState);\n\n for (const vctx of canvasToVirtualContextMap.values()) {\n if (!vctx._needComposite) {\n continue;\n }\n\n vctx._needComposite = false;\n vctx.composite(sharedWebGLContext);\n }\n }\n\n window.requestAnimationFrame = (function (origFn) {\n return function (callback) {\n return origFn.call(window, time => {\n const result = callback(time);\n renderAllDirtyVirtualCanvases();\n return result;\n });\n };\n })(window.requestAnimationFrame);\n\n function setup(options) {\n Object.assign(settings, options);\n }\n\n window.virtualWebGL = {\n setup,\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/chart",
3
- "version": "0.104.1-virtual-webgl.1+2bfbbefa",
3
+ "version": "0.104.1-virtual-webgl.11+f78f9a09",
4
4
  "description": "Deephaven Chart",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -27,13 +27,13 @@
27
27
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
28
28
  },
29
29
  "dependencies": {
30
- "@deephaven/components": "^0.104.1-virtual-webgl.1+2bfbbefa",
31
- "@deephaven/icons": "^0.104.1-virtual-webgl.1+2bfbbefa",
30
+ "@deephaven/components": "^0.104.1-virtual-webgl.11+f78f9a09",
31
+ "@deephaven/icons": "^0.104.1-virtual-webgl.11+f78f9a09",
32
32
  "@deephaven/jsapi-types": "^1.0.0-dev0.37.2",
33
- "@deephaven/jsapi-utils": "^0.104.1-virtual-webgl.1+2bfbbefa",
34
- "@deephaven/log": "^0.104.1-virtual-webgl.1+2bfbbefa",
35
- "@deephaven/react-hooks": "^0.104.1-virtual-webgl.1+2bfbbefa",
36
- "@deephaven/utils": "^0.104.1-virtual-webgl.1+2bfbbefa",
33
+ "@deephaven/jsapi-utils": "^0.104.1-virtual-webgl.11+f78f9a09",
34
+ "@deephaven/log": "^0.104.1-virtual-webgl.11+f78f9a09",
35
+ "@deephaven/react-hooks": "^0.104.1-virtual-webgl.11+f78f9a09",
36
+ "@deephaven/utils": "^0.104.1-virtual-webgl.11+f78f9a09",
37
37
  "buffer": "^6.0.3",
38
38
  "fast-deep-equal": "^3.1.3",
39
39
  "lodash.debounce": "^4.0.8",
@@ -42,16 +42,15 @@
42
42
  "memoizee": "^0.4.15",
43
43
  "plotly.js": "^2.29.1",
44
44
  "prop-types": "^15.7.2",
45
- "react-plotly.js": "^2.6.0",
46
- "virtual-webgl": "^1.0.6"
45
+ "react-plotly.js": "^2.6.0"
47
46
  },
48
47
  "peerDependencies": {
49
48
  "react": ">=16.8.0"
50
49
  },
51
50
  "devDependencies": {
52
- "@deephaven/jsapi-shim": "^0.104.1-virtual-webgl.1+2bfbbefa",
53
- "@deephaven/mocks": "^0.104.1-virtual-webgl.1+2bfbbefa",
54
- "@deephaven/test-utils": "^0.104.1-virtual-webgl.1+2bfbbefa",
51
+ "@deephaven/jsapi-shim": "^0.104.1-virtual-webgl.11+f78f9a09",
52
+ "@deephaven/mocks": "^0.104.1-virtual-webgl.11+f78f9a09",
53
+ "@deephaven/test-utils": "^0.104.1-virtual-webgl.11+f78f9a09",
55
54
  "@types/plotly.js": "^2.12.11"
56
55
  },
57
56
  "files": [
@@ -63,5 +62,5 @@
63
62
  "publishConfig": {
64
63
  "access": "public"
65
64
  },
66
- "gitHead": "2bfbbefa5023ce401e14c31ab78b566c2b040a86"
65
+ "gitHead": "f78f9a09606b4d01383dffe9b1a674c3146d7159"
67
66
  }