0a172cff079637623c15d27f58f434bad78a9bae72c53d0276b237b49d070087.json 92 KB

1
  1. {"ast":null,"code":"/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Logger } from \"../Misc/logger.js\";\nimport { Engine } from \"../Engines/engine.js\";\nimport { InternalTexture } from \"../Materials/Textures/internalTexture.js\";\nimport { DataBuffer } from \"../Buffers/dataBuffer.js\";\nimport { PerformanceConfigurator } from \"./performanceConfigurator.js\";\nimport { RenderTargetWrapper } from \"./renderTargetWrapper.js\";\nimport { IsWrapper } from \"../Materials/drawWrapper.functions.js\";\n/**\n * Options to create the null engine\n */\nexport class NullEngineOptions {\n constructor() {\n /**\n * Render width (Default: 512)\n */\n this.renderWidth = 512;\n /**\n * Render height (Default: 256)\n */\n this.renderHeight = 256;\n /**\n * Texture size (Default: 512)\n */\n this.textureSize = 512;\n /**\n * If delta time between frames should be constant\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n */\n this.deterministicLockstep = false;\n /**\n * Maximum about of steps between frames (Default: 4)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n */\n this.lockstepMaxSteps = 4;\n }\n}\n/**\n * The null engine class provides support for headless version of babylon.js.\n * This can be used in server side scenario or for testing purposes\n */\nexport class NullEngine extends Engine {\n /**\n * Gets a boolean indicating that the engine is running in deterministic lock step mode\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n * @returns true if engine is in deterministic lock step mode\n */\n isDeterministicLockStep() {\n return this._options.deterministicLockstep;\n }\n /**\n * Gets the max steps when engine is running in deterministic lock step\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n * @returns the max steps\n */\n getLockstepMaxSteps() {\n return this._options.lockstepMaxSteps;\n }\n /**\n * Gets the current hardware scaling level.\n * By default the hardware scaling level is computed from the window device ratio.\n * if level = 1 then the engine will render at the exact resolution of the canvas. If level = 0.5 then the engine will render at twice the size of the canvas.\n * @returns a number indicating the current hardware scaling level\n */\n getHardwareScalingLevel() {\n return 1.0;\n }\n constructor(options = new NullEngineOptions()) {\n super(null);\n if (options.deterministicLockstep === undefined) {\n options.deterministicLockstep = false;\n }\n if (options.timeStep !== undefined) {\n this._timeStep = options.timeStep;\n }\n if (options.lockstepMaxSteps === undefined) {\n options.lockstepMaxSteps = 4;\n }\n this._options = options;\n PerformanceConfigurator.SetMatrixPrecision(!!options.useHighPrecisionMatrix);\n // Init caps\n // We consider we are on a webgl1 capable device\n this._caps = {\n maxTexturesImageUnits: 16,\n maxVertexTextureImageUnits: 16,\n maxCombinedTexturesImageUnits: 32,\n maxTextureSize: 512,\n maxCubemapTextureSize: 512,\n maxDrawBuffers: 0,\n maxRenderTextureSize: 512,\n maxVertexAttribs: 16,\n maxVaryingVectors: 16,\n maxFragmentUniformVectors: 16,\n maxVertexUniformVectors: 16,\n standardDerivatives: false,\n astc: null,\n pvrtc: null,\n etc1: null,\n etc2: null,\n bptc: null,\n maxAnisotropy: 0,\n uintIndices: false,\n fragmentDepthSupported: false,\n highPrecisionShaderSupported: true,\n colorBufferFloat: false,\n supportFloatTexturesResolve: false,\n rg11b10ufColorRenderable: false,\n textureFloat: false,\n textureFloatLinearFiltering: false,\n textureFloatRender: false,\n textureHalfFloat: false,\n textureHalfFloatLinearFiltering: false,\n textureHalfFloatRender: false,\n textureLOD: false,\n texelFetch: false,\n drawBuffersExtension: false,\n depthTextureExtension: false,\n vertexArrayObject: false,\n instancedArrays: false,\n supportOcclusionQuery: false,\n canUseTimestampForTimerQuery: false,\n maxMSAASamples: 1,\n blendMinMax: false,\n canUseGLInstanceID: false,\n canUseGLVertexID: false,\n supportComputeShaders: false,\n supportSRGBBuffers: false,\n supportTransformFeedbacks: false,\n textureMaxLevel: false,\n texture2DArrayMaxLayerCount: 128,\n disableMorphTargetTexture: false,\n textureNorm16: false\n };\n this._features = {\n forceBitmapOverHTMLImageElement: false,\n supportRenderAndCopyToLodForFloatTextures: false,\n supportDepthStencilTexture: false,\n supportShadowSamplers: false,\n uniformBufferHardCheckMatrix: false,\n allowTexturePrefiltering: false,\n trackUbosInFrame: false,\n checkUbosContentBeforeUpload: false,\n supportCSM: false,\n basisNeedsPOT: false,\n support3DTextures: false,\n needTypeSuffixInShaderConstants: false,\n supportMSAA: false,\n supportSSAO2: false,\n supportIBLShadows: false,\n supportExtendedTextureFormats: false,\n supportSwitchCaseInShader: false,\n supportSyncTextureRead: false,\n needsInvertingBitmap: false,\n useUBOBindingCache: false,\n needShaderCodeInlining: false,\n needToAlwaysBindUniformBuffers: false,\n supportRenderPasses: true,\n supportSpriteInstancing: false,\n forceVertexBufferStrideAndOffsetMultiple4Bytes: false,\n _checkNonFloatVertexBuffersDontRecreatePipelineContext: false,\n _collectUbosUpdatedInFrame: false\n };\n if (options.renderingCanvas) {\n this._renderingCanvas = options.renderingCanvas;\n }\n Logger.Log(`Babylon.js v${Engine.Version} - Null engine`);\n // Wrappers\n const theCurrentGlobal = typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : window;\n if (typeof URL === \"undefined\") {\n theCurrentGlobal.URL = {\n createObjectURL: function () {},\n revokeObjectURL: function () {}\n };\n }\n if (typeof Blob === \"undefined\") {\n theCurrentGlobal.Blob = function () {};\n }\n }\n /**\n * Creates a vertex buffer\n * @param vertices the data for the vertex buffer\n * @returns the new WebGL static buffer\n */\n createVertexBuffer(vertices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n return buffer;\n }\n /**\n * Creates a new index buffer\n * @param indices defines the content of the index buffer\n * @returns a new webGL buffer\n */\n createIndexBuffer(indices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n return buffer;\n }\n /**\n * Clear the current render buffer or the current render target (if any is set up)\n * @param color defines the color to use\n * @param backBuffer defines if the back buffer must be cleared\n * @param depth defines if the depth buffer must be cleared\n * @param stencil defines if the stencil buffer must be cleared\n */\n clear(color, backBuffer, depth, stencil = false) {}\n /**\n * Gets the current render width\n * @param useScreen defines if screen size must be used (or the current render target if any)\n * @returns a number defining the current render width\n */\n getRenderWidth(useScreen = false) {\n if (!useScreen && this._currentRenderTarget) {\n return this._currentRenderTarget.width;\n }\n return this._options.renderWidth;\n }\n /**\n * Gets the current render height\n * @param useScreen defines if screen size must be used (or the current render target if any)\n * @returns a number defining the current render height\n */\n getRenderHeight(useScreen = false) {\n if (!useScreen && this._currentRenderTarget) {\n return this._currentRenderTarget.height;\n }\n return this._options.renderHeight;\n }\n /**\n * Set the WebGL's viewport\n * @param viewport defines the viewport element to be used\n * @param requiredWidth defines the width required for rendering. If not provided the rendering canvas' width is used\n * @param requiredHeight defines the height required for rendering. If not provided the rendering canvas' height is used\n */\n setViewport(viewport, requiredWidth, requiredHeight) {\n this._cachedViewport = viewport;\n }\n createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context) {\n return {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __SPECTOR_rebuildProgram: null\n };\n }\n /**\n * Gets the list of webGL uniform locations associated with a specific program based on a list of uniform names\n * @param pipelineContext defines the pipeline context to use\n * @param uniformsNames defines the list of uniform names\n * @returns an array of webGL uniform locations\n */\n getUniforms(pipelineContext, uniformsNames) {\n return [];\n }\n /**\n * Gets the lsit of active attributes for a given webGL program\n * @param pipelineContext defines the pipeline context to use\n * @param attributesNames defines the list of attribute names to get\n * @returns an array of indices indicating the offset of each attribute\n */\n getAttributes(pipelineContext, attributesNames) {\n return [];\n }\n /**\n * Binds an effect to the webGL context\n * @param effect defines the effect to bind\n */\n bindSamplers(effect) {\n this._currentEffect = null;\n }\n /**\n * Activates an effect, making it the current one (ie. the one used for rendering)\n * @param effect defines the effect to activate\n */\n enableEffect(effect) {\n effect = effect !== null && IsWrapper(effect) ? effect.effect : effect; // get only the effect, we don't need a Wrapper in the WebGL engine\n this._currentEffect = effect;\n if (!effect) {\n return;\n }\n if (effect.onBind) {\n effect.onBind(effect);\n }\n if (effect._onBindObservable) {\n effect._onBindObservable.notifyObservers(effect);\n }\n }\n /**\n * Set various states to the webGL context\n * @param culling defines culling state: true to enable culling, false to disable it\n * @param zOffset defines the value to apply to zOffset (0 by default)\n * @param force defines if states must be applied even if cache is up to date\n * @param reverseSide defines if culling must be reversed (CCW if false, CW if true)\n * @param cullBackFaces true to cull back faces, false to cull front faces (if culling is enabled)\n * @param stencil stencil states to set\n * @param zOffsetUnits defines the value to apply to zOffsetUnits (0 by default)\n */\n setState(culling, zOffset = 0, force, reverseSide = false, cullBackFaces, stencil, zOffsetUnits = 0) {}\n /**\n * Set the value of an uniform to an array of int32\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as matrices)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrices defines the array of float32 to store\n * @returns true if value was set\n */\n setMatrices(uniform, matrices) {\n return true;\n }\n /**\n * Set the value of an uniform to a matrix (3x3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrix defines the Float32Array representing the 3x3 matrix to store\n * @returns true if value was set\n */\n setMatrix3x3(uniform, matrix) {\n return true;\n }\n /**\n * Set the value of an uniform to a matrix (2x2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrix defines the Float32Array representing the 2x2 matrix to store\n * @returns true if value was set\n */\n setMatrix2x2(uniform, matrix) {\n return true;\n }\n /**\n * Set the value of an uniform to a number (float)\n * @param uniform defines the webGL uniform location where to store the value\n * @param value defines the float number to store\n * @returns true if value was set\n */\n setFloat(uniform, value) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec2\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @returns true if value was set\n */\n setFloat2(uniform, x, y) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec3\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @param z defines the 3rd component of the value\n * @returns true if value was set\n */\n setFloat3(uniform, x, y, z) {\n return true;\n }\n /**\n * Set the value of an uniform to a boolean\n * @param uniform defines the webGL uniform location where to store the value\n * @param bool defines the boolean to store\n * @returns true if value was set\n */\n setBool(uniform, bool) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec4\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @param z defines the 3rd component of the value\n * @param w defines the 4th component of the value\n * @returns true if value was set\n */\n setFloat4(uniform, x, y, z, w) {\n return true;\n }\n /**\n * Sets the current alpha mode\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering\n */\n setAlphaMode(mode, noDepthWriteChange = false) {\n if (this._alphaMode === mode) {\n return;\n }\n this.alphaState.alphaBlend = mode !== 0;\n if (!noDepthWriteChange) {\n this.setDepthWrite(mode === 0);\n }\n this._alphaMode = mode;\n }\n /**\n * Bind webGl buffers directly to the webGL context\n * @param vertexBuffers defines the vertex buffer to bind\n * @param indexBuffer defines the index buffer to bind\n * @param effect defines the effect associated with the vertex buffer\n */\n bindBuffers(vertexBuffers, indexBuffer, effect) {}\n /**\n * Force the entire cache to be cleared\n * You should not have to use this function unless your engine needs to share the webGL context with another engine\n * @param bruteForce defines a boolean to force clearing ALL caches (including stencil, detoh and alpha states)\n */\n wipeCaches(bruteForce) {\n if (this.preventCacheWipeBetweenFrames) {\n return;\n }\n this.resetTextureCache();\n this._currentEffect = null;\n if (bruteForce) {\n this._currentProgram = null;\n this._stencilStateComposer.reset();\n this.depthCullingState.reset();\n this.alphaState.reset();\n }\n this._cachedVertexBuffers = null;\n this._cachedIndexBuffer = null;\n this._cachedEffectForVertexBuffers = null;\n }\n /**\n * Send a draw order\n * @param useTriangles defines if triangles must be used to draw (else wireframe will be used)\n * @param indexStart defines the starting index\n * @param indexCount defines the number of index to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n draw(useTriangles, indexStart, indexCount, instancesCount) {}\n /**\n * Draw a list of indexed primitives\n * @param fillMode defines the primitive to use\n * @param indexStart defines the starting index\n * @param indexCount defines the number of index to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n drawElementsType(fillMode, indexStart, indexCount, instancesCount) {}\n /**\n * Draw a list of unindexed primitives\n * @param fillMode defines the primitive to use\n * @param verticesStart defines the index of first vertex to draw\n * @param verticesCount defines the count of vertices to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n drawArraysType(fillMode, verticesStart, verticesCount, instancesCount) {}\n /** @internal */\n _createTexture() {\n return {};\n }\n /**\n * @internal\n */\n _releaseTexture(texture) {}\n /**\n * Usually called from Texture.ts.\n * Passed information to create a WebGLTexture\n * @param urlArg defines a value which contains one of the following:\n * * A conventional http URL, e.g. 'http://...' or 'file://...'\n * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'\n * * An indicator that data being passed using the buffer parameter, e.g. 'data:mytexture.jpg'\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated. Ignored for compressed textures. They must be in the file\n * @param invertY when true, image is flipped when loaded. You probably want true. Certain compressed textures may invert this if their default is inverted (eg. ktx)\n * @param scene needed for loading to the correct scene\n * @param samplingMode mode with should be used sample / access the texture (Default: Texture.TRILINEAR_SAMPLINGMODE)\n * @param onLoad optional callback to be called upon successful completion\n * @param onError optional callback to be called upon failure\n * @param buffer a source of a file previously fetched as either a base64 string, an ArrayBuffer (compressed or image format), HTMLImageElement (image format), or a Blob\n * @param fallback an internal argument in case the function must be called again, due to etc1 not having alpha capabilities\n * @param format internal format. Default: RGB when extension is '.jpg' else RGBA. Ignored for compressed textures\n * @param forcedExtension defines the extension to use to pick the right loader\n * @param mimeType defines an optional mime type\n * @returns a InternalTexture for assignment back into BABYLON.Texture\n */\n createTexture(urlArg, noMipmap, invertY, scene, samplingMode = 3, onLoad = null, onError = null, buffer = null, fallback = null, format = null, forcedExtension = null, mimeType) {\n const texture = new InternalTexture(this, 1 /* InternalTextureSource.Url */);\n const url = String(urlArg);\n texture.url = url;\n texture.generateMipMaps = !noMipmap;\n texture.samplingMode = samplingMode;\n texture.invertY = invertY;\n texture.baseWidth = this._options.textureSize;\n texture.baseHeight = this._options.textureSize;\n texture.width = this._options.textureSize;\n texture.height = this._options.textureSize;\n if (format) {\n texture.format = format;\n }\n texture.isReady = true;\n if (onLoad) {\n setTimeout(() => {\n onLoad(texture);\n });\n }\n this._internalTexturesCache.push(texture);\n return texture;\n }\n /**\n * @internal\n */\n _createHardwareRenderTargetWrapper(isMulti, isCube, size) {\n const rtWrapper = new RenderTargetWrapper(isMulti, isCube, size, this);\n this._renderTargetWrapperCache.push(rtWrapper);\n return rtWrapper;\n }\n /**\n * Creates a new render target wrapper\n * @param size defines the size of the texture\n * @param options defines the options used to create the texture\n * @returns a new render target wrapper\n */\n createRenderTargetTexture(size, options) {\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size);\n const fullOptions = {};\n if (options !== undefined && typeof options === \"object\") {\n fullOptions.generateMipMaps = options.generateMipMaps;\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\n fullOptions.type = options.type === undefined ? 0 : options.type;\n fullOptions.samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;\n } else {\n fullOptions.generateMipMaps = options;\n fullOptions.generateDepthBuffer = true;\n fullOptions.generateStencilBuffer = false;\n fullOptions.type = 0;\n fullOptions.samplingMode = 3;\n }\n const texture = new InternalTexture(this, 5 /* InternalTextureSource.RenderTarget */);\n const width = size.width || size;\n const height = size.height || size;\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\n texture.baseWidth = width;\n texture.baseHeight = height;\n texture.width = width;\n texture.height = height;\n texture.isReady = true;\n texture.samples = 1;\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\n texture.samplingMode = fullOptions.samplingMode;\n texture.type = fullOptions.type;\n this._internalTexturesCache.push(texture);\n return rtWrapper;\n }\n /**\n * Creates a new render target wrapper\n * @param size defines the size of the texture\n * @param options defines the options used to create the texture\n * @returns a new render target wrapper\n */\n createRenderTargetCubeTexture(size, options) {\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);\n const fullOptions = {\n generateMipMaps: true,\n generateDepthBuffer: true,\n generateStencilBuffer: false,\n type: 0,\n samplingMode: 3,\n format: 5,\n ...options\n };\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && fullOptions.generateStencilBuffer;\n if (fullOptions.type === 1 && !this._caps.textureFloatLinearFiltering) {\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\n fullOptions.samplingMode = 1;\n } else if (fullOptions.type === 2 && !this._caps.textureHalfFloatLinearFiltering) {\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\n fullOptions.samplingMode = 1;\n }\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\n const texture = new InternalTexture(this, 5 /* InternalTextureSource.RenderTarget */);\n texture.baseWidth = size;\n texture.baseHeight = size;\n texture.width = size;\n texture.height = size;\n texture.isReady = true;\n texture.isCube = true;\n texture.samples = 1;\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\n texture.samplingMode = fullOptions.samplingMode;\n texture.type = fullOptions.type;\n this._internalTexturesCache.push(texture);\n return rtWrapper;\n }\n /**\n * Update the sampling mode of a given texture\n * @param samplingMode defines the required sampling mode\n * @param texture defines the texture to update\n */\n updateTextureSamplingMode(samplingMode, texture) {\n texture.samplingMode = samplingMode;\n }\n /**\n * Creates a raw texture\n * @param data defines the data to store in the texture\n * @param width defines the width of the texture\n * @param height defines the height of the texture\n * @param format defines the format of the data\n * @param generateMipMaps defines if the engine should generate the mip levels\n * @param invertY defines if data must be stored with Y axis inverted\n * @param samplingMode defines the required sampling mode (Texture.NEAREST_SAMPLINGMODE by default)\n * @param compression defines the compression used (null by default)\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\n * @param creationFlags specific flags to use when creating the texture (1 for storage textures, for eg)\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\n * @returns the raw texture inside an InternalTexture\n */\n createRawTexture(data, width, height, format, generateMipMaps, invertY, samplingMode, compression = null, type = 0, creationFlags = 0, useSRGBBuffer = false) {\n const texture = new InternalTexture(this, 3 /* InternalTextureSource.Raw */);\n texture.baseWidth = width;\n texture.baseHeight = height;\n texture.width = width;\n texture.height = height;\n texture.format = format;\n texture.generateMipMaps = generateMipMaps;\n texture.samplingMode = samplingMode;\n texture.invertY = invertY;\n texture._compression = compression;\n texture.type = type;\n texture._useSRGBBuffer = useSRGBBuffer;\n if (!this._doNotHandleContextLost) {\n texture._bufferView = data;\n }\n return texture;\n }\n /**\n * Update a raw texture\n * @param texture defines the texture to update\n * @param data defines the data to store in the texture\n * @param format defines the format of the data\n * @param invertY defines if data must be stored with Y axis inverted\n * @param compression defines the compression used (null by default)\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\n */\n updateRawTexture(texture, data, format, invertY, compression = null, type = 0, useSRGBBuffer = false) {\n if (texture) {\n texture._bufferView = data;\n texture.format = format;\n texture.invertY = invertY;\n texture._compression = compression;\n texture.type = type;\n texture._useSRGBBuffer = useSRGBBuffer;\n }\n }\n /**\n * Binds the frame buffer to the specified texture.\n * @param rtWrapper The render target wrapper to render to\n * @param faceIndex The face of the texture to render to in case of cube texture\n * @param requiredWidth The width of the target to render to\n * @param requiredHeight The height of the target to render to\n * @param forceFullscreenViewport Forces the viewport to be the entire texture/screen if true\n */\n bindFramebuffer(rtWrapper, faceIndex, requiredWidth, requiredHeight, forceFullscreenViewport) {\n if (this._currentRenderTarget) {\n this.unBindFramebuffer(this._currentRenderTarget);\n }\n this._currentRenderTarget = rtWrapper;\n this._currentFramebuffer = null;\n if (this._cachedViewport && !forceFullscreenViewport) {\n this.setViewport(this._cachedViewport, requiredWidth, requiredHeight);\n }\n }\n /**\n * Unbind the current render target texture from the webGL context\n * @param rtWrapper defines the render target wrapper to unbind\n * @param disableGenerateMipMaps defines a boolean indicating that mipmaps must not be generated\n * @param onBeforeUnbind defines a function which will be called before the effective unbind\n */\n unBindFramebuffer(rtWrapper, disableGenerateMipMaps = false, onBeforeUnbind) {\n this._currentRenderTarget = null;\n if (onBeforeUnbind) {\n onBeforeUnbind();\n }\n this._currentFramebuffer = null;\n }\n /**\n * Creates a dynamic vertex buffer\n * @param vertices the data for the dynamic vertex buffer\n * @returns the new WebGL dynamic buffer\n */\n createDynamicVertexBuffer(vertices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n buffer.capacity = 1;\n return buffer;\n }\n /**\n * Update the content of a dynamic texture\n * @param texture defines the texture to update\n * @param canvas defines the canvas containing the source\n * @param invertY defines if data must be stored with Y axis inverted\n * @param premulAlpha defines if alpha is stored as premultiplied\n * @param format defines the format of the data\n */\n updateDynamicTexture(texture, canvas, invertY, premulAlpha = false, format) {}\n /**\n * Gets a boolean indicating if all created effects are ready\n * @returns true if all effects are ready\n */\n areAllEffectsReady() {\n return true;\n }\n /**\n * @internal\n * Get the current error code of the webGL context\n * @returns the error code\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getError\n */\n getError() {\n return 0;\n }\n /** @internal */\n _getUnpackAlignement() {\n return 1;\n }\n /**\n * @internal\n */\n _unpackFlipY(value) {}\n /**\n * Update a dynamic index buffer\n * @param indexBuffer defines the target index buffer\n * @param indices defines the data to update\n * @param offset defines the offset in the target index buffer where update should start\n */\n updateDynamicIndexBuffer(indexBuffer, indices, offset = 0) {}\n /**\n * Updates a dynamic vertex buffer.\n * @param vertexBuffer the vertex buffer to update\n * @param vertices the data used to update the vertex buffer\n * @param byteOffset the byte offset of the data (optional)\n * @param byteLength the byte length of the data (optional)\n */\n updateDynamicVertexBuffer(vertexBuffer, vertices, byteOffset, byteLength) {}\n /**\n * @internal\n */\n _bindTextureDirectly(target, texture) {\n if (this._boundTexturesCache[this._activeChannel] !== texture) {\n this._boundTexturesCache[this._activeChannel] = texture;\n return true;\n }\n return false;\n }\n /**\n * @internal\n */\n _bindTexture(channel, texture) {\n if (channel < 0) {\n return;\n }\n this._bindTextureDirectly(0, texture);\n }\n _deleteBuffer(buffer) {}\n /**\n * Force the engine to release all cached effects. This means that next effect compilation will have to be done completely even if a similar effect was already compiled\n */\n releaseEffects() {}\n displayLoadingUI() {}\n hideLoadingUI() {}\n set loadingUIText(_) {}\n flushFramebuffer() {}\n /**\n * @internal\n */\n _uploadCompressedDataToTextureDirectly(texture, internalFormat, width, height, data, faceIndex = 0, lod = 0) {}\n /**\n * @internal\n */\n _uploadDataToTextureDirectly(texture, imageData, faceIndex = 0, lod = 0) {}\n /**\n * @internal\n */\n _uploadArrayBufferViewToTexture(texture, imageData, faceIndex = 0, lod = 0) {}\n /**\n * @internal\n */\n _uploadImageToTexture(texture, image, faceIndex = 0, lod = 0) {}\n}","map":{"version":3,"names":["Logger","Engine","InternalTexture","DataBuffer","PerformanceConfigurator","RenderTargetWrapper","IsWrapper","NullEngineOptions","constructor","renderWidth","renderHeight","textureSize","deterministicLockstep","lockstepMaxSteps","NullEngine","isDeterministicLockStep","_options","getLockstepMaxSteps","getHardwareScalingLevel","options","undefined","timeStep","_timeStep","SetMatrixPrecision","useHighPrecisionMatrix","_caps","maxTexturesImageUnits","maxVertexTextureImageUnits","maxCombinedTexturesImageUnits","maxTextureSize","maxCubemapTextureSize","maxDrawBuffers","maxRenderTextureSize","maxVertexAttribs","maxVaryingVectors","maxFragmentUniformVectors","maxVertexUniformVectors","standardDerivatives","astc","pvrtc","etc1","etc2","bptc","maxAnisotropy","uintIndices","fragmentDepthSupported","highPrecisionShaderSupported","colorBufferFloat","supportFloatTexturesResolve","rg11b10ufColorRenderable","textureFloat","textureFloatLinearFiltering","textureFloatRender","textureHalfFloat","textureHalfFloatLinearFiltering","textureHalfFloatRender","textureLOD","texelFetch","drawBuffersExtension","depthTextureExtension","vertexArrayObject","instancedArrays","supportOcclusionQuery","canUseTimestampForTimerQuery","maxMSAASamples","blendMinMax","canUseGLInstanceID","canUseGLVertexID","supportComputeShaders","supportSRGBBuffers","supportTransformFeedbacks","textureMaxLevel","texture2DArrayMaxLayerCount","disableMorphTargetTexture","textureNorm16","_features","forceBitmapOverHTMLImageElement","supportRenderAndCopyToLodForFloatTextures","supportDepthStencilTexture","supportShadowSamplers","uniformBufferHardCheckMatrix","allowTexturePrefiltering","trackUbosInFrame","checkUbosContentBeforeUpload","supportCSM","basisNeedsPOT","support3DTextures","needTypeSuffixInShaderConstants","supportMSAA","supportSSAO2","supportIBLShadows","supportExtendedTextureFormats","supportSwitchCaseInShader","supportSyncTextureRead","needsInvertingBitmap","useUBOBindingCache","needShaderCodeInlining","needToAlwaysBindUniformBuffers","supportRenderPasses","supportSpriteInstancing","forceVertexBufferStrideAndOffsetMultiple4Bytes","_checkNonFloatVertexBuffersDontRecreatePipelineContext","_collectUbosUpdatedInFrame","renderingCanvas","_renderingCanvas","Log","Version","theCurrentGlobal","self","global","window","URL","createObjectURL","revokeObjectURL","Blob","createVertexBuffer","vertices","buffer","references","createIndexBuffer","indices","clear","color","backBuffer","depth","stencil","getRenderWidth","useScreen","_currentRenderTarget","width","getRenderHeight","height","setViewport","viewport","requiredWidth","requiredHeight","_cachedViewport","createShaderProgram","pipelineContext","vertexCode","fragmentCode","defines","context","__SPECTOR_rebuildProgram","getUniforms","uniformsNames","getAttributes","attributesNames","bindSamplers","effect","_currentEffect","enableEffect","onBind","_onBindObservable","notifyObservers","setState","culling","zOffset","force","reverseSide","cullBackFaces","zOffsetUnits","setIntArray","uniform","array","setIntArray2","setIntArray3","setIntArray4","setFloatArray","setFloatArray2","setFloatArray3","setFloatArray4","setArray","setArray2","setArray3","setArray4","setMatrices","matrices","setMatrix3x3","matrix","setMatrix2x2","setFloat","value","setFloat2","x","y","setFloat3","z","setBool","bool","setFloat4","w","setAlphaMode","mode","noDepthWriteChange","_alphaMode","alphaState","alphaBlend","setDepthWrite","bindBuffers","vertexBuffers","indexBuffer","wipeCaches","bruteForce","preventCacheWipeBetweenFrames","resetTextureCache","_currentProgram","_stencilStateComposer","reset","depthCullingState","_cachedVertexBuffers","_cachedIndexBuffer","_cachedEffectForVertexBuffers","draw","useTriangles","indexStart","indexCount","instancesCount","drawElementsType","fillMode","drawArraysType","verticesStart","verticesCount","_createTexture","_releaseTexture","texture","createTexture","urlArg","noMipmap","invertY","scene","samplingMode","onLoad","onError","fallback","format","forcedExtension","mimeType","url","String","generateMipMaps","baseWidth","baseHeight","isReady","setTimeout","_internalTexturesCache","push","_createHardwareRenderTargetWrapper","isMulti","isCube","size","rtWrapper","_renderTargetWrapperCache","createRenderTargetTexture","fullOptions","generateDepthBuffer","generateStencilBuffer","type","_generateDepthBuffer","_generateStencilBuffer","samples","createRenderTargetCubeTexture","updateTextureSamplingMode","createRawTexture","data","compression","creationFlags","useSRGBBuffer","_compression","_useSRGBBuffer","_doNotHandleContextLost","_bufferView","updateRawTexture","bindFramebuffer","faceIndex","forceFullscreenViewport","unBindFramebuffer","_currentFramebuffer","disableGenerateMipMaps","onBeforeUnbind","createDynamicVertexBuffer","capacity","updateDynamicTexture","canvas","premulAlpha","areAllEffectsReady","getError","_getUnpackAlignement","_unpackFlipY","updateDynamicIndexBuffer","offset","updateDynamicVertexBuffer","vertexBuffer","byteOffset","byteLength","_bindTextureDirectly","target","_boundTexturesCache","_activeChannel","_bindTexture","channel","_deleteBuffer","releaseEffects","displayLoadingUI","hideLoadingUI","loadingUIText","_","flushFramebuffer","_uploadCompressedDataToTextureDirectly","internalFormat","lod","_uploadDataToTextureDirectly","imageData","_uploadArrayBufferViewToTexture","_uploadImageToTexture","image"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Engines/nullEngine.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Logger } from \"../Misc/logger.js\";\nimport { Engine } from \"../Engines/engine.js\";\nimport { InternalTexture } from \"../Materials/Textures/internalTexture.js\";\n\nimport { DataBuffer } from \"../Buffers/dataBuffer.js\";\nimport { PerformanceConfigurator } from \"./performanceConfigurator.js\";\nimport { RenderTargetWrapper } from \"./renderTargetWrapper.js\";\nimport { IsWrapper } from \"../Materials/drawWrapper.functions.js\";\n/**\n * Options to create the null engine\n */\nexport class NullEngineOptions {\n constructor() {\n /**\n * Render width (Default: 512)\n */\n this.renderWidth = 512;\n /**\n * Render height (Default: 256)\n */\n this.renderHeight = 256;\n /**\n * Texture size (Default: 512)\n */\n this.textureSize = 512;\n /**\n * If delta time between frames should be constant\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n */\n this.deterministicLockstep = false;\n /**\n * Maximum about of steps between frames (Default: 4)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n */\n this.lockstepMaxSteps = 4;\n }\n}\n/**\n * The null engine class provides support for headless version of babylon.js.\n * This can be used in server side scenario or for testing purposes\n */\nexport class NullEngine extends Engine {\n /**\n * Gets a boolean indicating that the engine is running in deterministic lock step mode\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n * @returns true if engine is in deterministic lock step mode\n */\n isDeterministicLockStep() {\n return this._options.deterministicLockstep;\n }\n /**\n * Gets the max steps when engine is running in deterministic lock step\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep\n * @returns the max steps\n */\n getLockstepMaxSteps() {\n return this._options.lockstepMaxSteps;\n }\n /**\n * Gets the current hardware scaling level.\n * By default the hardware scaling level is computed from the window device ratio.\n * if level = 1 then the engine will render at the exact resolution of the canvas. If level = 0.5 then the engine will render at twice the size of the canvas.\n * @returns a number indicating the current hardware scaling level\n */\n getHardwareScalingLevel() {\n return 1.0;\n }\n constructor(options = new NullEngineOptions()) {\n super(null);\n if (options.deterministicLockstep === undefined) {\n options.deterministicLockstep = false;\n }\n if (options.timeStep !== undefined) {\n this._timeStep = options.timeStep;\n }\n if (options.lockstepMaxSteps === undefined) {\n options.lockstepMaxSteps = 4;\n }\n this._options = options;\n PerformanceConfigurator.SetMatrixPrecision(!!options.useHighPrecisionMatrix);\n // Init caps\n // We consider we are on a webgl1 capable device\n this._caps = {\n maxTexturesImageUnits: 16,\n maxVertexTextureImageUnits: 16,\n maxCombinedTexturesImageUnits: 32,\n maxTextureSize: 512,\n maxCubemapTextureSize: 512,\n maxDrawBuffers: 0,\n maxRenderTextureSize: 512,\n maxVertexAttribs: 16,\n maxVaryingVectors: 16,\n maxFragmentUniformVectors: 16,\n maxVertexUniformVectors: 16,\n standardDerivatives: false,\n astc: null,\n pvrtc: null,\n etc1: null,\n etc2: null,\n bptc: null,\n maxAnisotropy: 0,\n uintIndices: false,\n fragmentDepthSupported: false,\n highPrecisionShaderSupported: true,\n colorBufferFloat: false,\n supportFloatTexturesResolve: false,\n rg11b10ufColorRenderable: false,\n textureFloat: false,\n textureFloatLinearFiltering: false,\n textureFloatRender: false,\n textureHalfFloat: false,\n textureHalfFloatLinearFiltering: false,\n textureHalfFloatRender: false,\n textureLOD: false,\n texelFetch: false,\n drawBuffersExtension: false,\n depthTextureExtension: false,\n vertexArrayObject: false,\n instancedArrays: false,\n supportOcclusionQuery: false,\n canUseTimestampForTimerQuery: false,\n maxMSAASamples: 1,\n blendMinMax: false,\n canUseGLInstanceID: false,\n canUseGLVertexID: false,\n supportComputeShaders: false,\n supportSRGBBuffers: false,\n supportTransformFeedbacks: false,\n textureMaxLevel: false,\n texture2DArrayMaxLayerCount: 128,\n disableMorphTargetTexture: false,\n textureNorm16: false,\n };\n this._features = {\n forceBitmapOverHTMLImageElement: false,\n supportRenderAndCopyToLodForFloatTextures: false,\n supportDepthStencilTexture: false,\n supportShadowSamplers: false,\n uniformBufferHardCheckMatrix: false,\n allowTexturePrefiltering: false,\n trackUbosInFrame: false,\n checkUbosContentBeforeUpload: false,\n supportCSM: false,\n basisNeedsPOT: false,\n support3DTextures: false,\n needTypeSuffixInShaderConstants: false,\n supportMSAA: false,\n supportSSAO2: false,\n supportIBLShadows: false,\n supportExtendedTextureFormats: false,\n supportSwitchCaseInShader: false,\n supportSyncTextureRead: false,\n needsInvertingBitmap: false,\n useUBOBindingCache: false,\n needShaderCodeInlining: false,\n needToAlwaysBindUniformBuffers: false,\n supportRenderPasses: true,\n supportSpriteInstancing: false,\n forceVertexBufferStrideAndOffsetMultiple4Bytes: false,\n _checkNonFloatVertexBuffersDontRecreatePipelineContext: false,\n _collectUbosUpdatedInFrame: false,\n };\n if (options.renderingCanvas) {\n this._renderingCanvas = options.renderingCanvas;\n }\n Logger.Log(`Babylon.js v${Engine.Version} - Null engine`);\n // Wrappers\n const theCurrentGlobal = typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : window;\n if (typeof URL === \"undefined\") {\n theCurrentGlobal.URL = {\n createObjectURL: function () { },\n revokeObjectURL: function () { },\n };\n }\n if (typeof Blob === \"undefined\") {\n theCurrentGlobal.Blob = function () { };\n }\n }\n /**\n * Creates a vertex buffer\n * @param vertices the data for the vertex buffer\n * @returns the new WebGL static buffer\n */\n createVertexBuffer(vertices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n return buffer;\n }\n /**\n * Creates a new index buffer\n * @param indices defines the content of the index buffer\n * @returns a new webGL buffer\n */\n createIndexBuffer(indices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n return buffer;\n }\n /**\n * Clear the current render buffer or the current render target (if any is set up)\n * @param color defines the color to use\n * @param backBuffer defines if the back buffer must be cleared\n * @param depth defines if the depth buffer must be cleared\n * @param stencil defines if the stencil buffer must be cleared\n */\n clear(color, backBuffer, depth, stencil = false) { }\n /**\n * Gets the current render width\n * @param useScreen defines if screen size must be used (or the current render target if any)\n * @returns a number defining the current render width\n */\n getRenderWidth(useScreen = false) {\n if (!useScreen && this._currentRenderTarget) {\n return this._currentRenderTarget.width;\n }\n return this._options.renderWidth;\n }\n /**\n * Gets the current render height\n * @param useScreen defines if screen size must be used (or the current render target if any)\n * @returns a number defining the current render height\n */\n getRenderHeight(useScreen = false) {\n if (!useScreen && this._currentRenderTarget) {\n return this._currentRenderTarget.height;\n }\n return this._options.renderHeight;\n }\n /**\n * Set the WebGL's viewport\n * @param viewport defines the viewport element to be used\n * @param requiredWidth defines the width required for rendering. If not provided the rendering canvas' width is used\n * @param requiredHeight defines the height required for rendering. If not provided the rendering canvas' height is used\n */\n setViewport(viewport, requiredWidth, requiredHeight) {\n this._cachedViewport = viewport;\n }\n createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context) {\n return {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __SPECTOR_rebuildProgram: null,\n };\n }\n /**\n * Gets the list of webGL uniform locations associated with a specific program based on a list of uniform names\n * @param pipelineContext defines the pipeline context to use\n * @param uniformsNames defines the list of uniform names\n * @returns an array of webGL uniform locations\n */\n getUniforms(pipelineContext, uniformsNames) {\n return [];\n }\n /**\n * Gets the lsit of active attributes for a given webGL program\n * @param pipelineContext defines the pipeline context to use\n * @param attributesNames defines the list of attribute names to get\n * @returns an array of indices indicating the offset of each attribute\n */\n getAttributes(pipelineContext, attributesNames) {\n return [];\n }\n /**\n * Binds an effect to the webGL context\n * @param effect defines the effect to bind\n */\n bindSamplers(effect) {\n this._currentEffect = null;\n }\n /**\n * Activates an effect, making it the current one (ie. the one used for rendering)\n * @param effect defines the effect to activate\n */\n enableEffect(effect) {\n effect = effect !== null && IsWrapper(effect) ? effect.effect : effect; // get only the effect, we don't need a Wrapper in the WebGL engine\n this._currentEffect = effect;\n if (!effect) {\n return;\n }\n if (effect.onBind) {\n effect.onBind(effect);\n }\n if (effect._onBindObservable) {\n effect._onBindObservable.notifyObservers(effect);\n }\n }\n /**\n * Set various states to the webGL context\n * @param culling defines culling state: true to enable culling, false to disable it\n * @param zOffset defines the value to apply to zOffset (0 by default)\n * @param force defines if states must be applied even if cache is up to date\n * @param reverseSide defines if culling must be reversed (CCW if false, CW if true)\n * @param cullBackFaces true to cull back faces, false to cull front faces (if culling is enabled)\n * @param stencil stencil states to set\n * @param zOffsetUnits defines the value to apply to zOffsetUnits (0 by default)\n */\n setState(culling, zOffset = 0, force, reverseSide = false, cullBackFaces, stencil, zOffsetUnits = 0) { }\n /**\n * Set the value of an uniform to an array of int32\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of int32 (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of int32 to store\n * @returns true if value was set\n */\n setIntArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of float32 to store\n * @returns true if value was set\n */\n setFloatArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray2(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray3(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of number (stored as vec4)\n * @param uniform defines the webGL uniform location where to store the value\n * @param array defines the array of number to store\n * @returns true if value was set\n */\n setArray4(uniform, array) {\n return true;\n }\n /**\n * Set the value of an uniform to an array of float32 (stored as matrices)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrices defines the array of float32 to store\n * @returns true if value was set\n */\n setMatrices(uniform, matrices) {\n return true;\n }\n /**\n * Set the value of an uniform to a matrix (3x3)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrix defines the Float32Array representing the 3x3 matrix to store\n * @returns true if value was set\n */\n setMatrix3x3(uniform, matrix) {\n return true;\n }\n /**\n * Set the value of an uniform to a matrix (2x2)\n * @param uniform defines the webGL uniform location where to store the value\n * @param matrix defines the Float32Array representing the 2x2 matrix to store\n * @returns true if value was set\n */\n setMatrix2x2(uniform, matrix) {\n return true;\n }\n /**\n * Set the value of an uniform to a number (float)\n * @param uniform defines the webGL uniform location where to store the value\n * @param value defines the float number to store\n * @returns true if value was set\n */\n setFloat(uniform, value) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec2\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @returns true if value was set\n */\n setFloat2(uniform, x, y) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec3\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @param z defines the 3rd component of the value\n * @returns true if value was set\n */\n setFloat3(uniform, x, y, z) {\n return true;\n }\n /**\n * Set the value of an uniform to a boolean\n * @param uniform defines the webGL uniform location where to store the value\n * @param bool defines the boolean to store\n * @returns true if value was set\n */\n setBool(uniform, bool) {\n return true;\n }\n /**\n * Set the value of an uniform to a vec4\n * @param uniform defines the webGL uniform location where to store the value\n * @param x defines the 1st component of the value\n * @param y defines the 2nd component of the value\n * @param z defines the 3rd component of the value\n * @param w defines the 4th component of the value\n * @returns true if value was set\n */\n setFloat4(uniform, x, y, z, w) {\n return true;\n }\n /**\n * Sets the current alpha mode\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering\n */\n setAlphaMode(mode, noDepthWriteChange = false) {\n if (this._alphaMode === mode) {\n return;\n }\n this.alphaState.alphaBlend = mode !== 0;\n if (!noDepthWriteChange) {\n this.setDepthWrite(mode === 0);\n }\n this._alphaMode = mode;\n }\n /**\n * Bind webGl buffers directly to the webGL context\n * @param vertexBuffers defines the vertex buffer to bind\n * @param indexBuffer defines the index buffer to bind\n * @param effect defines the effect associated with the vertex buffer\n */\n bindBuffers(vertexBuffers, indexBuffer, effect) { }\n /**\n * Force the entire cache to be cleared\n * You should not have to use this function unless your engine needs to share the webGL context with another engine\n * @param bruteForce defines a boolean to force clearing ALL caches (including stencil, detoh and alpha states)\n */\n wipeCaches(bruteForce) {\n if (this.preventCacheWipeBetweenFrames) {\n return;\n }\n this.resetTextureCache();\n this._currentEffect = null;\n if (bruteForce) {\n this._currentProgram = null;\n this._stencilStateComposer.reset();\n this.depthCullingState.reset();\n this.alphaState.reset();\n }\n this._cachedVertexBuffers = null;\n this._cachedIndexBuffer = null;\n this._cachedEffectForVertexBuffers = null;\n }\n /**\n * Send a draw order\n * @param useTriangles defines if triangles must be used to draw (else wireframe will be used)\n * @param indexStart defines the starting index\n * @param indexCount defines the number of index to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n draw(useTriangles, indexStart, indexCount, instancesCount) { }\n /**\n * Draw a list of indexed primitives\n * @param fillMode defines the primitive to use\n * @param indexStart defines the starting index\n * @param indexCount defines the number of index to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n drawElementsType(fillMode, indexStart, indexCount, instancesCount) { }\n /**\n * Draw a list of unindexed primitives\n * @param fillMode defines the primitive to use\n * @param verticesStart defines the index of first vertex to draw\n * @param verticesCount defines the count of vertices to draw\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\n */\n drawArraysType(fillMode, verticesStart, verticesCount, instancesCount) { }\n /** @internal */\n _createTexture() {\n return {};\n }\n /**\n * @internal\n */\n _releaseTexture(texture) { }\n /**\n * Usually called from Texture.ts.\n * Passed information to create a WebGLTexture\n * @param urlArg defines a value which contains one of the following:\n * * A conventional http URL, e.g. 'http://...' or 'file://...'\n * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'\n * * An indicator that data being passed using the buffer parameter, e.g. 'data:mytexture.jpg'\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated. Ignored for compressed textures. They must be in the file\n * @param invertY when true, image is flipped when loaded. You probably want true. Certain compressed textures may invert this if their default is inverted (eg. ktx)\n * @param scene needed for loading to the correct scene\n * @param samplingMode mode with should be used sample / access the texture (Default: Texture.TRILINEAR_SAMPLINGMODE)\n * @param onLoad optional callback to be called upon successful completion\n * @param onError optional callback to be called upon failure\n * @param buffer a source of a file previously fetched as either a base64 string, an ArrayBuffer (compressed or image format), HTMLImageElement (image format), or a Blob\n * @param fallback an internal argument in case the function must be called again, due to etc1 not having alpha capabilities\n * @param format internal format. Default: RGB when extension is '.jpg' else RGBA. Ignored for compressed textures\n * @param forcedExtension defines the extension to use to pick the right loader\n * @param mimeType defines an optional mime type\n * @returns a InternalTexture for assignment back into BABYLON.Texture\n */\n createTexture(urlArg, noMipmap, invertY, scene, samplingMode = 3, onLoad = null, onError = null, buffer = null, fallback = null, format = null, forcedExtension = null, mimeType) {\n const texture = new InternalTexture(this, 1 /* InternalTextureSource.Url */);\n const url = String(urlArg);\n texture.url = url;\n texture.generateMipMaps = !noMipmap;\n texture.samplingMode = samplingMode;\n texture.invertY = invertY;\n texture.baseWidth = this._options.textureSize;\n texture.baseHeight = this._options.textureSize;\n texture.width = this._options.textureSize;\n texture.height = this._options.textureSize;\n if (format) {\n texture.format = format;\n }\n texture.isReady = true;\n if (onLoad) {\n setTimeout(() => {\n onLoad(texture);\n });\n }\n this._internalTexturesCache.push(texture);\n return texture;\n }\n /**\n * @internal\n */\n _createHardwareRenderTargetWrapper(isMulti, isCube, size) {\n const rtWrapper = new RenderTargetWrapper(isMulti, isCube, size, this);\n this._renderTargetWrapperCache.push(rtWrapper);\n return rtWrapper;\n }\n /**\n * Creates a new render target wrapper\n * @param size defines the size of the texture\n * @param options defines the options used to create the texture\n * @returns a new render target wrapper\n */\n createRenderTargetTexture(size, options) {\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size);\n const fullOptions = {};\n if (options !== undefined && typeof options === \"object\") {\n fullOptions.generateMipMaps = options.generateMipMaps;\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\n fullOptions.type = options.type === undefined ? 0 : options.type;\n fullOptions.samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;\n }\n else {\n fullOptions.generateMipMaps = options;\n fullOptions.generateDepthBuffer = true;\n fullOptions.generateStencilBuffer = false;\n fullOptions.type = 0;\n fullOptions.samplingMode = 3;\n }\n const texture = new InternalTexture(this, 5 /* InternalTextureSource.RenderTarget */);\n const width = size.width || size;\n const height = size.height || size;\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\n texture.baseWidth = width;\n texture.baseHeight = height;\n texture.width = width;\n texture.height = height;\n texture.isReady = true;\n texture.samples = 1;\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\n texture.samplingMode = fullOptions.samplingMode;\n texture.type = fullOptions.type;\n this._internalTexturesCache.push(texture);\n return rtWrapper;\n }\n /**\n * Creates a new render target wrapper\n * @param size defines the size of the texture\n * @param options defines the options used to create the texture\n * @returns a new render target wrapper\n */\n createRenderTargetCubeTexture(size, options) {\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);\n const fullOptions = {\n generateMipMaps: true,\n generateDepthBuffer: true,\n generateStencilBuffer: false,\n type: 0,\n samplingMode: 3,\n format: 5,\n ...options,\n };\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && fullOptions.generateStencilBuffer;\n if (fullOptions.type === 1 && !this._caps.textureFloatLinearFiltering) {\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\n fullOptions.samplingMode = 1;\n }\n else if (fullOptions.type === 2 && !this._caps.textureHalfFloatLinearFiltering) {\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\n fullOptions.samplingMode = 1;\n }\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\n const texture = new InternalTexture(this, 5 /* InternalTextureSource.RenderTarget */);\n texture.baseWidth = size;\n texture.baseHeight = size;\n texture.width = size;\n texture.height = size;\n texture.isReady = true;\n texture.isCube = true;\n texture.samples = 1;\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\n texture.samplingMode = fullOptions.samplingMode;\n texture.type = fullOptions.type;\n this._internalTexturesCache.push(texture);\n return rtWrapper;\n }\n /**\n * Update the sampling mode of a given texture\n * @param samplingMode defines the required sampling mode\n * @param texture defines the texture to update\n */\n updateTextureSamplingMode(samplingMode, texture) {\n texture.samplingMode = samplingMode;\n }\n /**\n * Creates a raw texture\n * @param data defines the data to store in the texture\n * @param width defines the width of the texture\n * @param height defines the height of the texture\n * @param format defines the format of the data\n * @param generateMipMaps defines if the engine should generate the mip levels\n * @param invertY defines if data must be stored with Y axis inverted\n * @param samplingMode defines the required sampling mode (Texture.NEAREST_SAMPLINGMODE by default)\n * @param compression defines the compression used (null by default)\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\n * @param creationFlags specific flags to use when creating the texture (1 for storage textures, for eg)\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\n * @returns the raw texture inside an InternalTexture\n */\n createRawTexture(data, width, height, format, generateMipMaps, invertY, samplingMode, compression = null, type = 0, creationFlags = 0, useSRGBBuffer = false) {\n const texture = new InternalTexture(this, 3 /* InternalTextureSource.Raw */);\n texture.baseWidth = width;\n texture.baseHeight = height;\n texture.width = width;\n texture.height = height;\n texture.format = format;\n texture.generateMipMaps = generateMipMaps;\n texture.samplingMode = samplingMode;\n texture.invertY = invertY;\n texture._compression = compression;\n texture.type = type;\n texture._useSRGBBuffer = useSRGBBuffer;\n if (!this._doNotHandleContextLost) {\n texture._bufferView = data;\n }\n return texture;\n }\n /**\n * Update a raw texture\n * @param texture defines the texture to update\n * @param data defines the data to store in the texture\n * @param format defines the format of the data\n * @param invertY defines if data must be stored with Y axis inverted\n * @param compression defines the compression used (null by default)\n * @param type defines the type fo the data (Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\n */\n updateRawTexture(texture, data, format, invertY, compression = null, type = 0, useSRGBBuffer = false) {\n if (texture) {\n texture._bufferView = data;\n texture.format = format;\n texture.invertY = invertY;\n texture._compression = compression;\n texture.type = type;\n texture._useSRGBBuffer = useSRGBBuffer;\n }\n }\n /**\n * Binds the frame buffer to the specified texture.\n * @param rtWrapper The render target wrapper to render to\n * @param faceIndex The face of the texture to render to in case of cube texture\n * @param requiredWidth The width of the target to render to\n * @param requiredHeight The height of the target to render to\n * @param forceFullscreenViewport Forces the viewport to be the entire texture/screen if true\n */\n bindFramebuffer(rtWrapper, faceIndex, requiredWidth, requiredHeight, forceFullscreenViewport) {\n if (this._currentRenderTarget) {\n this.unBindFramebuffer(this._currentRenderTarget);\n }\n this._currentRenderTarget = rtWrapper;\n this._currentFramebuffer = null;\n if (this._cachedViewport && !forceFullscreenViewport) {\n this.setViewport(this._cachedViewport, requiredWidth, requiredHeight);\n }\n }\n /**\n * Unbind the current render target texture from the webGL context\n * @param rtWrapper defines the render target wrapper to unbind\n * @param disableGenerateMipMaps defines a boolean indicating that mipmaps must not be generated\n * @param onBeforeUnbind defines a function which will be called before the effective unbind\n */\n unBindFramebuffer(rtWrapper, disableGenerateMipMaps = false, onBeforeUnbind) {\n this._currentRenderTarget = null;\n if (onBeforeUnbind) {\n onBeforeUnbind();\n }\n this._currentFramebuffer = null;\n }\n /**\n * Creates a dynamic vertex buffer\n * @param vertices the data for the dynamic vertex buffer\n * @returns the new WebGL dynamic buffer\n */\n createDynamicVertexBuffer(vertices) {\n const buffer = new DataBuffer();\n buffer.references = 1;\n buffer.capacity = 1;\n return buffer;\n }\n /**\n * Update the content of a dynamic texture\n * @param texture defines the texture to update\n * @param canvas defines the canvas containing the source\n * @param invertY defines if data must be stored with Y axis inverted\n * @param premulAlpha defines if alpha is stored as premultiplied\n * @param format defines the format of the data\n */\n updateDynamicTexture(texture, canvas, invertY, premulAlpha = false, format) { }\n /**\n * Gets a boolean indicating if all created effects are ready\n * @returns true if all effects are ready\n */\n areAllEffectsReady() {\n return true;\n }\n /**\n * @internal\n * Get the current error code of the webGL context\n * @returns the error code\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getError\n */\n getError() {\n return 0;\n }\n /** @internal */\n _getUnpackAlignement() {\n return 1;\n }\n /**\n * @internal\n */\n _unpackFlipY(value) { }\n /**\n * Update a dynamic index buffer\n * @param indexBuffer defines the target index buffer\n * @param indices defines the data to update\n * @param offset defines the offset in the target index buffer where update should start\n */\n updateDynamicIndexBuffer(indexBuffer, indices, offset = 0) { }\n /**\n * Updates a dynamic vertex buffer.\n * @param vertexBuffer the vertex buffer to update\n * @param vertices the data used to update the vertex buffer\n * @param byteOffset the byte offset of the data (optional)\n * @param byteLength the byte length of the data (optional)\n */\n updateDynamicVertexBuffer(vertexBuffer, vertices, byteOffset, byteLength) { }\n /**\n * @internal\n */\n _bindTextureDirectly(target, texture) {\n if (this._boundTexturesCache[this._activeChannel] !== texture) {\n this._boundTexturesCache[this._activeChannel] = texture;\n return true;\n }\n return false;\n }\n /**\n * @internal\n */\n _bindTexture(channel, texture) {\n if (channel < 0) {\n return;\n }\n this._bindTextureDirectly(0, texture);\n }\n _deleteBuffer(buffer) { }\n /**\n * Force the engine to release all cached effects. This means that next effect compilation will have to be done completely even if a similar effect was already compiled\n */\n releaseEffects() { }\n displayLoadingUI() { }\n hideLoadingUI() { }\n set loadingUIText(_) { }\n flushFramebuffer() { }\n /**\n * @internal\n */\n _uploadCompressedDataToTextureDirectly(texture, internalFormat, width, height, data, faceIndex = 0, lod = 0) { }\n /**\n * @internal\n */\n _uploadDataToTextureDirectly(texture, imageData, faceIndex = 0, lod = 0) { }\n /**\n * @internal\n */\n _uploadArrayBufferViewToTexture(texture, imageData, faceIndex = 0, lod = 0) { }\n /**\n * @internal\n */\n _uploadImageToTexture(texture, image, faceIndex = 0, lod = 0) { }\n}\n"],"mappings":"AAAA;AACA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,eAAe,QAAQ,0CAA0C;AAE1E,SAASC,UAAU,QAAQ,0BAA0B;AACrD,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,SAAS,QAAQ,uCAAuC;AACjE;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,CAAC;EAC3BC,WAAWA,CAAA,EAAG;IACV;AACR;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,GAAG;IACtB;AACR;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,GAAG;IACvB;AACR;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,GAAG;IACtB;AACR;AACA;AACA;IACQ,IAAI,CAACC,qBAAqB,GAAG,KAAK;IAClC;AACR;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAG,CAAC;EAC7B;AACJ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASb,MAAM,CAAC;EACnC;AACJ;AACA;AACA;AACA;EACIc,uBAAuBA,CAAA,EAAG;IACtB,OAAO,IAAI,CAACC,QAAQ,CAACJ,qBAAqB;EAC9C;EACA;AACJ;AACA;AACA;AACA;EACIK,mBAAmBA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACD,QAAQ,CAACH,gBAAgB;EACzC;EACA;AACJ;AACA;AACA;AACA;AACA;EACIK,uBAAuBA,CAAA,EAAG;IACtB,OAAO,GAAG;EACd;EACAV,WAAWA,CAACW,OAAO,GAAG,IAAIZ,iBAAiB,CAAC,CAAC,EAAE;IAC3C,KAAK,CAAC,IAAI,CAAC;IACX,IAAIY,OAAO,CAACP,qBAAqB,KAAKQ,SAAS,EAAE;MAC7CD,OAAO,CAACP,qBAAqB,GAAG,KAAK;IACzC;IACA,IAAIO,OAAO,CAACE,QAAQ,KAAKD,SAAS,EAAE;MAChC,IAAI,CAACE,SAAS,GAAGH,OAAO,CAACE,QAAQ;IACrC;IACA,IAAIF,OAAO,CAACN,gBAAgB,KAAKO,SAAS,EAAE;MACxCD,OAAO,CAACN,gBAAgB,GAAG,CAAC;IAChC;IACA,IAAI,CAACG,QAAQ,GAAGG,OAAO;IACvBf,uBAAuB,CAACmB,kBAAkB,CAAC,CAAC,CAACJ,OAAO,CAACK,sBAAsB,CAAC;IAC5E;IACA;IACA,IAAI,CAACC,KAAK,GAAG;MACTC,qBAAqB,EAAE,EAAE;MACzBC,0BAA0B,EAAE,EAAE;MAC9BC,6BAA6B,EAAE,EAAE;MACjCC,cAAc,EAAE,GAAG;MACnBC,qBAAqB,EAAE,GAAG;MAC1BC,cAAc,EAAE,CAAC;MACjBC,oBAAoB,EAAE,GAAG;MACzBC,gBAAgB,EAAE,EAAE;MACpBC,iBAAiB,EAAE,EAAE;MACrBC,yBAAyB,EAAE,EAAE;MAC7BC,uBAAuB,EAAE,EAAE;MAC3BC,mBAAmB,EAAE,KAAK;MAC1BC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,IAAI;MACXC,IAAI,EAAE,IAAI;MACVC,IAAI,EAAE,IAAI;MACVC,IAAI,EAAE,IAAI;MACVC,aAAa,EAAE,CAAC;MAChBC,WAAW,EAAE,KAAK;MAClBC,sBAAsB,EAAE,KAAK;MAC7BC,4BAA4B,EAAE,IAAI;MAClCC,gBAAgB,EAAE,KAAK;MACvBC,2BAA2B,EAAE,KAAK;MAClCC,wBAAwB,EAAE,KAAK;MAC/BC,YAAY,EAAE,KAAK;MACnBC,2BAA2B,EAAE,KAAK;MAClCC,kBAAkB,EAAE,KAAK;MACzBC,gBAAgB,EAAE,KAAK;MACvBC,+BAA+B,EAAE,KAAK;MACtCC,sBAAsB,EAAE,KAAK;MAC7BC,UAAU,EAAE,KAAK;MACjBC,UAAU,EAAE,KAAK;MACjBC,oBAAoB,EAAE,KAAK;MAC3BC,qBAAqB,EAAE,KAAK;MAC5BC,iBAAiB,EAAE,KAAK;MACxBC,eAAe,EAAE,KAAK;MACtBC,qBAAqB,EAAE,KAAK;MAC5BC,4BAA4B,EAAE,KAAK;MACnCC,cAAc,EAAE,CAAC;MACjBC,WAAW,EAAE,KAAK;MAClBC,kBAAkB,EAAE,KAAK;MACzBC,gBAAgB,EAAE,KAAK;MACvBC,qBAAqB,EAAE,KAAK;MAC5BC,kBAAkB,EAAE,KAAK;MACzBC,yBAAyB,EAAE,KAAK;MAChCC,eAAe,EAAE,KAAK;MACtBC,2BAA2B,EAAE,GAAG;MAChCC,yBAAyB,EAAE,KAAK;MAChCC,aAAa,EAAE;IACnB,CAAC;IACD,IAAI,CAACC,SAAS,GAAG;MACbC,+BAA+B,EAAE,KAAK;MACtCC,yCAAyC,EAAE,KAAK;MAChDC,0BAA0B,EAAE,KAAK;MACjCC,qBAAqB,EAAE,KAAK;MAC5BC,4BAA4B,EAAE,KAAK;MACnCC,wBAAwB,EAAE,KAAK;MAC/BC,gBAAgB,EAAE,KAAK;MACvBC,4BAA4B,EAAE,KAAK;MACnCC,UAAU,EAAE,KAAK;MACjBC,aAAa,EAAE,KAAK;MACpBC,iBAAiB,EAAE,KAAK;MACxBC,+BAA+B,EAAE,KAAK;MACtCC,WAAW,EAAE,KAAK;MAClBC,YAAY,EAAE,KAAK;MACnBC,iBAAiB,EAAE,KAAK;MACxBC,6BAA6B,EAAE,KAAK;MACpCC,yBAAyB,EAAE,KAAK;MAChCC,sBAAsB,EAAE,KAAK;MAC7BC,oBAAoB,EAAE,KAAK;MAC3BC,kBAAkB,EAAE,KAAK;MACzBC,sBAAsB,EAAE,KAAK;MAC7BC,8BAA8B,EAAE,KAAK;MACrCC,mBAAmB,EAAE,IAAI;MACzBC,uBAAuB,EAAE,KAAK;MAC9BC,8CAA8C,EAAE,KAAK;MACrDC,sDAAsD,EAAE,KAAK;MAC7DC,0BAA0B,EAAE;IAChC,CAAC;IACD,IAAInF,OAAO,CAACoF,eAAe,EAAE;MACzB,IAAI,CAACC,gBAAgB,GAAGrF,OAAO,CAACoF,eAAe;IACnD;IACAvG,MAAM,CAACyG,GAAG,CAAC,eAAexG,MAAM,CAACyG,OAAO,gBAAgB,CAAC;IACzD;IACA,MAAMC,gBAAgB,GAAG,OAAOC,IAAI,KAAK,WAAW,GAAGA,IAAI,GAAG,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,GAAGC,MAAM;IAC7G,IAAI,OAAOC,GAAG,KAAK,WAAW,EAAE;MAC5BJ,gBAAgB,CAACI,GAAG,GAAG;QACnBC,eAAe,EAAE,SAAAA,CAAA,EAAY,CAAE,CAAC;QAChCC,eAAe,EAAE,SAAAA,CAAA,EAAY,CAAE;MACnC,CAAC;IACL;IACA,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;MAC7BP,gBAAgB,CAACO,IAAI,GAAG,YAAY,CAAE,CAAC;IAC3C;EACJ;EACA;AACJ;AACA;AACA;AACA;EACIC,kBAAkBA,CAACC,QAAQ,EAAE;IACzB,MAAMC,MAAM,GAAG,IAAIlH,UAAU,CAAC,CAAC;IAC/BkH,MAAM,CAACC,UAAU,GAAG,CAAC;IACrB,OAAOD,MAAM;EACjB;EACA;AACJ;AACA;AACA;AACA;EACIE,iBAAiBA,CAACC,OAAO,EAAE;IACvB,MAAMH,MAAM,GAAG,IAAIlH,UAAU,CAAC,CAAC;IAC/BkH,MAAM,CAACC,UAAU,GAAG,CAAC;IACrB,OAAOD,MAAM;EACjB;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACII,KAAKA,CAACC,KAAK,EAAEC,UAAU,EAAEC,KAAK,EAAEC,OAAO,GAAG,KAAK,EAAE,CAAE;EACnD;AACJ;AACA;AACA;AACA;EACIC,cAAcA,CAACC,SAAS,GAAG,KAAK,EAAE;IAC9B,IAAI,CAACA,SAAS,IAAI,IAAI,CAACC,oBAAoB,EAAE;MACzC,OAAO,IAAI,CAACA,oBAAoB,CAACC,KAAK;IAC1C;IACA,OAAO,IAAI,CAACjH,QAAQ,CAACP,WAAW;EACpC;EACA;AACJ;AACA;AACA;AACA;EACIyH,eAAeA,CAACH,SAAS,GAAG,KAAK,EAAE;IAC/B,IAAI,CAACA,SAAS,IAAI,IAAI,CAACC,oBAAoB,EAAE;MACzC,OAAO,IAAI,CAACA,oBAAoB,CAACG,MAAM;IAC3C;IACA,OAAO,IAAI,CAACnH,QAAQ,CAACN,YAAY;EACrC;EACA;AACJ;AACA;AACA;AACA;AACA;EACI0H,WAAWA,CAACC,QAAQ,EAAEC,aAAa,EAAEC,cAAc,EAAE;IACjD,IAAI,CAACC,eAAe,GAAGH,QAAQ;EACnC;EACAI,mBAAmBA,CAACC,eAAe,EAAEC,UAAU,EAAEC,YAAY,EAAEC,OAAO,EAAEC,OAAO,EAAE;IAC7E,OAAO;MACH;MACAC,wBAAwB,EAAE;IAC9B,CAAC;EACL;EACA;AACJ;AACA;AACA;AACA;AACA;EACIC,WAAWA,CAACN,eAAe,EAAEO,aAAa,EAAE;IACxC,OAAO,EAAE;EACb;EACA;AACJ;AACA;AACA;AACA;AACA;EACIC,aAAaA,CAACR,eAAe,EAAES,eAAe,EAAE;IAC5C,OAAO,EAAE;EACb;EACA;AACJ;AACA;AACA;EACIC,YAAYA,CAACC,MAAM,EAAE;IACjB,IAAI,CAACC,cAAc,GAAG,IAAI;EAC9B;EACA;AACJ;AACA;AACA;EACIC,YAAYA,CAACF,MAAM,EAAE;IACjBA,MAAM,GAAGA,MAAM,KAAK,IAAI,IAAI/I,SAAS,CAAC+I,MAAM,CAAC,GAAGA,MAAM,CAACA,MAAM,GAAGA,MAAM,CAAC,CAAC;IACxE,IAAI,CAACC,cAAc,GAAGD,MAAM;IAC5B,IAAI,CAACA,MAAM,EAAE;MACT;IACJ;IACA,IAAIA,MAAM,CAACG,MAAM,EAAE;MACfH,MAAM,CAACG,MAAM,CAACH,MAAM,CAAC;IACzB;IACA,IAAIA,MAAM,CAACI,iBAAiB,EAAE;MAC1BJ,MAAM,CAACI,iBAAiB,CAACC,eAAe,CAACL,MAAM,CAAC;IACpD;EACJ;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACIM,QAAQA,CAACC,OAAO,EAAEC,OAAO,GAAG,CAAC,EAAEC,KAAK,EAAEC,WAAW,GAAG,KAAK,EAAEC,aAAa,EAAEnC,OAAO,EAAEoC,YAAY,GAAG,CAAC,EAAE,CAAE;EACvG;AACJ;AACA;AACA;AACA;AACA;EACIC,WAAWA,CAACC,OAAO,EAAEC,KAAK,EAAE;IACxB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIC,YAAYA,CAACF,OAAO,EAAEC,KAAK,EAAE;IACzB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIE,YAAYA,CAACH,OAAO,EAAEC,KAAK,EAAE;IACzB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIG,YAAYA,CAACJ,OAAO,EAAEC,KAAK,EAAE;IACzB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACII,aAAaA,CAACL,OAAO,EAAEC,KAAK,EAAE;IAC1B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIK,cAAcA,CAACN,OAAO,EAAEC,KAAK,EAAE;IAC3B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIM,cAAcA,CAACP,OAAO,EAAEC,KAAK,EAAE;IAC3B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIO,cAAcA,CAACR,OAAO,EAAEC,KAAK,EAAE;IAC3B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIQ,QAAQA,CAACT,OAAO,EAAEC,KAAK,EAAE;IACrB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIS,SAASA,CAACV,OAAO,EAAEC,KAAK,EAAE;IACtB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIU,SAASA,CAACX,OAAO,EAAEC,KAAK,EAAE;IACtB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIW,SAASA,CAACZ,OAAO,EAAEC,KAAK,EAAE;IACtB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIY,WAAWA,CAACb,OAAO,EAAEc,QAAQ,EAAE;IAC3B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIC,YAAYA,CAACf,OAAO,EAAEgB,MAAM,EAAE;IAC1B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIC,YAAYA,CAACjB,OAAO,EAAEgB,MAAM,EAAE;IAC1B,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;EACIE,QAAQA,CAAClB,OAAO,EAAEmB,KAAK,EAAE;IACrB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIC,SAASA,CAACpB,OAAO,EAAEqB,CAAC,EAAEC,CAAC,EAAE;IACrB,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACIC,SAASA,CA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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}