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

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.
@@ -1 +0,0 @@
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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"}