@luma.gl/webgl 9.0.0-alpha.34 → 9.0.0-alpha.35

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 +1 @@
1
- {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"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"}
@@ -226,6 +226,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
226
226
  continue;
227
227
  }
228
228
  this.vertexArrayObject.setConstant(attributeInfo.location, value);
229
+ this.vertexArrayObject.enable(attributeInfo.location, false);
229
230
  }
230
231
  }
231
232
  _applyBindings() {
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pipeline.js","names":["RenderPipeline","cast","log","mergeShaderLayout","getAttributeInfosFromLayouts","GL","getGLFromVertexType","getShaderLayout","withDeviceParameters","withGLParameters","setUniform","WEBGLBuffer","WEBGLTexture","WEBGLVertexArrayObject","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","handle","vs","fs","introspectedLayout","shaderLayout","bufferLayout","uniforms","bindings","constantAttributes","_indexBuffer","varyings","vertexArrayObject","_textureUniforms","_textureIndexCounter","_uniformCount","_uniformSetters","gl","createProgram","setSpectorMetadata","id","bufferMode","SEPARATE_ATTRIBS","length","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","destroy","deleteProgram","destroyed","setIndexBuffer","indexBuffer","webglBuffer","setElementBuffer","setAttributes","buffers","attributeInfos","bufferName","buffer","Object","entries","set","attributeInfo","values","glType","bufferDataType","setAttribute","attributeName","toBuffer","size","bufferComponents","type","stride","byteStride","offset","byteOffset","normalized","integer","divisor","stepMode","setBuffer","location","warn","name","setConstantAttributes","attributes","assign","setBindings","value","binding","find","Error","setUniforms","draw","options","_this$_indexBuffer","renderPass","vertexCount","instanceCount","firstVertex","drawMode","getGLDrawMode","topology","isIndexed","Boolean","indexType","glIndexType","isInstanced","Number","_areTexturesRenderable","useProgram","bind","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","_applyConstantAttributes","webglRenderPass","parameters","glParameters","_this$device$gl2","drawElementsInstanced","drawElements","_this$device$gl3","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","texture","update","loaded","undefined","setConstant","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","byteLength","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","_this$uniforms$name","POINTS","LINES","LINE_STRIP","LINE_LOOP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN"],"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {\n TypedArray,\n UniformValue,\n RenderPipelineProps,\n Binding,\n ShaderLayout,\n BufferLayout,\n PrimitiveTopology\n} from '@luma.gl/core';\nimport type {RenderPass, Buffer} from '@luma.gl/core';\nimport {RenderPipeline, cast, log} from '@luma.gl/core';\nimport {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\nimport {getGLFromVertexType} from '../converters/vertex-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters, withGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLShader} from './webgl-shader';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLVertexArrayObject} from '../objects/webgl-vertex-array-object';\nimport {WEBGLRenderPass} from './webgl-render-pass';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n /** The WebGL device that created this render pipeline */\n device: WebGLDevice;\n /** Handle to underlying WebGL program */\n handle: WebGLProgram;\n /** vertex shader */\n vs: WEBGLShader;\n /** fragment shader */\n fs: WEBGLShader;\n /** The layout extracted from shader by WebGL introspection APIs */\n introspectedLayout: ShaderLayout;\n /** The merged layout */\n shaderLayout: ShaderLayout;\n /** Buffer map describing buffer interleaving etc */\n bufferLayout: BufferLayout[];\n\n /** Uniforms set on this model */\n uniforms: Record<string, any> = {};\n /** Bindings set on this model */\n bindings: Record<string, any> = {};\n /** Any constant attributes */\n constantAttributes: Record<string, TypedArray> = {};\n /** Index buffer is stored separately */\n _indexBuffer?: WEBGLBuffer;\n /** WebGL varyings */\n varyings: string[] | null = null;\n\n /** Stores attribute bindings */\n vertexArrayObject: WEBGLVertexArrayObject;\n\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, {id: this.props.id});\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);\n // Merge provided layout with introspected layout\n this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);\n // Merge layout with any buffer map overrides\n this.bufferLayout = props.bufferLayout || [];\n // this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = webglBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(buffers: Record<string, Buffer>): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n\n for (const [bufferName, buffer] of Object.entries(buffers)) {\n let set = false;\n for (const attributeInfo of Object.values(attributeInfos)) {\n if (attributeInfo.bufferName !== bufferName) {\n continue; // eslint-disable-line no-continue\n }\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n\n const glType = getGLFromVertexType(attributeInfo.bufferDataType);\n // TODO remove when we have more confidence\n log.log(2, {\n setAttribute: attributeInfo.attributeName,\n toBuffer: bufferName,\n size: attributeInfo.bufferComponents,\n type: glType,\n stride: attributeInfo.byteStride,\n offset: attributeInfo.byteOffset,\n normalized: attributeInfo.normalized,\n // it is the shader attribute declaration, not the vertex memory format,\n // that determines if the data in the buffer will be treated as integers.\n // /\n // Also note that WebGL supports assigning non-normalized integer data to floating point attributes,\n // but as far as we can tell, WebGPU does not.\n integer: attributeInfo.integer,\n divisor: attributeInfo.stepMode === 'instance' ? 1 : 0\n })();\n this.vertexArrayObject.setBuffer(attributeInfo.location, webglBuffer, {\n size: attributeInfo.bufferComponents,\n type: glType,\n stride: attributeInfo.byteStride,\n offset: attributeInfo.byteOffset,\n normalized: attributeInfo.normalized,\n // it is the shader attribute declaration, not the vertex memory format,\n // that determines if the data in the buffer will be treated as integers.\n // /\n // Also note that WebGL supports assigning non-normalized integer data to floating point attributes,\n // but as far as we can tell, WebGPU does not.\n integer: attributeInfo.integer,\n divisor: attributeInfo.stepMode === 'instance' ? 1 : 0\n });\n set = true;\n }\n if (!set) {\n log.warn(\n `setAttributes(): Ignoring (buffer \"${buffer.id}\" for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n }\n }\n }\n\n /**\n * Constant attributes are only supported in WebGL, not in WebGPU\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @param attributes\n */\n setConstantAttributes(attributes: Record<string, TypedArray>): void {\n // TODO - there should be no advantage to setting these here vs in _applyConstantAttributes\n // for (const [name, value] of Object.entries(attributes)) {\n // const attributeInfo = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout, name);\n // if (!attributeInfo) {\n // log.warn(\n // `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n // )();\n // continue; // eslint-disable-line no-continue\n // }\n // this.vertexArrayObject.setConstant(attributeInfo.location, value);\n // }\n Object.assign(this.constantAttributes, attributes);\n }\n\n /**\n * Bindings include: textures, samplers and uniform buffers\n * @todo needed for portable model\n */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.shaderLayout.bindings.find(binding => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, UniformValue>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass,\n vertexCount,\n // indexCount,\n instanceCount,\n firstVertex = 0\n // firstIndex,\n // firstInstance,\n // baseVertex\n } = options;\n\n const drawMode = getGLDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.glIndexType;\n const isInstanced: boolean = Number(options.instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n this._applyConstantAttributes();\n\n const webglRenderPass = renderPass as WEBGLRenderPass;\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, this.props.parameters, () => {\n withGLParameters(this.device, webglRenderPass.glParameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n drawMode,\n vertexCount || 0, // indexCount?\n indexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(\n drawMode,\n firstVertex,\n vertexCount || 0,\n instanceCount || 0\n );\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /**\n * Constant attributes need to be reset before every draw call\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @note Constant attributes are only supported in WebGL, not in WebGPU\n */\n _applyConstantAttributes(): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n for (const [name, value] of Object.entries(this.constantAttributes)) {\n const attributeInfo = attributeInfos[name];\n if (!attributeInfo) {\n log.warn(\n `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n continue; // eslint-disable-line no-continue\n }\n this.vertexArrayObject.setConstant(attributeInfo.location, value);\n }\n }\n\n /** Apply any bindings (before each draw call) */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.shaderLayout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n /**\n * Due to program sharing, uniforms need to be reset before every draw call\n * (though caching will avoid redundant WebGL calls)\n */\n _applyUniforms() {\n for (const uniformLayout of this.shaderLayout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] ?? textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for draw */\nfunction getGLDrawMode(\n topology: PrimitiveTopology\n):\n | GL.POINTS\n | GL.LINES\n | GL.LINE_STRIP\n | GL.LINE_LOOP\n | GL.TRIANGLES\n | GL.TRIANGLE_STRIP\n | GL.TRIANGLE_FAN {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'line-loop-webgl': return GL.LINE_LOOP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'line-loop-webgl': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n case 'triangle-fan-webgl': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n"],"mappings":"AAWA,SAAQA,cAAc,EAAEC,IAAI,EAAEC,GAAG,QAAO,eAAe;AACvD,SAAQC,iBAAiB,EAAEC,4BAA4B,QAAO,eAAe;AAC7E,SAAQC,EAAE,QAAO,oBAAoB;AAAC,SAE9BC,mBAAmB;AAAA,SACnBC,eAAe;AAAA,SACfC,oBAAoB,EAAEC,gBAAgB;AAAA,SACtCC,UAAU;AAAA,SAIVC,WAAW;AAAA,SAEXC,YAAY;AAAA,SACZC,sBAAsB;AAG9B,MAAMC,yBAAyB,GAAG,CAAC;AAGnC,OAAO,MAAMC,mBAAmB,SAASf,cAAc,CAAC;EAmCtDgB,WAAWA,CAACC,MAAmB,EAAEC,KAA0B,EAAE;IAC3D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KAlCvBD,MAAM;IAAA,KAENE,MAAM;IAAA,KAENC,EAAE;IAAA,KAEFC,EAAE;IAAA,KAEFC,kBAAkB;IAAA,KAElBC,YAAY;IAAA,KAEZC,YAAY;IAAA,KAGZC,QAAQ,GAAwB,CAAC,CAAC;IAAA,KAElCC,QAAQ,GAAwB,CAAC,CAAC;IAAA,KAElCC,kBAAkB,GAA+B,CAAC,CAAC;IAAA,KAEnDC,YAAY;IAAA,KAEZC,QAAQ,GAAoB,IAAI;IAAA,KAGhCC,iBAAiB;IAAA,KAEjBC,gBAAgB,GAAwB,CAAC,CAAC;IAAA,KAC1CC,oBAAoB,GAAW,CAAC;IAAA,KAChCC,aAAa,GAAW,CAAC;IAAA,KACzBC,eAAe,GAA6B,CAAC,CAAC;IAI5C,IAAI,CAACjB,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,MAAM,GAAG,IAAI,CAACD,KAAK,CAACC,MAAM,IAAI,IAAI,CAACF,MAAM,CAACkB,EAAE,CAACC,aAAa,CAAC,CAAC;IACjE,IAAI,CAACnB,MAAM,CAACoB,kBAAkB,CAAC,IAAI,CAAClB,MAAM,EAAE;MAACmB,EAAE,EAAE,IAAI,CAACpB,KAAK,CAACoB;IAAE,CAAC,CAAC;IAGhE,IAAI,CAAClB,EAAE,GAAGnB,IAAI,CAAciB,KAAK,CAACE,EAAE,CAAC;IACrC,IAAI,CAACC,EAAE,GAAGpB,IAAI,CAAciB,KAAK,CAACG,EAAE,CAAC;IAMrC,MAAM;MAACQ,QAAQ;MAAEU,UAAU,GAAGlC,EAAE,CAACmC;IAAgB,CAAC,GAAGtB,KAAK;IAC1D,IAAIW,QAAQ,IAAIA,QAAQ,CAACY,MAAM,GAAG,CAAC,EAAE;MAAA,IAAAC,eAAA;MACnC,IAAI,CAACzB,MAAM,CAAC0B,YAAY,CAAC,CAAC;MAC1B,IAAI,CAACd,QAAQ,GAAGA,QAAQ;MACxB,CAAAa,eAAA,OAAI,CAACzB,MAAM,CAAC2B,GAAG,cAAAF,eAAA,uBAAfA,eAAA,CAAiBG,yBAAyB,CAAC,IAAI,CAAC1B,MAAM,EAAEU,QAAQ,EAAEU,UAAU,CAAC;IAC/E;IAEA,IAAI,CAACO,eAAe,CAAC,CAAC;IAEtB,IAAI,CAACxB,kBAAkB,GAAGf,eAAe,CAAC,IAAI,CAACU,MAAM,CAACkB,EAAE,EAAE,IAAI,CAAChB,MAAM,CAAC;IAEtE,IAAI,CAACI,YAAY,GAAGpB,iBAAiB,CAAC,IAAI,CAACmB,kBAAkB,EAAEJ,KAAK,CAACK,YAAY,CAAC;IAElF,IAAI,CAACC,YAAY,GAAGN,KAAK,CAACM,YAAY,IAAI,EAAE;IAE5C,IAAI,CAACM,iBAAiB,GAAG,IAAIjB,sBAAsB,CAAC,IAAI,CAACI,MAAM,CAAC;EAClE;EAES8B,OAAOA,CAAA,EAAS;IACvB,IAAI,IAAI,CAAC5B,MAAM,EAAE;MACf,IAAI,CAACF,MAAM,CAACkB,EAAE,CAACa,aAAa,CAAC,IAAI,CAAC7B,MAAM,CAAC;MAEzC,IAAI,CAAC8B,SAAS,GAAG,IAAI;IACvB;EACF;EAEAC,cAAcA,CAACC,WAAmB,EAAQ;IACxC,MAAMC,WAAW,GAAGnD,IAAI,CAAckD,WAAW,CAAC;IAClD,IAAI,CAACrB,iBAAiB,CAACuB,gBAAgB,CAACD,WAAW,CAAC;IACpD,IAAI,CAACxB,YAAY,GAAGwB,WAAW;EACjC;EAGAE,aAAaA,CAACC,OAA+B,EAAQ;IACnD,MAAMC,cAAc,GAAGpD,4BAA4B,CAAC,IAAI,CAACmB,YAAY,EAAE,IAAI,CAACC,YAAY,CAAC;IAEzF,KAAK,MAAM,CAACiC,UAAU,EAAEC,MAAM,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,OAAO,CAAC,EAAE;MAC1D,IAAIM,GAAG,GAAG,KAAK;MACf,KAAK,MAAMC,aAAa,IAAIH,MAAM,CAACI,MAAM,CAACP,cAAc,CAAC,EAAE;QACzD,IAAIM,aAAa,CAACL,UAAU,KAAKA,UAAU,EAAE;UAC3C;QACF;QACA,MAAML,WAAW,GAAGnD,IAAI,CAAcyD,MAAM,CAAC;QAE7C,MAAMM,MAAM,GAAG1D,mBAAmB,CAACwD,aAAa,CAACG,cAAc,CAAC;QAEhE/D,GAAG,CAACA,GAAG,CAAC,CAAC,EAAE;UACTgE,YAAY,EAAEJ,aAAa,CAACK,aAAa;UACzCC,QAAQ,EAAEX,UAAU;UACpBY,IAAI,EAAEP,aAAa,CAACQ,gBAAgB;UACpCC,IAAI,EAAEP,MAAM;UACZQ,MAAM,EAAEV,aAAa,CAACW,UAAU;UAChCC,MAAM,EAAEZ,aAAa,CAACa,UAAU;UAChCC,UAAU,EAAEd,aAAa,CAACc,UAAU;UAMpCC,OAAO,EAAEf,aAAa,CAACe,OAAO;UAC9BC,OAAO,EAAEhB,aAAa,CAACiB,QAAQ,KAAK,UAAU,GAAG,CAAC,GAAG;QACvD,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAACjD,iBAAiB,CAACkD,SAAS,CAAClB,aAAa,CAACmB,QAAQ,EAAE7B,WAAW,EAAE;UACpEiB,IAAI,EAAEP,aAAa,CAACQ,gBAAgB;UACpCC,IAAI,EAAEP,MAAM;UACZQ,MAAM,EAAEV,aAAa,CAACW,UAAU;UAChCC,MAAM,EAAEZ,aAAa,CAACa,UAAU;UAChCC,UAAU,EAAEd,aAAa,CAACc,UAAU;UAMpCC,OAAO,EAAEf,aAAa,CAACe,OAAO;UAC9BC,OAAO,EAAEhB,aAAa,CAACiB,QAAQ,KAAK,UAAU,GAAG,CAAC,GAAG;QACvD,CAAC,CAAC;QACFlB,GAAG,GAAG,IAAI;MACZ;MACA,IAAI,CAACA,GAAG,EAAE;QACR3D,GAAG,CAACgF,IAAI,CACL,sCAAqCxB,MAAM,CAACpB,EAAG,4BAA2B6C,IAAK,kBAAiB,IAAI,CAAC7C,EAAG,GAC3G,CAAC,CAAC,CAAC;MACL;IACF;EACF;EAQA8C,qBAAqBA,CAACC,UAAsC,EAAQ;IAYlE1B,MAAM,CAAC2B,MAAM,CAAC,IAAI,CAAC3D,kBAAkB,EAAE0D,UAAU,CAAC;EACpD;EAMAE,WAAWA,CAAC7D,QAAiC,EAAQ;IAKnD,KAAK,MAAM,CAACyD,IAAI,EAAEK,KAAK,CAAC,IAAI7B,MAAM,CAACC,OAAO,CAAClC,QAAQ,CAAC,EAAE;MACpD,MAAM+D,OAAO,GAAG,IAAI,CAAClE,YAAY,CAACG,QAAQ,CAACgE,IAAI,CAACD,OAAO,IAAIA,OAAO,CAACN,IAAI,KAAKA,IAAI,CAAC;MACjF,IAAI,CAACM,OAAO,EAAE;QACZvF,GAAG,CAACgF,IAAI,CAAE,mBAAkBC,IAAK,uBAAsB,IAAI,CAAC7C,EAAG,EAAC,CAAC,CAAC,CAAC;QACnE;MACF;MACA,IAAI,CAACkD,KAAK,EAAE;QACVtF,GAAG,CAACgF,IAAI,CAAE,qBAAoBC,IAAK,uBAAsB,IAAI,CAAC7C,EAAG,EAAC,CAAC,CAAC,CAAC;MACvE;MACA,QAAQmD,OAAO,CAAClB,IAAI;QAClB,KAAK,SAAS;UAEZ,IAAI,EAAEiB,KAAK,YAAY7E,WAAW,CAAC,IAAI,EAAE6E,KAAK,CAAC9B,MAAM,YAAY/C,WAAW,CAAC,EAAE;YAC7E,MAAM,IAAIgF,KAAK,CAAC,cAAc,CAAC;UACjC;UACA;QACF,KAAK,SAAS;UACZ,IAAI,EAAEH,KAAK,YAAY5E,YAAY,CAAC,EAAE;YACpC,MAAM,IAAI+E,KAAK,CAAC,eAAe,CAAC;UAClC;UACA;QACF,KAAK,SAAS;UACZzF,GAAG,CAACgF,IAAI,CAAE,oBAAmBC,IAAK,EAAC,CAAC,CAAC,CAAC;UACtC;QACF;UACE,MAAM,IAAIQ,KAAK,CAACF,OAAO,CAAClB,IAAI,CAAC;MACjC;MAEA,IAAI,CAAC7C,QAAQ,CAACyD,IAAI,CAAC,GAAGK,KAAK;IAC7B;EACF;EAEAI,WAAWA,CAACnE,QAAsC,EAAE;IAElDkC,MAAM,CAAC2B,MAAM,CAAC,IAAI,CAAC7D,QAAQ,EAAEA,QAAQ,CAAC;EACxC;EAMAoE,IAAIA,CAACC,OASJ,EAAW;IAAA,IAAAC,kBAAA;IACV,MAAM;MACJC,UAAU;MACVC,WAAW;MAEXC,aAAa;MACbC,WAAW,GAAG;IAIhB,CAAC,GAAGL,OAAO;IAEX,MAAMM,QAAQ,GAAGC,aAAa,CAAC,IAAI,CAACnF,KAAK,CAACoF,QAAQ,CAAC;IACnD,MAAMC,SAAkB,GAAGC,OAAO,CAAC,IAAI,CAAC5E,YAAY,CAAC;IACrD,MAAM6E,SAAS,IAAAV,kBAAA,GAAG,IAAI,CAACnE,YAAY,cAAAmE,kBAAA,uBAAjBA,kBAAA,CAAmBW,WAAW;IAChD,MAAMC,WAAoB,GAAGC,MAAM,CAACd,OAAO,CAACI,aAAa,CAAC,GAAG,CAAC;IAM9D,IAAI,CAAC,IAAI,CAACW,sBAAsB,CAAC,CAAC,IAAIf,OAAO,CAACG,WAAW,KAAK,CAAC,EAAE;MAE/D,OAAO,KAAK;IACd;IAEA,IAAI,CAAChF,MAAM,CAACkB,EAAE,CAAC2E,UAAU,CAAC,IAAI,CAAC3F,MAAM,CAAC;IAEtC,IAAI,CAACW,iBAAiB,CAACiF,IAAI,CAAC,MAAM;MAChC,MAAMC,aAAa,GAAGC,cAAc,CAAC,IAAI,CAAC/F,KAAK,CAACoF,QAAQ,CAAC;MACzD,MAAMY,iBAAsB,GAAG,IAAI;MACnC,IAAIA,iBAAiB,EAAE;QACrBA,iBAAiB,CAACC,KAAK,CAACH,aAAa,CAAC;MACxC;MAGA,IAAI,CAACI,cAAc,CAAC,CAAC;MACrB,IAAI,CAACC,cAAc,CAAC,CAAC;MACrB,IAAI,CAACC,wBAAwB,CAAC,CAAC;MAE/B,MAAMC,eAAe,GAAGvB,UAA6B;MAGrDxF,oBAAoB,CAAC,IAAI,CAACS,MAAM,EAAE,IAAI,CAACC,KAAK,CAACsG,UAAU,EAAE,MAAM;QAC7D/G,gBAAgB,CAAC,IAAI,CAACQ,MAAM,EAAEsG,eAAe,CAACE,YAAY,EAAE,MAAM;UAEhE,IAAIlB,SAAS,IAAII,WAAW,EAAE;YAAA,IAAAe,gBAAA;YAE5B,CAAAA,gBAAA,OAAI,CAACzG,MAAM,CAAC2B,GAAG,cAAA8E,gBAAA,uBAAfA,gBAAA,CAAiBC,qBAAqB,CACpCvB,QAAQ,EACRH,WAAW,IAAI,CAAC,EAChBQ,SAAS,EACTN,WAAW,EACXD,aAAa,IAAI,CACnB,CAAC;UAGH,CAAC,MAAM,IAAIK,SAAS,EAAE;YACpB,IAAI,CAACtF,MAAM,CAACkB,EAAE,CAACyF,YAAY,CAACxB,QAAQ,EAAEH,WAAW,IAAI,CAAC,EAAEQ,SAAS,EAAEN,WAAW,CAAC;UACjF,CAAC,MAAM,IAAIQ,WAAW,EAAE;YAAA,IAAAkB,gBAAA;YACtB,CAAAA,gBAAA,OAAI,CAAC5G,MAAM,CAAC2B,GAAG,cAAAiF,gBAAA,uBAAfA,gBAAA,CAAiBC,mBAAmB,CAClC1B,QAAQ,EACRD,WAAW,EACXF,WAAW,IAAI,CAAC,EAChBC,aAAa,IAAI,CACnB,CAAC;UACH,CAAC,MAAM;YACL,IAAI,CAACjF,MAAM,CAACkB,EAAE,CAAC4F,UAAU,CAAC3B,QAAQ,EAAED,WAAW,EAAEF,WAAW,IAAI,CAAC,CAAC;UACpE;QACF,CAAC,CAAC;QAEF,IAAIiB,iBAAiB,EAAE;UACrBA,iBAAiB,CAACc,GAAG,CAAC,CAAC;QACzB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,IAAI;EACb;EAKUlF,eAAeA,CAAA,EAAG;IAC1B,MAAM;MAACX;IAAE,CAAC,GAAG,IAAI,CAAClB,MAAM;IACxBkB,EAAE,CAAC8F,YAAY,CAAC,IAAI,CAAC9G,MAAM,EAAE,IAAI,CAACC,EAAE,CAACD,MAAM,CAAC;IAC5CgB,EAAE,CAAC8F,YAAY,CAAC,IAAI,CAAC9G,MAAM,EAAE,IAAI,CAACE,EAAE,CAACF,MAAM,CAAC;IAC5CjB,GAAG,CAACgI,IAAI,CAACpH,yBAAyB,EAAG,mBAAkB,IAAI,CAACwB,EAAG,EAAC,CAAC,CAAC,CAAC;IACnEH,EAAE,CAACgG,WAAW,CAAC,IAAI,CAAChH,MAAM,CAAC;IAC3BjB,GAAG,CAACkI,OAAO,CAACtH,yBAAyB,EAAG,mBAAkB,IAAI,CAACwB,EAAG,EAAC,CAAC,CAAC,CAAC;IAItE,IAAIH,EAAE,CAACkG,KAAK,IAAInI,GAAG,CAACoI,KAAK,GAAG,CAAC,EAAE;MAC7B,MAAMC,MAAM,GAAGpG,EAAE,CAACqG,mBAAmB,CAAC,IAAI,CAACrH,MAAM,EAAEgB,EAAE,CAACsG,WAAW,CAAC;MAClE,IAAI,CAACF,MAAM,EAAE;QACX,MAAM,IAAI5C,KAAK,CAAE,kBAAiBxD,EAAE,CAACuG,iBAAiB,CAAC,IAAI,CAACvH,MAAM,CAAE,EAAC,CAAC;MACxE;MAEAgB,EAAE,CAACwG,eAAe,CAAC,IAAI,CAACxH,MAAM,CAAC;MAC/B,MAAMyH,SAAS,GAAGzG,EAAE,CAACqG,mBAAmB,CAAC,IAAI,CAACrH,MAAM,EAAEgB,EAAE,CAAC0G,eAAe,CAAC;MACzE,IAAI,CAACD,SAAS,EAAE;QACd,MAAM,IAAIjD,KAAK,CAAE,qBAAoBxD,EAAE,CAACuG,iBAAiB,CAAC,IAAI,CAACvH,MAAM,CAAE,EAAC,CAAC;MAC3E;IACF;EACF;EASA0F,sBAAsBA,CAAA,EAAG;IACvB,IAAIiC,kBAAkB,GAAG,IAAI;IAE7B,KAAK,MAAM,GAAGC,OAAO,CAAC,IAAIpF,MAAM,CAACC,OAAO,CAAC,IAAI,CAAC7B,gBAAgB,CAAC,EAAE;MAC/DgH,OAAO,CAACC,MAAM,CAAC,CAAC;MAChBF,kBAAkB,GAAGA,kBAAkB,IAAIC,OAAO,CAACE,MAAM;IAC3D;IAEA,KAAK,MAAM,GAAGF,OAAO,CAAC,IAAIpF,MAAM,CAACC,OAAO,CAAC,IAAI,CAAClC,QAAQ,CAAC,EAAE;MAEvD,IAAIqH,OAAO,CAACE,MAAM,KAAKC,SAAS,EAAE;QAChCJ,kBAAkB,GAAGA,kBAAkB,IAAIC,OAAO,CAACE,MAAM;MAC3D;IACF;IAEA,OAAOH,kBAAkB;EAC3B;EAQAxB,wBAAwBA,CAAA,EAAS;IAC/B,MAAM9D,cAAc,GAAGpD,4BAA4B,CAAC,IAAI,CAACmB,YAAY,EAAE,IAAI,CAACC,YAAY,CAAC;IACzF,KAAK,MAAM,CAAC2D,IAAI,EAAEK,KAAK,CAAC,IAAI7B,MAAM,CAACC,OAAO,CAAC,IAAI,CAACjC,kBAAkB,CAAC,EAAE;MACnE,MAAMmC,aAAa,GAAGN,cAAc,CAAC2B,IAAI,CAAC;MAC1C,IAAI,CAACrB,aAAa,EAAE;QAClB5D,GAAG,CAACgF,IAAI,CACL,2DAA0DC,IAAK,kBAAiB,IAAI,CAAC7C,EAAG,GAC3F,CAAC,CAAC,CAAC;QACH;MACF;MACA,IAAI,CAACR,iBAAiB,CAACqH,WAAW,CAACrF,aAAa,CAACmB,QAAQ,EAAEO,KAAK,CAAC;IACnE;EACF;EAGA4B,cAAcA,CAAA,EAAG;IACf,IAAI,CAACnG,MAAM,CAACkB,EAAE,CAAC2E,UAAU,CAAC,IAAI,CAAC3F,MAAM,CAAC;IAEtC,MAAM;MAACyB;IAAG,CAAC,GAAG,IAAI,CAAC3B,MAAM;IACzB,IAAI,CAAC2B,GAAG,EAAE;MACR,MAAM,IAAI+C,KAAK,CAAC,UAAU,CAAC;IAC7B;IAEA,IAAIyD,WAAW,GAAG,CAAC;IACnB,IAAIC,kBAAkB,GAAG,CAAC;IAC1B,KAAK,MAAM5D,OAAO,IAAI,IAAI,CAAClE,YAAY,CAACG,QAAQ,EAAE;MAChD,MAAM8D,KAAK,GAAG,IAAI,CAAC9D,QAAQ,CAAC+D,OAAO,CAACN,IAAI,CAAC;MACzC,IAAI,CAACK,KAAK,EAAE;QACV,MAAM,IAAIG,KAAK,CAAE,wBAAuBF,OAAO,CAACN,IAAK,OAAM,IAAI,CAAC7C,EAAG,EAAC,CAAC;MACvE;MACA,QAAQmD,OAAO,CAAClB,IAAI;QAClB,KAAK,SAAS;UAEZ,MAAM;YAACY;UAAI,CAAC,GAAGM,OAAO;UACtB,MAAMR,QAAQ,GAAGrC,GAAG,CAAC0G,oBAAoB,CAAC,IAAI,CAACnI,MAAM,EAAEgE,IAAI,CAAC;UAC5D,IAAIF,QAAQ,KAAK5E,EAAE,CAACkJ,aAAa,EAAE;YACjC,MAAM,IAAI5D,KAAK,CAAE,8BAA6BR,IAAK,EAAC,CAAC;UACvD;UACAvC,GAAG,CAAC4G,mBAAmB,CAAC,IAAI,CAACrI,MAAM,EAAEkI,kBAAkB,EAAEpE,QAAQ,CAAC;UAElE,IAAIO,KAAK,YAAY7E,WAAW,EAAE;YAChCiC,GAAG,CAAC6G,cAAc,CAACpJ,EAAE,CAACqJ,cAAc,EAAEL,kBAAkB,EAAE7D,KAAK,CAACrE,MAAM,CAAC;UACzE,CAAC,MAAM;YACLyB,GAAG,CAAC+G,eAAe,CACjBtJ,EAAE,CAACqJ,cAAc,EACjBL,kBAAkB,EAClB7D,KAAK,CAAC9B,MAAM,CAACvC,MAAM,EACnBqE,KAAK,CAACd,MAAM,IAAI,CAAC,EACjBc,KAAK,CAACnB,IAAI,IAAImB,KAAK,CAAC9B,MAAM,CAACkG,UAAU,GAAGpE,KAAK,CAACd,MAChD,CAAC;UACH;UACA2E,kBAAkB,IAAI,CAAC;UACvB;QAEF,KAAK,SAAS;UACZ,IAAI,EAAE7D,KAAK,YAAY5E,YAAY,CAAC,EAAE;YACpC,MAAM,IAAI+E,KAAK,CAAC,SAAS,CAAC;UAC5B;UACA,MAAMoD,OAAqB,GAAGvD,KAAK;UACnC5C,GAAG,CAACiH,aAAa,CAACxJ,EAAE,CAACyJ,QAAQ,GAAGV,WAAW,CAAC;UAC5CxG,GAAG,CAACmH,WAAW,CAAChB,OAAO,CAACiB,MAAM,EAAEjB,OAAO,CAAC5H,MAAM,CAAC;UAE/CiI,WAAW,IAAI,CAAC;UAChB;QAEF,KAAK,SAAS;UAEZ;QAEF,KAAK,SAAS;QACd,KAAK,mBAAmB;UACtB,MAAM,IAAIzD,KAAK,CAAE,iBAAgBF,OAAO,CAAClB,IAAK,0BAAyB,CAAC;MAC5E;IACF;EACF;EAMA8C,cAAcA,CAAA,EAAG;IACf,KAAK,MAAM4C,aAAa,IAAI,IAAI,CAAC1I,YAAY,CAACE,QAAQ,IAAI,EAAE,EAAE;MAAA,IAAAyI,mBAAA;MAC5D,MAAM;QAAC/E,IAAI;QAAEF,QAAQ;QAAEV,IAAI;QAAE6E;MAAW,CAAC,GAAGa,aAAa;MACzD,MAAMzE,KAAK,IAAA0E,mBAAA,GAAG,IAAI,CAACzI,QAAQ,CAAC0D,IAAI,CAAC,cAAA+E,mBAAA,cAAAA,mBAAA,GAAId,WAAW;MAChD,IAAI5D,KAAK,KAAK0D,SAAS,EAAE;QACvBxI,UAAU,CAAC,IAAI,CAACO,MAAM,CAACkB,EAAE,EAAE8C,QAAQ,EAAEV,IAAI,EAAEiB,KAAK,CAAC;MACnD;IACF;EACF;AACF;AAGA,SAASa,aAAaA,CACpBC,QAA2B,EAQT;EAElB,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE,OAAOjG,EAAE,CAAC8J,MAAM;IACnC,KAAK,WAAW;MAAE,OAAO9J,EAAE,CAAC+J,KAAK;IACjC,KAAK,YAAY;MAAE,OAAO/J,EAAE,CAACgK,UAAU;IACvC,KAAK,iBAAiB;MAAE,OAAOhK,EAAE,CAACiK,SAAS;IAC3C,KAAK,eAAe;MAAE,OAAOjK,EAAE,CAACkK,SAAS;IACzC,KAAK,gBAAgB;MAAE,OAAOlK,EAAE,CAACmK,cAAc;IAC/C,KAAK,oBAAoB;MAAE,OAAOnK,EAAE,CAACoK,YAAY;IACjD;MAAS,MAAM,IAAI9E,KAAK,CAACW,QAAQ,CAAC;EACpC;AACF;AAGA,SAASW,cAAcA,CAACX,QAA2B,EAAuC;EAExF,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE,OAAOjG,EAAE,CAAC8J,MAAM;IACnC,KAAK,WAAW;MAAE,OAAO9J,EAAE,CAAC+J,KAAK;IACjC,KAAK,YAAY;MAAE,OAAO/J,EAAE,CAAC+J,KAAK;IAClC,KAAK,iBAAiB;MAAE,OAAO/J,EAAE,CAAC+J,KAAK;IACvC,KAAK,eAAe;MAAE,OAAO/J,EAAE,CAACkK,SAAS;IACzC,KAAK,gBAAgB;MAAE,OAAOlK,EAAE,CAACkK,SAAS;IAC1C,KAAK,oBAAoB;MAAE,OAAOlK,EAAE,CAACkK,SAAS;IAC9C;MAAS,MAAM,IAAI5E,KAAK,CAACW,QAAQ,CAAC;EACpC;AACF"}
1
+ {"version":3,"file":"webgl-render-pipeline.js","names":["RenderPipeline","cast","log","mergeShaderLayout","getAttributeInfosFromLayouts","GL","getGLFromVertexType","getShaderLayout","withDeviceParameters","withGLParameters","setUniform","WEBGLBuffer","WEBGLTexture","WEBGLVertexArrayObject","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","handle","vs","fs","introspectedLayout","shaderLayout","bufferLayout","uniforms","bindings","constantAttributes","_indexBuffer","varyings","vertexArrayObject","_textureUniforms","_textureIndexCounter","_uniformCount","_uniformSetters","gl","createProgram","setSpectorMetadata","id","bufferMode","SEPARATE_ATTRIBS","length","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","destroy","deleteProgram","destroyed","setIndexBuffer","indexBuffer","webglBuffer","setElementBuffer","setAttributes","buffers","attributeInfos","bufferName","buffer","Object","entries","set","attributeInfo","values","glType","bufferDataType","setAttribute","attributeName","toBuffer","size","bufferComponents","type","stride","byteStride","offset","byteOffset","normalized","integer","divisor","stepMode","setBuffer","location","warn","name","setConstantAttributes","attributes","assign","setBindings","value","binding","find","Error","setUniforms","draw","options","_this$_indexBuffer","renderPass","vertexCount","instanceCount","firstVertex","drawMode","getGLDrawMode","topology","isIndexed","Boolean","indexType","glIndexType","isInstanced","Number","_areTexturesRenderable","useProgram","bind","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","_applyConstantAttributes","webglRenderPass","parameters","glParameters","_this$device$gl2","drawElementsInstanced","drawElements","_this$device$gl3","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","texture","update","loaded","undefined","setConstant","enable","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","byteLength","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","_this$uniforms$name","POINTS","LINES","LINE_STRIP","LINE_LOOP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN"],"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {\n TypedArray,\n UniformValue,\n RenderPipelineProps,\n Binding,\n ShaderLayout,\n BufferLayout,\n PrimitiveTopology\n} from '@luma.gl/core';\nimport type {RenderPass, Buffer} from '@luma.gl/core';\nimport {RenderPipeline, cast, log} from '@luma.gl/core';\nimport {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\nimport {getGLFromVertexType} from '../converters/vertex-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters, withGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLShader} from './webgl-shader';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLVertexArrayObject} from '../objects/webgl-vertex-array-object';\nimport {WEBGLRenderPass} from './webgl-render-pass';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n /** The WebGL device that created this render pipeline */\n device: WebGLDevice;\n /** Handle to underlying WebGL program */\n handle: WebGLProgram;\n /** vertex shader */\n vs: WEBGLShader;\n /** fragment shader */\n fs: WEBGLShader;\n /** The layout extracted from shader by WebGL introspection APIs */\n introspectedLayout: ShaderLayout;\n /** The merged layout */\n shaderLayout: ShaderLayout;\n /** Buffer map describing buffer interleaving etc */\n bufferLayout: BufferLayout[];\n\n /** Uniforms set on this model */\n uniforms: Record<string, any> = {};\n /** Bindings set on this model */\n bindings: Record<string, any> = {};\n /** Any constant attributes */\n constantAttributes: Record<string, TypedArray> = {};\n /** Index buffer is stored separately */\n _indexBuffer?: WEBGLBuffer;\n /** WebGL varyings */\n varyings: string[] | null = null;\n\n /** Stores attribute bindings */\n vertexArrayObject: WEBGLVertexArrayObject;\n\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, {id: this.props.id});\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);\n // Merge provided layout with introspected layout\n this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);\n // Merge layout with any buffer map overrides\n this.bufferLayout = props.bufferLayout || [];\n // this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = webglBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(buffers: Record<string, Buffer>): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n\n for (const [bufferName, buffer] of Object.entries(buffers)) {\n let set = false;\n for (const attributeInfo of Object.values(attributeInfos)) {\n if (attributeInfo.bufferName !== bufferName) {\n continue; // eslint-disable-line no-continue\n }\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n\n const glType = getGLFromVertexType(attributeInfo.bufferDataType);\n // TODO remove when we have more confidence\n log.log(2, {\n setAttribute: attributeInfo.attributeName,\n toBuffer: bufferName,\n size: attributeInfo.bufferComponents,\n type: glType,\n stride: attributeInfo.byteStride,\n offset: attributeInfo.byteOffset,\n normalized: attributeInfo.normalized,\n // it is the shader attribute declaration, not the vertex memory format,\n // that determines if the data in the buffer will be treated as integers.\n // /\n // Also note that WebGL supports assigning non-normalized integer data to floating point attributes,\n // but as far as we can tell, WebGPU does not.\n integer: attributeInfo.integer,\n divisor: attributeInfo.stepMode === 'instance' ? 1 : 0\n })();\n this.vertexArrayObject.setBuffer(attributeInfo.location, webglBuffer, {\n size: attributeInfo.bufferComponents,\n type: glType,\n stride: attributeInfo.byteStride,\n offset: attributeInfo.byteOffset,\n normalized: attributeInfo.normalized,\n // it is the shader attribute declaration, not the vertex memory format,\n // that determines if the data in the buffer will be treated as integers.\n // /\n // Also note that WebGL supports assigning non-normalized integer data to floating point attributes,\n // but as far as we can tell, WebGPU does not.\n integer: attributeInfo.integer,\n divisor: attributeInfo.stepMode === 'instance' ? 1 : 0\n });\n set = true;\n }\n if (!set) {\n log.warn(\n `setAttributes(): Ignoring (buffer \"${buffer.id}\" for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n }\n }\n }\n\n /**\n * Constant attributes are only supported in WebGL, not in WebGPU\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @param attributes\n */\n setConstantAttributes(attributes: Record<string, TypedArray>): void {\n // TODO - there should be no advantage to setting these here vs in _applyConstantAttributes\n // for (const [name, value] of Object.entries(attributes)) {\n // const attributeInfo = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout, name);\n // if (!attributeInfo) {\n // log.warn(\n // `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n // )();\n // continue; // eslint-disable-line no-continue\n // }\n // this.vertexArrayObject.setConstant(attributeInfo.location, value);\n // }\n Object.assign(this.constantAttributes, attributes);\n }\n\n /**\n * Bindings include: textures, samplers and uniform buffers\n * @todo needed for portable model\n */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.shaderLayout.bindings.find(binding => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, UniformValue>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass,\n vertexCount,\n // indexCount,\n instanceCount,\n firstVertex = 0\n // firstIndex,\n // firstInstance,\n // baseVertex\n } = options;\n\n const drawMode = getGLDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.glIndexType;\n const isInstanced: boolean = Number(options.instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n this._applyConstantAttributes();\n\n const webglRenderPass = renderPass as WEBGLRenderPass;\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, this.props.parameters, () => {\n withGLParameters(this.device, webglRenderPass.glParameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n drawMode,\n vertexCount || 0, // indexCount?\n indexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(\n drawMode,\n firstVertex,\n vertexCount || 0,\n instanceCount || 0\n );\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /**\n * Constant attributes need to be reset before every draw call\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @note Constant attributes are only supported in WebGL, not in WebGPU\n */\n _applyConstantAttributes(): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n for (const [name, value] of Object.entries(this.constantAttributes)) {\n const attributeInfo = attributeInfos[name];\n if (!attributeInfo) {\n log.warn(\n `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n continue; // eslint-disable-line no-continue\n }\n this.vertexArrayObject.setConstant(attributeInfo.location, value);\n this.vertexArrayObject.enable(attributeInfo.location, false);\n }\n }\n\n /** Apply any bindings (before each draw call) */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.shaderLayout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n /**\n * Due to program sharing, uniforms need to be reset before every draw call\n * (though caching will avoid redundant WebGL calls)\n */\n _applyUniforms() {\n for (const uniformLayout of this.shaderLayout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] ?? textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for draw */\nfunction getGLDrawMode(\n topology: PrimitiveTopology\n):\n | GL.POINTS\n | GL.LINES\n | GL.LINE_STRIP\n | GL.LINE_LOOP\n | GL.TRIANGLES\n | GL.TRIANGLE_STRIP\n | GL.TRIANGLE_FAN {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'line-loop-webgl': return GL.LINE_LOOP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'line-loop-webgl': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n case 'triangle-fan-webgl': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n"],"mappings":"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"}
package/dist/dist.dev.js CHANGED
@@ -9312,6 +9312,7 @@ ${formattedLog}`)();
9312
9312
  continue;
9313
9313
  }
9314
9314
  this.vertexArrayObject.setConstant(attributeInfo.location, value);
9315
+ this.vertexArrayObject.enable(attributeInfo.location, false);
9315
9316
  }
9316
9317
  }
9317
9318
  /** Apply any bindings (before each draw call) */
package/dist/index.cjs CHANGED
@@ -5646,6 +5646,7 @@ var WEBGLRenderPipeline = class extends import_core23.RenderPipeline {
5646
5646
  continue;
5647
5647
  }
5648
5648
  this.vertexArrayObject.setConstant(attributeInfo.location, value);
5649
+ this.vertexArrayObject.enable(attributeInfo.location, false);
5649
5650
  }
5650
5651
  }
5651
5652
  /** Apply any bindings (before each draw call) */
package/dist.min.js CHANGED
@@ -26,7 +26,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
26
26
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,u;return{s:function(){r=r.call(e)},n:function(){var c=r.next();return i=c.done,c},e:function(c){s=!0,u=c},f:function(){try{!i&&r.return!=null&&r.return()}finally{if(s)throw u}}}}function Wf(e,t){if(e){if(typeof e=="string")return ki(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ki(e,t)}}function ki(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var Vf=["warning","error","info"];function On(e){var t=e.split(/\r?\n/),r=[],n=Lf(t),o;try{for(n.s();!(o=n.n()).done;){var i=o.value;if(!(i.length<=1)){var s=i.split(":"),u=gn(s),_=u[0],c=u[1],E=u[2],l=u.slice(3),R=parseInt(E,10);isNaN(R)&&(R=0);var d=parseInt(c,10);isNaN(d)&&(d=0);var A=_.toLowerCase(),p=Vf.includes(A)?A:"info";r.push({message:l.join(":").trim(),type:p,lineNum:R,linePos:d})}}}catch(h){n.e(h)}finally{n.f()}return r}function Gi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function jf(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?Gi(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Gi(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Kf(e){var t=Yf();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function Yf(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var br=function(e){x(r,e);var t=Kf(r);function r(o,i){var s;switch(P(this,r),s=t.call(this,o,jf({id:kf(i)},i)),s.device=void 0,s.handle=void 0,s.device=o,s.props.stage){case"vertex":s.handle=s.props.handle||s.device.gl.createShader(a.VERTEX_SHADER);break;case"fragment":s.handle=s.props.handle||s.device.gl.createShader(a.FRAGMENT_SHADER);break;default:throw new Error(s.props.stage)}return s._compile(s.source),s}var n=r.prototype;return n.destroy=function(){this.handle&&(this.removeStats(),this.device.gl.deleteShader(this.handle),this.destroyed=!0)},n.compilationInfo=function(){var o=oe(vn.default.mark(function s(){var u;return vn.default.wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return u=this.device.gl.getShaderInfoLog(this.handle),c.abrupt("return",u?On(u):[]);case 2:case"end":return c.stop()}},s,this)}));function i(){return o.apply(this,arguments)}return i}(),n._compile=function(i){var s=function(h){return h.startsWith("#version ")?h:`#version 100
27
27
  `.concat(h)};i=s(i);var u=this.device.gl;u.shaderSource(this.handle,i),u.compileShader(this.handle);var _=u.getShaderParameter(this.handle,a.COMPILE_STATUS);if(!_){var c=u.getShaderInfoLog(this.handle),E=c?On(c):[],l=E.filter(function(p){return p.type==="error"}),R=Wr(l,i),d=Sn(i).name,A="".concat(this.stage," shader ").concat(d);throw C.error("GLSL compilation errors in ".concat(A,`
28
28
  `).concat(R))(),new Error("GLSL compilation errors in ".concat(d))}},y(r)}(er);function kf(e){return Sn(e.source).name||e.id||ge("unnamed ".concat(e.stage,"-shader"))}function zi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Gf(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?zi(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):zi(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function zf(e){var t=Zf();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function Zf(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var $f=256,Qf=1024,qf=16384,bn=6144,Nr=function(e){x(r,e);var t=zf(r);function r(o,i){var s;return P(this,r),s=t.call(this,o,i),s.device=void 0,s.glParameters=void 0,s.device=o,s.setParameters(s.props.parameters),s.clear(),s}var n=r.prototype;return n.end=function(){},n.pushDebugGroup=function(i){},n.popDebugGroup=function(){},n.insertDebugMarker=function(i){},n.setParameters=function(){var i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},s={};this.props.framebuffer&&(s.framebuffer=this.props.framebuffer),this.props.depthReadOnly&&(s.depthMask=!this.props.depthReadOnly),s.stencilMask=this.props.stencilReadOnly?0:1,s[a.RASTERIZER_DISCARD]=this.props.discard,i.viewport&&(i.viewport.length>=6?(s.viewport=i.viewport.slice(0,4),s.depthRange=[i.viewport[4],i.viewport[5]]):s.viewport=i.viewport),s.scissorTest=Boolean(i.scissorRect),i.scissorRect&&(s.scissor=i.scissorRect),i.blendConstant&&(s.blendColor=i.blendConstant),i.stencilReference&&(console.warn("RenderPassParameters.stencilReference not yet implemented in WebGL"),i[a.STENCIL_REF]=i.stencilReference),this.glParameters=s},n.clear=function(){var i=this,s=Gf({},this.glParameters),u=0;this.props.clearColor!==!1&&(u|=qf,s.clearColor=this.props.clearColor),this.props.clearDepth!==!1&&(u|=$f,s.clearDepth=this.props.clearDepth),this.props.clearStencil!==!1&&(u|=Qf,s.clearStencil=this.props.clearStencil),u!==0&&Ee(this.device,s,function(){i.device.gl.clear(u)})},n.clearColorBuffer=function(){var i=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0,0,0,0];Ee(this.device.gl2,{framebuffer:this.props.framebuffer},function(){switch(u.constructor){case Int32Array:i.device.gl2.clearBufferiv(bn,s,u);break;case Uint32Array:i.device.gl2.clearBufferuiv(bn,s,u);break;case Float32Array:default:i.device.gl2.clearBufferfv(bn,s,u);break}})},y(r)}(nr);var G;function Zi(e){return Jf.includes(e)}var Jf=[a.SAMPLER_2D,a.SAMPLER_CUBE,a.SAMPLER_3D,a.SAMPLER_2D_SHADOW,a.SAMPLER_2D_ARRAY,a.SAMPLER_2D_ARRAY_SHADOW,a.SAMPLER_CUBE_SHADOW,a.INT_SAMPLER_2D,a.INT_SAMPLER_3D,a.INT_SAMPLER_CUBE,a.INT_SAMPLER_2D_ARRAY,a.UNSIGNED_INT_SAMPLER_2D,a.UNSIGNED_INT_SAMPLER_3D,a.UNSIGNED_INT_SAMPLER_CUBE,a.UNSIGNED_INT_SAMPLER_2D_ARRAY],$i=(G={},f(G,a.FLOAT,[a.FLOAT,1,"float","f32","float32"]),f(G,a.FLOAT_VEC2,[a.FLOAT,2,"vec2","vec2<f32>","float32x2"]),f(G,a.FLOAT_VEC3,[a.FLOAT,3,"vec3","vec3<f32>","float32x3"]),f(G,a.FLOAT_VEC4,[a.FLOAT,4,"vec4","vec4<f32>","float32x4"]),f(G,a.INT,[a.INT,1,"int","i32","sint32"]),f(G,a.INT_VEC2,[a.INT,2,"ivec2","vec2<i32>","sint32x2"]),f(G,a.INT_VEC3,[a.INT,3,"ivec3","vec3<i32>","sint32x3"]),f(G,a.INT_VEC4,[a.INT,4,"ivec4","vec4<i32>","sint32x4"]),f(G,a.UNSIGNED_INT,[a.UNSIGNED_INT,1,"uint","u32","uint32"]),f(G,a.UNSIGNED_INT_VEC2,[a.UNSIGNED_INT,2,"uvec2","vec2<u32>","uint32x2"]),f(G,a.UNSIGNED_INT_VEC3,[a.UNSIGNED_INT,3,"uvec3","vec3<u32>","uint32x3"]),f(G,a.UNSIGNED_INT_VEC4,[a.UNSIGNED_INT,4,"uvec4","vec4<u32>","uint32x4"]),f(G,a.BOOL,[a.FLOAT,1,"bool","f32","float32"]),f(G,a.BOOL_VEC2,[a.FLOAT,2,"bvec2","vec2<f32>","float32x2"]),f(G,a.BOOL_VEC3,[a.FLOAT,3,"bvec3","vec3<f32>","float32x3"]),f(G,a.BOOL_VEC4,[a.FLOAT,4,"bvec4","vec4<f32>","float32x4"]),f(G,a.FLOAT_MAT2,[a.FLOAT,8,"mat2","mat2x2<f32>"]),f(G,a.FLOAT_MAT2x3,[a.FLOAT,8,"mat2x3","mat2x3<f32>"]),f(G,a.FLOAT_MAT2x4,[a.FLOAT,8,"mat2x4","mat2x4<f32>"]),f(G,a.FLOAT_MAT3x2,[a.FLOAT,12,"mat3x2","mat3x2<f32>"]),f(G,a.FLOAT_MAT3,[a.FLOAT,12,"mat3","mat3x3<f32>"]),f(G,a.FLOAT_MAT3x4,[a.FLOAT,12,"mat3x4","mat3x4<f32>"]),f(G,a.FLOAT_MAT4x2,[a.FLOAT,16,"mat4x2","mat4x2<f32>"]),f(G,a.FLOAT_MAT4x3,[a.FLOAT,16,"mat4x3","mat4x3<f32>"]),f(G,a.FLOAT_MAT4,[a.FLOAT,16,"mat4","mat4x4<f32>"]),G);function Nn(e){var t=$i[e];if(!t)throw new Error("uniform");var r=H(t,4),n=r[0],o=r[1],i=r[3];return{format:i,components:o,glType:n}}function Qi(e){var t=$i[e];if(!t)throw new Error("attribute");var r=H(t,5),n=r[1],o=r[3],i=r[4],s=o;return{attributeType:s,vertexFormat:i,components:n}}var ie;function qi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Ji(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?qi(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):qi(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Cr(e,t){var r={attributes:[],bindings:[]};r.attributes=e_(e,t);for(var n=n_(e,t),o=0,i=n;o<i.length;o++){var s=i[o],u=s.uniforms.map(function(O){return{name:O.name,format:O.format,byteOffset:O.byteOffset,byteStride:O.byteStride,arrayLength:O.arrayLength}});r.bindings.push({type:"uniform",name:s.name,location:s.location,visibility:(s.vertex?1:0)&(s.fragment?2:0),minBindingSize:s.byteLength,uniforms:u})}for(var _=r_(e,t),c=0,E=0,l=_;E<l.length;E++){var R=l[E];if(Zi(R.type)){var d=i_(R.type),A=d.viewDimension,p=d.sampleType;r.bindings.push({type:"texture",name:R.name,location:c,viewDimension:A,sampleType:p}),R.textureUnit=c,c+=1}}_.length&&(r.uniforms=_);var h=t_(e,t);return h!=null&&h.length&&(r.varyings=h),r}function e_(e,t){for(var r=[],n=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES),o=0;o<n;o++){var i=e.getActiveAttrib(t,o);if(!i)throw new Error("activeInfo");var s=i.name,u=i.type,_=e.getAttribLocation(t,s);if(_>=0){var c=Qi(u),E=c.attributeType,l=/instance/i.test(s)?"instance":"vertex";r.push({name:s,location:_,stepMode:l,type:E})}}return r.sort(function(R,d){return R.location-d.location}),r}function t_(e,t){if(!W(e))return[];for(var r=e,n=[],o=e.getProgramParameter(t,a.TRANSFORM_FEEDBACK_VARYINGS),i=0;i<o;i++){var s=r.getTransformFeedbackVarying(t,i);if(!s)throw new Error("activeInfo");var u=s.name,_=s.type,c=s.size,E=Nn(_),l=E.glType,R=E.components,d=new ve({type:l,size:c*R}),A={location:i,name:u,accessor:d};n.push(A)}return n.sort(function(p,h){return p.location-h.location}),n}function r_(e,t){for(var r=[],n=e.getProgramParameter(t,a.ACTIVE_UNIFORMS),o=0;o<n;o++){var i=e.getActiveUniform(t,o);if(!i)throw new Error("activeInfo");var s=i.name,u=i.size,_=i.type,c=o_(s),E=c.name,l=c.isArray,R=e.getUniformLocation(t,E),d={location:R,name:E,size:u,type:_,isArray:l};if(r.push(d),d.size>1)for(var A=0;A<d.size;A++){var p="".concat(E,"[").concat(A,"]");R=e.getUniformLocation(t,p);var h=Ji(Ji({},d),{},{name:p,location:R});r.push(h)}}return r}function n_(e,t){if(!W(e))return[];for(var r=e,n=function(h,O){return r.getActiveUniformBlockParameter(t,h,O)},o=[],i=r.getProgramParameter(t,a.ACTIVE_UNIFORM_BLOCKS),s=0;s<i;s++){for(var u={name:r.getActiveUniformBlockName(t,s)||"",location:n(s,a.UNIFORM_BLOCK_BINDING),byteLength:n(s,a.UNIFORM_BLOCK_DATA_SIZE),vertex:n(s,a.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),fragment:n(s,a.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),uniformCount:n(s,a.UNIFORM_BLOCK_ACTIVE_UNIFORMS),uniforms:[]},_=n(s,a.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES)||[],c=r.getActiveUniforms(t,_,a.UNIFORM_TYPE),E=r.getActiveUniforms(t,_,a.UNIFORM_SIZE),l=r.getActiveUniforms(t,_,a.UNIFORM_OFFSET),R=r.getActiveUniforms(t,_,a.UNIFORM_ARRAY_STRIDE),d=0;d<u.uniformCount;++d){var A=r.getActiveUniform(t,_[d]);if(!A)throw new Error("activeInfo");u.uniforms.push({name:A.name,format:Nn(c[d]).format,type:c[d],arrayLength:E[d],byteOffset:l[d],byteStride:R[d]})}o.push(u)}return o.sort(function(p,h){return p.location-h.location}),o}var a_=(ie={},f(ie,a.SAMPLER_2D,["2d","float"]),f(ie,a.SAMPLER_CUBE,["cube","float"]),f(ie,a.SAMPLER_3D,["3d","float"]),f(ie,a.SAMPLER_2D_SHADOW,["3d","depth"]),f(ie,a.SAMPLER_2D_ARRAY,["2d-array","float"]),f(ie,a.SAMPLER_2D_ARRAY_SHADOW,["2d-array","depth"]),f(ie,a.SAMPLER_CUBE_SHADOW,["cube","float"]),f(ie,a.INT_SAMPLER_2D,["2d","sint"]),f(ie,a.INT_SAMPLER_3D,["3d","sint"]),f(ie,a.INT_SAMPLER_CUBE,["cube","sint"]),f(ie,a.INT_SAMPLER_2D_ARRAY,["2d-array","uint"]),f(ie,a.UNSIGNED_INT_SAMPLER_2D,["2d","uint"]),f(ie,a.UNSIGNED_INT_SAMPLER_3D,["3d","uint"]),f(ie,a.UNSIGNED_INT_SAMPLER_CUBE,["cube","uint"]),f(ie,a.UNSIGNED_INT_SAMPLER_2D_ARRAY,["2d-array","uint"]),ie);function i_(e){var t=a_[e];if(!t)throw new Error("sampler");var r=H(t,2),n=r[0],o=r[1];return{viewDimension:n,sampleType:o}}function o_(e){if(e[e.length-1]!=="]")return{name:e,length:1,isArray:!1};var t=/([^[]*)(\[[0-9]+\])?/,r=t.exec(e);if(!r||r.length<2)throw new Error("Failed to parse GLSL uniform name ".concat(e));return{name:r[1],length:r[2]?1:0,isArray:Boolean(r[2])}}function eo(e,t,r,n){var o=e,i=n;i===!0&&(i=1),i===!1&&(i=0);var s=typeof i=="number"?[i]:i;switch(r){case a.SAMPLER_2D:case a.SAMPLER_CUBE:case a.SAMPLER_3D:case a.SAMPLER_2D_SHADOW:case a.SAMPLER_2D_ARRAY:case a.SAMPLER_2D_ARRAY_SHADOW:case a.SAMPLER_CUBE_SHADOW:case a.INT_SAMPLER_2D:case a.INT_SAMPLER_3D:case a.INT_SAMPLER_CUBE:case a.INT_SAMPLER_2D_ARRAY:case a.UNSIGNED_INT_SAMPLER_2D:case a.UNSIGNED_INT_SAMPLER_3D:case a.UNSIGNED_INT_SAMPLER_CUBE:case a.UNSIGNED_INT_SAMPLER_2D_ARRAY:if(typeof n!="number")throw new Error("samplers must be set to integers");return e.uniform1i(t,n);case a.FLOAT:return e.uniform1fv(t,s);case a.FLOAT_VEC2:return e.uniform2fv(t,s);case a.FLOAT_VEC3:return e.uniform3fv(t,s);case a.FLOAT_VEC4:return e.uniform4fv(t,s);case a.INT:return e.uniform1iv(t,s);case a.INT_VEC2:return e.uniform2iv(t,s);case a.INT_VEC3:return e.uniform3iv(t,s);case a.INT_VEC4:return e.uniform4iv(t,s);case a.BOOL:return e.uniform1iv(t,s);case a.BOOL_VEC2:return e.uniform2iv(t,s);case a.BOOL_VEC3:return e.uniform3iv(t,s);case a.BOOL_VEC4:return e.uniform4iv(t,s);case a.UNSIGNED_INT:return o.uniform1uiv(t,s,1);case a.UNSIGNED_INT_VEC2:return o.uniform2uiv(t,s,2);case a.UNSIGNED_INT_VEC3:return o.uniform3uiv(t,s,3);case a.UNSIGNED_INT_VEC4:return o.uniform4uiv(t,s,4);case a.FLOAT_MAT2:return e.uniformMatrix2fv(t,!1,s);case a.FLOAT_MAT3:return e.uniformMatrix3fv(t,!1,s);case a.FLOAT_MAT4:return e.uniformMatrix4fv(t,!1,s);case a.FLOAT_MAT2x3:return o.uniformMatrix2x3fv(t,!1,s);case a.FLOAT_MAT2x4:return o.uniformMatrix2x4fv(t,!1,s);case a.FLOAT_MAT3x2:return o.uniformMatrix3x2fv(t,!1,s);case a.FLOAT_MAT3x4:return o.uniformMatrix3x4fv(t,!1,s);case a.FLOAT_MAT4x2:return o.uniformMatrix4x2fv(t,!1,s);case a.FLOAT_MAT4x3:return o.uniformMatrix4x3fv(t,!1,s)}throw new Error("Illegal uniform")}var no;function to(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function ro(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?to(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):to(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function s_(e){var t=u_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function u_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var f_="elements must be GL.ELEMENT_ARRAY_BUFFER";no=Symbol.toStringTag;var Ir=function(e){x(r,e);var t=s_(r);r.isConstantAttributeZeroSupported=function(i){return i.info.type==="webgl2"||Ot()==="Chrome"};function r(o,i){var s;return P(this,r),s=t.call(this,o,i,ro(ro({},j.defaultProps),{},{constantAttributeZero:!1})),s.buffer=null,s.bufferValue=null,Object.seal(Ae(s)),s}var n=r.prototype;return n.destroy=function(){if(Xe(v(r.prototype),"destroy",this).call(this),this.buffer){var i;(i=this.buffer)===null||i===void 0||i.destroy()}},n._createHandle=function(){return this.gl2.createVertexArray()},n._deleteHandle=function(){return this.gl2.deleteVertexArray(this.handle),[this.elements]},n._bindHandle=function(i){this.gl2.bindVertexArray(i)},n.enable=function(i){var s=this,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,_=this.device.isWebGL2||Ot()==="Chrome",c=_||i!==0;(u||c)&&(i=Number(i),this.bind(function(){return u?s.gl.enableVertexAttribArray(i):s.gl.disableVertexAttribArray(i)}))},n.setElementBuffer=function(){var i=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};F(!s||s.glTarget===a.ELEMENT_ARRAY_BUFFER,f_),this.bind(function(){i.gl.bindBuffer(a.ELEMENT_ARRAY_BUFFER,s?s.handle:null)})},n.setBuffer=function(i,s,u){var _=this;if(s.glTarget===a.ELEMENT_ARRAY_BUFFER){this.setElementBuffer(s,u);return}var c=u.size,E=u.type,l=u.stride,R=u.offset,d=u.normalized,A=u.integer,p=u.divisor,h=this.gl,O=this.gl2;i=Number(i),this.bind(function(){h.bindBuffer(h.ARRAY_BUFFER,s.handle),A?(_.device.assertWebGL2(),O.vertexAttribIPointer(i,c,E,l,R)):h.vertexAttribPointer(i,c,E,d,l,R),h.enableVertexAttribArray(i),O.vertexAttribDivisor(i,p||0)})},n.setConstant=function(i,s){switch(s.constructor){case Float32Array:__(this.device,i,s);break;case Int32Array:c_(this.device,i,s);break;case Uint32Array:E_(this.device,i,s);break;default:F(!1)}},n.getConstantBuffer=function(i,s){var u=l_(s),_=u.byteLength*i,c=u.length*i,E=!this.buffer;if(this.buffer=this.buffer||this.device.createBuffer({byteLength:_}),E=E||this.buffer.reallocate(_),E=E||!R_(u,this.bufferValue),E){var l=zr(s.constructor,c);Zr({target:l,source:u,start:0,count:c}),this.buffer.subData(l),this.bufferValue=s}return this.buffer},y(r,[{key:no,get:function(){return"BaseVertexArrayObject"}}]),r}(Je);function __(e,t,r){switch(r.length){case 1:e.gl.vertexAttrib1fv(t,r);break;case 2:e.gl.vertexAttrib2fv(t,r);break;case 3:e.gl.vertexAttrib3fv(t,r);break;case 4:e.gl.vertexAttrib4fv(t,r);break;default:F(!1)}}function c_(e,t,r){var n;e.assertWebGL2(),(n=e.gl2)===null||n===void 0||n.vertexAttribI4iv(t,r)}function E_(e,t,r){var n;e.assertWebGL2(),(n=e.gl2)===null||n===void 0||n.vertexAttribI4uiv(t,r)}function l_(e){return Array.isArray(e)?new Float32Array(e):e}function R_(e,t){if(!e||!t||e.length!==t.length||e.constructor!==t.constructor)return!1;for(var r=0;r<e.length;++r)if(e[r]!==t[r])return!1;return!0}function ao(e,t){var r=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d_(e))||t&&e&&typeof e.length=="number"){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(c){throw c},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
29
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,u;return{s:function(){r=r.call(e)},n:function(){var c=r.next();return i=c.done,c},e:function(c){s=!0,u=c},f:function(){try{!i&&r.return!=null&&r.return()}finally{if(s)throw u}}}}function d_(e,t){if(e){if(typeof e=="string")return io(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return io(e,t)}}function io(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function T_(e){var t=A_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function A_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var oo=4,Pr=function(e){x(r,e);var t=T_(r);function r(o,i){var s;P(this,r),s=t.call(this,o,i),s.device=void 0,s.handle=void 0,s.vs=void 0,s.fs=void 0,s.introspectedLayout=void 0,s.shaderLayout=void 0,s.bufferLayout=void 0,s.uniforms={},s.bindings={},s.constantAttributes={},s._indexBuffer=void 0,s.varyings=null,s.vertexArrayObject=void 0,s._textureUniforms={},s._textureIndexCounter=0,s._uniformCount=0,s._uniformSetters={},s.device=o,s.handle=s.props.handle||s.device.gl.createProgram(),s.device.setSpectorMetadata(s.handle,{id:s.props.id}),s.vs=i.vs,s.fs=i.fs;var u=i.varyings,_=i.bufferMode,c=_===void 0?a.SEPARATE_ATTRIBS:_;if(u&&u.length>0){var E;s.device.assertWebGL2(),s.varyings=u,(E=s.device.gl2)===null||E===void 0||E.transformFeedbackVaryings(s.handle,u,c)}return s._compileAndLink(),s.introspectedLayout=Cr(s.device.gl,s.handle),s.shaderLayout=jr(s.introspectedLayout,i.shaderLayout),s.bufferLayout=i.bufferLayout||[],s.vertexArrayObject=new Ir(s.device),s}var n=r.prototype;return n.destroy=function(){this.handle&&(this.device.gl.deleteProgram(this.handle),this.destroyed=!0)},n.setIndexBuffer=function(i){var s=i;this.vertexArrayObject.setElementBuffer(s),this._indexBuffer=s},n.setAttributes=function(i){for(var s=ur(this.shaderLayout,this.bufferLayout),u=0,_=Object.entries(i);u<_.length;u++){for(var c=H(_[u],2),E=c[0],l=c[1],R=!1,d=0,A=Object.values(s);d<A.length;d++){var p=A[d];if(p.bufferName===E){var h=l,O=Rr(p.bufferDataType);C.log(2,{setAttribute:p.attributeName,toBuffer:E,size:p.bufferComponents,type:O,stride:p.byteStride,offset:p.byteOffset,normalized:p.normalized,integer:p.integer,divisor:p.stepMode==="instance"?1:0})(),this.vertexArrayObject.setBuffer(p.location,h,{size:p.bufferComponents,type:O,stride:p.byteStride,offset:p.byteOffset,normalized:p.normalized,integer:p.integer,divisor:p.stepMode==="instance"?1:0}),R=!0}}R||C.warn('setAttributes(): Ignoring (buffer "'.concat(l.id,'" for unknown attribute "').concat(name,'" in pipeline "').concat(this.id,'"'))()}},n.setConstantAttributes=function(i){Object.assign(this.constantAttributes,i)},n.setBindings=function(i){for(var s=this,u=function(){var R=H(c[_],2),d=R[0],A=R[1],p=s.shaderLayout.bindings.find(function(h){return h.name===d});if(!p)return C.warn("Unknown binding ".concat(d," in render pipeline ").concat(s.id))(),"continue";switch(A||C.warn("Unsetting binding ".concat(d," in render pipeline ").concat(s.id))(),p.type){case"uniform":if(!(A instanceof he)&&!(A.buffer instanceof he))throw new Error("buffer value");break;case"texture":if(!(A instanceof Se))throw new Error("texture value");break;case"sampler":C.warn("Ignoring sampler ".concat(d))();break;default:throw new Error(p.type)}s.bindings[d]=A},_=0,c=Object.entries(i);_<c.length;_++)var E=u()},n.setUniforms=function(i){Object.assign(this.uniforms,i)},n.draw=function(i){var s,u=this,_=i.renderPass,c=i.vertexCount,E=i.instanceCount,l=i.firstVertex,R=l===void 0?0:l,d=p_(this.props.topology),A=Boolean(this._indexBuffer),p=(s=this._indexBuffer)===null||s===void 0?void 0:s.glIndexType,h=Number(i.instanceCount)>0;return!this._areTexturesRenderable()||i.vertexCount===0?!1:(this.device.gl.useProgram(this.handle),this.vertexArrayObject.bind(function(){var O=m_(u.props.topology),b=null;b&&b.begin(O),u._applyBindings(),u._applyUniforms(),u._applyConstantAttributes();var D=_;mr(u.device,u.props.parameters,function(){pi(u.device,D.glParameters,function(){if(A&&h){var I;(I=u.device.gl2)===null||I===void 0||I.drawElementsInstanced(d,c||0,p,R,E||0)}else if(A)u.device.gl.drawElements(d,c||0,p,R);else if(h){var L;(L=u.device.gl2)===null||L===void 0||L.drawArraysInstanced(d,R,c||0,E||0)}else u.device.gl.drawArrays(d,R,c||0)}),b&&b.end()})}),!0)},n._compileAndLink=function(){var i=this.device.gl;if(i.attachShader(this.handle,this.vs.handle),i.attachShader(this.handle,this.fs.handle),C.time(oo,"linkProgram for ".concat(this.id))(),i.linkProgram(this.handle),C.timeEnd(oo,"linkProgram for ".concat(this.id))(),i.debug||C.level>0){var s=i.getProgramParameter(this.handle,i.LINK_STATUS);if(!s)throw new Error("Error linking: ".concat(i.getProgramInfoLog(this.handle)));i.validateProgram(this.handle);var u=i.getProgramParameter(this.handle,i.VALIDATE_STATUS);if(!u)throw new Error("Error validating: ".concat(i.getProgramInfoLog(this.handle)))}},n._areTexturesRenderable=function(){for(var i=!0,s=0,u=Object.entries(this._textureUniforms);s<u.length;s++){var _=H(u[s],2),c=_[1];c.update(),i=i&&c.loaded}for(var E=0,l=Object.entries(this.bindings);E<l.length;E++){var R=H(l[E],2),d=R[1];d.loaded!==void 0&&(i=i&&d.loaded)}return i},n._applyConstantAttributes=function(){for(var i=ur(this.shaderLayout,this.bufferLayout),s=0,u=Object.entries(this.constantAttributes);s<u.length;s++){var _=H(u[s],2),c=_[0],E=_[1],l=i[c];if(!l){C.warn('Ignoring constant value supplied for unknown attribute "'.concat(c,'" in pipeline "').concat(this.id,'"'))();continue}this.vertexArrayObject.setConstant(l.location,E)}},n._applyBindings=function(){this.device.gl.useProgram(this.handle);var i=this.device.gl2;if(!i)throw new Error("bindings");var s=0,u=0,_=ao(this.shaderLayout.bindings),c;try{for(_.s();!(c=_.n()).done;){var E=c.value,l=this.bindings[E.name];if(!l)throw new Error("No value for binding ".concat(E.name," in ").concat(this.id));switch(E.type){case"uniform":var R=E.name,d=i.getUniformBlockIndex(this.handle,R);if(d===a.INVALID_INDEX)throw new Error("Invalid uniform block name ".concat(R));i.uniformBlockBinding(this.handle,u,d),l instanceof he?i.bindBufferBase(a.UNIFORM_BUFFER,u,l.handle):i.bindBufferRange(a.UNIFORM_BUFFER,u,l.buffer.handle,l.offset||0,l.size||l.buffer.byteLength-l.offset),u+=1;break;case"texture":if(!(l instanceof Se))throw new Error("texture");var A=l;i.activeTexture(a.TEXTURE0+s),i.bindTexture(A.target,A.handle),s+=1;break;case"sampler":break;case"storage":case"read-only-storage":throw new Error("binding type '".concat(E.type,"' not supported in WebGL"))}}}catch(p){_.e(p)}finally{_.f()}},n._applyUniforms=function(){var i=ao(this.shaderLayout.uniforms||[]),s;try{for(i.s();!(s=i.n()).done;){var u,_=s.value,c=_.name,E=_.location,l=_.type,R=_.textureUnit,d=(u=this.uniforms[c])!==null&&u!==void 0?u:R;d!==void 0&&eo(this.device.gl,E,l,d)}}catch(A){i.e(A)}finally{i.f()}},y(r)}(rr);function p_(e){switch(e){case"point-list":return a.POINTS;case"line-list":return a.LINES;case"line-strip":return a.LINE_STRIP;case"line-loop-webgl":return a.LINE_LOOP;case"triangle-list":return a.TRIANGLES;case"triangle-strip":return a.TRIANGLE_STRIP;case"triangle-fan-webgl":return a.TRIANGLE_FAN;default:throw new Error(e)}}function m_(e){switch(e){case"point-list":return a.POINTS;case"line-list":return a.LINES;case"line-strip":return a.LINES;case"line-loop-webgl":return a.LINES;case"triangle-list":return a.TRIANGLES;case"triangle-strip":return a.TRIANGLES;case"triangle-fan-webgl":return a.TRIANGLES;default:throw new Error(e)}}function h_(e,t){var r=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S_(e))||t&&e&&typeof e.length=="number"){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(c){throw c},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
29
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,u;return{s:function(){r=r.call(e)},n:function(){var c=r.next();return i=c.done,c},e:function(c){s=!0,u=c},f:function(){try{!i&&r.return!=null&&r.return()}finally{if(s)throw u}}}}function d_(e,t){if(e){if(typeof e=="string")return io(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return io(e,t)}}function io(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function T_(e){var t=A_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function A_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var oo=4,Pr=function(e){x(r,e);var t=T_(r);function r(o,i){var s;P(this,r),s=t.call(this,o,i),s.device=void 0,s.handle=void 0,s.vs=void 0,s.fs=void 0,s.introspectedLayout=void 0,s.shaderLayout=void 0,s.bufferLayout=void 0,s.uniforms={},s.bindings={},s.constantAttributes={},s._indexBuffer=void 0,s.varyings=null,s.vertexArrayObject=void 0,s._textureUniforms={},s._textureIndexCounter=0,s._uniformCount=0,s._uniformSetters={},s.device=o,s.handle=s.props.handle||s.device.gl.createProgram(),s.device.setSpectorMetadata(s.handle,{id:s.props.id}),s.vs=i.vs,s.fs=i.fs;var u=i.varyings,_=i.bufferMode,c=_===void 0?a.SEPARATE_ATTRIBS:_;if(u&&u.length>0){var E;s.device.assertWebGL2(),s.varyings=u,(E=s.device.gl2)===null||E===void 0||E.transformFeedbackVaryings(s.handle,u,c)}return s._compileAndLink(),s.introspectedLayout=Cr(s.device.gl,s.handle),s.shaderLayout=jr(s.introspectedLayout,i.shaderLayout),s.bufferLayout=i.bufferLayout||[],s.vertexArrayObject=new Ir(s.device),s}var n=r.prototype;return n.destroy=function(){this.handle&&(this.device.gl.deleteProgram(this.handle),this.destroyed=!0)},n.setIndexBuffer=function(i){var s=i;this.vertexArrayObject.setElementBuffer(s),this._indexBuffer=s},n.setAttributes=function(i){for(var s=ur(this.shaderLayout,this.bufferLayout),u=0,_=Object.entries(i);u<_.length;u++){for(var c=H(_[u],2),E=c[0],l=c[1],R=!1,d=0,A=Object.values(s);d<A.length;d++){var p=A[d];if(p.bufferName===E){var h=l,O=Rr(p.bufferDataType);C.log(2,{setAttribute:p.attributeName,toBuffer:E,size:p.bufferComponents,type:O,stride:p.byteStride,offset:p.byteOffset,normalized:p.normalized,integer:p.integer,divisor:p.stepMode==="instance"?1:0})(),this.vertexArrayObject.setBuffer(p.location,h,{size:p.bufferComponents,type:O,stride:p.byteStride,offset:p.byteOffset,normalized:p.normalized,integer:p.integer,divisor:p.stepMode==="instance"?1:0}),R=!0}}R||C.warn('setAttributes(): Ignoring (buffer "'.concat(l.id,'" for unknown attribute "').concat(name,'" in pipeline "').concat(this.id,'"'))()}},n.setConstantAttributes=function(i){Object.assign(this.constantAttributes,i)},n.setBindings=function(i){for(var s=this,u=function(){var R=H(c[_],2),d=R[0],A=R[1],p=s.shaderLayout.bindings.find(function(h){return h.name===d});if(!p)return C.warn("Unknown binding ".concat(d," in render pipeline ").concat(s.id))(),"continue";switch(A||C.warn("Unsetting binding ".concat(d," in render pipeline ").concat(s.id))(),p.type){case"uniform":if(!(A instanceof he)&&!(A.buffer instanceof he))throw new Error("buffer value");break;case"texture":if(!(A instanceof Se))throw new Error("texture value");break;case"sampler":C.warn("Ignoring sampler ".concat(d))();break;default:throw new Error(p.type)}s.bindings[d]=A},_=0,c=Object.entries(i);_<c.length;_++)var E=u()},n.setUniforms=function(i){Object.assign(this.uniforms,i)},n.draw=function(i){var s,u=this,_=i.renderPass,c=i.vertexCount,E=i.instanceCount,l=i.firstVertex,R=l===void 0?0:l,d=p_(this.props.topology),A=Boolean(this._indexBuffer),p=(s=this._indexBuffer)===null||s===void 0?void 0:s.glIndexType,h=Number(i.instanceCount)>0;return!this._areTexturesRenderable()||i.vertexCount===0?!1:(this.device.gl.useProgram(this.handle),this.vertexArrayObject.bind(function(){var O=m_(u.props.topology),b=null;b&&b.begin(O),u._applyBindings(),u._applyUniforms(),u._applyConstantAttributes();var D=_;mr(u.device,u.props.parameters,function(){pi(u.device,D.glParameters,function(){if(A&&h){var I;(I=u.device.gl2)===null||I===void 0||I.drawElementsInstanced(d,c||0,p,R,E||0)}else if(A)u.device.gl.drawElements(d,c||0,p,R);else if(h){var L;(L=u.device.gl2)===null||L===void 0||L.drawArraysInstanced(d,R,c||0,E||0)}else u.device.gl.drawArrays(d,R,c||0)}),b&&b.end()})}),!0)},n._compileAndLink=function(){var i=this.device.gl;if(i.attachShader(this.handle,this.vs.handle),i.attachShader(this.handle,this.fs.handle),C.time(oo,"linkProgram for ".concat(this.id))(),i.linkProgram(this.handle),C.timeEnd(oo,"linkProgram for ".concat(this.id))(),i.debug||C.level>0){var s=i.getProgramParameter(this.handle,i.LINK_STATUS);if(!s)throw new Error("Error linking: ".concat(i.getProgramInfoLog(this.handle)));i.validateProgram(this.handle);var u=i.getProgramParameter(this.handle,i.VALIDATE_STATUS);if(!u)throw new Error("Error validating: ".concat(i.getProgramInfoLog(this.handle)))}},n._areTexturesRenderable=function(){for(var i=!0,s=0,u=Object.entries(this._textureUniforms);s<u.length;s++){var _=H(u[s],2),c=_[1];c.update(),i=i&&c.loaded}for(var E=0,l=Object.entries(this.bindings);E<l.length;E++){var R=H(l[E],2),d=R[1];d.loaded!==void 0&&(i=i&&d.loaded)}return i},n._applyConstantAttributes=function(){for(var i=ur(this.shaderLayout,this.bufferLayout),s=0,u=Object.entries(this.constantAttributes);s<u.length;s++){var _=H(u[s],2),c=_[0],E=_[1],l=i[c];if(!l){C.warn('Ignoring constant value supplied for unknown attribute "'.concat(c,'" in pipeline "').concat(this.id,'"'))();continue}this.vertexArrayObject.setConstant(l.location,E),this.vertexArrayObject.enable(l.location,!1)}},n._applyBindings=function(){this.device.gl.useProgram(this.handle);var i=this.device.gl2;if(!i)throw new Error("bindings");var s=0,u=0,_=ao(this.shaderLayout.bindings),c;try{for(_.s();!(c=_.n()).done;){var E=c.value,l=this.bindings[E.name];if(!l)throw new Error("No value for binding ".concat(E.name," in ").concat(this.id));switch(E.type){case"uniform":var R=E.name,d=i.getUniformBlockIndex(this.handle,R);if(d===a.INVALID_INDEX)throw new Error("Invalid uniform block name ".concat(R));i.uniformBlockBinding(this.handle,u,d),l instanceof he?i.bindBufferBase(a.UNIFORM_BUFFER,u,l.handle):i.bindBufferRange(a.UNIFORM_BUFFER,u,l.buffer.handle,l.offset||0,l.size||l.buffer.byteLength-l.offset),u+=1;break;case"texture":if(!(l instanceof Se))throw new Error("texture");var A=l;i.activeTexture(a.TEXTURE0+s),i.bindTexture(A.target,A.handle),s+=1;break;case"sampler":break;case"storage":case"read-only-storage":throw new Error("binding type '".concat(E.type,"' not supported in WebGL"))}}}catch(p){_.e(p)}finally{_.f()}},n._applyUniforms=function(){var i=ao(this.shaderLayout.uniforms||[]),s;try{for(i.s();!(s=i.n()).done;){var u,_=s.value,c=_.name,E=_.location,l=_.type,R=_.textureUnit,d=(u=this.uniforms[c])!==null&&u!==void 0?u:R;d!==void 0&&eo(this.device.gl,E,l,d)}}catch(A){i.e(A)}finally{i.f()}},y(r)}(rr);function p_(e){switch(e){case"point-list":return a.POINTS;case"line-list":return a.LINES;case"line-strip":return a.LINE_STRIP;case"line-loop-webgl":return a.LINE_LOOP;case"triangle-list":return a.TRIANGLES;case"triangle-strip":return a.TRIANGLE_STRIP;case"triangle-fan-webgl":return a.TRIANGLE_FAN;default:throw new Error(e)}}function m_(e){switch(e){case"point-list":return a.POINTS;case"line-list":return a.LINES;case"line-strip":return a.LINES;case"line-loop-webgl":return a.LINES;case"triangle-list":return a.TRIANGLES;case"triangle-strip":return a.TRIANGLES;case"triangle-fan-webgl":return a.TRIANGLES;default:throw new Error(e)}}function h_(e,t){var r=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=S_(e))||t&&e&&typeof e.length=="number"){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(c){throw c},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
30
30
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,u;return{s:function(){r=r.call(e)},n:function(){var c=r.next();return i=c.done,c},e:function(c){s=!0,u=c},f:function(){try{!i&&r.return!=null&&r.return()}finally{if(s)throw u}}}}function S_(e,t){if(e){if(typeof e=="string")return so(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return so(e,t)}}function so(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function g_(e){var t=O_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function O_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var uo=function(e){x(r,e);var t=g_(r);function r(o){var i;return P(this,r),i=t.call(this,{}),i.device=void 0,i.commands=[],i.device=o,i}var n=r.prototype;return n.submitCommands=function(){var i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.commands,s=h_(i),u;try{for(s.s();!(u=s.n()).done;){var _=u.value;switch(_.name){case"copy-buffer-to-buffer":v_(this.device,_.options);break;case"copy-buffer-to-texture":b_(this.device,_.options);break;case"copy-texture-to-buffer":N_(this.device,_.options);break;case"copy-texture-to-texture":C_(this.device,_.options);break}}}catch(c){s.e(c)}finally{s.f()}},y(r)}(ir);function v_(e,t){var r=t.source,n=t.destination,o=e.assertWebGL2();if(o){var i,s;o.bindBuffer(a.COPY_READ_BUFFER,r.handle),o.bindBuffer(a.COPY_WRITE_BUFFER,n.handle),o.copyBufferSubData(a.COPY_READ_BUFFER,a.COPY_WRITE_BUFFER,(i=t.sourceOffset)!==null&&i!==void 0?i:0,(s=t.destinationOffset)!==null&&s!==void 0?s:0,t.size),o.bindBuffer(a.COPY_READ_BUFFER,null),o.bindBuffer(a.COPY_WRITE_BUFFER,null)}else throw new Error("copyBufferToBuffer not implemented in WebGL1")}function b_(e,t){throw new Error("Not implemented")}function N_(e,t){var r=t.source,n=t.mipLevel,o=n===void 0?0:n,i=t.aspect,s=i===void 0?"all":i,u=t.width,_=u===void 0?t.source.width:u,c=t.height,E=c===void 0?t.source.height:c,l=t.depthOrArrayLayers,R=l===void 0?0:l,d=t.origin,A=d===void 0?[0,0]:d,p=t.destination,h=t.byteOffset,O=h===void 0?0:h,b=t.bytesPerRow,D=t.rowsPerImage;if(s!=="all")throw new Error("not supported");if(o!==0||R!==void 0||b||D)throw new Error("not implemented");var I=e.assertWebGL2(),L=fo(r),X=L.framebuffer,$=L.destroyFramebuffer;try{var z=p,ne=_||X.width,K=E||X.height,S=a.RGBA,T=a.UNSIGNED_BYTE;I.bindBuffer(a.PIXEL_PACK_BUFFER,z.handle),I.bindFramebuffer(a.FRAMEBUFFER,X.handle),I.readPixels(A[0],A[1],ne,K,S,T,O)}finally{I.bindBuffer(a.PIXEL_PACK_BUFFER,null),I.bindFramebuffer(a.FRAMEBUFFER,null),$&&X.destroy()}}function C_(e,t){var r=t.source,n=t.origin,o=n===void 0?[0,0]:n,i=t.destination,s=t.width,u=s===void 0?t.destination.width:s,_=t.height,c=_===void 0?t.destination.width:_,E=0,l=a.RGBA,R=fo(r),d=R.framebuffer,A=R.destroyFramebuffer,p=H(o,2),h=p[0],O=p[1],b=!1;e.gl.bindFramebuffer(a.FRAMEBUFFER,d.handle);var D=null,I;if(i instanceof Se)D=i,u=Number.isFinite(u)?u:D.width,c=Number.isFinite(c)?c:D.height,D.bind(0),I=D.destination;else throw new Error("whoops");return b||e.gl.copyTexImage2D(I,E,l,h,O,u,c,0),D&&D.unbind(),e.gl.bindFramebuffer(a.FRAMEBUFFER,prevHandle||null),A&&d.destroy(),D}function fo(e){if(e instanceof se){var t=e.width,r=e.height,n=e.id,o=e.device.createFramebuffer({id:"framebuffer-for-".concat(n),width:t,height:r,colorAttachments:[e]});return{framebuffer:o,destroyFramebuffer:!0}}return{framebuffer:e,destroyFramebuffer:!1}}function I_(e){var t=P_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function P_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var yr=function(e){x(r,e);var t=I_(r);function r(o,i){var s;return P(this,r),s=t.call(this,o,i),s.device=void 0,s.commandBuffer=void 0,s.device=o,s.commandBuffer=new uo(o),s}var n=r.prototype;return n.destroy=function(){},n.finish=function(){this.commandBuffer.submitCommands()},n.copyBufferToBuffer=function(i){this.commandBuffer.commands.push({name:"copy-buffer-to-buffer",options:i})},n.copyBufferToTexture=function(i){this.commandBuffer.commands.push({name:"copy-buffer-to-texture",options:i})},n.copyTextureToBuffer=function(i){this.commandBuffer.commands.push({name:"copy-texture-to-buffer",options:i})},n.copyTextureToTexture=function(i){this.commandBuffer.commands.push({name:"copy-texture-to-texture",options:i})},n.pushDebugGroup=function(i){},n.popDebugGroup=function(){},n.insertDebugMarker=function(i){},y(r)}(ar);function _o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function ye(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?_o(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_o(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function y_(e){var t=F_();return function(){var n=v(e),o;if(t){var i=v(this).constructor;o=Reflect.construct(n,arguments,i)}else o=n.apply(this,arguments);return w(this,o)}}function F_(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}var Fr=1,ue=function(e){x(r,e);var t=y_(r);r.isSupported=function(){return typeof WebGLRenderingContext<"u"||Un()},r.attach=function(i){if(i instanceof r)return i;if(i?.device instanceof bt)return i.device;if(!B_(i))throw new Error("Invalid WebGLRenderingContext");return new r({gl:i})},r.create=function(){var o=oe(Cn.default.mark(function s(){var u,_,c=arguments;return Cn.default.wrap(function(l){for(;;)switch(l.prev=l.next){case 0:if(u=c.length>0&&c[0]!==void 0?c[0]:{},C.groupCollapsed(Fr,"WebGLDevice created"),typeof u.canvas!="string"){l.next=5;break}return l.next=5,ot.pageLoaded;case 5:if(!(C.get("debug")||u.debug)){l.next=8;break}return l.next=8,Li();case 8:if(_=u.spector,!(C.get("spector")||_)){l.next=12;break}return l.next=12,Di();case 12:if(C.probe(Fr+1,"DOM is loaded")(),!(u.gl&&u.gl.device)){l.next=15;break}return l.abrupt("return",r.attach(u.gl));case 15:return l.abrupt("return",new r(u));case 16:case"end":return l.stop()}},s)}));function i(){return o.apply(this,arguments)}return i}();function r(o){var i,s;P(this,r),s=t.call(this,ye(ye({},o),{},{id:o.id||ge("webgl-device")})),s.info=void 0,s.canvasContext=void 0,s.handle=void 0,s.lost=void 0,s._resolveContextLost=void 0,s._features=void 0,s._limits=void 0,s.renderPass=null,s.gl=void 0,s.gl2=null,s.debug=!1,s.isWebGL1=void 0,s.isWebGL2=void 0,s._canvasSizeInfo={clientWidth:0,clientHeight:0,devicePixelRatio:1},s._extensions={},s._polyfilled=!1,s.spector=void 0,s._webglLimits=void 0;var u=(i=o.gl)===null||i===void 0?void 0:i.device;if(u)throw new Error("WebGL context already attached to device ".concat(u.id));s.canvasContext=new vr(Ae(s),o),s.lost=new Promise(function(h){s._resolveContextLost=h});var _=function(O){var b,D;return(b=(D=s)._resolveContextLost)===null||b===void 0?void 0:b.call(D,{reason:"destroyed",message:"Computer entered sleep mode, or too many apps or browser tabs are using the GPU."})},c=o.gl||null;if(c=c||(q()?ai(s.canvasContext.canvas,ye(ye({},o),{},{onContextLost:_})):null),c=c||(q()?null:xn(ye(ye({},o),{},{onContextLost:_}))),!c)throw new Error("WebGL context creation failed");s.handle=c,s.gl=s.handle,s.gl2=s.gl,s.isWebGL2=M_(s.gl),s.isWebGL1=!s.isWebGL2,s.info=ii(s.gl),s.gl.device=Ae(s),s.gl._version=s.isWebGL2?2:1,Er(s.gl);var E=o.enable,l=E===void 0?!0:E,R=o.copyState,d=R===void 0?!1:R;if(xt(s.gl,{enable:l,copyState:d,log:function(){for(var O=arguments.length,b=new Array(O),D=0;D<O;D++)b[D]=arguments[D];return C.log.apply(C,[1].concat(b))()}}),q()&&o.debug&&(s.gl=Wi(s.gl,ye(ye({},o),{},{webgl2:s.isWebGL2,throwOnError:!0})),s.gl2=s.gl,s.debug=!0,C.level=Math.max(C.level,1),C.warn("WebGL debug mode activated. Performance reduced.")()),q()&&o.spector){var A=s.handle.canvas||o.canvas;s.spector=Ui(ye(ye({},s.props),{},{canvas:A}))}var p="Created ".concat(s.info.type).concat(s.debug?" debug":""," context: ").concat(s.info.vendor,", ").concat(s.info.renderer," for canvas: ").concat(s.canvasContext.id);return C.probe(Fr,p)(),C.groupEnd(Fr)(),s}var n=r.prototype;return n.destroy=function(){var i=this.gl.getExtension("STACKGL_destroy_context");i&&i.destroy()},n.getSize=function(){return[this.gl.drawingBufferWidth,this.gl.drawingBufferHeight]},n.isTextureFormatSupported=function(i){return Lt(this.gl,i)},n.isTextureFormatFilterable=function(i){return _i(this.gl,i)},n.isTextureFormatRenderable=function(i){return ci(this.gl,i)},n.assertWebGL2=function(){if(!this.gl2)throw new Error("Requires WebGL2");return this.gl2},n.createCanvasContext=function(i){throw new Error("WebGL only supports a single canvas")},n.createBuffer=function(i){var s=this._getBufferProps(i);return new ht(this,s)},n._createTexture=function(i){return new Se(this,i)},n.createExternalTexture=function(i){throw new Error("createExternalTexture() not implemented")},n.createSampler=function(i){return new qe(this,i)},n.createShader=function(i){return new br(this,i)},n.createFramebuffer=function(i){return new At(this,i)},n.createRenderPipeline=function(i){return new Pr(this,i)},n.beginRenderPass=function(i){return new Nr(this,i)},n.createComputePipeline=function(i){throw new Error("ComputePipeline not supported in WebGL")},n.beginComputePass=function(i){throw new Error("compute shaders not supported in WebGL")},n.getDefaultRenderPass=function(){return this.renderPass=this.renderPass||this.beginRenderPass({framebuffer:this.canvasContext.getCurrentFramebuffer()}),this.renderPass},n.createCommandEncoder=function(i){return new yr(this,i)},n.submit=function(){var i;(i=this.renderPass)===null||i===void 0||i.end(),this.renderPass=null},n.loseDevice=function(){var i,s=!1,u=this.gl.getExtension("WEBGL_lose_context");return u&&(s=!0,u.loseContext()),(i=this._resolveContextLost)===null||i===void 0||i.call(this,{reason:"destroyed",message:"Application triggered context loss"}),s},n.pushState=function(){De(this.gl)},n.popState=function(){Ce(this.gl)},n.setSpectorMetadata=function(i,s){i.__SPECTOR_Metadata=s},n.getGLKey=function(i,s){s=s||this.gl2||this.gl;var u=Number(i);for(var _ in s)if(s[_]===u)return"GL.".concat(_);return String(i)},y(r,[{key:"features",get:function(){return this._features=this._features||Ri(this.gl),this._features}},{key:"limits",get:function(){return this._limits=this._limits||Ti(this.gl),this._limits}},{key:"isLost",get:function(){return this.gl.isContextLost()}},{key:"webglLimits",get:function(){return this._webglLimits=this._webglLimits||Ai(this.gl),this._webglLimits}}]),r}(bt);ue.type="webgl";function B_(e){return typeof WebGLRenderingContext<"u"&&e instanceof WebGLRenderingContext||typeof WebGL2RenderingContext<"u"&&e instanceof WebGL2RenderingContext?!0:Boolean(e&&Number.isFinite(e._version))}function M_(e){return typeof WebGL2RenderingContext<"u"&&e instanceof WebGL2RenderingContext?!0:Boolean(e&&e._version===2)}var D_=256,U_=1024,x_=16384;var w_="clear: bad arguments";function co(e,t){var r=ue.attach(e),n=t||{},o=n.framebuffer,i=o===void 0?null:o,s=n.color,u=s===void 0?null:s,_=n.depth,c=_===void 0?null:_,E=n.stencil,l=E===void 0?null:E,R={};i&&(R.framebuffer=i);var d=0;u&&(d|=x_,u!==!0&&(R.clearColor=u)),c&&(d|=D_,c!==!0&&(R.clearDepth=c)),l&&(d|=U_,c!==!0&&(R.clearStencil=c)),F(d!==0,w_),Ee(r.gl,R,function(){r.gl.clear(d)})}function In(e){switch(e){case a.ALPHA:case a.R32F:case a.RED:return 1;case a.RG32F:case a.RG:return 2;case a.RGB:case a.RGB32F:return 3;case a.RGBA:case a.RGBA32F:return 4;default:return F(!1),0}}function Eo(e){switch(e){case a.UNSIGNED_BYTE:return 1;case a.UNSIGNED_SHORT_5_6_5:case a.UNSIGNED_SHORT_4_4_4_4:case a.UNSIGNED_SHORT_5_5_5_1:return 2;case a.FLOAT:return 4;default:return F(!1),0}}function lo(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function Ro(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?lo(Object(r),!0).forEach(function(n){f(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):lo(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function To(e,t){var r=t||{},n=r.sourceX,o=n===void 0?0:n,i=r.sourceY,s=i===void 0?0:i,u=r.sourceFormat,_=u===void 0?a.RGBA:u,c=t||{},E=c.sourceAttachment,l=E===void 0?a.COLOR_ATTACHMENT0:E,R=c.target,d=R===void 0?null:R,A=c.sourceWidth,p=c.sourceHeight,h=c.sourceType,O=Pn(e),b=O.framebuffer,D=O.deleteFramebuffer;F(b);var I=b,L=I.gl,X=I.handle;A=A||b.width,p=p||b.height,l===a.COLOR_ATTACHMENT0&&X===null&&(l=a.FRONT);var $=l-a.COLOR_ATTACHMENT0;h=h||b.colorAttachments[$].type,d=H_(d,h,_,A,p),h=h||mt(d);var z=L.bindFramebuffer(a.FRAMEBUFFER,X);return L.readPixels(o,s,A,p,_,h,d),L.bindFramebuffer(a.FRAMEBUFFER,z||null),D&&b.destroy(),d}function Ao(e,t){var r=t||{},n=r.sourceX,o=n===void 0?0:n,i=r.sourceY,s=i===void 0?0:i,u=r.sourceFormat,_=u===void 0?a.RGBA:u,c=r.targetByteOffset,E=c===void 0?0:c,l=t||{},R=l.target,d=l.sourceWidth,A=l.sourceHeight,p=l.sourceType,h=Pn(e),O=h.framebuffer,b=h.deleteFramebuffer;F(O),d=d||O.width,A=A||O.height;var D=O,I=D.device.assertWebGL2();if(p=p||(R?R.type:a.UNSIGNED_BYTE),!R){var L=In(_),X=Eo(p),$=E+d*A*L*X;R=new ht(I,{byteLength:$,accessor:{type:p,size:L}})}return R.bind({glTarget:a.PIXEL_PACK_BUFFER}),Ee(I,{framebuffer:O},function(){I.readPixels(o,s,d,A,_,p,E)}),R.unbind({glTarget:a.PIXEL_PACK_BUFFER}),b&&O.destroy(),R}function po(e,t,r){var n=r||{},o=n.sourceX,i=o===void 0?0:o,s=n.sourceY,u=s===void 0?0:s,_=n.targetMipmaplevel,c=_===void 0?0:_,E=n.targetInternalFormat,l=E===void 0?a.RGBA:E,R=r||{},d=R.targetX,A=R.targetY,p=R.targetZ,h=R.width,O=R.height,b=Pn(e),D=b.framebuffer,I=b.deleteFramebuffer;F(D);var L=D,X=L.device,$=L.handle,z=typeof d<"u"||typeof A<"u"||typeof p<"u";d=d||0,A=A||0,p=p||0;var ne=X.gl.bindFramebuffer(a.FRAMEBUFFER,$);F(t);var K=null,S;if(t instanceof se?(K=t,h=Number.isFinite(h)?h:K.width,O=Number.isFinite(O)?O:K.height,K.bind(0),S=K.target):S=t,!z)X.gl.copyTexImage2D(S,c,l,i,u,h,O,0);else switch(S){case a.TEXTURE_2D:case a.TEXTURE_CUBE_MAP:X.gl.copyTexSubImage2D(S,c,d,A,i,u,h,O);break;case a.TEXTURE_2D_ARRAY:case a.TEXTURE_3D:X.assertWebGL2(),X.gl2.copyTexSubImage3D(S,c,d,A,p,i,u,h,O);break;default:}return K&&K.unbind(),gl.bindFramebuffer(a.FRAMEBUFFER,ne||null),I&&D.destroy(),K}function Pn(e){return e instanceof ut?{framebuffer:e,deleteFramebuffer:!1}:{framebuffer:X_(e),deleteFramebuffer:!0}}function X_(e,t){var r=e.device,n=e.width,o=e.height,i=e.id,s=r.createFramebuffer(Ro(Ro({},t),{},{id:"framebuffer-for-".concat(i),width:n,height:o,colorAttachments:[e]}));return s}function H_(e,t,r,n,o){if(e)return e;t=t||a.UNSIGNED_BYTE;var i=He(t,{clamped:!1}),s=In(r);return new i(n*o*s)}return Co(L_);})();
31
31
  /*! Bundled license information:
32
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "9.0.0-alpha.34",
3
+ "version": "9.0.0-alpha.35",
4
4
  "description": "WebGL2 adapter for the luma.gl API",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -44,12 +44,12 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@babel/runtime": "^7.0.0",
47
- "@luma.gl/constants": "9.0.0-alpha.34",
48
- "@luma.gl/core": "9.0.0-alpha.34",
47
+ "@luma.gl/constants": "9.0.0-alpha.35",
48
+ "@luma.gl/core": "9.0.0-alpha.35",
49
49
  "@probe.gl/env": "^4.0.2"
50
50
  },
51
51
  "devDependencies": {
52
- "@luma.gl/test-utils": "9.0.0-alpha.34"
52
+ "@luma.gl/test-utils": "9.0.0-alpha.35"
53
53
  },
54
- "gitHead": "66ab5fe7caa59ef83224a0b7c892e00bd43cbefd"
54
+ "gitHead": "5b93557731aaf1b9fd0fc1d84b5a3c7c0717298a"
55
55
  }
@@ -393,6 +393,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
393
393
  continue; // eslint-disable-line no-continue
394
394
  }
395
395
  this.vertexArrayObject.setConstant(attributeInfo.location, value);
396
+ this.vertexArrayObject.enable(attributeInfo.location, false);
396
397
  }
397
398
  }
398
399