@galacean/engine-rhi-webgl 0.9.19 → 0.9.21

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":"module.js","sources":["../src/type.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.0/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.0/node_modules/@swc/helpers/esm/_instanceof.js","../src/WebCanvas.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.0/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.0/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.0/node_modules/@swc/helpers/esm/_extends.js","../src/GLCapability.ts","../src/GLExtensions.ts","../src/GLPrimitive.ts","../src/GLRenderStates.ts","../src/GLTexture.ts","../src/GLRenderTarget.ts","../src/GLTexture2D.ts","../src/GLTexture2DArray.ts","../src/GLTextureCube.ts","../src/WebGLRenderer.ts","../src/WebGLEngine.ts"],"sourcesContent":["/**\n * Smoothing plug-in.\n * */\nexport interface WebGLExtension {\n MAX_DRAW_BUFFERS: GLenum;\n UNSIGNED_INT_24_8: GLenum;\n MAX_SAMPLES: GLenum;\n RGBA8: GLenum;\n RGBA16F: GLenum;\n RGBA32F: GLenum;\n DEPTH_COMPONENT32F: GLenum;\n READ_FRAMEBUFFER: GLenum;\n DRAW_FRAMEBUFFER: GLenum;\n\n createVertexArray(): WebGLVertexArrayObject | null;\n deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void;\n isVertexArray(vertexArray: WebGLVertexArrayObject | null): GLboolean;\n bindVertexArray(array: WebGLVertexArrayObject | null): void;\n\n renderbufferStorageMultisample(\n target: GLenum,\n samples: GLsizei,\n internalformat: GLenum,\n width: GLsizei,\n height: GLsizei\n ): void;\n blitFramebuffer(\n srcX0: GLint,\n srcY0: GLint,\n srcX1: GLint,\n srcY1: GLint,\n dstX0: GLint,\n dstY0: GLint,\n dstX1: GLint,\n dstY1: GLint,\n mask: GLbitfield,\n filter: GLenum\n ): void;\n\n drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void;\n drawElementsInstanced(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei): void;\n vertexAttribDivisor(index: GLuint, divisor: GLuint): void;\n drawBuffers(buffers: Iterable<GLenum>): void;\n}\n\nexport interface TextureFormatDetail {\n internalFormat: GLint;\n baseFormat?: GLenum;\n dataType?: GLenum;\n isCompressed: boolean;\n attachment?: GLenum;\n}\n\n/**\n * @deprecated\n */\nexport enum GLCompressedTextureInternalFormat {\n // astc\n RGBA_ASTC_4X4_KHR = 0x93b0,\n RGBA_ASTC_5X4_KHR = 0x93b1,\n RGBA_ASTC_5X5_KHR = 0x93b2,\n RGBA_ASTC_6X5_KHR = 0x93b3,\n RGBA_ASTC_6X6_KHR = 0x93b4,\n RGBA_ASTC_8X5_KHR = 0x93b5,\n RGBA_ASTC_8X6_KHR = 0x93b6,\n RGBA_ASTC_8X8_KHR = 0x93b7,\n RGBA_ASTC_10X5_KHR = 0x93b8,\n RGBA_ASTC_10X6_KHR = 0x93b9,\n RGBA_ASTC_10X8_KHR = 0x93ba,\n RGBA_ASTC_10X10_KHR = 0x93bb,\n RGBA_ASTC_12X10_KHR = 0x93bc,\n RGBA_ASTC_12X12_KHR = 0x93bd,\n SRGB8_ALPHA8_ASTC_4X4_KHR = 0x93d0,\n SRGB8_ALPHA8_ASTC_5X4_KHR = 0x93d1,\n SRGB8_ALPHA8_ASTC_5X5_KHR = 0x93d2,\n SRGB8_ALPHA8_ASTC_6X5_KHR = 0x93d3,\n SRGB8_ALPHA8_ASTC_6X6_KHR = 0x93d4,\n SRGB8_ALPHA8_ASTC_8X5_KHR = 0x93d5,\n SRGB8_ALPHA8_ASTC_8X6_KHR = 0x93d6,\n SRGB8_ALPHA8_ASTC_8X8_KHR = 0x93d7,\n SRGB8_ALPHA8_ASTC_10X5_KHR = 0x93d8,\n SRGB8_ALPHA8_ASTC_10X6_KHR = 0x93d9,\n SRGB8_ALPHA8_ASTC_10X8_KHR = 0x93da,\n SRGB8_ALPHA8_ASTC_10X10_KHR = 0x93db,\n SRGB8_ALPHA8_ASTC_12X10_KHR = 0x93dc,\n SRGB8_ALPHA8_ASTC_12X12_KHR = 0x93dd,\n\n // etc1\n RGB_ETC1_WEBGL = 0x8d64,\n\n // etc2\n R11_EAC = 0x9270,\n SIGNED_R11_EAC = 0x9271,\n RG11_EAC = 0x9272,\n SIGNED_RG11_EAC = 0x9273,\n RGB8_ETC2 = 0x9274,\n SRGB8_ETC2 = 0x9275,\n RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,\n SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277,\n RGBA8_ETC2_EAC = 0x9278,\n SRGB8_ALPHA8_ETC2_EAC = 0x9279,\n\n // pvrtc\n RGB_PVRTC_4BPPV1_IMG = 0x8c00,\n RGB_PVRTC_2BPPV1_IMG = 0x8c01,\n RGBA_PVRTC_4BPPV1_IMG = 0x8c02,\n RGBA_PVRTC_2BPPV1_IMG = 0x8c03,\n\n // s3tc\n RGB_S3TC_DXT1_EXT = 0x83f0,\n RGBA_S3TC_DXT1_EXT = 0x83f1,\n RGBA_S3TC_DXT3_EXT = 0x83f2,\n RGBA_S3TC_DXT5_EXT = 0x83f3\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport function _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","export function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","import { Canvas } from \"@galacean/engine-core\";\nimport { Vector2 } from \"@galacean/engine-math\";\n\ntype OffscreenCanvas = any;\n\n/**\n * The canvas used on the web, which can support HTMLCanvasElement and OffscreenCanvas.\n */\nexport class WebCanvas implements Canvas {\n _webCanvas: HTMLCanvasElement | OffscreenCanvas;\n\n private _width: number;\n private _height: number;\n private _scale: Vector2 = new Vector2();\n\n /**\n * @inheritdoc\n */\n get width(): number {\n return this._width;\n }\n\n set width(value: number) {\n if (this._width !== value) {\n this._webCanvas.width = value;\n this._width = value;\n }\n }\n\n /**\n * @inheritdoc\n */\n get height(): number {\n return this._height;\n }\n\n set height(value: number) {\n if (this._height !== value) {\n this._webCanvas.height = value;\n this._height = value;\n }\n }\n\n /**\n * The scale of canvas, the value is visible width/height divide the render width/height.\n * @remarks Need to re-assign after modification to ensure that the modification takes effect.\n */\n get scale(): Vector2 {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n this._scale.set(\n (webCanvas.clientWidth * devicePixelRatio) / webCanvas.width,\n (webCanvas.clientHeight * devicePixelRatio) / webCanvas.height\n );\n }\n return this._scale;\n }\n\n set scale(value: Vector2) {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n webCanvas.style.transformOrigin = `left top`;\n webCanvas.style.transform = `scale(${value.x}, ${value.y})`;\n }\n }\n\n /**\n * Resize the rendering size according to the clientWidth and clientHeight of the canvas.\n * @param pixelRatio - Pixel ratio\n */\n resizeByClientSize(pixelRatio: number = window.devicePixelRatio): void {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n this.width = webCanvas.clientWidth * pixelRatio;\n this.height = webCanvas.clientHeight * pixelRatio;\n }\n }\n\n /**\n * Create a web canvas.\n * @param webCanvas - Web native canvas\n */\n constructor(webCanvas: HTMLCanvasElement | OffscreenCanvas) {\n const width = webCanvas.width;\n const height = webCanvas.height;\n this._webCanvas = webCanvas;\n this._width = width;\n this._height = height;\n }\n\n /**\n * Set scale.\n * @param x - Scale along the X axis\n * @param y - Scale along the Y axis\n */\n setScale(x: number, y: number): void {\n this._scale.set(x, y);\n this.scale = this._scale;\n }\n}\n","export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { GLCapabilityType } from \"@galacean/engine-core\";\nimport { GLCompressedTextureInternalFormat } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\ntype extensionKey = string;\n\n/**\n * GL capability.\n */\nexport class GLCapability {\n private _maxDrawBuffers: number;\n private _maxAnisoLevel: number;\n private _maxAntiAliasing: number;\n\n _rhi: WebGLRenderer;\n capabilityList: Map<GLCapabilityType, boolean>;\n\n get maxTextureSize(): boolean {\n return this.rhi.renderStates.getParameter(this.rhi.gl.MAX_TEXTURE_SIZE);\n }\n\n get canUseFloatTextureBlendShape(): boolean {\n return (\n this.canIUse(GLCapabilityType.shaderVertexID) &&\n this.canIUse(GLCapabilityType.textureFloat) &&\n this.rhi.renderStates.getParameter(this.rhi.gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) > 0\n );\n }\n\n /**\n * Whether can use more joints.\n */\n get canIUseMoreJoints(): boolean {\n return (\n this.canIUse(GLCapabilityType.textureFloat) &&\n this.rhi.renderStates.getParameter(this.rhi.gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) > 0\n );\n }\n\n get maxDrawBuffers() {\n if (!this._maxDrawBuffers) {\n if (this.canIUse(GLCapabilityType.drawBuffers)) {\n this._maxDrawBuffers = this._rhi.gl.getParameter(this._rhi.gl.MAX_DRAW_BUFFERS);\n } else {\n this._maxDrawBuffers = 1;\n }\n }\n return this._maxDrawBuffers;\n }\n\n /**\n * Max anisoLevel.\n */\n get maxAnisoLevel(): number {\n if (!this._maxAnisoLevel) {\n const ext = this._rhi.requireExtension(GLCapabilityType.textureFilterAnisotropic);\n this._maxAnisoLevel = ext ? this._rhi.gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1;\n }\n return this._maxAnisoLevel;\n }\n\n /**\n * Max MSAA count.\n */\n get maxAntiAliasing(): number {\n if (!this._maxAntiAliasing) {\n const gl = this._rhi.gl;\n const canMSAA = this.canIUse(GLCapabilityType.multipleSample);\n\n this._maxAntiAliasing = canMSAA ? gl.getParameter(gl.MAX_SAMPLES) : 1;\n }\n return this._maxAntiAliasing;\n }\n\n get rhi() {\n return this._rhi;\n }\n\n constructor(rhi: WebGLRenderer) {\n this._rhi = rhi;\n this.capabilityList = new Map();\n\n this._init();\n this._compatibleAllInterface();\n }\n\n /**\n * Check device capabilities.\n */\n canIUse(capabilityType: GLCapabilityType): boolean {\n return this.capabilityList.get(capabilityType);\n }\n\n /**\n * Check if can use some compressed texture format.\n */\n canIUseCompressedTextureInternalFormat(internalType: GLCompressedTextureInternalFormat): boolean {\n const {\n // astc\n RGBA_ASTC_4X4_KHR,\n RGBA_ASTC_12X12_KHR,\n SRGB8_ALPHA8_ASTC_4X4_KHR,\n SRGB8_ALPHA8_ASTC_12X12_KHR,\n // etc1\n RGB_ETC1_WEBGL,\n // etc\n R11_EAC,\n SRGB8_ALPHA8_ETC2_EAC,\n // pvrtc\n RGB_PVRTC_4BPPV1_IMG,\n RGBA_PVRTC_2BPPV1_IMG,\n // s3tc\n RGB_S3TC_DXT1_EXT,\n RGBA_S3TC_DXT5_EXT\n } = GLCompressedTextureInternalFormat;\n if (\n (internalType >= RGBA_ASTC_4X4_KHR && RGBA_ASTC_12X12_KHR <= RGBA_ASTC_12X12_KHR) ||\n (internalType >= SRGB8_ALPHA8_ASTC_4X4_KHR && internalType <= SRGB8_ALPHA8_ASTC_12X12_KHR)\n ) {\n return this.canIUse(GLCapabilityType.astc);\n } else if (internalType === RGB_ETC1_WEBGL) {\n return this.canIUse(GLCapabilityType.etc1);\n } else if (internalType >= R11_EAC && internalType <= SRGB8_ALPHA8_ETC2_EAC) {\n return this.canIUse(GLCapabilityType.etc);\n } else if (internalType >= RGB_PVRTC_4BPPV1_IMG && internalType <= RGBA_PVRTC_2BPPV1_IMG) {\n return this.canIUse(GLCapabilityType.pvrtc);\n } else if (internalType >= RGB_S3TC_DXT1_EXT && internalType <= RGBA_S3TC_DXT5_EXT) {\n return this.canIUse(GLCapabilityType.s3tc);\n }\n return false;\n }\n\n /**\n * Init capabilities.\n */\n private _init() {\n const cap = this.capabilityList;\n const { isWebGL2 } = this.rhi;\n const requireExtension = this.rhi.requireExtension.bind(this.rhi);\n\n const {\n shaderVertexID,\n standardDerivatives,\n shaderTextureLod,\n elementIndexUint,\n depthTexture,\n vertexArrayObject,\n instancedArrays,\n multipleSample,\n drawBuffers,\n\n astc,\n astc_webkit,\n etc,\n etc_webkit,\n etc1,\n etc1_webkit,\n pvrtc,\n pvrtc_webkit,\n s3tc,\n s3tc_webkit,\n\n textureFloat,\n textureHalfFloat,\n textureFloatLinear,\n textureHalfFloatLinear,\n WEBGL_colorBufferFloat,\n colorBufferFloat,\n colorBufferHalfFloat,\n textureFilterAnisotropic\n } = GLCapabilityType;\n cap.set(shaderVertexID, isWebGL2);\n cap.set(standardDerivatives, isWebGL2 || !!requireExtension(standardDerivatives));\n cap.set(shaderTextureLod, isWebGL2 || !!requireExtension(shaderTextureLod));\n cap.set(elementIndexUint, isWebGL2 || !!requireExtension(elementIndexUint));\n cap.set(depthTexture, isWebGL2 || !!requireExtension(depthTexture));\n cap.set(vertexArrayObject, isWebGL2 || !!requireExtension(vertexArrayObject));\n cap.set(instancedArrays, isWebGL2 || !!requireExtension(instancedArrays));\n cap.set(multipleSample, isWebGL2);\n cap.set(drawBuffers, isWebGL2 || !!requireExtension(drawBuffers));\n cap.set(textureFloat, isWebGL2 || !!requireExtension(textureFloat));\n cap.set(textureHalfFloat, isWebGL2 || !!requireExtension(textureHalfFloat));\n cap.set(textureFloatLinear, !!requireExtension(textureFloatLinear));\n cap.set(textureHalfFloatLinear, isWebGL2 || !!requireExtension(textureHalfFloatLinear));\n cap.set(\n colorBufferFloat,\n (isWebGL2 && !!requireExtension(colorBufferFloat)) || !!requireExtension(WEBGL_colorBufferFloat)\n );\n cap.set(\n colorBufferHalfFloat,\n (isWebGL2 && !!requireExtension(colorBufferFloat)) || !!requireExtension(colorBufferHalfFloat)\n );\n cap.set(textureFilterAnisotropic, !!requireExtension(textureFilterAnisotropic));\n\n cap.set(astc, !!(requireExtension(astc) || requireExtension(astc_webkit)));\n cap.set(etc, !!(requireExtension(etc) || requireExtension(etc_webkit)));\n cap.set(etc1, !!(requireExtension(etc1) || requireExtension(etc1_webkit)));\n cap.set(pvrtc, !!(requireExtension(pvrtc) || requireExtension(pvrtc_webkit)));\n cap.set(s3tc, !!(requireExtension(s3tc) || requireExtension(s3tc_webkit)));\n }\n\n /**\n * If there are extensions that can supplement this ability, smooth out the difference.\n * @example\n * compatible(GLCapabilityType.depthTexture,{\n * UNSIGNED_INT_24_8: \"UNSIGNED_INT_24_8_WEBGL\"\n * })\n * gl.UNSIGNED_INT_24_8 = ext.UNSIGNED_INT_24_8_WEBGL\n */\n private _compatibleInterface(capabilityType: GLCapabilityType, flatItem: { [glKey: string]: extensionKey }) {\n const rhi = this.rhi;\n const gl = rhi.gl;\n let ext = null;\n\n if ((ext = rhi.requireExtension(capabilityType))) {\n for (let glKey in flatItem) {\n const extensionKey = flatItem[glKey];\n const extensionVal = ext[extensionKey];\n\n // Mini game hack the native function,use “.bind” to smooth out if is “Funcion”.\n if (extensionVal?.bind) {\n gl[glKey] = extensionVal.bind(ext);\n } else {\n gl[glKey] = extensionVal;\n }\n }\n }\n }\n\n private _compatibleAllInterface() {\n const {\n depthTexture,\n vertexArrayObject,\n instancedArrays,\n drawBuffers,\n textureFilterAnisotropic,\n textureHalfFloat,\n colorBufferHalfFloat,\n WEBGL_colorBufferFloat\n } = GLCapabilityType;\n const { isWebGL2 } = this.rhi;\n\n if (!isWebGL2) {\n this._compatibleInterface(depthTexture, {\n UNSIGNED_INT_24_8: \"UNSIGNED_INT_24_8_WEBGL\"\n });\n this._compatibleInterface(vertexArrayObject, {\n createVertexArray: \"createVertexArrayOES\",\n deleteVertexArray: \"deleteVertexArrayOES\",\n isVertexArray: \"isVertexArrayOES\",\n bindVertexArray: \"bindVertexArrayOES\"\n });\n this._compatibleInterface(instancedArrays, {\n drawArraysInstanced: \"drawArraysInstancedANGLE\",\n drawElementsInstanced: \"drawElementsInstancedANGLE\",\n vertexAttribDivisor: \"vertexAttribDivisorANGLE\"\n });\n this._compatibleInterface(drawBuffers, {\n MAX_DRAW_BUFFERS: \"MAX_DRAW_BUFFERS_WEBGL\"\n });\n const items = {};\n if (this.canIUse(GLCapabilityType.drawBuffers)) {\n const maxDrawBuffers = this.maxDrawBuffers;\n for (let i = 0; i < maxDrawBuffers; i++) {\n i != 0 && (items[`COLOR_ATTACHMENT${i}`] = `COLOR_ATTACHMENT${i}_WEBGL`);\n items[`DRAW_BUFFER${i}`] = `DRAW_BUFFER${i}_WEBGL`;\n }\n this._compatibleInterface(drawBuffers, {\n drawBuffers: \"drawBuffersWEBGL\",\n ...items\n });\n }\n this._compatibleInterface(textureHalfFloat, {\n HALF_FLOAT: \"HALF_FLOAT_OES\"\n });\n this._compatibleInterface(colorBufferHalfFloat, {\n RGBA16F: \"RBGA16F_EXT\"\n });\n this._compatibleInterface(WEBGL_colorBufferFloat, {\n RGBA32F: \"RBGA32F_EXT\"\n });\n }\n\n this._compatibleInterface(textureFilterAnisotropic, {\n TEXTURE_MAX_ANISOTROPY_EXT: \"TEXTURE_MAX_ANISOTROPY_EXT\"\n });\n }\n}\n","import { WebGLRenderer } from \"./WebGLRenderer\";\nimport { GLCapabilityType } from \"@galacean/engine-core\";\n\n/**\n * GLContext extension.\n */\nexport class GLExtensions {\n private rhi: WebGLRenderer;\n private _requireResult;\n\n constructor(rhi: WebGLRenderer) {\n this.rhi = rhi;\n this._requireResult = {};\n }\n\n /**\n * Require an extension.\n */\n requireExtension(ext: GLCapabilityType) {\n if (this._requireResult[ext] !== undefined) {\n return this._requireResult[ext];\n }\n\n this._requireResult[ext] = this.rhi.gl.getExtension(ext);\n return this._requireResult[ext];\n }\n}\n","import { GLCapabilityType, Logger, Mesh, SubMesh } from \"@galacean/engine-core\";\nimport { IPlatformPrimitive } from \"@galacean/engine-design\";\nimport { WebGLExtension } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Improvement of VAO:\n * 1) WebGL2.0 must support VAO, almost all devices support vao extensions in webgl1.0, we can use PollyFill,only keep VAO mode.\n */\n\n/**\n * @internal\n * GL platform primitive.\n */\nexport class GLPrimitive implements IPlatformPrimitive {\n private _attribLocArray: number[] = [];\n private readonly _primitive: Mesh;\n private readonly _canUseInstancedArrays: boolean;\n\n private _gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n private _vaoMap: Map<number, WebGLVertexArrayObject> = new Map();\n private readonly _useVao: boolean;\n\n constructor(rhi: WebGLRenderer, primitive: Mesh) {\n this._primitive = primitive;\n this._canUseInstancedArrays = rhi.canIUse(GLCapabilityType.instancedArrays);\n this._useVao = rhi.canIUse(GLCapabilityType.vertexArrayObject);\n this._gl = rhi.gl;\n }\n\n /**\n * Draw the primitive.\n */\n draw(shaderProgram: any, subMesh: SubMesh): void {\n const gl = this._gl;\n const primitive = this._primitive;\n // @ts-ignore\n const useVao = this._useVao && primitive._enableVAO;\n\n if (useVao) {\n // @ts-ignore\n if (primitive._bufferStructChanged) {\n this._clearVAO();\n }\n if (!this._vaoMap.has(shaderProgram.id)) {\n this._registerVAO(shaderProgram);\n }\n const vao = this._vaoMap.get(shaderProgram.id);\n gl.bindVertexArray(vao);\n } else {\n this._bindBufferAndAttrib(shaderProgram);\n }\n\n // @ts-ignore\n const { _indexBufferBinding, _instanceCount, _glIndexType, _glIndexByteCount } = primitive;\n const { topology, start, count } = subMesh;\n\n if (!_instanceCount) {\n if (_indexBufferBinding) {\n if (useVao) {\n gl.drawElements(topology, count, _glIndexType, start * _glIndexByteCount);\n } else {\n const { _nativeBuffer } = _indexBufferBinding.buffer;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _nativeBuffer);\n gl.drawElements(topology, count, _glIndexType, start * _glIndexByteCount);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n } else {\n gl.drawArrays(topology, start, count);\n }\n } else {\n if (this._canUseInstancedArrays) {\n if (_indexBufferBinding) {\n if (useVao) {\n gl.drawElementsInstanced(topology, count, _glIndexType, start * _glIndexByteCount, _instanceCount);\n } else {\n const { _nativeBuffer } = _indexBufferBinding.buffer;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _nativeBuffer);\n gl.drawElementsInstanced(topology, count, _glIndexType, start * _glIndexByteCount, _instanceCount);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n } else {\n gl.drawArraysInstanced(topology, start, count, _instanceCount);\n }\n } else {\n Logger.error(\"ANGLE_instanced_arrays extension is not supported\");\n }\n }\n\n // Unbind\n if (useVao) {\n gl.bindVertexArray(null);\n } else {\n this._disableAttrib();\n }\n }\n\n destroy(): void {\n this._useVao && this._clearVAO();\n }\n\n /**\n * Bind buffer and attribute.\n */\n private _bindBufferAndAttrib(shaderProgram: any): void {\n const gl = this._gl;\n const primitive = this._primitive;\n // @ts-ignore\n const vertexBufferBindings = primitive._vertexBufferBindings;\n\n this._attribLocArray.length = 0;\n const attributeLocation = shaderProgram.attributeLocation;\n // @ts-ignore\n const attributes = primitive._vertexElementMap;\n\n let vbo: WebGLBuffer;\n let lastBoundVbo: WebGLBuffer;\n\n for (const name in attributeLocation) {\n const loc = attributeLocation[name];\n if (loc === -1) continue;\n\n const element = attributes[name];\n if (element) {\n const { buffer, stride } = vertexBufferBindings[element.bindingIndex];\n vbo = buffer._nativeBuffer;\n // prevent binding the vbo which already bound at the last loop, e.g. a buffer with multiple attributes.\n if (lastBoundVbo !== vbo) {\n lastBoundVbo = vbo;\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n }\n\n gl.enableVertexAttribArray(loc);\n const elementInfo = element._glElementInfo;\n gl.vertexAttribPointer(loc, elementInfo.size, elementInfo.type, elementInfo.normalized, stride, element.offset);\n if (this._canUseInstancedArrays) {\n gl.vertexAttribDivisor(loc, element.instanceStepRate);\n }\n this._attribLocArray.push(loc);\n } else {\n Logger.warn(\"vertex attribute not found: \" + name);\n }\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n }\n\n private _disableAttrib() {\n const gl = this._gl;\n for (let i = 0, l = this._attribLocArray.length; i < l; i++) {\n gl.disableVertexAttribArray(this._attribLocArray[i]);\n }\n }\n\n private _registerVAO(shaderProgram: any): void {\n const gl = this._gl;\n const vao = gl.createVertexArray();\n\n /** register VAO */\n gl.bindVertexArray(vao);\n\n // @ts-ignore\n const { _indexBufferBinding } = this._primitive;\n if (_indexBufferBinding) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _indexBufferBinding.buffer._nativeBuffer);\n }\n this._bindBufferAndAttrib(shaderProgram);\n\n /** unbind */\n gl.bindVertexArray(null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n this._disableAttrib();\n\n this._vaoMap.set(shaderProgram.id, vao);\n }\n\n private _clearVAO(): void {\n const gl = this._gl;\n this._vaoMap.forEach((vao) => {\n gl.deleteVertexArray(vao);\n });\n this._vaoMap.clear();\n }\n}\n","/**\n * @private\n */\nexport class GLRenderStates {\n private _gl: WebGLRenderingContext;\n private _parameters = {};\n /**\n * @param {WebGLRenderingContext} gl\n */\n constructor(gl: WebGLRenderingContext) {\n this._gl = gl;\n this._parameters = {}; // current gl state parameters\n\n /** cache */\n this._parameters[gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS] = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n this._parameters[gl.MAX_VERTEX_UNIFORM_VECTORS] = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n this._parameters[gl.MAX_VERTEX_ATTRIBS] = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n this._parameters[gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS] = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\n this._parameters[gl.MAX_TEXTURE_SIZE] = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n // init blend state same as BlendState default value.\n gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO);\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n gl.colorMask(true, true, true, true);\n gl.blendColor(0, 0, 0, 0);\n gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n // init depth state same as DepthState default value.\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LESS);\n gl.depthMask(true);\n\n // init stencil state same as StencilState default value.\n gl.disable(gl.STENCIL_TEST);\n gl.stencilFuncSeparate(gl.FRONT, gl.ALWAYS, 0, 0xff);\n gl.stencilFuncSeparate(gl.BACK, gl.ALWAYS, 0, 0xff);\n gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP);\n gl.stencilOpSeparate(gl.BACK, gl.KEEP, gl.KEEP, gl.KEEP);\n gl.stencilMask(0xff);\n\n // init raster state same as RasterState default value.\n gl.enable(gl.CULL_FACE);\n gl.cullFace(gl.BACK);\n gl.disable(gl.POLYGON_OFFSET_FILL);\n gl.polygonOffset(0, 0);\n }\n\n /**\n * Get a parameter.\n */\n getParameter(pname) {\n return this._parameters[pname];\n }\n}\n","import {\n GLCapabilityType,\n IPlatformTexture,\n Logger,\n RenderBufferDepthFormat,\n Texture,\n TextureCubeFace,\n TextureDepthCompareFunction,\n TextureFilterMode,\n TextureFormat,\n TextureWrapMode\n} from \"@galacean/engine-core\";\nimport { GLCompressedTextureInternalFormat, TextureFormatDetail } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture in WebGL platform.\n */\nexport class GLTexture implements IPlatformTexture {\n /** @internal */\n static _isPowerOf2(v: number): boolean {\n return (v & (v - 1)) === 0;\n }\n\n /**\n * Get more texture info from TextureFormat.\n * @internal\n */\n static _getFormatDetail(\n format: TextureFormat,\n gl: WebGLRenderingContext & WebGL2RenderingContext,\n isWebGL2: boolean\n ): TextureFormatDetail {\n switch (format) {\n case TextureFormat.R8G8B8:\n return {\n internalFormat: isWebGL2 ? gl.RGB8 : gl.RGB,\n baseFormat: gl.RGB,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R8G8B8A8:\n return {\n internalFormat: isWebGL2 ? gl.RGBA8 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R4G4B4A4:\n return {\n internalFormat: isWebGL2 ? gl.RGBA4 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_SHORT_4_4_4_4,\n isCompressed: false\n };\n case TextureFormat.R5G5B5A1:\n return {\n internalFormat: isWebGL2 ? gl.RGB5_A1 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_SHORT_5_5_5_1,\n isCompressed: false\n };\n case TextureFormat.R5G6B5:\n return {\n internalFormat: isWebGL2 ? gl.RGB565 : gl.RGB,\n baseFormat: gl.RGB,\n dataType: gl.UNSIGNED_SHORT_5_6_5,\n isCompressed: false\n };\n case TextureFormat.Alpha8:\n return {\n internalFormat: gl.ALPHA,\n baseFormat: gl.ALPHA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.LuminanceAlpha:\n return {\n internalFormat: gl.LUMINANCE_ALPHA,\n baseFormat: gl.LUMINANCE_ALPHA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R16G16B16A16:\n return {\n internalFormat: isWebGL2 ? gl.RGBA16F : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.HALF_FLOAT,\n isCompressed: false\n };\n case TextureFormat.R32G32B32A32:\n return {\n internalFormat: isWebGL2 ? gl.RGBA32F : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.FLOAT,\n isCompressed: false\n };\n case TextureFormat.DXT1:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_S3TC_DXT1_EXT,\n isCompressed: true\n };\n case TextureFormat.DXT5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_S3TC_DXT5_EXT,\n isCompressed: true\n };\n case TextureFormat.ETC1_RGB:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_ETC1_WEBGL,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGB:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB8_ETC2,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGBA5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGBA8:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA8_ETC2_EAC,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGB2:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_PVRTC_2BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGBA2:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_PVRTC_2BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGB4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_PVRTC_4BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGBA4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_PVRTC_4BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.ASTC_4x4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_4X4_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_5x5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_5X5_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_6x6:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_6X6_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_8x8:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_8X8_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_10x10:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_10X10_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_12x12:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_12X12_KHR,\n isCompressed: true\n };\n\n case TextureFormat.Depth:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT32F : gl.DEPTH_COMPONENT,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: isWebGL2 ? gl.FLOAT : gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.DepthStencil:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH32F_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: isWebGL2 ? gl.FLOAT_32_UNSIGNED_INT_24_8_REV : gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case TextureFormat.Depth16:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT16 : gl.DEPTH_COMPONENT,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth24Stencil8:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH24_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case TextureFormat.Depth24:\n return {\n internalFormat: gl.DEPTH_COMPONENT24,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_INT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth32:\n return {\n internalFormat: gl.DEPTH_COMPONENT32F,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.FLOAT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth32Stencil8:\n return {\n internalFormat: gl.DEPTH32F_STENCIL8,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.FLOAT_32_UNSIGNED_INT_24_8_REV,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n default:\n throw new Error(`this TextureFormat is not supported in Galacean Engine: ${format}`);\n }\n }\n\n /**\n * In WebGL 1, internalformat must be the same as baseFormat when call texImage2D.\n * @internal\n */\n static _getRenderBufferDepthFormatDetail(\n format: RenderBufferDepthFormat,\n gl: WebGLRenderingContext & WebGL2RenderingContext,\n isWebGL2: boolean\n ): TextureFormatDetail {\n switch (format) {\n case RenderBufferDepthFormat.Depth:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT32F : gl.DEPTH_COMPONENT16,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: isWebGL2 ? gl.FLOAT : gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.DepthStencil:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH32F_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: isWebGL2 ? gl.FLOAT_32_UNSIGNED_INT_24_8_REV : gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Stencil:\n return {\n internalFormat: gl.STENCIL_INDEX8,\n baseFormat: gl.STENCIL_ATTACHMENT,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false,\n attachment: gl.STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth16:\n return {\n internalFormat: gl.DEPTH_COMPONENT16,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth24Stencil8:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH24_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth24:\n return {\n internalFormat: gl.DEPTH_COMPONENT24,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_INT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth32:\n return {\n internalFormat: gl.DEPTH_COMPONENT32F,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.FLOAT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n\n case RenderBufferDepthFormat.Depth32Stencil8:\n return {\n internalFormat: gl.DEPTH32F_STENCIL8,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.FLOAT_32_UNSIGNED_INT_24_8_REV,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n default:\n throw new Error(`this TextureFormat is not supported in Galacean Engine: ${format}`);\n }\n }\n\n /**\n * Check whether the corresponding texture format is supported.\n * @internal\n */\n static _supportTextureFormat(format: TextureFormat, rhi: WebGLRenderer): boolean {\n switch (format) {\n case TextureFormat.R16G16B16A16:\n if (!rhi.canIUse(GLCapabilityType.textureHalfFloat)) {\n return false;\n }\n break;\n case TextureFormat.R32G32B32A32:\n if (!rhi.canIUse(GLCapabilityType.textureFloat)) {\n return false;\n }\n break;\n case TextureFormat.Depth16:\n case TextureFormat.Depth24Stencil8:\n case TextureFormat.Depth:\n case TextureFormat.DepthStencil:\n if (!rhi.canIUse(GLCapabilityType.depthTexture)) {\n return false;\n }\n break;\n case TextureFormat.Depth24:\n case TextureFormat.Depth32:\n case TextureFormat.Depth32Stencil8:\n return rhi.isWebGL2;\n }\n\n return true;\n }\n /**\n * @internal\n */\n static _supportRenderBufferColorFormat(format: TextureFormat, rhi: WebGLRenderer): boolean {\n let isSupported = true;\n\n switch (format) {\n case TextureFormat.R16G16B16A16:\n {\n if (!rhi.canIUse(GLCapabilityType.colorBufferHalfFloat) || !rhi.canIUse(GLCapabilityType.textureHalfFloat)) {\n isSupported = false;\n }\n }\n break;\n case TextureFormat.R32G32B32A32:\n {\n if (!rhi.canIUse(GLCapabilityType.colorBufferFloat) || !rhi.canIUse(GLCapabilityType.textureFloat)) {\n isSupported = false;\n }\n }\n break;\n }\n\n return isSupported;\n }\n\n /**\n * @internal\n */\n static _supportRenderBufferDepthFormat(format: RenderBufferDepthFormat, rhi: WebGLRenderer): boolean {\n if (!rhi.isWebGL2) {\n switch (format) {\n case RenderBufferDepthFormat.Depth24:\n case RenderBufferDepthFormat.Depth32:\n case RenderBufferDepthFormat.Depth32Stencil8:\n return false;\n }\n }\n\n return true;\n }\n\n /** @internal */\n _texture: Texture;\n /** @internal */\n _glTexture: WebGLTexture;\n /** @internal */\n _rhi: WebGLRenderer;\n /** @internal */\n _gl: WebGLRenderingContext & WebGL2RenderingContext;\n /** @internal */\n _isWebGL2: boolean;\n /** @internal */\n _target: GLenum; // gl.TEXTURE_2D | gl.TEXTURE_CUBE_MAP\n /** @internal */\n _formatDetail: TextureFormatDetail;\n\n /**\n * Wrapping mode for texture coordinate S.\n */\n set wrapModeU(value: TextureWrapMode) {\n this._bind();\n this._setWrapMode(value, this._gl.TEXTURE_WRAP_S);\n }\n\n /**\n * Wrapping mode for texture coordinate T.\n */\n set wrapModeV(value: TextureWrapMode) {\n this._bind();\n this._setWrapMode(value, this._gl.TEXTURE_WRAP_T);\n }\n\n /**\n * Filter mode for texture.\n */\n set filterMode(value: TextureFilterMode) {\n const gl = this._gl;\n const target = this._target;\n /** @ts-ignore */\n const { _mipmap } = this._texture;\n\n this._bind();\n switch (value) {\n case TextureFilterMode.Point:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.NEAREST_MIPMAP_NEAREST : gl.NEAREST);\n break;\n case TextureFilterMode.Bilinear:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.LINEAR_MIPMAP_NEAREST : gl.LINEAR);\n break;\n case TextureFilterMode.Trilinear:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\n break;\n }\n }\n\n /**\n * Anisotropic level for texture.\n */\n set anisoLevel(value: number) {\n const gl = this._gl as WebGLRenderingContext & WebGL2RenderingContext & EXT_texture_filter_anisotropic;\n\n this._bind();\n gl.texParameterf(this._target, gl.TEXTURE_MAX_ANISOTROPY_EXT, value);\n }\n\n set depthCompareFunction(value: TextureDepthCompareFunction) {\n this._bind();\n\n const gl = this._gl;\n switch (value) {\n case TextureDepthCompareFunction.Never:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.NEVER);\n break;\n case TextureDepthCompareFunction.Less:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.LESS);\n break;\n case TextureDepthCompareFunction.Equal:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.EQUAL);\n break;\n case TextureDepthCompareFunction.LessEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.LEQUAL);\n break;\n case TextureDepthCompareFunction.Greater:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.GREATER);\n break;\n case TextureDepthCompareFunction.NotEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.NOTEQUAL);\n break;\n case TextureDepthCompareFunction.GreaterEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.GEQUAL);\n break;\n case TextureDepthCompareFunction.Always:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.ALWAYS);\n break;\n }\n }\n /**\n * Create texture in WebGL platform.\n */\n constructor(rhi: WebGLRenderer, texture: Texture, target: GLenum) {\n this._texture = texture;\n this._rhi = rhi;\n this._gl = rhi.gl as WebGLRenderingContext & WebGL2RenderingContext;\n this._isWebGL2 = rhi.isWebGL2;\n this._target = target;\n this._glTexture = this._gl.createTexture();\n }\n\n /**\n * Destroy texture.\n */\n destroy() {\n this._gl.deleteTexture(this._glTexture);\n this._texture = null;\n this._glTexture = null;\n this._formatDetail = null;\n }\n\n /**\n * @internal\n */\n setUseDepthCompareMode(value: boolean): void {\n const gl = this._gl;\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_MODE, value ? gl.COMPARE_REF_TO_TEXTURE : gl.NONE);\n }\n\n /**\n * Generate multi-level textures based on the 0th level data.\n */\n generateMipmaps(): void {\n // @todo (1x1).generateMipmap() will flash back in uc.\n if (this._texture.width !== 1 || this._texture.height !== 1) {\n this._bind();\n this._gl.generateMipmap(this._target);\n }\n }\n\n protected _bind() {\n this._rhi.bindTexture(this);\n }\n\n /**\n * Pre-development mipmapping GPU memory.\n */\n protected _init(isCube: boolean): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n let { internalFormat, baseFormat, dataType } = this._formatDetail;\n // @ts-ignore\n const { mipmapCount, width, height, _isDepthTexture } = this._texture;\n\n this._bind();\n\n if (isWebGL2 && !(baseFormat === gl.LUMINANCE_ALPHA || baseFormat === gl.ALPHA)) {\n gl.texStorage2D(this._target, mipmapCount, internalFormat, width, height);\n } else {\n if (!isCube) {\n if (_isDepthTexture) {\n gl.texImage2D(this._target, 0, internalFormat, width, height, 0, baseFormat, dataType, null);\n } else {\n for (let i = 0; i < mipmapCount; i++) {\n const mipWidth = Math.max(1, width >> i);\n const mipHeight = Math.max(1, height >> i);\n gl.texImage2D(this._target, i, internalFormat, mipWidth, mipHeight, 0, baseFormat, dataType, null);\n }\n }\n } else {\n for (let i = 0; i < mipmapCount; i++) {\n const size = Math.max(1, width >> i);\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n i,\n internalFormat,\n size,\n size,\n 0,\n baseFormat,\n dataType,\n null\n );\n }\n }\n }\n }\n }\n\n /**\n * Get the pixel color buffer according to the specified cube face and area.\n * @param face - You can choose which cube face to read\n * @param x - X coordinate of area start\n * @param y - Y coordinate of area start\n * @param width - Area width\n * @param height - Area height\n * @param out - Color buffer\n * @param mipLevel - Set mip level the data want to get from\n */\n protected _getPixelBuffer(\n face: TextureCubeFace | null,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._getReadFrameBuffer());\n\n if (mipLevel > 0 && !this._isWebGL2) {\n mipLevel = 0;\n Logger.error(\"mipLevel only take effect in WebGL2.0\");\n }\n\n if (face != null) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n this._glTexture,\n mipLevel\n );\n } else {\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._glTexture, mipLevel);\n }\n gl.readPixels(x, y, width, height, baseFormat, dataType, out);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n private _setWrapMode(value: TextureWrapMode, pname: GLenum): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const target = this._target;\n const { width, height } = this._texture;\n\n if (\n !isWebGL2 &&\n value !== TextureWrapMode.Clamp &&\n (!GLTexture._isPowerOf2(width) || !GLTexture._isPowerOf2(height))\n ) {\n Logger.warn(\n \"non-power-2 texture is not supported for REPEAT or MIRRORED_REPEAT in WebGL1,and has automatically downgraded to CLAMP_TO_EDGE\"\n );\n value = TextureWrapMode.Clamp;\n }\n\n switch (value) {\n case TextureWrapMode.Clamp:\n gl.texParameteri(target, pname, gl.CLAMP_TO_EDGE);\n break;\n case TextureWrapMode.Repeat:\n gl.texParameteri(target, pname, gl.REPEAT);\n break;\n case TextureWrapMode.Mirror:\n gl.texParameteri(target, pname, gl.MIRRORED_REPEAT);\n break;\n }\n }\n\n protected _getReadFrameBuffer(): WebGLFramebuffer {\n let frameBuffer = this._rhi._readFrameBuffer;\n if (!frameBuffer) {\n this._rhi._readFrameBuffer = frameBuffer = this._gl.createFramebuffer();\n }\n return frameBuffer;\n }\n}\n","import {\n GLCapabilityType,\n IPlatformRenderTarget,\n Logger,\n RenderTarget,\n Texture,\n TextureCube,\n TextureCubeFace,\n TextureFormat\n} from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * The render target in WebGL platform is used for off-screen rendering.\n */\nexport class GLRenderTarget implements IPlatformRenderTarget {\n private _gl: WebGLRenderingContext & WebGL2RenderingContext;\n private _isWebGL2: boolean;\n private _target: RenderTarget;\n private _frameBuffer: WebGLFramebuffer;\n private _MSAAFrameBuffer: WebGLFramebuffer | null;\n private _depthRenderBuffer: WebGLRenderbuffer | null;\n private _MSAAColorRenderBuffers: WebGLRenderbuffer[] = [];\n private _MSAADepthRenderBuffer: WebGLRenderbuffer | null;\n private _oriDrawBuffers: GLenum[];\n private _blitDrawBuffers: GLenum[] | null;\n private _curMipLevel: number = 0;\n\n /**\n * Create render target in WebGL platform.\n */\n constructor(rhi: WebGLRenderer, target: RenderTarget) {\n this._gl = rhi.gl as WebGLRenderingContext & WebGL2RenderingContext;\n this._isWebGL2 = rhi.isWebGL2;\n this._target = target;\n\n /** @ts-ignore */\n const { _colorTextures, _depth, width, height } = target;\n const isDepthTexture = _depth instanceof Texture;\n\n /** todo\n * MRT + Cube + [,MSAA]\n * MRT + MSAA\n */\n\n for (let i = 0, n = _colorTextures.length; i < n; i++) {\n const format = _colorTextures[i]._format;\n if (!GLTexture._supportRenderBufferColorFormat(format, rhi)) {\n throw new Error(`TextureFormat is not supported:${TextureFormat[format]} in RenderTarget`);\n }\n }\n\n if (!isDepthTexture && !GLTexture._supportRenderBufferDepthFormat(_depth, rhi)) {\n throw new Error(`TextureFormat is not supported:${TextureFormat[_depth]} in RenderTarget`);\n }\n\n if (_colorTextures.length > 1 && !rhi.canIUse(GLCapabilityType.drawBuffers)) {\n throw new Error(\"MRT is not supported\");\n }\n\n if (_colorTextures.some((v: Texture) => v.width !== width || v.height !== height)) {\n throw new Error(\"ColorTexture's size must as same as RenderTarget\");\n }\n\n if (isDepthTexture && (_depth.width !== width || _depth.height !== height)) {\n throw new Error(\"DepthTexture's size must as same as RenderTarget\");\n }\n\n // todo: necessary to support MRT + Cube + [,MSAA] ?\n if (_colorTextures.length > 1 && _colorTextures.some((v: Texture) => v instanceof TextureCube)) {\n throw new Error(\"MRT+Cube+[,MSAA] is not supported\");\n }\n\n const maxAntiAliasing = rhi.capability.maxAntiAliasing;\n if (target.antiAliasing > maxAntiAliasing) {\n Logger.warn(`MSAA antiAliasing exceeds the limit and is automatically downgraded to:${maxAntiAliasing}`);\n\n /** @ts-ignore */\n target._antiAliasing = maxAntiAliasing;\n }\n\n this._frameBuffer = this._gl.createFramebuffer();\n\n // bind main FBO\n this._bindMainFBO();\n\n // bind MSAA FBO\n if (target.antiAliasing > 1) {\n this._MSAAFrameBuffer = this._gl.createFramebuffer();\n this._bindMSAAFBO();\n }\n }\n\n /**\n * Set which face and mipLevel of the cube texture to render to.\n * @param faceIndex - Cube texture face\n * @param mipLevel - Set mip level the data want to write\n */\n setRenderTargetInfo(faceIndex: TextureCubeFace, mipLevel: number): void {\n const { _gl: gl, _target: target } = this;\n const { depthTexture } = target;\n const colorTexture = target.getColorTexture(0);\n const mipChanged = mipLevel !== this._curMipLevel;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n\n if (colorTexture) {\n const isCube = colorTexture instanceof TextureCube;\n if (mipChanged || isCube) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n isCube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D,\n // @ts-ignore\n (colorTexture._platformTexture as GLTexture)._glTexture,\n mipLevel\n );\n }\n }\n if (depthTexture) {\n const isCube = depthTexture instanceof TextureCube;\n if (mipChanged || isCube) {\n // @ts-ignore\n const platformTexture = <GLTexture>depthTexture._platformTexture;\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n platformTexture._formatDetail.attachment,\n isCube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D,\n platformTexture._glTexture,\n mipLevel\n );\n }\n } else {\n if (mipChanged) {\n // @ts-ignore\n const { internalFormat } = GLTexture._getRenderBufferDepthFormatDetail(target._depth, gl, this._isWebGL2);\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, target.width >> mipLevel, target.height >> mipLevel);\n }\n }\n this._curMipLevel = mipLevel;\n\n // revert current activated render target\n this._activeRenderTarget();\n }\n\n /**\n * Blit FBO.\n */\n blitRenderTarget(): void {\n if (!this._MSAAFrameBuffer) return;\n\n const gl = this._gl;\n const mask = gl.COLOR_BUFFER_BIT | (this._target.depthTexture ? gl.DEPTH_BUFFER_BIT : 0);\n const { colorTextureCount, width, height } = this._target;\n\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, this._MSAAFrameBuffer);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this._frameBuffer);\n\n for (let textureIndex = 0; textureIndex < colorTextureCount; textureIndex++) {\n const attachment = gl.COLOR_ATTACHMENT0 + textureIndex;\n\n this._blitDrawBuffers[textureIndex] = attachment;\n\n gl.readBuffer(attachment);\n gl.drawBuffers(this._blitDrawBuffers);\n gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST);\n\n this._blitDrawBuffers[textureIndex] = gl.NONE;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n /**\n * Destroy render target.\n */\n destroy(): void {\n const gl = this._gl;\n\n this._frameBuffer && gl.deleteFramebuffer(this._frameBuffer);\n this._depthRenderBuffer && gl.deleteRenderbuffer(this._depthRenderBuffer);\n this._MSAAFrameBuffer && gl.deleteFramebuffer(this._MSAAFrameBuffer);\n this._MSAADepthRenderBuffer && gl.deleteRenderbuffer(this._MSAADepthRenderBuffer);\n\n for (let i = 0; i < this._MSAAColorRenderBuffers.length; i++) {\n gl.deleteRenderbuffer(this._MSAAColorRenderBuffers[i]);\n }\n\n this._frameBuffer = null;\n this._depthRenderBuffer = null;\n this._MSAAFrameBuffer = null;\n this._MSAAColorRenderBuffers.length = 0;\n this._MSAADepthRenderBuffer = null;\n }\n\n /**\n * Activate this RenderTarget.\n * @internal\n * @remarks\n * If MSAA is turned on, MSAA FBO is activated, and then this._blitRenderTarget() is performed to exchange FBO.\n * If MSAA is not turned on, activate the main FBO.\n */\n _activeRenderTarget(): void {\n const gl = this._gl;\n\n if (this._MSAAFrameBuffer) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._MSAAFrameBuffer);\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n }\n }\n\n private _bindMainFBO(): void {\n const gl = this._gl;\n const isWebGL2: boolean = this._isWebGL2;\n\n /** @ts-ignore */\n const { _depth, colorTextureCount, width, height } = this._target;\n const drawBuffers = new Array(colorTextureCount);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n\n /** color render buffer */\n for (let i = 0; i < colorTextureCount; i++) {\n const colorTexture = this._target.getColorTexture(i);\n const attachment = gl.COLOR_ATTACHMENT0 + i;\n\n drawBuffers[i] = attachment;\n\n if (!(colorTexture instanceof TextureCube)) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n attachment,\n gl.TEXTURE_2D,\n /** @ts-ignore */\n (colorTexture._platformTexture as GLTexture)._glTexture,\n 0\n );\n }\n }\n\n if (colorTextureCount > 1) {\n gl.drawBuffers(drawBuffers);\n }\n this._oriDrawBuffers = drawBuffers;\n\n /** depth render buffer */\n if (_depth !== null) {\n if (_depth instanceof Texture && !(_depth instanceof TextureCube)) {\n // @ts-ignore\n const platformTexture = _depth._platformTexture as GLTexture;\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n platformTexture._formatDetail.attachment,\n gl.TEXTURE_2D,\n platformTexture._glTexture,\n 0\n );\n } else if (this._target.antiAliasing <= 1) {\n const { internalFormat, attachment } = GLTexture._getRenderBufferDepthFormatDetail(_depth, gl, isWebGL2);\n const depthRenderBuffer = gl.createRenderbuffer();\n\n this._depthRenderBuffer = depthRenderBuffer;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, depthRenderBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, depthRenderBuffer);\n }\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n private _bindMSAAFBO(): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const MSAADepthRenderBuffer = gl.createRenderbuffer();\n\n /** @ts-ignore */\n const { _depth, colorTextureCount, antiAliasing, width, height } = this._target;\n\n this._blitDrawBuffers = new Array(colorTextureCount);\n this._MSAADepthRenderBuffer = MSAADepthRenderBuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._MSAAFrameBuffer);\n\n // prepare MRT+MSAA color RBOs\n for (let i = 0; i < colorTextureCount; i++) {\n const MSAAColorRenderBuffer = gl.createRenderbuffer();\n\n this._MSAAColorRenderBuffers[i] = MSAAColorRenderBuffer;\n this._blitDrawBuffers[i] = gl.NONE;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, MSAAColorRenderBuffer);\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n antiAliasing,\n /** @ts-ignore */\n (this._target.getColorTexture(i)._platformTexture as GLTexture)._formatDetail.internalFormat,\n width,\n height\n );\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, MSAAColorRenderBuffer);\n }\n gl.drawBuffers(this._oriDrawBuffers);\n\n // prepare MSAA depth RBO\n if (_depth !== null) {\n const { internalFormat, attachment } =\n _depth instanceof Texture\n ? /** @ts-ignore */\n (_depth._platformTexture as GLTexture)._formatDetail\n : GLTexture._getRenderBufferDepthFormatDetail(_depth, gl, isWebGL2);\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, MSAADepthRenderBuffer);\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, antiAliasing, internalFormat, width, height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, MSAADepthRenderBuffer);\n }\n\n this._checkFrameBuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n private _checkFrameBuffer(): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const e = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n\n switch (e) {\n case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n throw new Error(\n \"The attachment types are mismatched or not all framebuffer attachment points are framebuffer attachment complete\"\n );\n case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n throw new Error(\"There is no attachment\");\n case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n throw new Error(\" Height and width of the attachment are not the same.\");\n case gl.FRAMEBUFFER_UNSUPPORTED:\n throw new Error(\n \"The format of the attachment is not supported or if depth and stencil attachments are not the same renderbuffer\"\n );\n }\n\n if (isWebGL2 && e === gl.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE) {\n throw new Error(\n \"The values of gl.RENDERBUFFER_SAMPLES are different among attached renderbuffers, or are non-zero if the attached images are a mix of renderbuffers and textures.\"\n );\n }\n }\n}\n","import { IPlatformTexture2D, Logger, Texture2D, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture 2d in WebGL platform.\n */\nexport class GLTexture2D extends GLTexture implements IPlatformTexture2D {\n /** Backward compatible with WebGL1.0. */\n private _compressedMipFilled: number = 0;\n\n constructor(rhi: WebGLRenderer, texture2D: Texture2D) {\n super(rhi, texture2D, rhi.gl.TEXTURE_2D);\n\n /** @ts-ignore */\n const { format, _mipmap, width, height } = texture2D;\n const isWebGL2 = this._isWebGL2;\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n if (_mipmap && !isWebGL2 && (!GLTexture._isPowerOf2(width) || !GLTexture._isPowerOf2(height))) {\n Logger.warn(\n \"non-power-2 texture is not supported for mipmap in WebGL1,and has automatically downgraded to non-mipmap\"\n );\n\n /** @ts-ignore */\n texture2D._mipmap = false;\n /** @ts-ignore */\n texture2D._mipmapCount = texture2D._getMipmapCount();\n }\n\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, isWebGL2);\n (this._formatDetail.isCompressed && !isWebGL2) || this._init(false);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.setPixelBuffer}\n */\n setPixelBuffer(\n colorBuffer: ArrayBufferView,\n mipLevel: number = 0,\n x: number,\n y: number,\n width?: number,\n height?: number\n ): void {\n const gl = this._gl;\n const isWebGL2: boolean = this._isWebGL2;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n const mipWidth = Math.max(1, this._texture.width >> mipLevel);\n const mipHeight = Math.max(1, this._texture.height >> mipLevel);\n\n width = width || mipWidth - x;\n height = height || mipHeight - y;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n const mipBit = 1 << mipLevel;\n if (isWebGL2 || this._compressedMipFilled & mipBit) {\n gl.compressedTexSubImage2D(this._target, mipLevel, x, y, width, height, internalFormat, colorBuffer);\n } else {\n gl.compressedTexImage2D(this._target, mipLevel, internalFormat, width, height, 0, colorBuffer);\n this._compressedMipFilled |= mipBit;\n }\n } else {\n gl.texSubImage2D(this._target, mipLevel, x, y, width, height, baseFormat, dataType, colorBuffer);\n }\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.setImageSource}\n */\n setImageSource(\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage2D(this._target, mipLevel, x || 0, y || 0, baseFormat, dataType, imageSource);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.getPixelBuffer }\n */\n getPixelBuffer(x: number, y: number, width: number, height: number, mipLevel: number, out: ArrayBufferView): void {\n if (this._formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n super._getPixelBuffer(null, x, y, width, height, mipLevel, out);\n }\n}\n","import { IPlatformTexture2DArray, Texture2DArray, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture 2D array in WebGL platform.\n */\nexport class GLTexture2DArray extends GLTexture implements IPlatformTexture2DArray {\n constructor(rhi: WebGLRenderer, texture2DArray: Texture2DArray) {\n super(rhi, texture2DArray, (<WebGL2RenderingContext>rhi.gl).TEXTURE_2D_ARRAY);\n\n const { format, width, height, length, mipmapCount } = texture2DArray;\n\n if (!this._isWebGL2) {\n throw new Error(`Texture2D Array is not supported in WebGL1.0`);\n }\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n this._bind();\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, true);\n this._gl.texStorage3D(this._target, mipmapCount, this._formatDetail.internalFormat, width, height, length);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.setPixelBuffer}\n */\n setPixelBuffer(\n offsetIndex: number,\n colorBuffer: ArrayBufferView,\n mipLevel: number,\n x: number,\n y: number,\n width?: number,\n height?: number,\n length?: number\n ): void {\n const { _target: target, _gl: gl } = this;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n\n width = width || Math.max(1, this._texture.width >> mipLevel) - x;\n height = height || Math.max(1, this._texture.height >> mipLevel) - y;\n length = length || (<Texture2DArray>this._texture).length;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n gl.compressedTexSubImage3D(\n target,\n mipLevel,\n x,\n y,\n offsetIndex,\n width,\n height,\n length,\n internalFormat,\n colorBuffer\n );\n } else {\n gl.texSubImage3D(target, mipLevel, x, y, offsetIndex, width, height, length, baseFormat, dataType, colorBuffer);\n }\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.setImageSource}\n */\n setImageSource(\n elementIndex: number,\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage3D(\n this._target,\n mipLevel,\n x,\n y,\n elementIndex,\n imageSource.width,\n imageSource.height,\n 1,\n baseFormat,\n dataType,\n imageSource\n );\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.getPixelBuffer}\n */\n getPixelBuffer(\n elementIndex: number,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n const { _gl: gl, _formatDetail: formatDetail } = this;\n\n if (formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._getReadFrameBuffer());\n gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, this._glTexture, mipLevel, elementIndex);\n gl.readPixels(x, y, width, height, formatDetail.baseFormat, formatDetail.dataType, out);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n}\n","import { IPlatformTextureCube, Logger, TextureCube, TextureCubeFace, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Cube texture in WebGL platform.\n */\nexport class GLTextureCube extends GLTexture implements IPlatformTextureCube {\n /** Backward compatible with WebGL1.0. */\n private _compressedFaceFilled: number[] = [0, 0, 0, 0, 0, 0];\n\n constructor(rhi: WebGLRenderer, textureCube: TextureCube) {\n super(rhi, textureCube, rhi.gl.TEXTURE_CUBE_MAP);\n\n /** @ts-ignore */\n const { format, _mipmap, width: size } = textureCube;\n const isWebGL2 = this._isWebGL2;\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n if (_mipmap && !isWebGL2 && !GLTexture._isPowerOf2(size)) {\n Logger.warn(\n \"non-power-2 texture is not supported for mipmap in WebGL1,and has automatically downgraded to non-mipmap\"\n );\n\n /** @ts-ignore */\n textureCube._mipmap = false;\n /** @ts-ignore */\n textureCube._mipmapCount = textureCube._getMipmapCount();\n }\n\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, isWebGL2);\n (this._formatDetail.isCompressed && !isWebGL2) || this._init(true);\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.setPixelBuffer}\n */\n setPixelBuffer(\n face: TextureCubeFace,\n colorBuffer: ArrayBufferView,\n mipLevel: number,\n x: number,\n y: number,\n width?: number,\n height?: number\n ): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n const mipSize = Math.max(1, this._texture.width >> mipLevel);\n\n width = width || mipSize - x;\n height = height || mipSize - y;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n const mipBit = 1 << mipLevel;\n if (isWebGL2 || this._compressedFaceFilled[face] & mipBit) {\n gl.compressedTexSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x,\n y,\n width,\n height,\n internalFormat,\n colorBuffer\n );\n } else {\n gl.compressedTexImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n internalFormat,\n width,\n height,\n 0,\n colorBuffer\n );\n this._compressedFaceFilled[face] |= mipBit;\n }\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x,\n y,\n width,\n height,\n baseFormat,\n dataType,\n colorBuffer\n );\n }\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.setImageSource}\n */\n setImageSource(\n face: TextureCubeFace,\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x || 0,\n y || 0,\n baseFormat,\n dataType,\n imageSource\n );\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.getPixelBuffer}\n */\n getPixelBuffer(\n face: TextureCubeFace,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n if (this._formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n super._getPixelBuffer(face, x, y, width, height, mipLevel, out);\n }\n}\n","import {\n CameraClearFlags,\n Canvas,\n ColorWriteMask,\n Engine,\n GLCapabilityType,\n IHardwareRenderer,\n IPlatformRenderTarget,\n IPlatformTexture2D,\n IPlatformTextureCube,\n Logger,\n Mesh,\n Platform,\n RenderTarget,\n SubMesh,\n SystemInfo,\n Texture2D,\n Texture2DArray,\n TextureCube\n} from \"@galacean/engine-core\";\nimport { IPlatformPrimitive } from \"@galacean/engine-design\";\nimport { Color, Vector4 } from \"@galacean/engine-math\";\nimport { GLCapability } from \"./GLCapability\";\nimport { GLExtensions } from \"./GLExtensions\";\nimport { GLPrimitive } from \"./GLPrimitive\";\nimport { GLRenderStates } from \"./GLRenderStates\";\nimport { GLRenderTarget } from \"./GLRenderTarget\";\nimport { GLTexture } from \"./GLTexture\";\nimport { GLTexture2D } from \"./GLTexture2D\";\nimport { GLTexture2DArray } from \"./GLTexture2DArray\";\nimport { GLTextureCube } from \"./GLTextureCube\";\nimport { WebCanvas } from \"./WebCanvas\";\nimport { WebGLExtension } from \"./type\";\n\n/**\n * WebGL mode.\n */\nexport enum WebGLMode {\n /** Auto, use WebGL2.0 if support, or will fallback to WebGL1.0. */\n Auto = 0,\n /** WebGL2.0. */\n WebGL2 = 1,\n /** WebGL1.0, */\n WebGL1 = 2\n}\n\n/**\n * WebGL renderer options.\n */\nexport interface WebGLRendererOptions extends WebGLContextAttributes {\n /** WebGL mode.*/\n webGLMode?: WebGLMode;\n\n /**\n * @internal\n * iOS 15 webgl implement has bug, maybe should force call flush command buffer, for example iPhone13(iOS 15.4.1).\n */\n _forceFlush?: boolean;\n\n /**\n * @internal\n * Max allow skin uniform vectors count, default is 256\n * \n * @remarks large count maybe cause performance issue.\n */\n _maxAllowSkinUniformVectorCount?: number;\n}\n\n/**\n * WebGL renderer, including WebGL1.0 and WebGL2.0.\n */\nexport class WebGLRenderer implements IHardwareRenderer {\n /** @internal */\n _readFrameBuffer: WebGLFramebuffer;\n /** @internal */\n _enableGlobalDepthBias: boolean = false;\n\n _currentBind: any;\n\n private _options: WebGLRendererOptions;\n private _gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n private _renderStates;\n private _extensions;\n private _capability: GLCapability;\n private _isWebGL2: boolean;\n private _renderer: string;\n private _webCanvas: WebCanvas;\n\n private _activeTextureID: number;\n private _activeTextures: GLTexture[] = new Array(32);\n\n // cache value\n private _lastViewport: Vector4 = new Vector4(null, null, null, null);\n private _lastScissor: Vector4 = new Vector4(null, null, null, null);\n private _lastClearColor: Color = new Color(null, null, null, null);\n private _scissorEnable: boolean = false;\n\n get isWebGL2(): boolean {\n return this._isWebGL2;\n }\n\n get renderer(): string {\n return this._renderer;\n }\n\n /**\n * GL Context\n * @member {WebGLRenderingContext}\n */\n get gl() {\n return this._gl;\n }\n\n get renderStates(): GLRenderStates {\n return this._renderStates;\n }\n\n get capability(): GLCapability {\n return this._capability;\n }\n\n get canIUseMoreJoints() {\n return this.capability.canIUseMoreJoints;\n }\n\n constructor(initializeOptions: WebGLRendererOptions = {}) {\n const options = {\n webGLMode: WebGLMode.Auto,\n alpha: false,\n stencil: true,\n _forceFlush: false,\n _maxAllowSkinUniformVectorCount: 256,\n ...initializeOptions\n };\n if (SystemInfo.platform === Platform.IPhone || SystemInfo.platform === Platform.IPad) {\n const version = SystemInfo.operatingSystem.match(/(\\d+).?(\\d+)?.?(\\d+)?/);\n if (version) {\n const majorVersion = parseInt(version[1]);\n const minorVersion = parseInt(version[2]);\n if (majorVersion === 15 && minorVersion >= 0 && minorVersion <= 4) {\n options._forceFlush = true;\n }\n }\n }\n this._options = options;\n }\n\n init(canvas: Canvas): void {\n const options = this._options;\n const webCanvas = (this._webCanvas = (canvas as WebCanvas)._webCanvas);\n const webGLMode = options.webGLMode;\n let gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n\n if (webGLMode == WebGLMode.Auto || webGLMode == WebGLMode.WebGL2) {\n gl = webCanvas.getContext(\"webgl2\", options);\n if (!gl && (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas))) {\n gl = <WebGL2RenderingContext>webCanvas.getContext(\"experimental-webgl2\", options);\n }\n this._isWebGL2 = true;\n\n // Prevent weird browsers to lie (such as safari!)\n if (gl && !(<WebGL2RenderingContext>gl).deleteQuery) {\n this._isWebGL2 = false;\n }\n }\n\n if (!gl) {\n if (webGLMode == WebGLMode.Auto || webGLMode == WebGLMode.WebGL1) {\n gl = <WebGLRenderingContext & WebGLExtension>webCanvas.getContext(\"webgl\", options);\n if (!gl && (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas))) {\n gl = <WebGLRenderingContext & WebGLExtension>webCanvas.getContext(\"experimental-webgl\", options);\n }\n this._isWebGL2 = false;\n }\n }\n\n if (!gl) {\n throw new Error(\"Get GL Context FAILED.\");\n }\n\n this._gl = gl;\n this._activeTextureID = gl.TEXTURE0;\n this._renderStates = new GLRenderStates(gl);\n this._extensions = new GLExtensions(this);\n this._capability = new GLCapability(this);\n // Make sure the active texture in gl context is on default, because gl context may be used in other webgl renderer.\n gl.activeTexture(gl.TEXTURE0);\n\n const debugRenderInfo = gl.getExtension(\"WEBGL_debug_renderer_info\");\n if (debugRenderInfo != null) {\n this._renderer = gl.getParameter(debugRenderInfo.UNMASKED_RENDERER_WEBGL);\n }\n }\n\n createPlatformPrimitive(primitive: Mesh): IPlatformPrimitive {\n return new GLPrimitive(this, primitive);\n }\n\n createPlatformTexture2D(texture2D: Texture2D): IPlatformTexture2D {\n return new GLTexture2D(this, texture2D);\n }\n\n createPlatformTexture2DArray(texture2D: Texture2DArray): GLTexture2DArray {\n return new GLTexture2DArray(this, texture2D);\n }\n\n createPlatformTextureCube(textureCube: TextureCube): IPlatformTextureCube {\n return new GLTextureCube(this, textureCube);\n }\n\n createPlatformRenderTarget(target: RenderTarget): IPlatformRenderTarget {\n return new GLRenderTarget(this, target);\n }\n\n requireExtension(ext) {\n return this._extensions.requireExtension(ext);\n }\n\n canIUse(capabilityType: GLCapabilityType) {\n return this.capability.canIUse(capabilityType);\n }\n\n canIUseCompressedTextureInternalFormat(type: number) {\n return this.capability.canIUseCompressedTextureInternalFormat(type);\n }\n\n viewport(x: number, y: number, width: number, height: number): void {\n const { _gl: gl, _lastViewport: lastViewport } = this;\n if (x !== lastViewport.x || y !== lastViewport.y || width !== lastViewport.z || height !== lastViewport.w) {\n gl.viewport(x, y, width, height);\n lastViewport.set(x, y, width, height);\n }\n }\n\n scissor(x: number, y: number, width: number, height: number): void {\n const { _gl: gl, _lastScissor: lastScissor } = this;\n if (x !== lastScissor.x || y !== lastScissor.y || width !== lastScissor.z || height !== lastScissor.w) {\n const { _webCanvas: webCanvas } = this;\n if (x === 0 && y === 0 && width === webCanvas.width && height === webCanvas.height) {\n if (this._scissorEnable) {\n gl.disable(gl.SCISSOR_TEST);\n this._scissorEnable = false;\n }\n } else {\n if (!this._scissorEnable) {\n gl.enable(gl.SCISSOR_TEST);\n this._scissorEnable = true;\n }\n gl.scissor(x, y, width, height);\n }\n lastScissor.set(x, y, width, height);\n }\n }\n\n colorMask(r, g, b, a) {\n this._gl.colorMask(r, g, b, a);\n }\n\n clearRenderTarget(engine: Engine, clearFlags: CameraClearFlags, clearColor: Color) {\n const gl = this._gl;\n const {\n blendState: { targetBlendState },\n depthState,\n stencilState\n } = engine._lastRenderState;\n let clearFlag = 0;\n if (clearFlags & CameraClearFlags.Color) {\n clearFlag |= gl.COLOR_BUFFER_BIT;\n\n const lc = this._lastClearColor;\n const { r, g, b, a } = clearColor;\n if (clearColor && (r !== lc.r || g !== lc.g || b !== lc.b || a !== lc.a)) {\n gl.clearColor(r, g, b, a);\n lc.set(r, g, b, a);\n }\n\n if (targetBlendState.colorWriteMask !== ColorWriteMask.All) {\n gl.colorMask(true, true, true, true);\n targetBlendState.colorWriteMask = ColorWriteMask.All;\n }\n }\n if (clearFlags & CameraClearFlags.Depth) {\n clearFlag |= gl.DEPTH_BUFFER_BIT;\n if (depthState.writeEnabled !== true) {\n gl.depthMask(true);\n depthState.writeEnabled = true;\n }\n }\n if (clearFlags & CameraClearFlags.Stencil) {\n clearFlag |= gl.STENCIL_BUFFER_BIT;\n if (stencilState.writeMask !== 0xff) {\n gl.stencilMask(0xff);\n stencilState.writeMask = 0xff;\n }\n }\n gl.clear(clearFlag);\n }\n\n drawPrimitive(primitive: Mesh, subPrimitive: SubMesh, shaderProgram: any) {\n // todo: VAO not support morph animation\n if (primitive) {\n //@ts-ignore\n primitive._draw(shaderProgram, subPrimitive);\n } else {\n Logger.error(\"draw primitive failed.\");\n }\n }\n\n activeRenderTarget(renderTarget: RenderTarget, viewport: Vector4, mipLevel: number) {\n const gl = this._gl;\n let bufferWidth: number, bufferHeight: number;\n if (renderTarget) {\n /** @ts-ignore */\n (renderTarget._platformRenderTarget as GLRenderTarget)?._activeRenderTarget();\n bufferWidth = renderTarget.width >> mipLevel;\n bufferHeight = renderTarget.height >> mipLevel;\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n bufferWidth = gl.drawingBufferWidth;\n bufferHeight = gl.drawingBufferHeight;\n }\n const width = bufferWidth * viewport.z;\n const height = bufferHeight * viewport.w;\n const x = viewport.x * bufferWidth;\n const y = bufferHeight - viewport.y * bufferHeight - height;\n this.viewport(x, y, width, height);\n this.scissor(x, y, width, height);\n }\n\n activeTexture(textureID: number): void {\n if (this._activeTextureID !== textureID) {\n this._gl.activeTexture(textureID);\n this._activeTextureID = textureID;\n }\n }\n\n bindTexture(texture: GLTexture): void {\n const index = this._activeTextureID - this._gl.TEXTURE0;\n if (this._activeTextures[index] !== texture) {\n this._gl.bindTexture(texture._target, texture._glTexture);\n this._activeTextures[index] = texture;\n }\n }\n\n setGlobalDepthBias(bias: number, slopeBias: number): void {\n const gl = this._gl;\n const enable = bias !== 0 || slopeBias !== 0;\n if (enable) {\n gl.enable(gl.POLYGON_OFFSET_FILL);\n gl.polygonOffset(slopeBias, bias);\n } else {\n gl.disable(gl.POLYGON_OFFSET_FILL);\n }\n this._enableGlobalDepthBias = enable;\n }\n\n flush(): void {\n this._gl.flush();\n }\n\n destroy() {}\n}\n","import { Engine } from \"@galacean/engine-core\";\nimport { WebCanvas } from \"./WebCanvas\";\nimport { WebGLRenderer, WebGLRendererOptions } from \"./WebGLRenderer\";\n\ntype OffscreenCanvas = any;\n\n/**\n * WebGL platform engine,support includes WebGL1.0 and WebGL2.0.\n */\nexport class WebGLEngine extends Engine {\n /**\n * Create an engine suitable for the WebGL platform.\n * @param canvas - Native web canvas\n * @param webGLRendererOptions - WebGL renderer options\n */\n constructor(canvas: string | HTMLCanvasElement | OffscreenCanvas, webGLRendererOptions?: WebGLRendererOptions) {\n const webCanvas = new WebCanvas(\n <HTMLCanvasElement | OffscreenCanvas>(typeof canvas === \"string\" ? document.getElementById(canvas) : canvas)\n );\n const hardwareRenderer = new WebGLRenderer(webGLRendererOptions);\n super(webCanvas, hardwareRenderer);\n }\n\n /**\n * Web canvas.\n */\n get canvas(): WebCanvas {\n return this._canvas as WebCanvas;\n }\n}\n"],"names":["GLCompressedTextureInternalFormat","RGBA_ASTC_4X4_KHR","RGBA_ASTC_5X4_KHR","RGBA_ASTC_5X5_KHR","RGBA_ASTC_6X5_KHR","RGBA_ASTC_6X6_KHR","RGBA_ASTC_8X5_KHR","RGBA_ASTC_8X6_KHR","RGBA_ASTC_8X8_KHR","RGBA_ASTC_10X5_KHR","RGBA_ASTC_10X6_KHR","RGBA_ASTC_10X8_KHR","RGBA_ASTC_10X10_KHR","RGBA_ASTC_12X10_KHR","RGBA_ASTC_12X12_KHR","SRGB8_ALPHA8_ASTC_4X4_KHR","SRGB8_ALPHA8_ASTC_5X4_KHR","SRGB8_ALPHA8_ASTC_5X5_KHR","SRGB8_ALPHA8_ASTC_6X5_KHR","SRGB8_ALPHA8_ASTC_6X6_KHR","SRGB8_ALPHA8_ASTC_8X5_KHR","SRGB8_ALPHA8_ASTC_8X6_KHR","SRGB8_ALPHA8_ASTC_8X8_KHR","SRGB8_ALPHA8_ASTC_10X5_KHR","SRGB8_ALPHA8_ASTC_10X6_KHR","SRGB8_ALPHA8_ASTC_10X8_KHR","SRGB8_ALPHA8_ASTC_10X10_KHR","SRGB8_ALPHA8_ASTC_12X10_KHR","SRGB8_ALPHA8_ASTC_12X12_KHR","RGB_ETC1_WEBGL","R11_EAC","SIGNED_R11_EAC","RG11_EAC","SIGNED_RG11_EAC","RGB8_ETC2","SRGB8_ETC2","RGB8_PUNCHTHROUGH_ALPHA1_ETC2","SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","RGBA8_ETC2_EAC","SRGB8_ALPHA8_ETC2_EAC","RGB_PVRTC_4BPPV1_IMG","RGB_PVRTC_2BPPV1_IMG","RGBA_PVRTC_4BPPV1_IMG","RGBA_PVRTC_2BPPV1_IMG","RGB_S3TC_DXT1_EXT","RGBA_S3TC_DXT1_EXT","RGBA_S3TC_DXT3_EXT","RGBA_S3TC_DXT5_EXT","WebCanvas","webCanvas","_scale","Vector2","width","height","_webCanvas","_width","_height","resizeByClientSize","pixelRatio","window","devicePixelRatio","OffscreenCanvas","clientWidth","clientHeight","setScale","x","y","set","scale","value","style","transformOrigin","transform","GLCapability","rhi","_rhi","capabilityList","Map","_init","_compatibleAllInterface","canIUse","capabilityType","get","canIUseCompressedTextureInternalFormat","internalType","GLCapabilityType","astc","etc1","etc","pvrtc","s3tc","cap","isWebGL2","requireExtension","bind","shaderVertexID","standardDerivatives","shaderTextureLod","elementIndexUint","depthTexture","vertexArrayObject","instancedArrays","multipleSample","drawBuffers","astc_webkit","etc_webkit","etc1_webkit","pvrtc_webkit","s3tc_webkit","textureFloat","textureHalfFloat","textureFloatLinear","textureHalfFloatLinear","WEBGL_colorBufferFloat","colorBufferFloat","colorBufferHalfFloat","textureFilterAnisotropic","_compatibleInterface","flatItem","gl","ext","glKey","extensionKey","extensionVal","UNSIGNED_INT_24_8","createVertexArray","deleteVertexArray","isVertexArray","bindVertexArray","drawArraysInstanced","drawElementsInstanced","vertexAttribDivisor","MAX_DRAW_BUFFERS","items","maxDrawBuffers","i","HALF_FLOAT","RGBA16F","RGBA32F","TEXTURE_MAX_ANISOTROPY_EXT","maxTextureSize","renderStates","getParameter","MAX_TEXTURE_SIZE","canUseFloatTextureBlendShape","MAX_VERTEX_TEXTURE_IMAGE_UNITS","canIUseMoreJoints","_maxDrawBuffers","maxAnisoLevel","_maxAnisoLevel","MAX_TEXTURE_MAX_ANISOTROPY_EXT","maxAntiAliasing","_maxAntiAliasing","canMSAA","MAX_SAMPLES","GLExtensions","_requireResult","undefined","getExtension","GLPrimitive","primitive","_attribLocArray","_vaoMap","_primitive","_canUseInstancedArrays","_useVao","_gl","draw","shaderProgram","subMesh","useVao","_enableVAO","_bufferStructChanged","_clearVAO","has","id","_registerVAO","vao","_bindBufferAndAttrib","_indexBufferBinding","_instanceCount","_glIndexType","_glIndexByteCount","topology","start","count","drawElements","_nativeBuffer","buffer","bindBuffer","ELEMENT_ARRAY_BUFFER","drawArrays","Logger","error","_disableAttrib","destroy","vertexBufferBindings","_vertexBufferBindings","length","attributeLocation","attributes","_vertexElementMap","vbo","lastBoundVbo","name","loc","element","bindingIndex","stride","ARRAY_BUFFER","enableVertexAttribArray","elementInfo","_glElementInfo","vertexAttribPointer","size","type","normalized","offset","instanceStepRate","push","warn","l","disableVertexAttribArray","forEach","clear","GLRenderStates","_parameters","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VERTEX_ATTRIBS","blendFuncSeparate","ONE","ZERO","blendEquationSeparate","FUNC_ADD","colorMask","blendColor","disable","SAMPLE_ALPHA_TO_COVERAGE","enable","DEPTH_TEST","depthFunc","LESS","depthMask","STENCIL_TEST","stencilFuncSeparate","FRONT","ALWAYS","BACK","stencilOpSeparate","KEEP","stencilMask","CULL_FACE","cullFace","POLYGON_OFFSET_FILL","polygonOffset","pname","GLTexture","texture","target","_texture","_isWebGL2","_target","_glTexture","createTexture","deleteTexture","_formatDetail","setUseDepthCompareMode","texParameteri","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","NONE","generateMipmaps","_bind","generateMipmap","bindTexture","isCube","internalFormat","baseFormat","dataType","mipmapCount","_isDepthTexture","LUMINANCE_ALPHA","ALPHA","texStorage2D","texImage2D","mipWidth","Math","max","mipHeight","faceIndex","TEXTURE_CUBE_MAP_POSITIVE_X","_getPixelBuffer","face","mipLevel","out","bindFramebuffer","FRAMEBUFFER","_getReadFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","readPixels","_setWrapMode","TextureWrapMode","Clamp","_isPowerOf2","CLAMP_TO_EDGE","Repeat","REPEAT","Mirror","MIRRORED_REPEAT","frameBuffer","_readFrameBuffer","createFramebuffer","v","_getFormatDetail","format","TextureFormat","R8G8B8","RGB8","RGB","UNSIGNED_BYTE","isCompressed","R8G8B8A8","RGBA8","RGBA","R4G4B4A4","RGBA4","UNSIGNED_SHORT_4_4_4_4","R5G5B5A1","RGB5_A1","UNSIGNED_SHORT_5_5_5_1","R5G6B5","RGB565","UNSIGNED_SHORT_5_6_5","Alpha8","LuminanceAlpha","R16G16B16A16","R32G32B32A32","FLOAT","DXT1","DXT5","ETC1_RGB","ETC2_RGB","ETC2_RGBA5","ETC2_RGBA8","PVRTC_RGB2","PVRTC_RGBA2","PVRTC_RGB4","PVRTC_RGBA4","ASTC_4x4","ASTC_5x5","ASTC_6x6","ASTC_8x8","ASTC_10x10","ASTC_12x12","Depth","DEPTH_COMPONENT32F","DEPTH_COMPONENT","UNSIGNED_SHORT","attachment","DEPTH_ATTACHMENT","DepthStencil","DEPTH32F_STENCIL8","DEPTH_STENCIL","FLOAT_32_UNSIGNED_INT_24_8_REV","DEPTH_STENCIL_ATTACHMENT","Depth16","DEPTH_COMPONENT16","Depth24Stencil8","DEPTH24_STENCIL8","Depth24","DEPTH_COMPONENT24","UNSIGNED_INT","Depth32","Depth32Stencil8","Error","_getRenderBufferDepthFormatDetail","RenderBufferDepthFormat","Stencil","STENCIL_INDEX8","STENCIL_ATTACHMENT","_supportTextureFormat","_supportRenderBufferColorFormat","isSupported","_supportRenderBufferDepthFormat","wrapModeU","TEXTURE_WRAP_S","wrapModeV","TEXTURE_WRAP_T","filterMode","_mipmap","TextureFilterMode","Point","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","NEAREST_MIPMAP_NEAREST","Bilinear","LINEAR","LINEAR_MIPMAP_NEAREST","Trilinear","LINEAR_MIPMAP_LINEAR","anisoLevel","texParameterf","depthCompareFunction","TextureDepthCompareFunction","Never","TEXTURE_COMPARE_FUNC","NEVER","Less","Equal","EQUAL","LessEqual","LEQUAL","Greater","GREATER","NotEqual","NOTEQUAL","GreaterEqual","GEQUAL","Always","GLRenderTarget","_MSAAColorRenderBuffers","_curMipLevel","_colorTextures","_depth","isDepthTexture","Texture","n","_format","some","TextureCube","capability","antiAliasing","_antiAliasing","_frameBuffer","_bindMainFBO","_MSAAFrameBuffer","_bindMSAAFBO","setRenderTargetInfo","colorTexture","getColorTexture","mipChanged","_platformTexture","platformTexture","bindRenderbuffer","RENDERBUFFER","_depthRenderBuffer","renderbufferStorage","_activeRenderTarget","blitRenderTarget","mask","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","colorTextureCount","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","textureIndex","_blitDrawBuffers","readBuffer","blitFramebuffer","deleteFramebuffer","deleteRenderbuffer","_MSAADepthRenderBuffer","Array","_oriDrawBuffers","depthRenderBuffer","createRenderbuffer","framebufferRenderbuffer","MSAADepthRenderBuffer","MSAAColorRenderBuffer","renderbufferStorageMultisample","_checkFrameBuffer","e","checkFramebufferStatus","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","GLTexture2D","texture2D","_compressedMipFilled","_mipmapCount","_getMipmapCount","setPixelBuffer","colorBuffer","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","mipBit","compressedTexSubImage2D","compressedTexImage2D","texSubImage2D","setImageSource","imageSource","flipY","premultiplyAlpha","getPixelBuffer","GLTexture2DArray","texture2DArray","TEXTURE_2D_ARRAY","texStorage3D","offsetIndex","compressedTexSubImage3D","texSubImage3D","elementIndex","formatDetail","framebufferTextureLayer","GLTextureCube","textureCube","TEXTURE_CUBE_MAP","_compressedFaceFilled","mipSize","WebGLMode","Auto","WebGL2","WebGL1","WebGLRenderer","initializeOptions","_enableGlobalDepthBias","_activeTextures","_lastViewport","Vector4","_lastScissor","_lastClearColor","Color","_scissorEnable","options","webGLMode","alpha","stencil","_forceFlush","_maxAllowSkinUniformVectorCount","SystemInfo","platform","Platform","IPhone","IPad","version","operatingSystem","match","majorVersion","parseInt","minorVersion","_options","init","canvas","getContext","deleteQuery","_activeTextureID","TEXTURE0","_renderStates","_extensions","_capability","activeTexture","debugRenderInfo","_renderer","UNMASKED_RENDERER_WEBGL","createPlatformPrimitive","createPlatformTexture2D","createPlatformTexture2DArray","createPlatformTextureCube","createPlatformRenderTarget","viewport","lastViewport","z","w","scissor","lastScissor","SCISSOR_TEST","r","g","b","a","clearRenderTarget","engine","clearFlags","clearColor","_lastRenderState","blendState","targetBlendState","depthState","stencilState","clearFlag","CameraClearFlags","lc","colorWriteMask","ColorWriteMask","All","writeEnabled","STENCIL_BUFFER_BIT","writeMask","drawPrimitive","subPrimitive","_draw","activeRenderTarget","renderTarget","bufferWidth","bufferHeight","_platformRenderTarget","drawingBufferWidth","drawingBufferHeight","textureID","index","setGlobalDepthBias","bias","slopeBias","flush","renderer","WebGLEngine","webGLRendererOptions","document","getElementById","hardwareRenderer","_canvas","Engine"],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sources":["../src/type.ts","../src/WebCanvas.ts","../src/GLCapability.ts","../src/GLExtensions.ts","../src/GLPrimitive.ts","../src/GLRenderStates.ts","../src/GLTexture.ts","../src/GLRenderTarget.ts","../src/GLTexture2D.ts","../src/GLTexture2DArray.ts","../src/GLTextureCube.ts","../src/WebGLRenderer.ts","../src/WebGLEngine.ts"],"sourcesContent":["/**\n * Smoothing plug-in.\n * */\nexport interface WebGLExtension {\n MAX_DRAW_BUFFERS: GLenum;\n UNSIGNED_INT_24_8: GLenum;\n MAX_SAMPLES: GLenum;\n RGBA8: GLenum;\n RGBA16F: GLenum;\n RGBA32F: GLenum;\n DEPTH_COMPONENT32F: GLenum;\n READ_FRAMEBUFFER: GLenum;\n DRAW_FRAMEBUFFER: GLenum;\n\n createVertexArray(): WebGLVertexArrayObject | null;\n deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void;\n isVertexArray(vertexArray: WebGLVertexArrayObject | null): GLboolean;\n bindVertexArray(array: WebGLVertexArrayObject | null): void;\n\n renderbufferStorageMultisample(\n target: GLenum,\n samples: GLsizei,\n internalformat: GLenum,\n width: GLsizei,\n height: GLsizei\n ): void;\n blitFramebuffer(\n srcX0: GLint,\n srcY0: GLint,\n srcX1: GLint,\n srcY1: GLint,\n dstX0: GLint,\n dstY0: GLint,\n dstX1: GLint,\n dstY1: GLint,\n mask: GLbitfield,\n filter: GLenum\n ): void;\n\n drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void;\n drawElementsInstanced(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei): void;\n vertexAttribDivisor(index: GLuint, divisor: GLuint): void;\n drawBuffers(buffers: Iterable<GLenum>): void;\n}\n\nexport interface TextureFormatDetail {\n internalFormat: GLint;\n baseFormat?: GLenum;\n dataType?: GLenum;\n isCompressed: boolean;\n attachment?: GLenum;\n}\n\n/**\n * @deprecated\n */\nexport enum GLCompressedTextureInternalFormat {\n // astc\n RGBA_ASTC_4X4_KHR = 0x93b0,\n RGBA_ASTC_5X4_KHR = 0x93b1,\n RGBA_ASTC_5X5_KHR = 0x93b2,\n RGBA_ASTC_6X5_KHR = 0x93b3,\n RGBA_ASTC_6X6_KHR = 0x93b4,\n RGBA_ASTC_8X5_KHR = 0x93b5,\n RGBA_ASTC_8X6_KHR = 0x93b6,\n RGBA_ASTC_8X8_KHR = 0x93b7,\n RGBA_ASTC_10X5_KHR = 0x93b8,\n RGBA_ASTC_10X6_KHR = 0x93b9,\n RGBA_ASTC_10X8_KHR = 0x93ba,\n RGBA_ASTC_10X10_KHR = 0x93bb,\n RGBA_ASTC_12X10_KHR = 0x93bc,\n RGBA_ASTC_12X12_KHR = 0x93bd,\n SRGB8_ALPHA8_ASTC_4X4_KHR = 0x93d0,\n SRGB8_ALPHA8_ASTC_5X4_KHR = 0x93d1,\n SRGB8_ALPHA8_ASTC_5X5_KHR = 0x93d2,\n SRGB8_ALPHA8_ASTC_6X5_KHR = 0x93d3,\n SRGB8_ALPHA8_ASTC_6X6_KHR = 0x93d4,\n SRGB8_ALPHA8_ASTC_8X5_KHR = 0x93d5,\n SRGB8_ALPHA8_ASTC_8X6_KHR = 0x93d6,\n SRGB8_ALPHA8_ASTC_8X8_KHR = 0x93d7,\n SRGB8_ALPHA8_ASTC_10X5_KHR = 0x93d8,\n SRGB8_ALPHA8_ASTC_10X6_KHR = 0x93d9,\n SRGB8_ALPHA8_ASTC_10X8_KHR = 0x93da,\n SRGB8_ALPHA8_ASTC_10X10_KHR = 0x93db,\n SRGB8_ALPHA8_ASTC_12X10_KHR = 0x93dc,\n SRGB8_ALPHA8_ASTC_12X12_KHR = 0x93dd,\n\n // etc1\n RGB_ETC1_WEBGL = 0x8d64,\n\n // etc2\n R11_EAC = 0x9270,\n SIGNED_R11_EAC = 0x9271,\n RG11_EAC = 0x9272,\n SIGNED_RG11_EAC = 0x9273,\n RGB8_ETC2 = 0x9274,\n SRGB8_ETC2 = 0x9275,\n RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,\n SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277,\n RGBA8_ETC2_EAC = 0x9278,\n SRGB8_ALPHA8_ETC2_EAC = 0x9279,\n\n // pvrtc\n RGB_PVRTC_4BPPV1_IMG = 0x8c00,\n RGB_PVRTC_2BPPV1_IMG = 0x8c01,\n RGBA_PVRTC_4BPPV1_IMG = 0x8c02,\n RGBA_PVRTC_2BPPV1_IMG = 0x8c03,\n\n // s3tc\n RGB_S3TC_DXT1_EXT = 0x83f0,\n RGBA_S3TC_DXT1_EXT = 0x83f1,\n RGBA_S3TC_DXT3_EXT = 0x83f2,\n RGBA_S3TC_DXT5_EXT = 0x83f3\n}\n","import { Canvas } from \"@galacean/engine-core\";\nimport { Vector2 } from \"@galacean/engine-math\";\n\ntype OffscreenCanvas = any;\n\n/**\n * The canvas used on the web, which can support HTMLCanvasElement and OffscreenCanvas.\n */\nexport class WebCanvas implements Canvas {\n _webCanvas: HTMLCanvasElement | OffscreenCanvas;\n\n private _width: number;\n private _height: number;\n private _scale: Vector2 = new Vector2();\n\n /**\n * @inheritdoc\n */\n get width(): number {\n return this._width;\n }\n\n set width(value: number) {\n if (this._width !== value) {\n this._webCanvas.width = value;\n this._width = value;\n }\n }\n\n /**\n * @inheritdoc\n */\n get height(): number {\n return this._height;\n }\n\n set height(value: number) {\n if (this._height !== value) {\n this._webCanvas.height = value;\n this._height = value;\n }\n }\n\n /**\n * The scale of canvas, the value is visible width/height divide the render width/height.\n * @remarks Need to re-assign after modification to ensure that the modification takes effect.\n */\n get scale(): Vector2 {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n this._scale.set(\n (webCanvas.clientWidth * devicePixelRatio) / webCanvas.width,\n (webCanvas.clientHeight * devicePixelRatio) / webCanvas.height\n );\n }\n return this._scale;\n }\n\n set scale(value: Vector2) {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n webCanvas.style.transformOrigin = `left top`;\n webCanvas.style.transform = `scale(${value.x}, ${value.y})`;\n }\n }\n\n /**\n * Resize the rendering size according to the clientWidth and clientHeight of the canvas.\n * @param pixelRatio - Pixel ratio\n */\n resizeByClientSize(pixelRatio: number = window.devicePixelRatio): void {\n const webCanvas = this._webCanvas;\n if (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas)) {\n this.width = webCanvas.clientWidth * pixelRatio;\n this.height = webCanvas.clientHeight * pixelRatio;\n }\n }\n\n /**\n * Create a web canvas.\n * @param webCanvas - Web native canvas\n */\n constructor(webCanvas: HTMLCanvasElement | OffscreenCanvas) {\n const width = webCanvas.width;\n const height = webCanvas.height;\n this._webCanvas = webCanvas;\n this._width = width;\n this._height = height;\n }\n\n /**\n * Set scale.\n * @param x - Scale along the X axis\n * @param y - Scale along the Y axis\n */\n setScale(x: number, y: number): void {\n this._scale.set(x, y);\n this.scale = this._scale;\n }\n}\n","import { GLCapabilityType } from \"@galacean/engine-core\";\nimport { GLCompressedTextureInternalFormat } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\ntype extensionKey = string;\n\n/**\n * GL capability.\n */\nexport class GLCapability {\n private _maxDrawBuffers: number;\n private _maxAnisoLevel: number;\n private _maxAntiAliasing: number;\n\n _rhi: WebGLRenderer;\n capabilityList: Map<GLCapabilityType, boolean>;\n\n get maxTextureSize(): boolean {\n return this.rhi.renderStates.getParameter(this.rhi.gl.MAX_TEXTURE_SIZE);\n }\n\n get canUseFloatTextureBlendShape(): boolean {\n return (\n this.canIUse(GLCapabilityType.shaderVertexID) &&\n this.canIUse(GLCapabilityType.textureFloat) &&\n this.rhi.renderStates.getParameter(this.rhi.gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) > 0\n );\n }\n\n /**\n * Whether can use more joints.\n */\n get canIUseMoreJoints(): boolean {\n return (\n this.canIUse(GLCapabilityType.textureFloat) &&\n this.rhi.renderStates.getParameter(this.rhi.gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) > 0\n );\n }\n\n get maxDrawBuffers() {\n if (!this._maxDrawBuffers) {\n if (this.canIUse(GLCapabilityType.drawBuffers)) {\n this._maxDrawBuffers = this._rhi.gl.getParameter(this._rhi.gl.MAX_DRAW_BUFFERS);\n } else {\n this._maxDrawBuffers = 1;\n }\n }\n return this._maxDrawBuffers;\n }\n\n /**\n * Max anisoLevel.\n */\n get maxAnisoLevel(): number {\n if (!this._maxAnisoLevel) {\n const ext = this._rhi.requireExtension(GLCapabilityType.textureFilterAnisotropic);\n this._maxAnisoLevel = ext ? this._rhi.gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1;\n }\n return this._maxAnisoLevel;\n }\n\n /**\n * Max MSAA count.\n */\n get maxAntiAliasing(): number {\n if (!this._maxAntiAliasing) {\n const gl = this._rhi.gl;\n const canMSAA = this.canIUse(GLCapabilityType.multipleSample);\n\n this._maxAntiAliasing = canMSAA ? gl.getParameter(gl.MAX_SAMPLES) : 1;\n }\n return this._maxAntiAliasing;\n }\n\n get rhi() {\n return this._rhi;\n }\n\n constructor(rhi: WebGLRenderer) {\n this._rhi = rhi;\n this.capabilityList = new Map();\n\n this._init();\n this._compatibleAllInterface();\n }\n\n /**\n * Check device capabilities.\n */\n canIUse(capabilityType: GLCapabilityType): boolean {\n return this.capabilityList.get(capabilityType);\n }\n\n /**\n * Check if can use some compressed texture format.\n */\n canIUseCompressedTextureInternalFormat(internalType: GLCompressedTextureInternalFormat): boolean {\n const {\n // astc\n RGBA_ASTC_4X4_KHR,\n RGBA_ASTC_12X12_KHR,\n SRGB8_ALPHA8_ASTC_4X4_KHR,\n SRGB8_ALPHA8_ASTC_12X12_KHR,\n // etc1\n RGB_ETC1_WEBGL,\n // etc\n R11_EAC,\n SRGB8_ALPHA8_ETC2_EAC,\n // pvrtc\n RGB_PVRTC_4BPPV1_IMG,\n RGBA_PVRTC_2BPPV1_IMG,\n // s3tc\n RGB_S3TC_DXT1_EXT,\n RGBA_S3TC_DXT5_EXT\n } = GLCompressedTextureInternalFormat;\n if (\n (internalType >= RGBA_ASTC_4X4_KHR && RGBA_ASTC_12X12_KHR <= RGBA_ASTC_12X12_KHR) ||\n (internalType >= SRGB8_ALPHA8_ASTC_4X4_KHR && internalType <= SRGB8_ALPHA8_ASTC_12X12_KHR)\n ) {\n return this.canIUse(GLCapabilityType.astc);\n } else if (internalType === RGB_ETC1_WEBGL) {\n return this.canIUse(GLCapabilityType.etc1);\n } else if (internalType >= R11_EAC && internalType <= SRGB8_ALPHA8_ETC2_EAC) {\n return this.canIUse(GLCapabilityType.etc);\n } else if (internalType >= RGB_PVRTC_4BPPV1_IMG && internalType <= RGBA_PVRTC_2BPPV1_IMG) {\n return this.canIUse(GLCapabilityType.pvrtc);\n } else if (internalType >= RGB_S3TC_DXT1_EXT && internalType <= RGBA_S3TC_DXT5_EXT) {\n return this.canIUse(GLCapabilityType.s3tc);\n }\n return false;\n }\n\n /**\n * Init capabilities.\n */\n private _init() {\n const cap = this.capabilityList;\n const { isWebGL2 } = this.rhi;\n const requireExtension = this.rhi.requireExtension.bind(this.rhi);\n\n const {\n shaderVertexID,\n standardDerivatives,\n shaderTextureLod,\n elementIndexUint,\n depthTexture,\n vertexArrayObject,\n instancedArrays,\n multipleSample,\n drawBuffers,\n\n astc,\n astc_webkit,\n etc,\n etc_webkit,\n etc1,\n etc1_webkit,\n pvrtc,\n pvrtc_webkit,\n s3tc,\n s3tc_webkit,\n\n textureFloat,\n textureHalfFloat,\n textureFloatLinear,\n textureHalfFloatLinear,\n WEBGL_colorBufferFloat,\n colorBufferFloat,\n colorBufferHalfFloat,\n textureFilterAnisotropic\n } = GLCapabilityType;\n cap.set(shaderVertexID, isWebGL2);\n cap.set(standardDerivatives, isWebGL2 || !!requireExtension(standardDerivatives));\n cap.set(shaderTextureLod, isWebGL2 || !!requireExtension(shaderTextureLod));\n cap.set(elementIndexUint, isWebGL2 || !!requireExtension(elementIndexUint));\n cap.set(depthTexture, isWebGL2 || !!requireExtension(depthTexture));\n cap.set(vertexArrayObject, isWebGL2 || !!requireExtension(vertexArrayObject));\n cap.set(instancedArrays, isWebGL2 || !!requireExtension(instancedArrays));\n cap.set(multipleSample, isWebGL2);\n cap.set(drawBuffers, isWebGL2 || !!requireExtension(drawBuffers));\n cap.set(textureFloat, isWebGL2 || !!requireExtension(textureFloat));\n cap.set(textureHalfFloat, isWebGL2 || !!requireExtension(textureHalfFloat));\n cap.set(textureFloatLinear, !!requireExtension(textureFloatLinear));\n cap.set(textureHalfFloatLinear, isWebGL2 || !!requireExtension(textureHalfFloatLinear));\n cap.set(\n colorBufferFloat,\n (isWebGL2 && !!requireExtension(colorBufferFloat)) || !!requireExtension(WEBGL_colorBufferFloat)\n );\n cap.set(\n colorBufferHalfFloat,\n (isWebGL2 && !!requireExtension(colorBufferFloat)) || !!requireExtension(colorBufferHalfFloat)\n );\n cap.set(textureFilterAnisotropic, !!requireExtension(textureFilterAnisotropic));\n\n cap.set(astc, !!(requireExtension(astc) || requireExtension(astc_webkit)));\n cap.set(etc, !!(requireExtension(etc) || requireExtension(etc_webkit)));\n cap.set(etc1, !!(requireExtension(etc1) || requireExtension(etc1_webkit)));\n cap.set(pvrtc, !!(requireExtension(pvrtc) || requireExtension(pvrtc_webkit)));\n cap.set(s3tc, !!(requireExtension(s3tc) || requireExtension(s3tc_webkit)));\n }\n\n /**\n * If there are extensions that can supplement this ability, smooth out the difference.\n * @example\n * compatible(GLCapabilityType.depthTexture,{\n * UNSIGNED_INT_24_8: \"UNSIGNED_INT_24_8_WEBGL\"\n * })\n * gl.UNSIGNED_INT_24_8 = ext.UNSIGNED_INT_24_8_WEBGL\n */\n private _compatibleInterface(capabilityType: GLCapabilityType, flatItem: { [glKey: string]: extensionKey }) {\n const rhi = this.rhi;\n const gl = rhi.gl;\n let ext = null;\n\n if ((ext = rhi.requireExtension(capabilityType))) {\n for (let glKey in flatItem) {\n const extensionKey = flatItem[glKey];\n const extensionVal = ext[extensionKey];\n\n // Mini game hack the native function,use “.bind” to smooth out if is “Funcion”.\n if (extensionVal?.bind) {\n gl[glKey] = extensionVal.bind(ext);\n } else {\n gl[glKey] = extensionVal;\n }\n }\n }\n }\n\n private _compatibleAllInterface() {\n const {\n depthTexture,\n vertexArrayObject,\n instancedArrays,\n drawBuffers,\n textureFilterAnisotropic,\n textureHalfFloat,\n colorBufferHalfFloat,\n WEBGL_colorBufferFloat\n } = GLCapabilityType;\n const { isWebGL2 } = this.rhi;\n\n if (!isWebGL2) {\n this._compatibleInterface(depthTexture, {\n UNSIGNED_INT_24_8: \"UNSIGNED_INT_24_8_WEBGL\"\n });\n this._compatibleInterface(vertexArrayObject, {\n createVertexArray: \"createVertexArrayOES\",\n deleteVertexArray: \"deleteVertexArrayOES\",\n isVertexArray: \"isVertexArrayOES\",\n bindVertexArray: \"bindVertexArrayOES\"\n });\n this._compatibleInterface(instancedArrays, {\n drawArraysInstanced: \"drawArraysInstancedANGLE\",\n drawElementsInstanced: \"drawElementsInstancedANGLE\",\n vertexAttribDivisor: \"vertexAttribDivisorANGLE\"\n });\n this._compatibleInterface(drawBuffers, {\n MAX_DRAW_BUFFERS: \"MAX_DRAW_BUFFERS_WEBGL\"\n });\n const items = {};\n if (this.canIUse(GLCapabilityType.drawBuffers)) {\n const maxDrawBuffers = this.maxDrawBuffers;\n for (let i = 0; i < maxDrawBuffers; i++) {\n i != 0 && (items[`COLOR_ATTACHMENT${i}`] = `COLOR_ATTACHMENT${i}_WEBGL`);\n items[`DRAW_BUFFER${i}`] = `DRAW_BUFFER${i}_WEBGL`;\n }\n this._compatibleInterface(drawBuffers, {\n drawBuffers: \"drawBuffersWEBGL\",\n ...items\n });\n }\n this._compatibleInterface(textureHalfFloat, {\n HALF_FLOAT: \"HALF_FLOAT_OES\"\n });\n this._compatibleInterface(colorBufferHalfFloat, {\n RGBA16F: \"RBGA16F_EXT\"\n });\n this._compatibleInterface(WEBGL_colorBufferFloat, {\n RGBA32F: \"RBGA32F_EXT\"\n });\n }\n\n this._compatibleInterface(textureFilterAnisotropic, {\n TEXTURE_MAX_ANISOTROPY_EXT: \"TEXTURE_MAX_ANISOTROPY_EXT\"\n });\n }\n}\n","import { WebGLRenderer } from \"./WebGLRenderer\";\nimport { GLCapabilityType } from \"@galacean/engine-core\";\n\n/**\n * GLContext extension.\n */\nexport class GLExtensions {\n private rhi: WebGLRenderer;\n private _requireResult;\n\n constructor(rhi: WebGLRenderer) {\n this.rhi = rhi;\n this._requireResult = {};\n }\n\n /**\n * Require an extension.\n */\n requireExtension(ext: GLCapabilityType) {\n if (this._requireResult[ext] !== undefined) {\n return this._requireResult[ext];\n }\n\n this._requireResult[ext] = this.rhi.gl.getExtension(ext);\n return this._requireResult[ext];\n }\n}\n","import { GLCapabilityType, Logger, Mesh, SubMesh } from \"@galacean/engine-core\";\nimport { IPlatformPrimitive } from \"@galacean/engine-design\";\nimport { WebGLExtension } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Improvement of VAO:\n * 1) WebGL2.0 must support VAO, almost all devices support vao extensions in webgl1.0, we can use PollyFill,only keep VAO mode.\n */\n\n/**\n * @internal\n * GL platform primitive.\n */\nexport class GLPrimitive implements IPlatformPrimitive {\n private _attribLocArray: number[] = [];\n private readonly _primitive: Mesh;\n private readonly _canUseInstancedArrays: boolean;\n\n private _gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n private _vaoMap: Map<number, WebGLVertexArrayObject> = new Map();\n private readonly _useVao: boolean;\n\n constructor(rhi: WebGLRenderer, primitive: Mesh) {\n this._primitive = primitive;\n this._canUseInstancedArrays = rhi.canIUse(GLCapabilityType.instancedArrays);\n this._useVao = rhi.canIUse(GLCapabilityType.vertexArrayObject);\n this._gl = rhi.gl;\n }\n\n /**\n * Draw the primitive.\n */\n draw(shaderProgram: any, subMesh: SubMesh): void {\n const gl = this._gl;\n const primitive = this._primitive;\n // @ts-ignore\n const useVao = this._useVao && primitive._enableVAO;\n\n if (useVao) {\n // @ts-ignore\n if (primitive._bufferStructChanged) {\n this._clearVAO();\n }\n if (!this._vaoMap.has(shaderProgram.id)) {\n this._registerVAO(shaderProgram);\n }\n const vao = this._vaoMap.get(shaderProgram.id);\n gl.bindVertexArray(vao);\n } else {\n this._bindBufferAndAttrib(shaderProgram);\n }\n\n // @ts-ignore\n const { _indexBufferBinding, _instanceCount, _glIndexType, _glIndexByteCount } = primitive;\n const { topology, start, count } = subMesh;\n\n if (!_instanceCount) {\n if (_indexBufferBinding) {\n if (useVao) {\n gl.drawElements(topology, count, _glIndexType, start * _glIndexByteCount);\n } else {\n const { _nativeBuffer } = _indexBufferBinding.buffer;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _nativeBuffer);\n gl.drawElements(topology, count, _glIndexType, start * _glIndexByteCount);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n } else {\n gl.drawArrays(topology, start, count);\n }\n } else {\n if (this._canUseInstancedArrays) {\n if (_indexBufferBinding) {\n if (useVao) {\n gl.drawElementsInstanced(topology, count, _glIndexType, start * _glIndexByteCount, _instanceCount);\n } else {\n const { _nativeBuffer } = _indexBufferBinding.buffer;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _nativeBuffer);\n gl.drawElementsInstanced(topology, count, _glIndexType, start * _glIndexByteCount, _instanceCount);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n } else {\n gl.drawArraysInstanced(topology, start, count, _instanceCount);\n }\n } else {\n Logger.error(\"ANGLE_instanced_arrays extension is not supported\");\n }\n }\n\n // Unbind\n if (useVao) {\n gl.bindVertexArray(null);\n } else {\n this._disableAttrib();\n }\n }\n\n destroy(): void {\n this._useVao && this._clearVAO();\n }\n\n /**\n * Bind buffer and attribute.\n */\n private _bindBufferAndAttrib(shaderProgram: any): void {\n const gl = this._gl;\n const primitive = this._primitive;\n // @ts-ignore\n const vertexBufferBindings = primitive._vertexBufferBindings;\n\n this._attribLocArray.length = 0;\n const attributeLocation = shaderProgram.attributeLocation;\n // @ts-ignore\n const attributes = primitive._vertexElementMap;\n\n let vbo: WebGLBuffer;\n let lastBoundVbo: WebGLBuffer;\n\n for (const name in attributeLocation) {\n const loc = attributeLocation[name];\n if (loc === -1) continue;\n\n const element = attributes[name];\n if (element) {\n const { buffer, stride } = vertexBufferBindings[element.bindingIndex];\n vbo = buffer._nativeBuffer;\n // prevent binding the vbo which already bound at the last loop, e.g. a buffer with multiple attributes.\n if (lastBoundVbo !== vbo) {\n lastBoundVbo = vbo;\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n }\n\n gl.enableVertexAttribArray(loc);\n const elementInfo = element._glElementInfo;\n gl.vertexAttribPointer(loc, elementInfo.size, elementInfo.type, elementInfo.normalized, stride, element.offset);\n if (this._canUseInstancedArrays) {\n gl.vertexAttribDivisor(loc, element.instanceStepRate);\n }\n this._attribLocArray.push(loc);\n } else {\n Logger.warn(\"vertex attribute not found: \" + name);\n }\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n }\n\n private _disableAttrib() {\n const gl = this._gl;\n for (let i = 0, l = this._attribLocArray.length; i < l; i++) {\n gl.disableVertexAttribArray(this._attribLocArray[i]);\n }\n }\n\n private _registerVAO(shaderProgram: any): void {\n const gl = this._gl;\n const vao = gl.createVertexArray();\n\n /** register VAO */\n gl.bindVertexArray(vao);\n\n // @ts-ignore\n const { _indexBufferBinding } = this._primitive;\n if (_indexBufferBinding) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, _indexBufferBinding.buffer._nativeBuffer);\n }\n this._bindBufferAndAttrib(shaderProgram);\n\n /** unbind */\n gl.bindVertexArray(null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n this._disableAttrib();\n\n this._vaoMap.set(shaderProgram.id, vao);\n }\n\n private _clearVAO(): void {\n const gl = this._gl;\n this._vaoMap.forEach((vao) => {\n gl.deleteVertexArray(vao);\n });\n this._vaoMap.clear();\n }\n}\n","/**\n * @private\n */\nexport class GLRenderStates {\n private _gl: WebGLRenderingContext;\n private _parameters = {};\n /**\n * @param {WebGLRenderingContext} gl\n */\n constructor(gl: WebGLRenderingContext) {\n this._gl = gl;\n this._parameters = {}; // current gl state parameters\n\n /** cache */\n this._parameters[gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS] = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n this._parameters[gl.MAX_VERTEX_UNIFORM_VECTORS] = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n this._parameters[gl.MAX_VERTEX_ATTRIBS] = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n this._parameters[gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS] = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\n this._parameters[gl.MAX_TEXTURE_SIZE] = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\n // init blend state same as BlendState default value.\n gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO);\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n gl.colorMask(true, true, true, true);\n gl.blendColor(0, 0, 0, 0);\n gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n // init depth state same as DepthState default value.\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LESS);\n gl.depthMask(true);\n\n // init stencil state same as StencilState default value.\n gl.disable(gl.STENCIL_TEST);\n gl.stencilFuncSeparate(gl.FRONT, gl.ALWAYS, 0, 0xff);\n gl.stencilFuncSeparate(gl.BACK, gl.ALWAYS, 0, 0xff);\n gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP);\n gl.stencilOpSeparate(gl.BACK, gl.KEEP, gl.KEEP, gl.KEEP);\n gl.stencilMask(0xff);\n\n // init raster state same as RasterState default value.\n gl.enable(gl.CULL_FACE);\n gl.cullFace(gl.BACK);\n gl.disable(gl.POLYGON_OFFSET_FILL);\n gl.polygonOffset(0, 0);\n }\n\n /**\n * Get a parameter.\n */\n getParameter(pname) {\n return this._parameters[pname];\n }\n}\n","import {\n GLCapabilityType,\n IPlatformTexture,\n Logger,\n RenderBufferDepthFormat,\n Texture,\n TextureCubeFace,\n TextureDepthCompareFunction,\n TextureFilterMode,\n TextureFormat,\n TextureWrapMode\n} from \"@galacean/engine-core\";\nimport { GLCompressedTextureInternalFormat, TextureFormatDetail } from \"./type\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture in WebGL platform.\n */\nexport class GLTexture implements IPlatformTexture {\n /** @internal */\n static _isPowerOf2(v: number): boolean {\n return (v & (v - 1)) === 0;\n }\n\n /**\n * Get more texture info from TextureFormat.\n * @internal\n */\n static _getFormatDetail(\n format: TextureFormat,\n gl: WebGLRenderingContext & WebGL2RenderingContext,\n isWebGL2: boolean\n ): TextureFormatDetail {\n switch (format) {\n case TextureFormat.R8G8B8:\n return {\n internalFormat: isWebGL2 ? gl.RGB8 : gl.RGB,\n baseFormat: gl.RGB,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R8G8B8A8:\n return {\n internalFormat: isWebGL2 ? gl.RGBA8 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R4G4B4A4:\n return {\n internalFormat: isWebGL2 ? gl.RGBA4 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_SHORT_4_4_4_4,\n isCompressed: false\n };\n case TextureFormat.R5G5B5A1:\n return {\n internalFormat: isWebGL2 ? gl.RGB5_A1 : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.UNSIGNED_SHORT_5_5_5_1,\n isCompressed: false\n };\n case TextureFormat.R5G6B5:\n return {\n internalFormat: isWebGL2 ? gl.RGB565 : gl.RGB,\n baseFormat: gl.RGB,\n dataType: gl.UNSIGNED_SHORT_5_6_5,\n isCompressed: false\n };\n case TextureFormat.Alpha8:\n return {\n internalFormat: gl.ALPHA,\n baseFormat: gl.ALPHA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.LuminanceAlpha:\n return {\n internalFormat: gl.LUMINANCE_ALPHA,\n baseFormat: gl.LUMINANCE_ALPHA,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false\n };\n case TextureFormat.R16G16B16A16:\n return {\n internalFormat: isWebGL2 ? gl.RGBA16F : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.HALF_FLOAT,\n isCompressed: false\n };\n case TextureFormat.R32G32B32A32:\n return {\n internalFormat: isWebGL2 ? gl.RGBA32F : gl.RGBA,\n baseFormat: gl.RGBA,\n dataType: gl.FLOAT,\n isCompressed: false\n };\n case TextureFormat.DXT1:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_S3TC_DXT1_EXT,\n isCompressed: true\n };\n case TextureFormat.DXT5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_S3TC_DXT5_EXT,\n isCompressed: true\n };\n case TextureFormat.ETC1_RGB:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_ETC1_WEBGL,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGB:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB8_ETC2,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGBA5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n isCompressed: true\n };\n case TextureFormat.ETC2_RGBA8:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA8_ETC2_EAC,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGB2:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_PVRTC_2BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGBA2:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_PVRTC_2BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGB4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGB_PVRTC_4BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.PVRTC_RGBA4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_PVRTC_4BPPV1_IMG,\n isCompressed: true\n };\n case TextureFormat.ASTC_4x4:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_4X4_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_5x5:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_5X5_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_6x6:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_6X6_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_8x8:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_8X8_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_10x10:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_10X10_KHR,\n isCompressed: true\n };\n case TextureFormat.ASTC_12x12:\n return {\n internalFormat: GLCompressedTextureInternalFormat.RGBA_ASTC_12X12_KHR,\n isCompressed: true\n };\n\n case TextureFormat.Depth:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT32F : gl.DEPTH_COMPONENT,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: isWebGL2 ? gl.FLOAT : gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.DepthStencil:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH32F_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: isWebGL2 ? gl.FLOAT_32_UNSIGNED_INT_24_8_REV : gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case TextureFormat.Depth16:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT16 : gl.DEPTH_COMPONENT,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth24Stencil8:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH24_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case TextureFormat.Depth24:\n return {\n internalFormat: gl.DEPTH_COMPONENT24,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_INT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth32:\n return {\n internalFormat: gl.DEPTH_COMPONENT32F,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.FLOAT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case TextureFormat.Depth32Stencil8:\n return {\n internalFormat: gl.DEPTH32F_STENCIL8,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.FLOAT_32_UNSIGNED_INT_24_8_REV,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n default:\n throw new Error(`this TextureFormat is not supported in Galacean Engine: ${format}`);\n }\n }\n\n /**\n * In WebGL 1, internalformat must be the same as baseFormat when call texImage2D.\n * @internal\n */\n static _getRenderBufferDepthFormatDetail(\n format: RenderBufferDepthFormat,\n gl: WebGLRenderingContext & WebGL2RenderingContext,\n isWebGL2: boolean\n ): TextureFormatDetail {\n switch (format) {\n case RenderBufferDepthFormat.Depth:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH_COMPONENT32F : gl.DEPTH_COMPONENT16,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: isWebGL2 ? gl.FLOAT : gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.DepthStencil:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH32F_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: isWebGL2 ? gl.FLOAT_32_UNSIGNED_INT_24_8_REV : gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Stencil:\n return {\n internalFormat: gl.STENCIL_INDEX8,\n baseFormat: gl.STENCIL_ATTACHMENT,\n dataType: gl.UNSIGNED_BYTE,\n isCompressed: false,\n attachment: gl.STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth16:\n return {\n internalFormat: gl.DEPTH_COMPONENT16,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_SHORT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth24Stencil8:\n return {\n internalFormat: isWebGL2 ? gl.DEPTH24_STENCIL8 : gl.DEPTH_STENCIL,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.UNSIGNED_INT_24_8,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth24:\n return {\n internalFormat: gl.DEPTH_COMPONENT24,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.UNSIGNED_INT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n case RenderBufferDepthFormat.Depth32:\n return {\n internalFormat: gl.DEPTH_COMPONENT32F,\n baseFormat: gl.DEPTH_COMPONENT,\n dataType: gl.FLOAT,\n isCompressed: false,\n attachment: gl.DEPTH_ATTACHMENT\n };\n\n case RenderBufferDepthFormat.Depth32Stencil8:\n return {\n internalFormat: gl.DEPTH32F_STENCIL8,\n baseFormat: gl.DEPTH_STENCIL,\n dataType: gl.FLOAT_32_UNSIGNED_INT_24_8_REV,\n isCompressed: false,\n attachment: gl.DEPTH_STENCIL_ATTACHMENT\n };\n default:\n throw new Error(`this TextureFormat is not supported in Galacean Engine: ${format}`);\n }\n }\n\n /**\n * Check whether the corresponding texture format is supported.\n * @internal\n */\n static _supportTextureFormat(format: TextureFormat, rhi: WebGLRenderer): boolean {\n switch (format) {\n case TextureFormat.R16G16B16A16:\n if (!rhi.canIUse(GLCapabilityType.textureHalfFloat)) {\n return false;\n }\n break;\n case TextureFormat.R32G32B32A32:\n if (!rhi.canIUse(GLCapabilityType.textureFloat)) {\n return false;\n }\n break;\n case TextureFormat.Depth16:\n case TextureFormat.Depth24Stencil8:\n case TextureFormat.Depth:\n case TextureFormat.DepthStencil:\n if (!rhi.canIUse(GLCapabilityType.depthTexture)) {\n return false;\n }\n break;\n case TextureFormat.Depth24:\n case TextureFormat.Depth32:\n case TextureFormat.Depth32Stencil8:\n return rhi.isWebGL2;\n }\n\n return true;\n }\n /**\n * @internal\n */\n static _supportRenderBufferColorFormat(format: TextureFormat, rhi: WebGLRenderer): boolean {\n let isSupported = true;\n\n switch (format) {\n case TextureFormat.R16G16B16A16:\n {\n if (!rhi.canIUse(GLCapabilityType.colorBufferHalfFloat) || !rhi.canIUse(GLCapabilityType.textureHalfFloat)) {\n isSupported = false;\n }\n }\n break;\n case TextureFormat.R32G32B32A32:\n {\n if (!rhi.canIUse(GLCapabilityType.colorBufferFloat) || !rhi.canIUse(GLCapabilityType.textureFloat)) {\n isSupported = false;\n }\n }\n break;\n }\n\n return isSupported;\n }\n\n /**\n * @internal\n */\n static _supportRenderBufferDepthFormat(format: RenderBufferDepthFormat, rhi: WebGLRenderer): boolean {\n if (!rhi.isWebGL2) {\n switch (format) {\n case RenderBufferDepthFormat.Depth24:\n case RenderBufferDepthFormat.Depth32:\n case RenderBufferDepthFormat.Depth32Stencil8:\n return false;\n }\n }\n\n return true;\n }\n\n /** @internal */\n _texture: Texture;\n /** @internal */\n _glTexture: WebGLTexture;\n /** @internal */\n _rhi: WebGLRenderer;\n /** @internal */\n _gl: WebGLRenderingContext & WebGL2RenderingContext;\n /** @internal */\n _isWebGL2: boolean;\n /** @internal */\n _target: GLenum; // gl.TEXTURE_2D | gl.TEXTURE_CUBE_MAP\n /** @internal */\n _formatDetail: TextureFormatDetail;\n\n /**\n * Wrapping mode for texture coordinate S.\n */\n set wrapModeU(value: TextureWrapMode) {\n this._bind();\n this._setWrapMode(value, this._gl.TEXTURE_WRAP_S);\n }\n\n /**\n * Wrapping mode for texture coordinate T.\n */\n set wrapModeV(value: TextureWrapMode) {\n this._bind();\n this._setWrapMode(value, this._gl.TEXTURE_WRAP_T);\n }\n\n /**\n * Filter mode for texture.\n */\n set filterMode(value: TextureFilterMode) {\n const gl = this._gl;\n const target = this._target;\n /** @ts-ignore */\n const { _mipmap } = this._texture;\n\n this._bind();\n switch (value) {\n case TextureFilterMode.Point:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.NEAREST_MIPMAP_NEAREST : gl.NEAREST);\n break;\n case TextureFilterMode.Bilinear:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.LINEAR_MIPMAP_NEAREST : gl.LINEAR);\n break;\n case TextureFilterMode.Trilinear:\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _mipmap ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\n break;\n }\n }\n\n /**\n * Anisotropic level for texture.\n */\n set anisoLevel(value: number) {\n const gl = this._gl as WebGLRenderingContext & WebGL2RenderingContext & EXT_texture_filter_anisotropic;\n\n this._bind();\n gl.texParameterf(this._target, gl.TEXTURE_MAX_ANISOTROPY_EXT, value);\n }\n\n set depthCompareFunction(value: TextureDepthCompareFunction) {\n this._bind();\n\n const gl = this._gl;\n switch (value) {\n case TextureDepthCompareFunction.Never:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.NEVER);\n break;\n case TextureDepthCompareFunction.Less:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.LESS);\n break;\n case TextureDepthCompareFunction.Equal:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.EQUAL);\n break;\n case TextureDepthCompareFunction.LessEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.LEQUAL);\n break;\n case TextureDepthCompareFunction.Greater:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.GREATER);\n break;\n case TextureDepthCompareFunction.NotEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.NOTEQUAL);\n break;\n case TextureDepthCompareFunction.GreaterEqual:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.GEQUAL);\n break;\n case TextureDepthCompareFunction.Always:\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_FUNC, gl.ALWAYS);\n break;\n }\n }\n /**\n * Create texture in WebGL platform.\n */\n constructor(rhi: WebGLRenderer, texture: Texture, target: GLenum) {\n this._texture = texture;\n this._rhi = rhi;\n this._gl = rhi.gl as WebGLRenderingContext & WebGL2RenderingContext;\n this._isWebGL2 = rhi.isWebGL2;\n this._target = target;\n this._glTexture = this._gl.createTexture();\n }\n\n /**\n * Destroy texture.\n */\n destroy() {\n this._gl.deleteTexture(this._glTexture);\n this._texture = null;\n this._glTexture = null;\n this._formatDetail = null;\n }\n\n /**\n * @internal\n */\n setUseDepthCompareMode(value: boolean): void {\n const gl = this._gl;\n gl.texParameteri(this._target, gl.TEXTURE_COMPARE_MODE, value ? gl.COMPARE_REF_TO_TEXTURE : gl.NONE);\n }\n\n /**\n * Generate multi-level textures based on the 0th level data.\n */\n generateMipmaps(): void {\n // @todo (1x1).generateMipmap() will flash back in uc.\n if (this._texture.width !== 1 || this._texture.height !== 1) {\n this._bind();\n this._gl.generateMipmap(this._target);\n }\n }\n\n protected _bind() {\n this._rhi.bindTexture(this);\n }\n\n /**\n * Pre-development mipmapping GPU memory.\n */\n protected _init(isCube: boolean): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n let { internalFormat, baseFormat, dataType } = this._formatDetail;\n // @ts-ignore\n const { mipmapCount, width, height, _isDepthTexture } = this._texture;\n\n this._bind();\n\n if (isWebGL2 && !(baseFormat === gl.LUMINANCE_ALPHA || baseFormat === gl.ALPHA)) {\n gl.texStorage2D(this._target, mipmapCount, internalFormat, width, height);\n } else {\n if (!isCube) {\n if (_isDepthTexture) {\n gl.texImage2D(this._target, 0, internalFormat, width, height, 0, baseFormat, dataType, null);\n } else {\n for (let i = 0; i < mipmapCount; i++) {\n const mipWidth = Math.max(1, width >> i);\n const mipHeight = Math.max(1, height >> i);\n gl.texImage2D(this._target, i, internalFormat, mipWidth, mipHeight, 0, baseFormat, dataType, null);\n }\n }\n } else {\n for (let i = 0; i < mipmapCount; i++) {\n const size = Math.max(1, width >> i);\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex,\n i,\n internalFormat,\n size,\n size,\n 0,\n baseFormat,\n dataType,\n null\n );\n }\n }\n }\n }\n }\n\n /**\n * Get the pixel color buffer according to the specified cube face and area.\n * @param face - You can choose which cube face to read\n * @param x - X coordinate of area start\n * @param y - Y coordinate of area start\n * @param width - Area width\n * @param height - Area height\n * @param out - Color buffer\n * @param mipLevel - Set mip level the data want to get from\n */\n protected _getPixelBuffer(\n face: TextureCubeFace | null,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._getReadFrameBuffer());\n\n if (mipLevel > 0 && !this._isWebGL2) {\n mipLevel = 0;\n Logger.error(\"mipLevel only take effect in WebGL2.0\");\n }\n\n if (face != null) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n this._glTexture,\n mipLevel\n );\n } else {\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._glTexture, mipLevel);\n }\n gl.readPixels(x, y, width, height, baseFormat, dataType, out);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n private _setWrapMode(value: TextureWrapMode, pname: GLenum): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const target = this._target;\n const { width, height } = this._texture;\n\n if (\n !isWebGL2 &&\n value !== TextureWrapMode.Clamp &&\n (!GLTexture._isPowerOf2(width) || !GLTexture._isPowerOf2(height))\n ) {\n Logger.warn(\n \"non-power-2 texture is not supported for REPEAT or MIRRORED_REPEAT in WebGL1,and has automatically downgraded to CLAMP_TO_EDGE\"\n );\n value = TextureWrapMode.Clamp;\n }\n\n switch (value) {\n case TextureWrapMode.Clamp:\n gl.texParameteri(target, pname, gl.CLAMP_TO_EDGE);\n break;\n case TextureWrapMode.Repeat:\n gl.texParameteri(target, pname, gl.REPEAT);\n break;\n case TextureWrapMode.Mirror:\n gl.texParameteri(target, pname, gl.MIRRORED_REPEAT);\n break;\n }\n }\n\n protected _getReadFrameBuffer(): WebGLFramebuffer {\n let frameBuffer = this._rhi._readFrameBuffer;\n if (!frameBuffer) {\n this._rhi._readFrameBuffer = frameBuffer = this._gl.createFramebuffer();\n }\n return frameBuffer;\n }\n}\n","import {\n GLCapabilityType,\n IPlatformRenderTarget,\n Logger,\n RenderTarget,\n Texture,\n TextureCube,\n TextureCubeFace,\n TextureFormat\n} from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * The render target in WebGL platform is used for off-screen rendering.\n */\nexport class GLRenderTarget implements IPlatformRenderTarget {\n private _gl: WebGLRenderingContext & WebGL2RenderingContext;\n private _isWebGL2: boolean;\n private _target: RenderTarget;\n private _frameBuffer: WebGLFramebuffer;\n private _MSAAFrameBuffer: WebGLFramebuffer | null;\n private _depthRenderBuffer: WebGLRenderbuffer | null;\n private _MSAAColorRenderBuffers: WebGLRenderbuffer[] = [];\n private _MSAADepthRenderBuffer: WebGLRenderbuffer | null;\n private _oriDrawBuffers: GLenum[];\n private _blitDrawBuffers: GLenum[] | null;\n private _curMipLevel: number = 0;\n\n /**\n * Create render target in WebGL platform.\n */\n constructor(rhi: WebGLRenderer, target: RenderTarget) {\n this._gl = rhi.gl as WebGLRenderingContext & WebGL2RenderingContext;\n this._isWebGL2 = rhi.isWebGL2;\n this._target = target;\n\n /** @ts-ignore */\n const { _colorTextures, _depth, width, height } = target;\n const isDepthTexture = _depth instanceof Texture;\n\n /** todo\n * MRT + Cube + [,MSAA]\n * MRT + MSAA\n */\n\n for (let i = 0, n = _colorTextures.length; i < n; i++) {\n const format = _colorTextures[i]._format;\n if (!GLTexture._supportRenderBufferColorFormat(format, rhi)) {\n throw new Error(`TextureFormat is not supported:${TextureFormat[format]} in RenderTarget`);\n }\n }\n\n if (!isDepthTexture && !GLTexture._supportRenderBufferDepthFormat(_depth, rhi)) {\n throw new Error(`TextureFormat is not supported:${TextureFormat[_depth]} in RenderTarget`);\n }\n\n if (_colorTextures.length > 1 && !rhi.canIUse(GLCapabilityType.drawBuffers)) {\n throw new Error(\"MRT is not supported\");\n }\n\n if (_colorTextures.some((v: Texture) => v.width !== width || v.height !== height)) {\n throw new Error(\"ColorTexture's size must as same as RenderTarget\");\n }\n\n if (isDepthTexture && (_depth.width !== width || _depth.height !== height)) {\n throw new Error(\"DepthTexture's size must as same as RenderTarget\");\n }\n\n // todo: necessary to support MRT + Cube + [,MSAA] ?\n if (_colorTextures.length > 1 && _colorTextures.some((v: Texture) => v instanceof TextureCube)) {\n throw new Error(\"MRT+Cube+[,MSAA] is not supported\");\n }\n\n const maxAntiAliasing = rhi.capability.maxAntiAliasing;\n if (target.antiAliasing > maxAntiAliasing) {\n Logger.warn(`MSAA antiAliasing exceeds the limit and is automatically downgraded to:${maxAntiAliasing}`);\n\n /** @ts-ignore */\n target._antiAliasing = maxAntiAliasing;\n }\n\n this._frameBuffer = this._gl.createFramebuffer();\n\n // bind main FBO\n this._bindMainFBO();\n\n // bind MSAA FBO\n if (target.antiAliasing > 1) {\n this._MSAAFrameBuffer = this._gl.createFramebuffer();\n this._bindMSAAFBO();\n }\n }\n\n /**\n * Set which face and mipLevel of the cube texture to render to.\n * @param faceIndex - Cube texture face\n * @param mipLevel - Set mip level the data want to write\n */\n setRenderTargetInfo(faceIndex: TextureCubeFace, mipLevel: number): void {\n const { _gl: gl, _target: target } = this;\n const { depthTexture } = target;\n const colorTexture = target.getColorTexture(0);\n const mipChanged = mipLevel !== this._curMipLevel;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n\n if (colorTexture) {\n const isCube = colorTexture instanceof TextureCube;\n if (mipChanged || isCube) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n isCube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D,\n // @ts-ignore\n (colorTexture._platformTexture as GLTexture)._glTexture,\n mipLevel\n );\n }\n }\n if (depthTexture) {\n const isCube = depthTexture instanceof TextureCube;\n if (mipChanged || isCube) {\n // @ts-ignore\n const platformTexture = <GLTexture>depthTexture._platformTexture;\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n platformTexture._formatDetail.attachment,\n isCube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D,\n platformTexture._glTexture,\n mipLevel\n );\n }\n } else {\n if (mipChanged) {\n // @ts-ignore\n const { internalFormat } = GLTexture._getRenderBufferDepthFormatDetail(target._depth, gl, this._isWebGL2);\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, target.width >> mipLevel, target.height >> mipLevel);\n }\n }\n this._curMipLevel = mipLevel;\n\n // revert current activated render target\n this._activeRenderTarget();\n }\n\n /**\n * Blit FBO.\n */\n blitRenderTarget(): void {\n if (!this._MSAAFrameBuffer) return;\n\n const gl = this._gl;\n const mask = gl.COLOR_BUFFER_BIT | (this._target.depthTexture ? gl.DEPTH_BUFFER_BIT : 0);\n const { colorTextureCount, width, height } = this._target;\n\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, this._MSAAFrameBuffer);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this._frameBuffer);\n\n for (let textureIndex = 0; textureIndex < colorTextureCount; textureIndex++) {\n const attachment = gl.COLOR_ATTACHMENT0 + textureIndex;\n\n this._blitDrawBuffers[textureIndex] = attachment;\n\n gl.readBuffer(attachment);\n gl.drawBuffers(this._blitDrawBuffers);\n gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST);\n\n this._blitDrawBuffers[textureIndex] = gl.NONE;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n /**\n * Destroy render target.\n */\n destroy(): void {\n const gl = this._gl;\n\n this._frameBuffer && gl.deleteFramebuffer(this._frameBuffer);\n this._depthRenderBuffer && gl.deleteRenderbuffer(this._depthRenderBuffer);\n this._MSAAFrameBuffer && gl.deleteFramebuffer(this._MSAAFrameBuffer);\n this._MSAADepthRenderBuffer && gl.deleteRenderbuffer(this._MSAADepthRenderBuffer);\n\n for (let i = 0; i < this._MSAAColorRenderBuffers.length; i++) {\n gl.deleteRenderbuffer(this._MSAAColorRenderBuffers[i]);\n }\n\n this._frameBuffer = null;\n this._depthRenderBuffer = null;\n this._MSAAFrameBuffer = null;\n this._MSAAColorRenderBuffers.length = 0;\n this._MSAADepthRenderBuffer = null;\n }\n\n /**\n * Activate this RenderTarget.\n * @internal\n * @remarks\n * If MSAA is turned on, MSAA FBO is activated, and then this._blitRenderTarget() is performed to exchange FBO.\n * If MSAA is not turned on, activate the main FBO.\n */\n _activeRenderTarget(): void {\n const gl = this._gl;\n\n if (this._MSAAFrameBuffer) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._MSAAFrameBuffer);\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n }\n }\n\n private _bindMainFBO(): void {\n const gl = this._gl;\n const isWebGL2: boolean = this._isWebGL2;\n\n /** @ts-ignore */\n const { _depth, colorTextureCount, width, height } = this._target;\n const drawBuffers = new Array(colorTextureCount);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\n\n /** color render buffer */\n for (let i = 0; i < colorTextureCount; i++) {\n const colorTexture = this._target.getColorTexture(i);\n const attachment = gl.COLOR_ATTACHMENT0 + i;\n\n drawBuffers[i] = attachment;\n\n if (!(colorTexture instanceof TextureCube)) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n attachment,\n gl.TEXTURE_2D,\n /** @ts-ignore */\n (colorTexture._platformTexture as GLTexture)._glTexture,\n 0\n );\n }\n }\n\n if (colorTextureCount > 1) {\n gl.drawBuffers(drawBuffers);\n }\n this._oriDrawBuffers = drawBuffers;\n\n /** depth render buffer */\n if (_depth !== null) {\n if (_depth instanceof Texture && !(_depth instanceof TextureCube)) {\n // @ts-ignore\n const platformTexture = _depth._platformTexture as GLTexture;\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n platformTexture._formatDetail.attachment,\n gl.TEXTURE_2D,\n platformTexture._glTexture,\n 0\n );\n } else if (this._target.antiAliasing <= 1) {\n const { internalFormat, attachment } = GLTexture._getRenderBufferDepthFormatDetail(_depth, gl, isWebGL2);\n const depthRenderBuffer = gl.createRenderbuffer();\n\n this._depthRenderBuffer = depthRenderBuffer;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, depthRenderBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, depthRenderBuffer);\n }\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n private _bindMSAAFBO(): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const MSAADepthRenderBuffer = gl.createRenderbuffer();\n\n /** @ts-ignore */\n const { _depth, colorTextureCount, antiAliasing, width, height } = this._target;\n\n this._blitDrawBuffers = new Array(colorTextureCount);\n this._MSAADepthRenderBuffer = MSAADepthRenderBuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._MSAAFrameBuffer);\n\n // prepare MRT+MSAA color RBOs\n for (let i = 0; i < colorTextureCount; i++) {\n const MSAAColorRenderBuffer = gl.createRenderbuffer();\n\n this._MSAAColorRenderBuffers[i] = MSAAColorRenderBuffer;\n this._blitDrawBuffers[i] = gl.NONE;\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, MSAAColorRenderBuffer);\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n antiAliasing,\n /** @ts-ignore */\n (this._target.getColorTexture(i)._platformTexture as GLTexture)._formatDetail.internalFormat,\n width,\n height\n );\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, MSAAColorRenderBuffer);\n }\n gl.drawBuffers(this._oriDrawBuffers);\n\n // prepare MSAA depth RBO\n if (_depth !== null) {\n const { internalFormat, attachment } =\n _depth instanceof Texture\n ? /** @ts-ignore */\n (_depth._platformTexture as GLTexture)._formatDetail\n : GLTexture._getRenderBufferDepthFormatDetail(_depth, gl, isWebGL2);\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, MSAADepthRenderBuffer);\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, antiAliasing, internalFormat, width, height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, MSAADepthRenderBuffer);\n }\n\n this._checkFrameBuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n }\n\n private _checkFrameBuffer(): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const e = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n\n switch (e) {\n case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n throw new Error(\n \"The attachment types are mismatched or not all framebuffer attachment points are framebuffer attachment complete\"\n );\n case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n throw new Error(\"There is no attachment\");\n case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n throw new Error(\" Height and width of the attachment are not the same.\");\n case gl.FRAMEBUFFER_UNSUPPORTED:\n throw new Error(\n \"The format of the attachment is not supported or if depth and stencil attachments are not the same renderbuffer\"\n );\n }\n\n if (isWebGL2 && e === gl.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE) {\n throw new Error(\n \"The values of gl.RENDERBUFFER_SAMPLES are different among attached renderbuffers, or are non-zero if the attached images are a mix of renderbuffers and textures.\"\n );\n }\n }\n}\n","import { IPlatformTexture2D, Logger, Texture2D, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture 2d in WebGL platform.\n */\nexport class GLTexture2D extends GLTexture implements IPlatformTexture2D {\n /** Backward compatible with WebGL1.0. */\n private _compressedMipFilled: number = 0;\n\n constructor(rhi: WebGLRenderer, texture2D: Texture2D) {\n super(rhi, texture2D, rhi.gl.TEXTURE_2D);\n\n /** @ts-ignore */\n const { format, _mipmap, width, height } = texture2D;\n const isWebGL2 = this._isWebGL2;\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n if (_mipmap && !isWebGL2 && (!GLTexture._isPowerOf2(width) || !GLTexture._isPowerOf2(height))) {\n Logger.warn(\n \"non-power-2 texture is not supported for mipmap in WebGL1,and has automatically downgraded to non-mipmap\"\n );\n\n /** @ts-ignore */\n texture2D._mipmap = false;\n /** @ts-ignore */\n texture2D._mipmapCount = texture2D._getMipmapCount();\n }\n\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, isWebGL2);\n (this._formatDetail.isCompressed && !isWebGL2) || this._init(false);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.setPixelBuffer}\n */\n setPixelBuffer(\n colorBuffer: ArrayBufferView,\n mipLevel: number = 0,\n x: number,\n y: number,\n width?: number,\n height?: number\n ): void {\n const gl = this._gl;\n const isWebGL2: boolean = this._isWebGL2;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n const mipWidth = Math.max(1, this._texture.width >> mipLevel);\n const mipHeight = Math.max(1, this._texture.height >> mipLevel);\n\n width = width || mipWidth - x;\n height = height || mipHeight - y;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n const mipBit = 1 << mipLevel;\n if (isWebGL2 || this._compressedMipFilled & mipBit) {\n gl.compressedTexSubImage2D(this._target, mipLevel, x, y, width, height, internalFormat, colorBuffer);\n } else {\n gl.compressedTexImage2D(this._target, mipLevel, internalFormat, width, height, 0, colorBuffer);\n this._compressedMipFilled |= mipBit;\n }\n } else {\n gl.texSubImage2D(this._target, mipLevel, x, y, width, height, baseFormat, dataType, colorBuffer);\n }\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.setImageSource}\n */\n setImageSource(\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage2D(this._target, mipLevel, x || 0, y || 0, baseFormat, dataType, imageSource);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2D.getPixelBuffer }\n */\n getPixelBuffer(x: number, y: number, width: number, height: number, mipLevel: number, out: ArrayBufferView): void {\n if (this._formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n super._getPixelBuffer(null, x, y, width, height, mipLevel, out);\n }\n}\n","import { IPlatformTexture2DArray, Texture2DArray, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Texture 2D array in WebGL platform.\n */\nexport class GLTexture2DArray extends GLTexture implements IPlatformTexture2DArray {\n constructor(rhi: WebGLRenderer, texture2DArray: Texture2DArray) {\n super(rhi, texture2DArray, (<WebGL2RenderingContext>rhi.gl).TEXTURE_2D_ARRAY);\n\n const { format, width, height, length, mipmapCount } = texture2DArray;\n\n if (!this._isWebGL2) {\n throw new Error(`Texture2D Array is not supported in WebGL1.0`);\n }\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n this._bind();\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, true);\n this._gl.texStorage3D(this._target, mipmapCount, this._formatDetail.internalFormat, width, height, length);\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.setPixelBuffer}\n */\n setPixelBuffer(\n offsetIndex: number,\n colorBuffer: ArrayBufferView,\n mipLevel: number,\n x: number,\n y: number,\n width?: number,\n height?: number,\n length?: number\n ): void {\n const { _target: target, _gl: gl } = this;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n\n width = width || Math.max(1, this._texture.width >> mipLevel) - x;\n height = height || Math.max(1, this._texture.height >> mipLevel) - y;\n length = length || (<Texture2DArray>this._texture).length;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n gl.compressedTexSubImage3D(\n target,\n mipLevel,\n x,\n y,\n offsetIndex,\n width,\n height,\n length,\n internalFormat,\n colorBuffer\n );\n } else {\n gl.texSubImage3D(target, mipLevel, x, y, offsetIndex, width, height, length, baseFormat, dataType, colorBuffer);\n }\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.setImageSource}\n */\n setImageSource(\n elementIndex: number,\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage3D(\n this._target,\n mipLevel,\n x,\n y,\n elementIndex,\n imageSource.width,\n imageSource.height,\n 1,\n baseFormat,\n dataType,\n imageSource\n );\n }\n\n /**\n * {@inheritDoc IPlatformTexture2DArray.getPixelBuffer}\n */\n getPixelBuffer(\n elementIndex: number,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n const { _gl: gl, _formatDetail: formatDetail } = this;\n\n if (formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._getReadFrameBuffer());\n gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, this._glTexture, mipLevel, elementIndex);\n gl.readPixels(x, y, width, height, formatDetail.baseFormat, formatDetail.dataType, out);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n}\n","import { IPlatformTextureCube, Logger, TextureCube, TextureCubeFace, TextureFormat } from \"@galacean/engine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { WebGLRenderer } from \"./WebGLRenderer\";\n\n/**\n * Cube texture in WebGL platform.\n */\nexport class GLTextureCube extends GLTexture implements IPlatformTextureCube {\n /** Backward compatible with WebGL1.0. */\n private _compressedFaceFilled: number[] = [0, 0, 0, 0, 0, 0];\n\n constructor(rhi: WebGLRenderer, textureCube: TextureCube) {\n super(rhi, textureCube, rhi.gl.TEXTURE_CUBE_MAP);\n\n /** @ts-ignore */\n const { format, _mipmap, width: size } = textureCube;\n const isWebGL2 = this._isWebGL2;\n\n /** @ts-ignore */\n if (!GLTexture._supportTextureFormat(format, rhi)) {\n throw new Error(`Texture format is not supported:${TextureFormat[format]}`);\n }\n\n if (_mipmap && !isWebGL2 && !GLTexture._isPowerOf2(size)) {\n Logger.warn(\n \"non-power-2 texture is not supported for mipmap in WebGL1,and has automatically downgraded to non-mipmap\"\n );\n\n /** @ts-ignore */\n textureCube._mipmap = false;\n /** @ts-ignore */\n textureCube._mipmapCount = textureCube._getMipmapCount();\n }\n\n this._formatDetail = GLTexture._getFormatDetail(format, this._gl, isWebGL2);\n (this._formatDetail.isCompressed && !isWebGL2) || this._init(true);\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.setPixelBuffer}\n */\n setPixelBuffer(\n face: TextureCubeFace,\n colorBuffer: ArrayBufferView,\n mipLevel: number,\n x: number,\n y: number,\n width?: number,\n height?: number\n ): void {\n const gl = this._gl;\n const isWebGL2 = this._isWebGL2;\n const { internalFormat, baseFormat, dataType, isCompressed } = this._formatDetail;\n const mipSize = Math.max(1, this._texture.width >> mipLevel);\n\n width = width || mipSize - x;\n height = height || mipSize - y;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);\n\n if (isCompressed) {\n const mipBit = 1 << mipLevel;\n if (isWebGL2 || this._compressedFaceFilled[face] & mipBit) {\n gl.compressedTexSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x,\n y,\n width,\n height,\n internalFormat,\n colorBuffer\n );\n } else {\n gl.compressedTexImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n internalFormat,\n width,\n height,\n 0,\n colorBuffer\n );\n this._compressedFaceFilled[face] |= mipBit;\n }\n } else {\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x,\n y,\n width,\n height,\n baseFormat,\n dataType,\n colorBuffer\n );\n }\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.setImageSource}\n */\n setImageSource(\n face: TextureCubeFace,\n imageSource: TexImageSource,\n mipLevel: number,\n flipY: boolean,\n premultiplyAlpha: boolean,\n x: number,\n y: number\n ): void {\n const gl = this._gl;\n const { baseFormat, dataType } = this._formatDetail;\n\n this._bind();\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, +flipY);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +premultiplyAlpha);\n gl.texSubImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,\n mipLevel,\n x || 0,\n y || 0,\n baseFormat,\n dataType,\n imageSource\n );\n }\n\n /**\n * {@inheritDoc IPlatformTextureCube.getPixelBuffer}\n */\n getPixelBuffer(\n face: TextureCubeFace,\n x: number,\n y: number,\n width: number,\n height: number,\n mipLevel: number,\n out: ArrayBufferView\n ): void {\n if (this._formatDetail.isCompressed) {\n throw new Error(\"Unable to read compressed texture\");\n }\n super._getPixelBuffer(face, x, y, width, height, mipLevel, out);\n }\n}\n","import {\n CameraClearFlags,\n Canvas,\n ColorWriteMask,\n Engine,\n GLCapabilityType,\n IHardwareRenderer,\n IPlatformRenderTarget,\n IPlatformTexture2D,\n IPlatformTextureCube,\n Logger,\n Mesh,\n Platform,\n RenderTarget,\n SubMesh,\n SystemInfo,\n Texture2D,\n Texture2DArray,\n TextureCube\n} from \"@galacean/engine-core\";\nimport { IPlatformPrimitive } from \"@galacean/engine-design\";\nimport { Color, Vector4 } from \"@galacean/engine-math\";\nimport { GLCapability } from \"./GLCapability\";\nimport { GLExtensions } from \"./GLExtensions\";\nimport { GLPrimitive } from \"./GLPrimitive\";\nimport { GLRenderStates } from \"./GLRenderStates\";\nimport { GLRenderTarget } from \"./GLRenderTarget\";\nimport { GLTexture } from \"./GLTexture\";\nimport { GLTexture2D } from \"./GLTexture2D\";\nimport { GLTexture2DArray } from \"./GLTexture2DArray\";\nimport { GLTextureCube } from \"./GLTextureCube\";\nimport { WebCanvas } from \"./WebCanvas\";\nimport { WebGLExtension } from \"./type\";\n\n/**\n * WebGL mode.\n */\nexport enum WebGLMode {\n /** Auto, use WebGL2.0 if support, or will fallback to WebGL1.0. */\n Auto = 0,\n /** WebGL2.0. */\n WebGL2 = 1,\n /** WebGL1.0, */\n WebGL1 = 2\n}\n\n/**\n * WebGL renderer options.\n */\nexport interface WebGLRendererOptions extends WebGLContextAttributes {\n /** WebGL mode.*/\n webGLMode?: WebGLMode;\n\n /**\n * @internal\n * iOS 15 webgl implement has bug, maybe should force call flush command buffer, for example iPhone13(iOS 15.4.1).\n */\n _forceFlush?: boolean;\n\n /**\n * @internal\n * Max allow skin uniform vectors count, default is 256\n * \n * @remarks large count maybe cause performance issue.\n */\n _maxAllowSkinUniformVectorCount?: number;\n}\n\n/**\n * WebGL renderer, including WebGL1.0 and WebGL2.0.\n */\nexport class WebGLRenderer implements IHardwareRenderer {\n /** @internal */\n _readFrameBuffer: WebGLFramebuffer;\n /** @internal */\n _enableGlobalDepthBias: boolean = false;\n\n _currentBind: any;\n\n private _options: WebGLRendererOptions;\n private _gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n private _renderStates;\n private _extensions;\n private _capability: GLCapability;\n private _isWebGL2: boolean;\n private _renderer: string;\n private _webCanvas: WebCanvas;\n\n private _activeTextureID: number;\n private _activeTextures: GLTexture[] = new Array(32);\n\n // cache value\n private _lastViewport: Vector4 = new Vector4(null, null, null, null);\n private _lastScissor: Vector4 = new Vector4(null, null, null, null);\n private _lastClearColor: Color = new Color(null, null, null, null);\n private _scissorEnable: boolean = false;\n\n get isWebGL2(): boolean {\n return this._isWebGL2;\n }\n\n get renderer(): string {\n return this._renderer;\n }\n\n /**\n * GL Context\n * @member {WebGLRenderingContext}\n */\n get gl() {\n return this._gl;\n }\n\n get renderStates(): GLRenderStates {\n return this._renderStates;\n }\n\n get capability(): GLCapability {\n return this._capability;\n }\n\n get canIUseMoreJoints() {\n return this.capability.canIUseMoreJoints;\n }\n\n constructor(initializeOptions: WebGLRendererOptions = {}) {\n const options = {\n webGLMode: WebGLMode.Auto,\n alpha: false,\n stencil: true,\n _forceFlush: false,\n _maxAllowSkinUniformVectorCount: 256,\n ...initializeOptions\n };\n if (SystemInfo.platform === Platform.IPhone || SystemInfo.platform === Platform.IPad) {\n const version = SystemInfo.operatingSystem.match(/(\\d+).?(\\d+)?.?(\\d+)?/);\n if (version) {\n const majorVersion = parseInt(version[1]);\n const minorVersion = parseInt(version[2]);\n if (majorVersion === 15 && minorVersion >= 0 && minorVersion <= 4) {\n options._forceFlush = true;\n }\n }\n }\n this._options = options;\n }\n\n init(canvas: Canvas): void {\n const options = this._options;\n const webCanvas = (this._webCanvas = (canvas as WebCanvas)._webCanvas);\n const webGLMode = options.webGLMode;\n let gl: (WebGLRenderingContext & WebGLExtension) | WebGL2RenderingContext;\n\n if (webGLMode == WebGLMode.Auto || webGLMode == WebGLMode.WebGL2) {\n gl = webCanvas.getContext(\"webgl2\", options);\n if (!gl && (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas))) {\n gl = <WebGL2RenderingContext>webCanvas.getContext(\"experimental-webgl2\", options);\n }\n this._isWebGL2 = true;\n\n // Prevent weird browsers to lie (such as safari!)\n if (gl && !(<WebGL2RenderingContext>gl).deleteQuery) {\n this._isWebGL2 = false;\n }\n }\n\n if (!gl) {\n if (webGLMode == WebGLMode.Auto || webGLMode == WebGLMode.WebGL1) {\n gl = <WebGLRenderingContext & WebGLExtension>webCanvas.getContext(\"webgl\", options);\n if (!gl && (typeof OffscreenCanvas === \"undefined\" || !(webCanvas instanceof OffscreenCanvas))) {\n gl = <WebGLRenderingContext & WebGLExtension>webCanvas.getContext(\"experimental-webgl\", options);\n }\n this._isWebGL2 = false;\n }\n }\n\n if (!gl) {\n throw new Error(\"Get GL Context FAILED.\");\n }\n\n this._gl = gl;\n this._activeTextureID = gl.TEXTURE0;\n this._renderStates = new GLRenderStates(gl);\n this._extensions = new GLExtensions(this);\n this._capability = new GLCapability(this);\n // Make sure the active texture in gl context is on default, because gl context may be used in other webgl renderer.\n gl.activeTexture(gl.TEXTURE0);\n\n const debugRenderInfo = gl.getExtension(\"WEBGL_debug_renderer_info\");\n if (debugRenderInfo != null) {\n this._renderer = gl.getParameter(debugRenderInfo.UNMASKED_RENDERER_WEBGL);\n }\n }\n\n createPlatformPrimitive(primitive: Mesh): IPlatformPrimitive {\n return new GLPrimitive(this, primitive);\n }\n\n createPlatformTexture2D(texture2D: Texture2D): IPlatformTexture2D {\n return new GLTexture2D(this, texture2D);\n }\n\n createPlatformTexture2DArray(texture2D: Texture2DArray): GLTexture2DArray {\n return new GLTexture2DArray(this, texture2D);\n }\n\n createPlatformTextureCube(textureCube: TextureCube): IPlatformTextureCube {\n return new GLTextureCube(this, textureCube);\n }\n\n createPlatformRenderTarget(target: RenderTarget): IPlatformRenderTarget {\n return new GLRenderTarget(this, target);\n }\n\n requireExtension(ext) {\n return this._extensions.requireExtension(ext);\n }\n\n canIUse(capabilityType: GLCapabilityType) {\n return this.capability.canIUse(capabilityType);\n }\n\n canIUseCompressedTextureInternalFormat(type: number) {\n return this.capability.canIUseCompressedTextureInternalFormat(type);\n }\n\n viewport(x: number, y: number, width: number, height: number): void {\n const { _gl: gl, _lastViewport: lastViewport } = this;\n if (x !== lastViewport.x || y !== lastViewport.y || width !== lastViewport.z || height !== lastViewport.w) {\n gl.viewport(x, y, width, height);\n lastViewport.set(x, y, width, height);\n }\n }\n\n scissor(x: number, y: number, width: number, height: number): void {\n const { _gl: gl, _lastScissor: lastScissor } = this;\n if (x !== lastScissor.x || y !== lastScissor.y || width !== lastScissor.z || height !== lastScissor.w) {\n const { _webCanvas: webCanvas } = this;\n if (x === 0 && y === 0 && width === webCanvas.width && height === webCanvas.height) {\n if (this._scissorEnable) {\n gl.disable(gl.SCISSOR_TEST);\n this._scissorEnable = false;\n }\n } else {\n if (!this._scissorEnable) {\n gl.enable(gl.SCISSOR_TEST);\n this._scissorEnable = true;\n }\n gl.scissor(x, y, width, height);\n }\n lastScissor.set(x, y, width, height);\n }\n }\n\n colorMask(r, g, b, a) {\n this._gl.colorMask(r, g, b, a);\n }\n\n clearRenderTarget(engine: Engine, clearFlags: CameraClearFlags, clearColor: Color) {\n const gl = this._gl;\n const {\n blendState: { targetBlendState },\n depthState,\n stencilState\n } = engine._lastRenderState;\n let clearFlag = 0;\n if (clearFlags & CameraClearFlags.Color) {\n clearFlag |= gl.COLOR_BUFFER_BIT;\n\n const lc = this._lastClearColor;\n const { r, g, b, a } = clearColor;\n if (clearColor && (r !== lc.r || g !== lc.g || b !== lc.b || a !== lc.a)) {\n gl.clearColor(r, g, b, a);\n lc.set(r, g, b, a);\n }\n\n if (targetBlendState.colorWriteMask !== ColorWriteMask.All) {\n gl.colorMask(true, true, true, true);\n targetBlendState.colorWriteMask = ColorWriteMask.All;\n }\n }\n if (clearFlags & CameraClearFlags.Depth) {\n clearFlag |= gl.DEPTH_BUFFER_BIT;\n if (depthState.writeEnabled !== true) {\n gl.depthMask(true);\n depthState.writeEnabled = true;\n }\n }\n if (clearFlags & CameraClearFlags.Stencil) {\n clearFlag |= gl.STENCIL_BUFFER_BIT;\n if (stencilState.writeMask !== 0xff) {\n gl.stencilMask(0xff);\n stencilState.writeMask = 0xff;\n }\n }\n gl.clear(clearFlag);\n }\n\n drawPrimitive(primitive: Mesh, subPrimitive: SubMesh, shaderProgram: any) {\n // todo: VAO not support morph animation\n if (primitive) {\n //@ts-ignore\n primitive._draw(shaderProgram, subPrimitive);\n } else {\n Logger.error(\"draw primitive failed.\");\n }\n }\n\n activeRenderTarget(renderTarget: RenderTarget, viewport: Vector4, mipLevel: number) {\n const gl = this._gl;\n let bufferWidth: number, bufferHeight: number;\n if (renderTarget) {\n /** @ts-ignore */\n (renderTarget._platformRenderTarget as GLRenderTarget)?._activeRenderTarget();\n bufferWidth = renderTarget.width >> mipLevel;\n bufferHeight = renderTarget.height >> mipLevel;\n } else {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n bufferWidth = gl.drawingBufferWidth;\n bufferHeight = gl.drawingBufferHeight;\n }\n const width = bufferWidth * viewport.z;\n const height = bufferHeight * viewport.w;\n const x = viewport.x * bufferWidth;\n const y = bufferHeight - viewport.y * bufferHeight - height;\n this.viewport(x, y, width, height);\n this.scissor(x, y, width, height);\n }\n\n activeTexture(textureID: number): void {\n if (this._activeTextureID !== textureID) {\n this._gl.activeTexture(textureID);\n this._activeTextureID = textureID;\n }\n }\n\n bindTexture(texture: GLTexture): void {\n const index = this._activeTextureID - this._gl.TEXTURE0;\n if (this._activeTextures[index] !== texture) {\n this._gl.bindTexture(texture._target, texture._glTexture);\n this._activeTextures[index] = texture;\n }\n }\n\n setGlobalDepthBias(bias: number, slopeBias: number): void {\n const gl = this._gl;\n const enable = bias !== 0 || slopeBias !== 0;\n if (enable) {\n gl.enable(gl.POLYGON_OFFSET_FILL);\n gl.polygonOffset(slopeBias, bias);\n } else {\n gl.disable(gl.POLYGON_OFFSET_FILL);\n }\n this._enableGlobalDepthBias = enable;\n }\n\n flush(): void {\n this._gl.flush();\n }\n\n destroy() {}\n}\n","import { Engine } from \"@galacean/engine-core\";\nimport { WebCanvas } from \"./WebCanvas\";\nimport { WebGLRenderer, WebGLRendererOptions } from \"./WebGLRenderer\";\n\ntype OffscreenCanvas = any;\n\n/**\n * WebGL platform engine,support includes WebGL1.0 and WebGL2.0.\n */\nexport class WebGLEngine extends Engine {\n /**\n * Create an engine suitable for the WebGL platform.\n * @param canvas - Native web canvas\n * @param webGLRendererOptions - WebGL renderer options\n */\n constructor(canvas: string | HTMLCanvasElement | OffscreenCanvas, webGLRendererOptions?: WebGLRendererOptions) {\n const webCanvas = new WebCanvas(\n <HTMLCanvasElement | OffscreenCanvas>(typeof canvas === \"string\" ? document.getElementById(canvas) : canvas)\n );\n const hardwareRenderer = new WebGLRenderer(webGLRendererOptions);\n super(webCanvas, hardwareRenderer);\n }\n\n /**\n * Web canvas.\n */\n get canvas(): WebCanvas {\n return this._canvas as WebCanvas;\n }\n}\n"],"names":["GLCompressedTextureInternalFormat","RGBA_ASTC_4X4_KHR","RGBA_ASTC_5X4_KHR","RGBA_ASTC_5X5_KHR","RGBA_ASTC_6X5_KHR","RGBA_ASTC_6X6_KHR","RGBA_ASTC_8X5_KHR","RGBA_ASTC_8X6_KHR","RGBA_ASTC_8X8_KHR","RGBA_ASTC_10X5_KHR","RGBA_ASTC_10X6_KHR","RGBA_ASTC_10X8_KHR","RGBA_ASTC_10X10_KHR","RGBA_ASTC_12X10_KHR","RGBA_ASTC_12X12_KHR","SRGB8_ALPHA8_ASTC_4X4_KHR","SRGB8_ALPHA8_ASTC_5X4_KHR","SRGB8_ALPHA8_ASTC_5X5_KHR","SRGB8_ALPHA8_ASTC_6X5_KHR","SRGB8_ALPHA8_ASTC_6X6_KHR","SRGB8_ALPHA8_ASTC_8X5_KHR","SRGB8_ALPHA8_ASTC_8X6_KHR","SRGB8_ALPHA8_ASTC_8X8_KHR","SRGB8_ALPHA8_ASTC_10X5_KHR","SRGB8_ALPHA8_ASTC_10X6_KHR","SRGB8_ALPHA8_ASTC_10X8_KHR","SRGB8_ALPHA8_ASTC_10X10_KHR","SRGB8_ALPHA8_ASTC_12X10_KHR","SRGB8_ALPHA8_ASTC_12X12_KHR","RGB_ETC1_WEBGL","R11_EAC","SIGNED_R11_EAC","RG11_EAC","SIGNED_RG11_EAC","RGB8_ETC2","SRGB8_ETC2","RGB8_PUNCHTHROUGH_ALPHA1_ETC2","SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","RGBA8_ETC2_EAC","SRGB8_ALPHA8_ETC2_EAC","RGB_PVRTC_4BPPV1_IMG","RGB_PVRTC_2BPPV1_IMG","RGBA_PVRTC_4BPPV1_IMG","RGBA_PVRTC_2BPPV1_IMG","RGB_S3TC_DXT1_EXT","RGBA_S3TC_DXT1_EXT","RGBA_S3TC_DXT3_EXT","RGBA_S3TC_DXT5_EXT","WebCanvas","webCanvas","_scale","Vector2","width","height","_webCanvas","_width","_height","resizeByClientSize","pixelRatio","window","devicePixelRatio","OffscreenCanvas","clientWidth","clientHeight","setScale","x","y","set","scale","value","style","transformOrigin","transform","GLCapability","rhi","_rhi","capabilityList","Map","_init","_compatibleAllInterface","canIUse","capabilityType","get","canIUseCompressedTextureInternalFormat","internalType","GLCapabilityType","astc","etc1","etc","pvrtc","s3tc","cap","isWebGL2","requireExtension","bind","shaderVertexID","standardDerivatives","shaderTextureLod","elementIndexUint","depthTexture","vertexArrayObject","instancedArrays","multipleSample","drawBuffers","astc_webkit","etc_webkit","etc1_webkit","pvrtc_webkit","s3tc_webkit","textureFloat","textureHalfFloat","textureFloatLinear","textureHalfFloatLinear","WEBGL_colorBufferFloat","colorBufferFloat","colorBufferHalfFloat","textureFilterAnisotropic","_compatibleInterface","flatItem","gl","ext","glKey","extensionKey","extensionVal","UNSIGNED_INT_24_8","createVertexArray","deleteVertexArray","isVertexArray","bindVertexArray","drawArraysInstanced","drawElementsInstanced","vertexAttribDivisor","MAX_DRAW_BUFFERS","items","maxDrawBuffers","i","HALF_FLOAT","RGBA16F","RGBA32F","TEXTURE_MAX_ANISOTROPY_EXT","maxTextureSize","renderStates","getParameter","MAX_TEXTURE_SIZE","canUseFloatTextureBlendShape","MAX_VERTEX_TEXTURE_IMAGE_UNITS","canIUseMoreJoints","_maxDrawBuffers","maxAnisoLevel","_maxAnisoLevel","MAX_TEXTURE_MAX_ANISOTROPY_EXT","maxAntiAliasing","_maxAntiAliasing","canMSAA","MAX_SAMPLES","GLExtensions","_requireResult","undefined","getExtension","GLPrimitive","primitive","_attribLocArray","_vaoMap","_primitive","_canUseInstancedArrays","_useVao","_gl","draw","shaderProgram","subMesh","useVao","_enableVAO","_bufferStructChanged","_clearVAO","has","id","_registerVAO","vao","_bindBufferAndAttrib","_indexBufferBinding","_instanceCount","_glIndexType","_glIndexByteCount","topology","start","count","drawElements","buffer","_nativeBuffer","bindBuffer","ELEMENT_ARRAY_BUFFER","drawArrays","Logger","error","_disableAttrib","destroy","vertexBufferBindings","_vertexBufferBindings","length","attributeLocation","attributes","_vertexElementMap","vbo","lastBoundVbo","name","loc","element","bindingIndex","stride","ARRAY_BUFFER","enableVertexAttribArray","elementInfo","_glElementInfo","vertexAttribPointer","size","type","normalized","offset","instanceStepRate","push","warn","l","disableVertexAttribArray","forEach","clear","GLRenderStates","_parameters","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VERTEX_ATTRIBS","blendFuncSeparate","ONE","ZERO","blendEquationSeparate","FUNC_ADD","colorMask","blendColor","disable","SAMPLE_ALPHA_TO_COVERAGE","enable","DEPTH_TEST","depthFunc","LESS","depthMask","STENCIL_TEST","stencilFuncSeparate","FRONT","ALWAYS","BACK","stencilOpSeparate","KEEP","stencilMask","CULL_FACE","cullFace","POLYGON_OFFSET_FILL","polygonOffset","pname","GLTexture","texture","target","_texture","_isWebGL2","_target","_glTexture","createTexture","deleteTexture","_formatDetail","setUseDepthCompareMode","texParameteri","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","NONE","generateMipmaps","_bind","generateMipmap","bindTexture","isCube","internalFormat","baseFormat","dataType","mipmapCount","_isDepthTexture","LUMINANCE_ALPHA","ALPHA","texStorage2D","texImage2D","mipWidth","Math","max","mipHeight","faceIndex","TEXTURE_CUBE_MAP_POSITIVE_X","_getPixelBuffer","face","mipLevel","out","bindFramebuffer","FRAMEBUFFER","_getReadFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","readPixels","_setWrapMode","TextureWrapMode","Clamp","_isPowerOf2","CLAMP_TO_EDGE","Repeat","REPEAT","Mirror","MIRRORED_REPEAT","frameBuffer","_readFrameBuffer","createFramebuffer","v","_getFormatDetail","format","TextureFormat","R8G8B8","RGB8","RGB","UNSIGNED_BYTE","isCompressed","R8G8B8A8","RGBA8","RGBA","R4G4B4A4","RGBA4","UNSIGNED_SHORT_4_4_4_4","R5G5B5A1","RGB5_A1","UNSIGNED_SHORT_5_5_5_1","R5G6B5","RGB565","UNSIGNED_SHORT_5_6_5","Alpha8","LuminanceAlpha","R16G16B16A16","R32G32B32A32","FLOAT","DXT1","DXT5","ETC1_RGB","ETC2_RGB","ETC2_RGBA5","ETC2_RGBA8","PVRTC_RGB2","PVRTC_RGBA2","PVRTC_RGB4","PVRTC_RGBA4","ASTC_4x4","ASTC_5x5","ASTC_6x6","ASTC_8x8","ASTC_10x10","ASTC_12x12","Depth","DEPTH_COMPONENT32F","DEPTH_COMPONENT","UNSIGNED_SHORT","attachment","DEPTH_ATTACHMENT","DepthStencil","DEPTH32F_STENCIL8","DEPTH_STENCIL","FLOAT_32_UNSIGNED_INT_24_8_REV","DEPTH_STENCIL_ATTACHMENT","Depth16","DEPTH_COMPONENT16","Depth24Stencil8","DEPTH24_STENCIL8","Depth24","DEPTH_COMPONENT24","UNSIGNED_INT","Depth32","Depth32Stencil8","Error","_getRenderBufferDepthFormatDetail","RenderBufferDepthFormat","Stencil","STENCIL_INDEX8","STENCIL_ATTACHMENT","_supportTextureFormat","_supportRenderBufferColorFormat","isSupported","_supportRenderBufferDepthFormat","wrapModeU","TEXTURE_WRAP_S","wrapModeV","TEXTURE_WRAP_T","filterMode","_mipmap","TextureFilterMode","Point","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","NEAREST_MIPMAP_NEAREST","Bilinear","LINEAR","LINEAR_MIPMAP_NEAREST","Trilinear","LINEAR_MIPMAP_LINEAR","anisoLevel","texParameterf","depthCompareFunction","TextureDepthCompareFunction","Never","TEXTURE_COMPARE_FUNC","NEVER","Less","Equal","EQUAL","LessEqual","LEQUAL","Greater","GREATER","NotEqual","NOTEQUAL","GreaterEqual","GEQUAL","Always","GLRenderTarget","_MSAAColorRenderBuffers","_curMipLevel","_colorTextures","_depth","isDepthTexture","Texture","n","_format","some","TextureCube","capability","antiAliasing","_antiAliasing","_frameBuffer","_bindMainFBO","_MSAAFrameBuffer","_bindMSAAFBO","setRenderTargetInfo","colorTexture","getColorTexture","mipChanged","_platformTexture","platformTexture","bindRenderbuffer","RENDERBUFFER","_depthRenderBuffer","renderbufferStorage","_activeRenderTarget","blitRenderTarget","mask","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","colorTextureCount","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","textureIndex","_blitDrawBuffers","readBuffer","blitFramebuffer","deleteFramebuffer","deleteRenderbuffer","_MSAADepthRenderBuffer","Array","_oriDrawBuffers","depthRenderBuffer","createRenderbuffer","framebufferRenderbuffer","MSAADepthRenderBuffer","MSAAColorRenderBuffer","renderbufferStorageMultisample","_checkFrameBuffer","e","checkFramebufferStatus","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","GLTexture2D","texture2D","_compressedMipFilled","_mipmapCount","_getMipmapCount","setPixelBuffer","colorBuffer","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","mipBit","compressedTexSubImage2D","compressedTexImage2D","texSubImage2D","setImageSource","imageSource","flipY","premultiplyAlpha","getPixelBuffer","GLTexture2DArray","texture2DArray","TEXTURE_2D_ARRAY","texStorage3D","offsetIndex","compressedTexSubImage3D","texSubImage3D","elementIndex","formatDetail","framebufferTextureLayer","GLTextureCube","textureCube","TEXTURE_CUBE_MAP","_compressedFaceFilled","mipSize","WebGLMode","Auto","WebGL2","WebGL1","WebGLRenderer","initializeOptions","_enableGlobalDepthBias","_activeTextures","_lastViewport","Vector4","_lastScissor","_lastClearColor","Color","_scissorEnable","options","webGLMode","alpha","stencil","_forceFlush","_maxAllowSkinUniformVectorCount","SystemInfo","platform","Platform","IPhone","IPad","version","operatingSystem","match","majorVersion","parseInt","minorVersion","_options","init","canvas","getContext","deleteQuery","_activeTextureID","TEXTURE0","_renderStates","_extensions","_capability","activeTexture","debugRenderInfo","_renderer","UNMASKED_RENDERER_WEBGL","createPlatformPrimitive","createPlatformTexture2D","createPlatformTexture2DArray","createPlatformTextureCube","createPlatformRenderTarget","viewport","lastViewport","z","w","scissor","lastScissor","SCISSOR_TEST","r","g","b","a","clearRenderTarget","engine","clearFlags","clearColor","_lastRenderState","blendState","targetBlendState","depthState","stencilState","clearFlag","CameraClearFlags","lc","colorWriteMask","ColorWriteMask","All","writeEnabled","STENCIL_BUFFER_BIT","writeMask","drawPrimitive","subPrimitive","_draw","activeRenderTarget","renderTarget","bufferWidth","bufferHeight","_platformRenderTarget","drawingBufferWidth","drawingBufferHeight","textureID","index","setGlobalDepthBias","bias","slopeBias","flush","renderer","WebGLEngine","webGLRendererOptions","document","getElementById","hardwareRenderer","_canvas","Engine"],"mappings":";;;;;;;AAAA;;UAwDO;UAAKA,iCAAiC;IAAjCA,kCAAAA;IAEVC,uBAAoB,UAApBA;IAFUD,kCAAAA,kCAGVE,uBAAoB,UAApBA;IAHUF,kCAAAA,kCAIVG,uBAAoB,UAApBA;IAJUH,kCAAAA,kCAKVI,uBAAoB,UAApBA;IALUJ,kCAAAA,kCAMVK,uBAAoB,UAApBA;IANUL,kCAAAA,kCAOVM,uBAAoB,UAApBA;IAPUN,kCAAAA,kCAQVO,uBAAoB,UAApBA;IARUP,kCAAAA,kCASVQ,uBAAoB,UAApBA;IATUR,kCAAAA,kCAUVS,wBAAqB,UAArBA;IAVUT,kCAAAA,kCAWVU,wBAAqB,UAArBA;IAXUV,kCAAAA,kCAYVW,wBAAqB,UAArBA;IAZUX,kCAAAA,kCAaVY,yBAAsB,UAAtBA;IAbUZ,kCAAAA,kCAcVa,yBAAsB,UAAtBA;IAdUb,kCAAAA,kCAeVc,yBAAsB,UAAtBA;IAfUd,kCAAAA,kCAgBVe,+BAA4B,UAA5BA;IAhBUf,kCAAAA,kCAiBVgB,+BAA4B,UAA5BA;IAjBUhB,kCAAAA,kCAkBViB,+BAA4B,UAA5BA;IAlBUjB,kCAAAA,kCAmBVkB,+BAA4B,UAA5BA;IAnBUlB,kCAAAA,kCAoBVmB,+BAA4B,UAA5BA;IApBUnB,kCAAAA,kCAqBVoB,+BAA4B,UAA5BA;IArBUpB,kCAAAA,kCAsBVqB,+BAA4B,UAA5BA;IAtBUrB,kCAAAA,kCAuBVsB,+BAA4B,UAA5BA;IAvBUtB,kCAAAA,kCAwBVuB,gCAA6B,UAA7BA;IAxBUvB,kCAAAA,kCAyBVwB,gCAA6B,UAA7BA;IAzBUxB,kCAAAA,kCA0BVyB,gCAA6B,UAA7BA;IA1BUzB,kCAAAA,kCA2BV0B,iCAA8B,UAA9BA;IA3BU1B,kCAAAA,kCA4BV2B,iCAA8B,UAA9BA;IA5BU3B,kCAAAA,kCA6BV4B,iCAA8B,UAA9BA;IA7BU5B,kCAAAA;IAgCV6B,oBAAiB,UAAjBA;IAhCU7B,kCAAAA;IAmCV8B,aAAU,UAAVA;IAnCU9B,kCAAAA,kCAoCV+B,oBAAiB,UAAjBA;IApCU/B,kCAAAA,kCAqCVgC,cAAW,UAAXA;IArCUhC,kCAAAA,kCAsCViC,qBAAkB,UAAlBA;IAtCUjC,kCAAAA,kCAuCVkC,eAAY,UAAZA;IAvCUlC,kCAAAA,kCAwCVmC,gBAAa,UAAbA;IAxCUnC,kCAAAA,kCAyCVoC,mCAAgC,UAAhCA;IAzCUpC,kCAAAA,kCA0CVqC,oCAAiC,UAAjCA;IA1CUrC,kCAAAA,kCA2CVsC,oBAAiB,UAAjBA;IA3CUtC,kCAAAA,kCA4CVuC,2BAAwB,UAAxBA;IA5CUvC,kCAAAA;IA+CVwC,0BAAuB,UAAvBA;IA/CUxC,kCAAAA,kCAgDVyC,0BAAuB,UAAvBA;IAhDUzC,kCAAAA,kCAiDV0C,2BAAwB,UAAxBA;IAjDU1C,kCAAAA,kCAkDV2C,2BAAwB,UAAxBA;IAlDU3C,kCAAAA;IAqDV4C,uBAAoB,UAApBA;IArDU5C,kCAAAA,kCAsDV6C,wBAAqB,UAArBA;IAtDU7C,kCAAAA,kCAuDV8C,wBAAqB,UAArBA;IAvDU9C,kCAAAA,kCAwDV+C,wBAAqB,UAArBA;GAxDU/C,sCAAAA;;ACnDZ;;QAGO;aAAMgD,UA0ECC,SAA8C;aArElDC,SAAkB,IAAIC;QAsE5B,IAAMC,QAAQH,UAAUG,KAAK;QAC7B,IAAMC,SAASJ,UAAUI,MAAM;QAC/B,IAAI,CAACC,UAAU,GAAGL;QAClB,IAAI,CAACM,MAAM,GAAGH;QACd,IAAI,CAACI,OAAO,GAAGH;;iBA/ENL;;;;MA8DXS,OAAAA,kBAMC,GANDA,SAAAA,mBAAmBC,UAA4C,EAAQ;QAApDA,IAAAA,uBAAAA,aAAqBC,OAAOC,gBAAgB;QAC7D,IAAMX,YAAY,IAAI,CAACK,UAAU;QACjC,IAAI,OAAOO,oBAAoB,eAAe,CAAEZ,YAAAA,WAAqBY,kBAAkB;YACrF,IAAI,CAACT,KAAK,GAAGH,UAAUa,WAAW,GAAGJ;YACrC,IAAI,CAACL,MAAM,GAAGJ,UAAUc,YAAY,GAAGL;SACxC;;;;;;MAoBHM,OAAAA,QAGC,GAHDA,SAAAA,SAASC,CAAS,EAAEC,CAAS,EAAQ;QACnC,IAAI,CAAChB,MAAM,CAACiB,GAAG,CAACF,GAAGC;QACnB,IAAI,CAACE,KAAK,GAAG,IAAI,CAAClB,MAAM;;kBAzFfF;;YAUPI,KAAAA;;;MAAJ,eAAoB;gBAClB,OAAO,IAAI,CAACG,MAAM;;iBAGpB,aAAUc,KAAa,EAAE;gBACvB,IAAI,IAAI,CAACd,MAAM,KAAKc,OAAO;oBACzB,IAAI,CAACf,UAAU,CAACF,KAAK,GAAGiB;oBACxB,IAAI,CAACd,MAAM,GAAGc;iBACf;;;;YAMChB,KAAAA;;;MAAJ,eAAqB;gBACnB,OAAO,IAAI,CAACG,OAAO;;iBAGrB,aAAWa,KAAa,EAAE;gBACxB,IAAI,IAAI,CAACb,OAAO,KAAKa,OAAO;oBAC1B,IAAI,CAACf,UAAU,CAACD,MAAM,GAAGgB;oBACzB,IAAI,CAACb,OAAO,GAAGa;iBAChB;;;;YAOCD,KAAAA;;;;MAAJ,eAAqB;gBACnB,IAAMnB,YAAY,IAAI,CAACK,UAAU;gBACjC,IAAI,OAAOO,oBAAoB,eAAe,CAAEZ,YAAAA,WAAqBY,kBAAkB;oBACrF,IAAI,CAACX,MAAM,CAACiB,GAAG,CACZlB,UAAUa,WAAW,GAAGF,mBAAoBX,UAAUG,KAAK,EAC5D,UAAWW,YAAY,GAAGH,mBAAoBX,UAAUI,MAAM;iBAEjE;gBACD,OAAO,IAAI,CAACH,MAAM;;iBAGpB,aAAUmB,KAAc,EAAE;gBACxB,IAAMpB,YAAY,IAAI,CAACK,UAAU;gBACjC,IAAI,OAAOO,oBAAoB,eAAe,CAAEZ,YAAAA,WAAqBY,kBAAkB;oBACrFZ,UAAUqB,KAAK,CAACC,eAAe,GAAI;oBACnCtB,UAAUqB,KAAK,CAACE,SAAS,GAAG,WAASH,MAAMJ,CAAC,GAAC,OAAII,MAAMH,CAAC,GAAC;iBAC1D;;;;WAvDQlB;;;ACFb;;IAGO,IAAMyB,6BAAN;aAAMA,aAqECC,GAAkB;QAC5B,IAAI,CAACC,IAAI,GAAGD;QACZ,IAAI,CAACE,cAAc,GAAG,IAAIC;QAE1B,IAAI,CAACC,KAAK;QACV,IAAI,CAACC,uBAAuB;;iBA1EnBN;;;MAgFXO,OAAAA,OAEC,GAFDA,SAAAA,QAAQC,cAAgC,EAAW;QACjD,OAAO,IAAI,CAACL,cAAc,CAACM,GAAG,CAACD;;;;MAMjCE,OAAAA,sCAkCC,GAlCDA,SAAAA,uCAAuCC,YAA+C,EAAW;QAC/F;QAEEnF,oBAeED,kCAfFC,mBACAa,sBAcEd,kCAdFc,qBACAC,4BAaEf,kCAbFe,2BACAa,8BAYE5B,kCAZF4B;QAEAC,iBAUE7B,kCAVF6B;QAEAC,UAQE9B,kCARF8B,SACAS,wBAOEvC,kCAPFuC;QAEAC,uBAKExC,kCALFwC,sBACAG,wBAIE3C,kCAJF2C;QAEAC,oBAEE5C,kCAFF4C,mBACAG,qBACE/C,kCADF+C;QAEF,IACGqC,gBAAgBnF,qBAAqBa,uBAAuBA,uBAC5DsE,gBAAgBrE,6BAA6BqE,gBAAgBxD,6BAC9D;YACA,OAAO,IAAI,CAACoD,OAAO,CAACK,iBAAiBC,IAAI;eACpC,IAAIF,iBAAiBvD,gBAAgB;YAC1C,OAAO,IAAI,CAACmD,OAAO,CAACK,iBAAiBE,IAAI;eACpC,IAAIH,gBAAgBtD,WAAWsD,gBAAgB7C,uBAAuB;YAC3E,OAAO,IAAI,CAACyC,OAAO,CAACK,iBAAiBG,GAAG;eACnC,IAAIJ,gBAAgB5C,wBAAwB4C,gBAAgBzC,uBAAuB;YACxF,OAAO,IAAI,CAACqC,OAAO,CAACK,iBAAiBI,KAAK;eACrC,IAAIL,gBAAgBxC,qBAAqBwC,gBAAgBrC,oBAAoB;YAClF,OAAO,IAAI,CAACiC,OAAO,CAACK,iBAAiBK,IAAI;SAC1C;QACD,OAAO,KAAK;;;;MAMd,OAAQZ,KAgEP,GAhED,SAAQA,QAAQ;QACd,IAAMa,MAAM,IAAI,CAACf,cAAc;QAC/B,IAAM,WAAe,IAAI,CAACF,GAAG,CAArBkB;QACR,IAAMC,mBAAmB,IAAI,CAACnB,GAAG,CAACmB,gBAAgB,CAACC,IAAI,CAAC,IAAI,CAACpB,GAAG;QAEhE,IACEqB,iBA6BEV,iBA7BFU,gBACAC,sBA4BEX,iBA5BFW,qBACAC,mBA2BEZ,iBA3BFY,kBACAC,mBA0BEb,iBA1BFa,kBACAC,eAyBEd,iBAzBFc,cACAC,oBAwBEf,iBAxBFe,mBACAC,kBAuBEhB,iBAvBFgB,iBACAC,iBAsBEjB,iBAtBFiB,gBACAC,cAqBElB,iBArBFkB,aAEAjB,OAmBED,iBAnBFC,MACAkB,cAkBEnB,iBAlBFmB,aACAhB,MAiBEH,iBAjBFG,KACAiB,aAgBEpB,iBAhBFoB,YACAlB,OAeEF,iBAfFE,MACAmB,cAcErB,iBAdFqB,aACAjB,QAaEJ,iBAbFI,OACAkB,eAYEtB,iBAZFsB,cACAjB,OAWEL,iBAXFK,MACAkB,cAUEvB,iBAVFuB,aAEAC,eAQExB,iBARFwB,cACAC,mBAOEzB,iBAPFyB,kBACAC,qBAME1B,iBANF0B,oBACAC,yBAKE3B,iBALF2B,wBACAC,yBAIE5B,iBAJF4B,wBACAC,mBAGE7B,iBAHF6B,kBACAC,uBAEE9B,iBAFF8B,sBACAC,2BACE/B,iBADF+B;QAEFzB,IAAIxB,GAAG,CAAC4B,gBAAgBH;QACxBD,IAAIxB,GAAG,CAAC6B,qBAAqBJ,YAAY,CAAC,CAACC,iBAAiBG;QAC5DL,IAAIxB,GAAG,CAAC8B,kBAAkBL,YAAY,CAAC,CAACC,iBAAiBI;QACzDN,IAAIxB,GAAG,CAAC+B,kBAAkBN,YAAY,CAAC,CAACC,iBAAiBK;QACzDP,IAAIxB,GAAG,CAACgC,cAAcP,YAAY,CAAC,CAACC,iBAAiBM;QACrDR,IAAIxB,GAAG,CAACiC,mBAAmBR,YAAY,CAAC,CAACC,iBAAiBO;QAC1DT,IAAIxB,GAAG,CAACkC,iBAAiBT,YAAY,CAAC,CAACC,iBAAiBQ;QACxDV,IAAIxB,GAAG,CAACmC,gBAAgBV;QACxBD,IAAIxB,GAAG,CAACoC,aAAaX,YAAY,CAAC,CAACC,iBAAiBU;QACpDZ,IAAIxB,GAAG,CAAC0C,cAAcjB,YAAY,CAAC,CAACC,iBAAiBgB;QACrDlB,IAAIxB,GAAG,CAAC2C,kBAAkBlB,YAAY,CAAC,CAACC,iBAAiBiB;QACzDnB,IAAIxB,GAAG,CAAC4C,oBAAoB,CAAC,CAAClB,iBAAiBkB;QAC/CpB,IAAIxB,GAAG,CAAC6C,wBAAwBpB,YAAY,CAAC,CAACC,iBAAiBmB;QAC/DrB,IAAIxB,GAAG,CACL+C,kBACA,YAAa,CAAC,CAACrB,iBAAiBqB,qBAAsB,CAAC,CAACrB,iBAAiBoB;QAE3EtB,IAAIxB,GAAG,CACLgD,sBACA,YAAa,CAAC,CAACtB,iBAAiBqB,qBAAsB,CAAC,CAACrB,iBAAiBsB;QAE3ExB,IAAIxB,GAAG,CAACiD,0BAA0B,CAAC,CAACvB,iBAAiBuB;QAErDzB,IAAIxB,GAAG,CAACmB,MAAM,CAAC,EAAEO,iBAAiBP,SAASO,iBAAiBW,YAAW;QACvEb,IAAIxB,GAAG,CAACqB,KAAK,CAAC,EAAEK,iBAAiBL,QAAQK,iBAAiBY,WAAU;QACpEd,IAAIxB,GAAG,CAACoB,MAAM,CAAC,EAAEM,iBAAiBN,SAASM,iBAAiBa,YAAW;QACvEf,IAAIxB,GAAG,CAACsB,OAAO,CAAC,EAAEI,iBAAiBJ,UAAUI,iBAAiBc,aAAY;QAC1EhB,IAAIxB,GAAG,CAACuB,MAAM,CAAC,EAAEG,iBAAiBH,SAASG,iBAAiBe,YAAW;;;;;;;;;MAWzE,OAAQS,oBAkBP,GAlBD,SAAQA,qBAAqBpC,cAAgC,EAAEqC,QAA2C,EAAE;QAC1G,IAAM5C,MAAM,IAAI,CAACA,GAAG;QACpB,IAAM6C,KAAK7C,IAAI6C,EAAE;QACjB,IAAIC,MAAM,IAAI;QAEd,IAAKA,MAAM9C,IAAImB,gBAAgB,CAACZ,iBAAkB;YAChD,IAAK,IAAIwC,SAASH,SAAU;gBAC1B,IAAMI,eAAeJ,QAAQ,CAACG,MAAM;gBACpC,IAAME,eAAeH,GAAG,CAACE,aAAa;;gBAGtC,IAAIC,uBAAAA,KAAAA,IAAAA,aAAc7B,IAAI,EAAE;oBACtByB,EAAE,CAACE,MAAM,GAAGE,aAAa7B,IAAI,CAAC0B;uBACzB;oBACLD,EAAE,CAACE,MAAM,GAAGE;iBACb;;SAEJ;;IAGH,OAAQ5C,uBAyDP,GAzDD,SAAQA,0BAA0B;QAChC,IACEoB,eAQEd,iBARFc,cACAC,oBAOEf,iBAPFe,mBACAC,kBAMEhB,iBANFgB,iBACAE,cAKElB,iBALFkB,aACAa,2BAIE/B,iBAJF+B,0BACAN,mBAGEzB,iBAHFyB,kBACAK,uBAEE9B,iBAFF8B,sBACAF,yBACE5B,iBADF4B;QAEF,IAAM,WAAe,IAAI,CAACvC,GAAG,CAArBkB;QAER,IAAI,CAACA,UAAU;YACb,IAAI,CAACyB,oBAAoB,CAAClB,cAAc;gBACtCyB,mBAAmB;;YAErB,IAAI,CAACP,oBAAoB,CAACjB,mBAAmB;gBAC3CyB,mBAAmB;gBACnBC,mBAAmB;gBACnBC,eAAe;gBACfC,iBAAiB;;YAEnB,IAAI,CAACX,oBAAoB,CAAChB,iBAAiB;gBACzC4B,qBAAqB;gBACrBC,uBAAuB;gBACvBC,qBAAqB;;YAEvB,IAAI,CAACd,oBAAoB,CAACd,aAAa;gBACrC6B,kBAAkB;;YAEpB,IAAMC,QAAQ;YACd,IAAI,IAAI,CAACrD,OAAO,CAACK,iBAAiBkB,WAAW,GAAG;gBAC9C,IAAM+B,iBAAiB,IAAI,CAACA,cAAc;gBAC1C,IAAK,IAAIC,IAAI,GAAGA,IAAID,gBAAgBC,IAAK;oBACvCA,KAAK,MAAMF,KAAK,CAAE,qBAAkBE,EAAI,GAAI,qBAAkBA,IAAE,QAAM;oBACtEF,KAAK,CAAC,gBAAcE,EAAI,GAAI,gBAAaA,IAAE;;gBAE7C,IAAI,CAAClB,oBAAoB,CAACd,aAAa;oBACrCA,aAAa;mBACV8B;aAEN;YACD,IAAI,CAAChB,oBAAoB,CAACP,kBAAkB;gBAC1C0B,YAAY;;YAEd,IAAI,CAACnB,oBAAoB,CAACF,sBAAsB;gBAC9CsB,SAAS;;YAEX,IAAI,CAACpB,oBAAoB,CAACJ,wBAAwB;gBAChDyB,SAAS;;SAEZ;QAED,IAAI,CAACrB,oBAAoB,CAACD,0BAA0B;YAClDuB,4BAA4B;;;kBAnRrBlE;;YAQPmE,KAAAA;iBAAJ,eAA8B;gBAC5B,OAAO,IAAI,CAAClE,GAAG,CAACmE,YAAY,CAACC,YAAY,CAAC,IAAI,CAACpE,GAAG,CAAC6C,EAAE,CAACwB,gBAAgB;;;;YAGpEC,KAAAA;iBAAJ,eAA4C;gBAC1C,OACE,IAAI,CAAChE,OAAO,CAACK,iBAAiBU,cAAc,KAC5C,IAAI,CAACf,OAAO,CAACK,iBAAiBwB,YAAY,KAC1C,IAAI,CAACnC,GAAG,CAACmE,YAAY,CAACC,YAAY,CAAC,IAAI,CAACpE,GAAG,CAAC6C,EAAE,CAAC0B,8BAA8B,IAAI;;;;YAOjFC,KAAAA;;;MAAJ,eAAiC;gBAC/B,OACE,IAAI,CAAClE,OAAO,CAACK,iBAAiBwB,YAAY,KAC1C,IAAI,CAACnC,GAAG,CAACmE,YAAY,CAACC,YAAY,CAAC,IAAI,CAACpE,GAAG,CAAC6C,EAAE,CAAC0B,8BAA8B,IAAI;;;;YAIjFX,KAAAA;iBAAJ,eAAqB;gBACnB,IAAI,CAAC,IAAI,CAACa,eAAe,EAAE;oBACzB,IAAI,IAAI,CAACnE,OAAO,CAACK,iBAAiBkB,WAAW,GAAG;wBAC9C,IAAI,CAAC4C,eAAe,GAAG,IAAI,CAACxE,IAAI,CAAC4C,EAAE,CAACuB,YAAY,CAAC,IAAI,CAACnE,IAAI,CAAC4C,EAAE,CAACa,gBAAgB;2BACzE;wBACL,IAAI,CAACe,eAAe,GAAG;qBACxB;iBACF;gBACD,OAAO,IAAI,CAACA,eAAe;;;;YAMzBC,KAAAA;;;MAAJ,eAA4B;gBAC1B,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE;oBACxB,IAAM7B,MAAM,IAAI,CAAC7C,IAAI,CAACkB,gBAAgB,CAACR,iBAAiB+B,wBAAwB;oBAChF,IAAI,CAACiC,cAAc,GAAG7B,MAAM,IAAI,CAAC7C,IAAI,CAAC4C,EAAE,CAACuB,YAAY,CAACtB,IAAI8B,8BAA8B,IAAI,CAAC;iBAC9F;gBACD,OAAO,IAAI,CAACD,cAAc;;;;YAMxBE,KAAAA;;;MAAJ,eAA8B;gBAC5B,IAAI,CAAC,IAAI,CAACC,gBAAgB,EAAE;oBAC1B,IAAMjC,KAAK,IAAI,CAAC5C,IAAI,CAAC4C,EAAE;oBACvB,IAAMkC,UAAU,IAAI,CAACzE,OAAO,CAACK,iBAAiBiB,cAAc;oBAE5D,IAAI,CAACkD,gBAAgB,GAAGC,UAAUlC,GAAGuB,YAAY,CAACvB,GAAGmC,WAAW,IAAI,CAAC;iBACtE;gBACD,OAAO,IAAI,CAACF,gBAAgB;;;;YAG1B9E,KAAAA;iBAAJ,eAAU;gBACR,OAAO,IAAI,CAACC,IAAI;;;;WAlEPF;;;ACNb;;IAGO,IAAMkF,6BAAN;aAAMA,aAICjF,GAAkB;QAC5B,IAAI,CAACA,GAAG,GAAGA;QACX,IAAI,CAACkF,cAAc,GAAG;;iBANbD;;;MAYX9D,OAAAA,gBAOC,GAPDA,SAAAA,iBAAiB2B,GAAqB,EAAE;QACtC,IAAI,IAAI,CAACoC,cAAc,CAACpC,IAAI,KAAKqC,WAAW;YAC1C,OAAO,IAAI,CAACD,cAAc,CAACpC,IAAI;SAChC;QAED,IAAI,CAACoC,cAAc,CAACpC,IAAI,GAAG,IAAI,CAAC9C,GAAG,CAAC6C,EAAE,CAACuC,YAAY,CAACtC;QACpD,OAAO,IAAI,CAACoC,cAAc,CAACpC,IAAI;;WAlBtBmC;;;ACDb;;;;;;IASO,IAAA;aAAMI,YASCrF,GAAkB,EAAEsF,SAAe;aARvCC,kBAA4B,EAAE;aAK9BC,UAA+C,IAAIrF;QAIzD,IAAI,CAACsF,UAAU,GAAGH;QAClB,IAAI,CAACI,sBAAsB,GAAG1F,IAAIM,OAAO,CAACK,iBAAiBgB,eAAe;QAC1E,IAAI,CAACgE,OAAO,GAAG3F,IAAIM,OAAO,CAACK,iBAAiBe,iBAAiB;QAC7D,IAAI,CAACkE,GAAG,GAAG5F,IAAI6C,EAAE;;iBAbRwC;;;MAmBXQ,OAAAA,IA8DC,GA9DDA,SAAAA,KAAKC,aAAkB,EAAEC,OAAgB,EAAQ;QAC/C,IAAMlD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAMN,YAAY,IAAI,CAACG,UAAU;;QAEjC,IAAMO,SAAS,IAAI,CAACL,OAAO,IAAIL,UAAUW,UAAU;QAEnD,IAAID,QAAQ;;YAEV,IAAIV,UAAUY,oBAAoB,EAAE;gBAClC,IAAI,CAACC,SAAS;aACf;YACD,IAAI,CAAC,IAAI,CAACX,OAAO,CAACY,GAAG,CAACN,cAAcO,EAAE,GAAG;gBACvC,IAAI,CAACC,YAAY,CAACR;aACnB;YACD,IAAMS,MAAM,IAAI,CAACf,OAAO,CAAChF,GAAG,CAACsF,cAAcO,EAAE;YAC7CxD,GAAGS,eAAe,CAACiD;eACd;YACL,IAAI,CAACC,oBAAoB,CAACV;SAC3B;;QAGD,IAAQW,sBAAyEnB,UAAzEmB,qBAAqBC,iBAAoDpB,UAApDoB,gBAAgBC,eAAoCrB,UAApCqB,cAAcC,oBAAsBtB,UAAtBsB;QAC3D,IAAQC,WAA2Bd,QAA3Bc,UAAUC,QAAiBf,QAAjBe,OAAOC,QAAUhB,QAAVgB;QAEzB,IAAI,CAACL,gBAAgB;YACnB,IAAID,qBAAqB;gBACvB,IAAIT,QAAQ;oBACVnD,GAAGmE,YAAY,CAACH,UAAUE,OAAOJ,cAAcG,QAAQF;uBAClD;oBACL,IAAM,gBAAoBH,oBAAoBQ,MAAM,CAA5CC;oBACRrE,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAEF;oBACvCrE,GAAGmE,YAAY,CAACH,UAAUE,OAAOJ,cAAcG,QAAQF;oBACvD/D,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAE,IAAI;iBAC5C;mBACI;gBACLvE,GAAGwE,UAAU,CAACR,UAAUC,OAAOC;aAChC;eACI;YACL,IAAI,IAAI,CAACrB,sBAAsB,EAAE;gBAC/B,IAAIe,qBAAqB;oBACvB,IAAIT,QAAQ;wBACVnD,GAAGW,qBAAqB,CAACqD,UAAUE,OAAOJ,cAAcG,QAAQF,mBAAmBF;2BAC9E;wBACL,IAAM,iBAAoBD,oBAAoBQ,MAAM,CAA5CC;wBACRrE,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAEF;wBACvCrE,GAAGW,qBAAqB,CAACqD,UAAUE,OAAOJ,cAAcG,QAAQF,mBAAmBF;wBACnF7D,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAE,IAAI;qBAC5C;uBACI;oBACLvE,GAAGU,mBAAmB,CAACsD,UAAUC,OAAOC,OAAOL;iBAChD;mBACI;gBACLY,OAAOC,KAAK,CAAC;aACd;SACF;;QAGD,IAAIvB,QAAQ;YACVnD,GAAGS,eAAe,CAAC,IAAI;eAClB;YACL,IAAI,CAACkE,cAAc;SACpB;;IAGHC,OAAAA,OAEC,GAFDA,SAAAA,UAAgB;QACd,IAAI,CAAC9B,OAAO,IAAI,IAAI,CAACQ,SAAS;;;;MAMhC,OAAQK,oBAyCP,GAzCD,SAAQA,qBAAqBV,aAAkB,EAAQ;QACrD,IAAMjD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAMN,YAAY,IAAI,CAACG,UAAU;;QAEjC,IAAMiC,uBAAuBpC,UAAUqC,qBAAqB;QAE5D,IAAI,CAACpC,eAAe,CAACqC,MAAM,GAAG;QAC9B,IAAMC,oBAAoB/B,cAAc+B,iBAAiB;;QAEzD,IAAMC,aAAaxC,UAAUyC,iBAAiB;QAE9C,IAAIC;QACJ,IAAIC;QAEJ,IAAK,IAAMC,QAAQL,kBAAmB;YACpC,IAAMM,MAAMN,iBAAiB,CAACK,KAAK;YACnC,IAAIC,QAAQ,CAAC,GAAG;YAEhB,IAAMC,UAAUN,UAAU,CAACI,KAAK;YAChC,IAAIE,SAAS;gBACX,IAA2BV,6CAAAA,oBAAoB,CAACU,QAAQC,YAAY,CAAC,EAA7DpB,SAAmBS,2CAAnBT,QAAQqB,SAAWZ,2CAAXY;gBAChBN,MAAMf,OAAOC,aAAa;;gBAE1B,IAAIe,iBAAiBD,KAAK;oBACxBC,eAAeD;oBACfnF,GAAGsE,UAAU,CAACtE,GAAG0F,YAAY,EAAEP;iBAChC;gBAEDnF,GAAG2F,uBAAuB,CAACL;gBAC3B,IAAMM,cAAcL,QAAQM,cAAc;gBAC1C7F,GAAG8F,mBAAmB,CAACR,KAAKM,YAAYG,IAAI,EAAEH,YAAYI,IAAI,EAAEJ,YAAYK,UAAU,EAAER,QAAQF,QAAQW,MAAM;gBAC9G,IAAI,IAAI,CAACrD,sBAAsB,EAAE;oBAC/B7C,GAAGY,mBAAmB,CAAC0E,KAAKC,QAAQY,gBAAgB;iBACrD;gBACD,IAAI,CAACzD,eAAe,CAAC0D,IAAI,CAACd;mBACrB;gBACLb,OAAO4B,IAAI,CAAC,iCAAiChB;aAC9C;;QAGHrF,GAAGsE,UAAU,CAACtE,GAAG0F,YAAY,EAAE,IAAI;;IAGrC,OAAQf,cAKP,GALD,SAAQA,iBAAiB;QACvB,IAAM3E,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAK,IAAI/B,IAAI,GAAGsF,IAAI,IAAI,CAAC5D,eAAe,CAACqC,MAAM,EAAE/D,IAAIsF,GAAGtF,IAAK;YAC3DhB,GAAGuG,wBAAwB,CAAC,IAAI,CAAC7D,eAAe,CAAC1B,EAAE;;;IAIvD,OAAQyC,YAoBP,GApBD,SAAQA,aAAaR,aAAkB,EAAQ;QAC7C,IAAMjD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAMW,MAAM1D,GAAGM,iBAAiB;4BAGhCN,GAAGS,eAAe,CAACiD;;QAGnB,IAAM,sBAA0B,IAAI,CAACd,UAAU,CAAvCgB;QACR,IAAIA,qBAAqB;YACvB5D,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAEX,oBAAoBQ,MAAM,CAACC,aAAa;SAChF;QACD,IAAI,CAACV,oBAAoB,CAACV;sBAG1BjD,GAAGS,eAAe,CAAC,IAAI;QACvBT,GAAGsE,UAAU,CAACtE,GAAGuE,oBAAoB,EAAE,IAAI;QAC3C,IAAI,CAACI,cAAc;QAEnB,IAAI,CAAChC,OAAO,CAAC/F,GAAG,CAACqG,cAAcO,EAAE,EAAEE;;IAGrC,OAAQJ,SAMP,GAND,SAAQA,YAAkB;QACxB,IAAMtD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAI,CAACJ,OAAO,CAAC6D,OAAO,CAAC,SAAC9C,KAAQ;YAC5B1D,GAAGO,iBAAiB,CAACmD;;QAEvB,IAAI,CAACf,OAAO,CAAC8D,KAAK;;WAvKTjE;;;ACdb;;IAGO,IAAMkE,+BAAN;aAAMA,eAMC1G,EAAyB;aAJ7B2G,cAAc;QAKpB,IAAI,CAAC5D,GAAG,GAAG/C;QACX,IAAI,CAAC2G,WAAW,GAAG;qBAGnB,IAAI,CAACA,WAAW,CAAC3G,GAAG4G,gCAAgC,CAAC,GAAG5G,GAAGuB,YAAY,CAACvB,GAAG4G,gCAAgC;QAC3G,IAAI,CAACD,WAAW,CAAC3G,GAAG6G,0BAA0B,CAAC,GAAG7G,GAAGuB,YAAY,CAACvB,GAAG6G,0BAA0B;QAC/F,IAAI,CAACF,WAAW,CAAC3G,GAAG8G,kBAAkB,CAAC,GAAG9G,GAAGuB,YAAY,CAACvB,GAAG8G,kBAAkB;QAC/E,IAAI,CAACH,WAAW,CAAC3G,GAAG0B,8BAA8B,CAAC,GAAG1B,GAAGuB,YAAY,CAACvB,GAAG0B,8BAA8B;QACvG,IAAI,CAACiF,WAAW,CAAC3G,GAAGwB,gBAAgB,CAAC,GAAGxB,GAAGuB,YAAY,CAACvB,GAAGwB,gBAAgB;;QAG3ExB,GAAG+G,iBAAiB,CAAC/G,GAAGgH,GAAG,EAAEhH,GAAGiH,IAAI,EAAEjH,GAAGgH,GAAG,EAAEhH,GAAGiH,IAAI;QACrDjH,GAAGkH,qBAAqB,CAAClH,GAAGmH,QAAQ,EAAEnH,GAAGmH,QAAQ;QACjDnH,GAAGoH,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QACnCpH,GAAGqH,UAAU,CAAC,GAAG,GAAG,GAAG;QACvBrH,GAAGsH,OAAO,CAACtH,GAAGuH,wBAAwB;;QAGtCvH,GAAGwH,MAAM,CAACxH,GAAGyH,UAAU;QACvBzH,GAAG0H,SAAS,CAAC1H,GAAG2H,IAAI;QACpB3H,GAAG4H,SAAS,CAAC,IAAI;;QAGjB5H,GAAGsH,OAAO,CAACtH,GAAG6H,YAAY;QAC1B7H,GAAG8H,mBAAmB,CAAC9H,GAAG+H,KAAK,EAAE/H,GAAGgI,MAAM,EAAE,GAAG;QAC/ChI,GAAG8H,mBAAmB,CAAC9H,GAAGiI,IAAI,EAAEjI,GAAGgI,MAAM,EAAE,GAAG;QAC9ChI,GAAGkI,iBAAiB,CAAClI,GAAG+H,KAAK,EAAE/H,GAAGmI,IAAI,EAAEnI,GAAGmI,IAAI,EAAEnI,GAAGmI,IAAI;QACxDnI,GAAGkI,iBAAiB,CAAClI,GAAGiI,IAAI,EAAEjI,GAAGmI,IAAI,EAAEnI,GAAGmI,IAAI,EAAEnI,GAAGmI,IAAI;QACvDnI,GAAGoI,WAAW,CAAC;;QAGfpI,GAAGwH,MAAM,CAACxH,GAAGqI,SAAS;QACtBrI,GAAGsI,QAAQ,CAACtI,GAAGiI,IAAI;QACnBjI,GAAGsH,OAAO,CAACtH,GAAGuI,mBAAmB;QACjCvI,GAAGwI,aAAa,CAAC,GAAG;;iBAzCX9B;;;MA+CXnF,OAAAA,YAEC,GAFDA,SAAAA,aAAakH,KAAK,EAAE;QAClB,OAAO,IAAI,CAAC9B,WAAW,CAAC8B,MAAM;;WAhDrB/B;;;ACYb;;IAGO,IAAMgC,0BAAN;aAAMA,UA4dCvL,GAAkB,EAAEwL,OAAgB,EAAEC,MAAc;QAC9D,IAAI,CAACC,QAAQ,GAAGF;QAChB,IAAI,CAACvL,IAAI,GAAGD;QACZ,IAAI,CAAC4F,GAAG,GAAG5F,IAAI6C,EAAE;QACjB,IAAI,CAAC8I,SAAS,GAAG3L,IAAIkB,QAAQ;QAC7B,IAAI,CAAC0K,OAAO,GAAGH;QACf,IAAI,CAACI,UAAU,GAAG,IAAI,CAACjG,GAAG,CAACkG,aAAa;;iBAle/BP;;;MAweX9D,OAAAA,OAKC,GALDA,SAAAA,UAAU;QACR,IAAI,CAAC7B,GAAG,CAACmG,aAAa,CAAC,IAAI,CAACF,UAAU;QACtC,IAAI,CAACH,QAAQ,GAAG,IAAI;QACpB,IAAI,CAACG,UAAU,GAAG,IAAI;QACtB,IAAI,CAACG,aAAa,GAAG,IAAI;;;;MAM3BC,OAAAA,sBAGC,GAHDA,SAAAA,uBAAuBtM,KAAc,EAAQ;QAC3C,IAAMkD,KAAK,IAAI,CAAC+C,GAAG;QACnB/C,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGsJ,oBAAoB,EAAExM,QAAQkD,GAAGuJ,sBAAsB,GAAGvJ,GAAGwJ,IAAI;;;;MAMrGC,OAAAA,eAMC,GANDA,SAAAA,kBAAwB;;QAEtB,IAAI,IAAI,CAACZ,QAAQ,CAAChN,KAAK,KAAK,KAAK,IAAI,CAACgN,QAAQ,CAAC/M,MAAM,KAAK,GAAG;YAC3D,IAAI,CAAC4N,KAAK;YACV,IAAI,CAAC3G,GAAG,CAAC4G,cAAc,CAAC,IAAI,CAACZ,OAAO;SACrC;;IAGH,OAAUW,KAET,GAFD,SAAUA,QAAQ;QAChB,IAAI,CAACtM,IAAI,CAACwM,WAAW,CAAC,IAAI;;;;MAM5B,OAAUrM,KAyCT,GAzCD,SAAUA,MAAMsM,MAAe,EAAQ;QACrC,IAAM7J,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAW,IAAI,CAACyK,SAAS;QAC/B,IAA+C,sBAAA,IAAI,CAACK,aAAa,EAA3DW,iBAAyC,oBAAzCA,gBAAgBC,aAAyB,oBAAzBA,YAAYC,WAAa,oBAAbA;;QAElC,IAAwD,iBAAA,IAAI,CAACnB,QAAQ,EAA7DoB,cAAgD,eAAhDA,aAAapO,QAAmC,eAAnCA,OAAOC,SAA4B,eAA5BA,QAAQoO,kBAAoB,eAApBA;QAEpC,IAAI,CAACR,KAAK;QAEV,IAAIrL,YAAY,EAAE0L,eAAe/J,GAAGmK,eAAe,IAAIJ,eAAe/J,GAAGoK,KAAI,GAAI;YAC/EpK,GAAGqK,YAAY,CAAC,IAAI,CAACtB,OAAO,EAAEkB,aAAaH,gBAAgBjO,OAAOC;eAC7D;YACL,IAAI,CAAC+N,QAAQ;gBACX,IAAIK,iBAAiB;oBACnBlK,GAAGsK,UAAU,CAAC,IAAI,CAACvB,OAAO,EAAE,GAAGe,gBAAgBjO,OAAOC,QAAQ,GAAGiO,YAAYC,UAAU,IAAI;uBACtF;oBACL,IAAK,IAAIhJ,IAAI,GAAGA,IAAIiJ,aAAajJ,IAAK;wBACpC,IAAMuJ,WAAWC,KAAKC,GAAG,CAAC,GAAG5O,SAASmF;wBACtC,IAAM0J,YAAYF,KAAKC,GAAG,CAAC,GAAG3O,UAAUkF;wBACxChB,GAAGsK,UAAU,CAAC,IAAI,CAACvB,OAAO,EAAE/H,GAAG8I,gBAAgBS,UAAUG,WAAW,GAAGX,YAAYC,UAAU,IAAI;;iBAEpG;mBACI;gBACL,IAAK,IAAIhJ,KAAI,GAAGA,KAAIiJ,aAAajJ,KAAK;oBACpC,IAAM+E,OAAOyE,KAAKC,GAAG,CAAC,GAAG5O,SAASmF;oBAClC,IAAK,IAAI2J,YAAY,GAAGA,YAAY,GAAGA,YAAa;wBAClD3K,GAAGsK,UAAU,CACXtK,GAAG4K,2BAA2B,GAAGD,WACjC3J,IACA8I,gBACA/D,MACAA,MACA,GACAgE,YACAC,UACA,IAAI;;;aAIX;SACF;;;;;;;;;;;MAaH,OAAUa,eAiCT,GAjCD,SAAUA,gBACRC,IAA4B,EAC5BpO,CAAS,EACTC,CAAS,EACTd,KAAa,EACbC,MAAc,EACdiP,QAAgB,EAChBC,GAAoB,EACd;QACN,IAAMhL,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAiC,sBAAA,IAAI,CAACoG,aAAa,EAA3CY,aAAyB,oBAAzBA,YAAYC,WAAa,oBAAbA;QAEpBhK,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAACC,mBAAmB;QAE3D,IAAIJ,WAAW,KAAK,CAAC,IAAI,CAACjC,SAAS,EAAE;YACnCiC,WAAW;YACXtG,OAAOC,KAAK,CAAC;SACd;QAED,IAAIoG,QAAQ,IAAI,EAAE;YAChB9K,GAAGoL,oBAAoB,CACrBpL,GAAGkL,WAAW,EACdlL,GAAGqL,iBAAiB,EACpBrL,GAAG4K,2BAA2B,GAAGE,MACjC,IAAI,CAAC9B,UAAU,EACf+B;eAEG;YACL/K,GAAGoL,oBAAoB,CAACpL,GAAGkL,WAAW,EAAElL,GAAGqL,iBAAiB,EAAErL,GAAGsL,UAAU,EAAE,IAAI,CAACtC,UAAU,EAAE+B;SAC/F;QACD/K,GAAGuL,UAAU,CAAC7O,GAAGC,GAAGd,OAAOC,QAAQiO,YAAYC,UAAUgB;QAEzDhL,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;;IAGzC,OAAQM,YA4BP,GA5BD,SAAQA,aAAa1O,KAAsB,EAAE2L,KAAa,EAAQ;QAChE,IAAMzI,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAW,IAAI,CAACyK,SAAS;QAC/B,IAAMF,SAAS,IAAI,CAACG,OAAO;QAC3B,IAA0B,iBAAA,IAAI,CAACF,QAAQ,EAA/BhN,QAAkB,eAAlBA,OAAOC,SAAW,eAAXA;QAEf,IACE,CAACuC,YACDvB,UAAU2O,gBAAgBC,KAAK,KAC9B,CA1mBMhD,UA0mBKiD,WAAW,CAAC9P,UAAU,CA1mB3B6M,UA0mBsCiD,WAAW,CAAC7P,OAAM,GAC/D;YACA2I,OAAO4B,IAAI,CACT;YAEFvJ,QAAQ2O,gBAAgBC,KAAK;SAC9B;QAED,OAAQ5O;YACN,KAAK2O,gBAAgBC,KAAK;gBACxB1L,GAAGqJ,aAAa,CAACT,QAAQH,OAAOzI,GAAG4L,aAAa;gBAChD;YACF,KAAKH,gBAAgBI,MAAM;gBACzB7L,GAAGqJ,aAAa,CAACT,QAAQH,OAAOzI,GAAG8L,MAAM;gBACzC;YACF,KAAKL,gBAAgBM,MAAM;gBACzB/L,GAAGqJ,aAAa,CAACT,QAAQH,OAAOzI,GAAGgM,eAAe;gBAClD;;;IAIN,OAAUb,mBAMT,GAND,SAAUA,sBAAwC;QAChD,IAAIc,cAAc,IAAI,CAAC7O,IAAI,CAAC8O,gBAAgB;QAC5C,IAAI,CAACD,aAAa;YAChB,IAAI,CAAC7O,IAAI,CAAC8O,gBAAgB,GAAGD,cAAc,IAAI,CAAClJ,GAAG,CAACoJ,iBAAiB;SACtE;QACD,OAAOF;;qBAloBT,UAAON,WAEN,GAFD,SAAOA,YAAYS,CAAS,EAAW;QACrC,OAAO,CAACA,IAAKA,IAAI,CAAC,MAAO;;;;;MAHhB1D,UAUJ2D,gBAiNN,GAjND,SAAOA,iBACLC,MAAqB,EACrBtM,EAAkD,EAClD3B,QAAiB,EACI;QACrB,OAAQiO;YACN,KAAKC,cAAcC,MAAM;gBACvB,OAAO;oBACL1C,gBAAgBzL,WAAW2B,GAAGyM,IAAI,GAAGzM,GAAG0M,GAAG;oBAC3C3C,YAAY/J,GAAG0M,GAAG;oBAClB1C,UAAUhK,GAAG2M,aAAa;oBAC1BC,cAAc,KAAK;;YAEvB,KAAKL,cAAcM,QAAQ;gBACzB,OAAO;oBACL/C,gBAAgBzL,WAAW2B,GAAG8M,KAAK,GAAG9M,GAAG+M,IAAI;oBAC7ChD,YAAY/J,GAAG+M,IAAI;oBACnB/C,UAAUhK,GAAG2M,aAAa;oBAC1BC,cAAc,KAAK;;YAEvB,KAAKL,cAAcS,QAAQ;gBACzB,OAAO;oBACLlD,gBAAgBzL,WAAW2B,GAAGiN,KAAK,GAAGjN,GAAG+M,IAAI;oBAC7ChD,YAAY/J,GAAG+M,IAAI;oBACnB/C,UAAUhK,GAAGkN,sBAAsB;oBACnCN,cAAc,KAAK;;YAEvB,KAAKL,cAAcY,QAAQ;gBACzB,OAAO;oBACLrD,gBAAgBzL,WAAW2B,GAAGoN,OAAO,GAAGpN,GAAG+M,IAAI;oBAC/ChD,YAAY/J,GAAG+M,IAAI;oBACnB/C,UAAUhK,GAAGqN,sBAAsB;oBACnCT,cAAc,KAAK;;YAEvB,KAAKL,cAAce,MAAM;gBACvB,OAAO;oBACLxD,gBAAgBzL,WAAW2B,GAAGuN,MAAM,GAAGvN,GAAG0M,GAAG;oBAC7C3C,YAAY/J,GAAG0M,GAAG;oBAClB1C,UAAUhK,GAAGwN,oBAAoB;oBACjCZ,cAAc,KAAK;;YAEvB,KAAKL,cAAckB,MAAM;gBACvB,OAAO;oBACL3D,gBAAgB9J,GAAGoK,KAAK;oBACxBL,YAAY/J,GAAGoK,KAAK;oBACpBJ,UAAUhK,GAAG2M,aAAa;oBAC1BC,cAAc,KAAK;;YAEvB,KAAKL,cAAcmB,cAAc;gBAC/B,OAAO;oBACL5D,gBAAgB9J,GAAGmK,eAAe;oBAClCJ,YAAY/J,GAAGmK,eAAe;oBAC9BH,UAAUhK,GAAG2M,aAAa;oBAC1BC,cAAc,KAAK;;YAEvB,KAAKL,cAAcoB,YAAY;gBAC7B,OAAO;oBACL7D,gBAAgBzL,WAAW2B,GAAGkB,OAAO,GAAGlB,GAAG+M,IAAI;oBAC/ChD,YAAY/J,GAAG+M,IAAI;oBACnB/C,UAAUhK,GAAGiB,UAAU;oBACvB2L,cAAc,KAAK;;YAEvB,KAAKL,cAAcqB,YAAY;gBAC7B,OAAO;oBACL9D,gBAAgBzL,WAAW2B,GAAGmB,OAAO,GAAGnB,GAAG+M,IAAI;oBAC/ChD,YAAY/J,GAAG+M,IAAI;oBACnB/C,UAAUhK,GAAG6N,KAAK;oBAClBjB,cAAc,KAAK;;YAEvB,KAAKL,cAAcuB,IAAI;gBACrB,OAAO;oBACLhE,gBAAgBrR,kCAAkC4C,iBAAiB;oBACnEuR,cAAc,IAAI;;YAEtB,KAAKL,cAAcwB,IAAI;gBACrB,OAAO;oBACLjE,gBAAgBrR,kCAAkC+C,kBAAkB;oBACpEoR,cAAc,IAAI;;YAEtB,KAAKL,cAAcyB,QAAQ;gBACzB,OAAO;oBACLlE,gBAAgBrR,kCAAkC6B,cAAc;oBAChEsS,cAAc,IAAI;;YAEtB,KAAKL,cAAc0B,QAAQ;gBACzB,OAAO;oBACLnE,gBAAgBrR,kCAAkCkC,SAAS;oBAC3DiS,cAAc,IAAI;;YAEtB,KAAKL,cAAc2B,UAAU;gBAC3B,OAAO;oBACLpE,gBAAgBrR,kCAAkCoC,6BAA6B;oBAC/E+R,cAAc,IAAI;;YAEtB,KAAKL,cAAc4B,UAAU;gBAC3B,OAAO;oBACLrE,gBAAgBrR,kCAAkCsC,cAAc;oBAChE6R,cAAc,IAAI;;YAEtB,KAAKL,cAAc6B,UAAU;gBAC3B,OAAO;oBACLtE,gBAAgBrR,kCAAkCyC,oBAAoB;oBACtE0R,cAAc,IAAI;;YAEtB,KAAKL,cAAc8B,WAAW;gBAC5B,OAAO;oBACLvE,gBAAgBrR,kCAAkC2C,qBAAqB;oBACvEwR,cAAc,IAAI;;YAEtB,KAAKL,cAAc+B,UAAU;gBAC3B,OAAO;oBACLxE,gBAAgBrR,kCAAkCwC,oBAAoB;oBACtE2R,cAAc,IAAI;;YAEtB,KAAKL,cAAcgC,WAAW;gBAC5B,OAAO;oBACLzE,gBAAgBrR,kCAAkC0C,qBAAqB;oBACvEyR,cAAc,IAAI;;YAEtB,KAAKL,cAAciC,QAAQ;gBACzB,OAAO;oBACL1E,gBAAgBrR,kCAAkCC,iBAAiB;oBACnEkU,cAAc,IAAI;;YAEtB,KAAKL,cAAckC,QAAQ;gBACzB,OAAO;oBACL3E,gBAAgBrR,kCAAkCG,iBAAiB;oBACnEgU,cAAc,IAAI;;YAEtB,KAAKL,cAAcmC,QAAQ;gBACzB,OAAO;oBACL5E,gBAAgBrR,kCAAkCK,iBAAiB;oBACnE8T,cAAc,IAAI;;YAEtB,KAAKL,cAAcoC,QAAQ;gBACzB,OAAO;oBACL7E,gBAAgBrR,kCAAkCQ,iBAAiB;oBACnE2T,cAAc,IAAI;;YAEtB,KAAKL,cAAcqC,UAAU;gBAC3B,OAAO;oBACL9E,gBAAgBrR,kCAAkCY,mBAAmB;oBACrEuT,cAAc,IAAI;;YAEtB,KAAKL,cAAcsC,UAAU;gBAC3B,OAAO;oBACL/E,gBAAgBrR,kCAAkCc,mBAAmB;oBACrEqT,cAAc,IAAI;;YAGtB,KAAKL,cAAcuC,KAAK;gBACtB,OAAO;oBACLhF,gBAAgBzL,WAAW2B,GAAG+O,kBAAkB,GAAG/O,GAAGgP,eAAe;oBACrEjF,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAU3L,WAAW2B,GAAG6N,KAAK,GAAG7N,GAAGiP,cAAc;oBACjDrC,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAK5C,cAAc6C,YAAY;gBAC7B,OAAO;oBACLtF,gBAAgBzL,WAAW2B,GAAGqP,iBAAiB,GAAGrP,GAAGsP,aAAa;oBAClEvF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAU3L,WAAW2B,GAAGuP,8BAA8B,GAAGvP,GAAGK,iBAAiB;oBAC7EuM,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C,KAAKjD,cAAckD,OAAO;gBACxB,OAAO;oBACL3F,gBAAgBzL,WAAW2B,GAAG0P,iBAAiB,GAAG1P,GAAGgP,eAAe;oBACpEjF,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAGiP,cAAc;oBAC3BrC,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAK5C,cAAcoD,eAAe;gBAChC,OAAO;oBACL7F,gBAAgBzL,WAAW2B,GAAG4P,gBAAgB,GAAG5P,GAAGsP,aAAa;oBACjEvF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAUhK,GAAGK,iBAAiB;oBAC9BuM,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C,KAAKjD,cAAcsD,OAAO;gBACxB,OAAO;oBACL/F,gBAAgB9J,GAAG8P,iBAAiB;oBACpC/F,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAG+P,YAAY;oBACzBnD,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAK5C,cAAcyD,OAAO;gBACxB,OAAO;oBACLlG,gBAAgB9J,GAAG+O,kBAAkB;oBACrChF,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAG6N,KAAK;oBAClBjB,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAK5C,cAAc0D,eAAe;gBAChC,OAAO;oBACLnG,gBAAgB9J,GAAGqP,iBAAiB;oBACpCtF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAUhK,GAAGuP,8BAA8B;oBAC3C3C,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C;gBACE,MAAM,IAAIU,MAAM,6DAA2D5D,QAAU;;;;;;MAzNhF5D,UAiOJyH,iCA0EN,GA1ED,SAAOA,kCACL7D,MAA+B,EAC/BtM,EAAkD,EAClD3B,QAAiB,EACI;QACrB,OAAQiO;YACN,KAAK8D,wBAAwBtB,KAAK;gBAChC,OAAO;oBACLhF,gBAAgBzL,WAAW2B,GAAG+O,kBAAkB,GAAG/O,GAAG0P,iBAAiB;oBACvE3F,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAU3L,WAAW2B,GAAG6N,KAAK,GAAG7N,GAAGiP,cAAc;oBACjDrC,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAKiB,wBAAwBhB,YAAY;gBACvC,OAAO;oBACLtF,gBAAgBzL,WAAW2B,GAAGqP,iBAAiB,GAAGrP,GAAGsP,aAAa;oBAClEvF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAU3L,WAAW2B,GAAGuP,8BAA8B,GAAGvP,GAAGK,iBAAiB;oBAC7EuM,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C,KAAKY,wBAAwBC,OAAO;gBAClC,OAAO;oBACLvG,gBAAgB9J,GAAGsQ,cAAc;oBACjCvG,YAAY/J,GAAGuQ,kBAAkB;oBACjCvG,UAAUhK,GAAG2M,aAAa;oBAC1BC,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGuQ,kBAAkB;;YAErC,KAAKH,wBAAwBX,OAAO;gBAClC,OAAO;oBACL3F,gBAAgB9J,GAAG0P,iBAAiB;oBACpC3F,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAGiP,cAAc;oBAC3BrC,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAKiB,wBAAwBT,eAAe;gBAC1C,OAAO;oBACL7F,gBAAgBzL,WAAW2B,GAAG4P,gBAAgB,GAAG5P,GAAGsP,aAAa;oBACjEvF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAUhK,GAAGK,iBAAiB;oBAC9BuM,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C,KAAKY,wBAAwBP,OAAO;gBAClC,OAAO;oBACL/F,gBAAgB9J,GAAG8P,iBAAiB;oBACpC/F,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAG+P,YAAY;oBACzBnD,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAEnC,KAAKiB,wBAAwBJ,OAAO;gBAClC,OAAO;oBACLlG,gBAAgB9J,GAAG+O,kBAAkB;oBACrChF,YAAY/J,GAAGgP,eAAe;oBAC9BhF,UAAUhK,GAAG6N,KAAK;oBAClBjB,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGmP,gBAAgB;;YAGnC,KAAKiB,wBAAwBH,eAAe;gBAC1C,OAAO;oBACLnG,gBAAgB9J,GAAGqP,iBAAiB;oBACpCtF,YAAY/J,GAAGsP,aAAa;oBAC5BtF,UAAUhK,GAAGuP,8BAA8B;oBAC3C3C,cAAc,KAAK;oBACnBsC,YAAYlP,GAAGwP,wBAAwB;;YAE3C;gBACE,MAAM,IAAIU,MAAM,6DAA2D5D,QAAU;;;;;;MAzShF5D,UAiTJ8H,qBA2BN,GA3BD,SAAOA,sBAAsBlE,MAAqB,EAAEnP,GAAkB,EAAW;QAC/E,OAAQmP;YACN,KAAKC,cAAcoB,YAAY;gBAC7B,IAAI,CAACxQ,IAAIM,OAAO,CAACK,iBAAiByB,gBAAgB,GAAG;oBACnD,OAAO,KAAK;iBACb;gBACD;YACF,KAAKgN,cAAcqB,YAAY;gBAC7B,IAAI,CAACzQ,IAAIM,OAAO,CAACK,iBAAiBwB,YAAY,GAAG;oBAC/C,OAAO,KAAK;iBACb;gBACD;YACF,KAAKiN,cAAckD,OAAO;YAC1B,KAAKlD,cAAcoD,eAAe;YAClC,KAAKpD,cAAcuC,KAAK;YACxB,KAAKvC,cAAc6C,YAAY;gBAC7B,IAAI,CAACjS,IAAIM,OAAO,CAACK,iBAAiBc,YAAY,GAAG;oBAC/C,OAAO,KAAK;iBACb;gBACD;YACF,KAAK2N,cAAcsD,OAAO;YAC1B,KAAKtD,cAAcyD,OAAO;YAC1B,KAAKzD,cAAc0D,eAAe;gBAChC,OAAO9S,IAAIkB,QAAQ;;QAGvB,OAAO,IAAI;;;;MA3UFqK,UAgVJ+H,+BAqBN,GArBD,SAAOA,gCAAgCnE,MAAqB,EAAEnP,GAAkB,EAAW;QACzF,IAAIuT,cAAc,IAAI;QAEtB,OAAQpE;YACN,KAAKC,cAAcoB,YAAY;gBAC7B;oBACE,IAAI,CAACxQ,IAAIM,OAAO,CAACK,iBAAiB8B,oBAAoB,KAAK,CAACzC,IAAIM,OAAO,CAACK,iBAAiByB,gBAAgB,GAAG;wBAC1GmR,cAAc,KAAK;qBACpB;;gBAEH;YACF,KAAKnE,cAAcqB,YAAY;gBAC7B;oBACE,IAAI,CAACzQ,IAAIM,OAAO,CAACK,iBAAiB6B,gBAAgB,KAAK,CAACxC,IAAIM,OAAO,CAACK,iBAAiBwB,YAAY,GAAG;wBAClGoR,cAAc,KAAK;qBACpB;;gBAEH;;QAGJ,OAAOA;;;;MApWEhI,UA0WJiI,+BAWN,GAXD,SAAOA,gCAAgCrE,MAA+B,EAAEnP,GAAkB,EAAW;QACnG,IAAI,CAACA,IAAIkB,QAAQ,EAAE;YACjB,OAAQiO;gBACN,KAAK8D,wBAAwBP,OAAO;gBACpC,KAAKO,wBAAwBJ,OAAO;gBACpC,KAAKI,wBAAwBH,eAAe;oBAC1C,OAAO,KAAK;;SAEjB;QAED,OAAO,IAAI;;kBApXFvH;;YAyYPkI,KAAAA;;;MAAJ,aAAc9T,KAAsB,EAAE;gBACpC,IAAI,CAAC4M,KAAK;gBACV,IAAI,CAAC8B,YAAY,CAAC1O,OAAO,IAAI,CAACiG,GAAG,CAAC8N,cAAc;;;;YAM9CC,KAAAA;;;MAAJ,aAAchU,KAAsB,EAAE;gBACpC,IAAI,CAAC4M,KAAK;gBACV,IAAI,CAAC8B,YAAY,CAAC1O,OAAO,IAAI,CAACiG,GAAG,CAACgO,cAAc;;;;YAM9CC,KAAAA;;;MAAJ,aAAelU,KAAwB,EAAE;gBACvC,IAAMkD,KAAK,IAAI,CAAC+C,GAAG;gBACnB,IAAM6F,SAAS,IAAI,CAACG,OAAO;kCAE3B,IAAQkI,UAAY,IAAI,CAACpI,QAAQ,CAAzBoI;gBAER,IAAI,CAACvH,KAAK;gBACV,OAAQ5M;oBACN,KAAKoU,kBAAkBC,KAAK;wBAC1BnR,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGoR,kBAAkB,EAAEpR,GAAGqR,OAAO;wBAC1DrR,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGsR,kBAAkB,EAAEL,UAAUjR,GAAGuR,sBAAsB,GAAGvR,GAAGqR,OAAO;wBAChG;oBACF,KAAKH,kBAAkBM,QAAQ;wBAC7BxR,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGoR,kBAAkB,EAAEpR,GAAGyR,MAAM;wBACzDzR,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGsR,kBAAkB,EAAEL,UAAUjR,GAAG0R,qBAAqB,GAAG1R,GAAGyR,MAAM;wBAC9F;oBACF,KAAKP,kBAAkBS,SAAS;wBAC9B3R,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGoR,kBAAkB,EAAEpR,GAAGyR,MAAM;wBACzDzR,GAAGqJ,aAAa,CAACT,QAAQ5I,GAAGsR,kBAAkB,EAAEL,UAAUjR,GAAG4R,oBAAoB,GAAG5R,GAAGyR,MAAM;wBAC7F;;;;;YAOFI,KAAAA;;;MAAJ,aAAe/U,KAAa,EAAE;gBAC5B,IAAMkD,KAAK,IAAI,CAAC+C,GAAG;gBAEnB,IAAI,CAAC2G,KAAK;gBACV1J,GAAG8R,aAAa,CAAC,IAAI,CAAC/I,OAAO,EAAE/I,GAAGoB,0BAA0B,EAAEtE;;;;YAG5DiV,KAAAA;iBAAJ,aAAyBjV,KAAkC,EAAE;gBAC3D,IAAI,CAAC4M,KAAK;gBAEV,IAAM1J,KAAK,IAAI,CAAC+C,GAAG;gBACnB,OAAQjG;oBACN,KAAKkV,4BAA4BC,KAAK;wBACpCjS,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAGmS,KAAK;wBAChE;oBACF,KAAKH,4BAA4BI,IAAI;wBACnCpS,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAG2H,IAAI;wBAC/D;oBACF,KAAKqK,4BAA4BK,KAAK;wBACpCrS,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAGsS,KAAK;wBAChE;oBACF,KAAKN,4BAA4BO,SAAS;wBACxCvS,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAGwS,MAAM;wBACjE;oBACF,KAAKR,4BAA4BS,OAAO;wBACtCzS,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAG0S,OAAO;wBAClE;oBACF,KAAKV,4BAA4BW,QAAQ;wBACvC3S,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAG4S,QAAQ;wBACnE;oBACF,KAAKZ,4BAA4Ba,YAAY;wBAC3C7S,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAG8S,MAAM;wBACjE;oBACF,KAAKd,4BAA4Be,MAAM;wBACrC/S,GAAGqJ,aAAa,CAAC,IAAI,CAACN,OAAO,EAAE/I,GAAGkS,oBAAoB,EAAElS,GAAGgI,MAAM;wBACjE;;;;;WAtdKU;;;ACLb;;IAGO,IAAA;aAAMsK,eAgBC7V,GAAkB,EAAEyL,MAAoB;aAT5CqK,0BAA+C,EAAE;aAIjDC,eAAuB;QAM7B,IAAI,CAACnQ,GAAG,GAAG5F,IAAI6C,EAAE;QACjB,IAAI,CAAC8I,SAAS,GAAG3L,IAAIkB,QAAQ;QAC7B,IAAI,CAAC0K,OAAO,GAAGH;0BAGf,IAAQuK,iBAA0CvK,OAA1CuK,gBAAgBC,SAA0BxK,OAA1BwK,QAAQvX,QAAkB+M,OAAlB/M,OAAOC,SAAW8M,OAAX9M;QACvC,IAAMuX,iBAAiBD,YAAAA,QAAkBE;;;;QAOzC,IAAK,IAAItS,IAAI,GAAGuS,IAAIJ,eAAepO,MAAM,EAAE/D,IAAIuS,GAAGvS,IAAK;YACrD,IAAMsL,SAAS6G,cAAc,CAACnS,EAAE,CAACwS,OAAO;YACxC,IAAI,CAAC9K,UAAU+H,+BAA+B,CAACnE,QAAQnP,MAAM;gBAC3D,MAAM,IAAI+S,MAAM,oCAAkC3D,aAAa,CAACD,OAAO,GAAC,oBAAmB;aAC5F;;QAGH,IAAI,CAAC+G,kBAAkB,CAAC3K,UAAUiI,+BAA+B,CAACyC,QAAQjW,MAAM;YAC9E,MAAM,IAAI+S,MAAM,oCAAkC3D,aAAa,CAAC6G,OAAO,GAAC,oBAAmB;SAC5F;QAED,IAAID,eAAepO,MAAM,GAAG,KAAK,CAAC5H,IAAIM,OAAO,CAACK,iBAAiBkB,WAAW,GAAG;YAC3E,MAAM,IAAIkR,MAAM,wBAAwB;SACzC;QAED,IAAIiD,eAAeM,IAAI,CAAC,SAACrH;mBAAeA,EAAEvQ,KAAK,KAAKA,SAASuQ,EAAEtQ,MAAM,KAAKA;YAAS;YACjF,MAAM,IAAIoU,MAAM,oDAAoD;SACrE;QAED,IAAImD,mBAAmBD,OAAOvX,KAAK,KAAKA,SAASuX,OAAOtX,MAAM,KAAKA,MAAK,GAAI;YAC1E,MAAM,IAAIoU,MAAM,oDAAoD;SACrE;;QAGD,IAAIiD,eAAepO,MAAM,GAAG,KAAKoO,eAAeM,IAAI,CAAC,SAACrH;mBAAgB,YAADA,GAAasH;YAAc;YAC9F,MAAM,IAAIxD,MAAM,qCAAqC;SACtD;QAED,IAAMlO,kBAAkB7E,IAAIwW,UAAU,CAAC3R,eAAe;QACtD,IAAI4G,OAAOgL,YAAY,GAAG5R,iBAAiB;YACzCyC,OAAO4B,IAAI,CAAE,4EAAyErE;8BAGtF4G,OAAOiL,aAAa,GAAG7R;SACxB;QAED,IAAI,CAAC8R,YAAY,GAAG,IAAI,CAAC/Q,GAAG,CAACoJ,iBAAiB;;QAG9C,IAAI,CAAC4H,YAAY;;QAGjB,IAAInL,OAAOgL,YAAY,GAAG,GAAG;YAC3B,IAAI,CAACI,gBAAgB,GAAG,IAAI,CAACjR,GAAG,CAACoJ,iBAAiB;YAClD,IAAI,CAAC8H,YAAY;SAClB;;iBA3EQjB;;;;;MAmFXkB,OAAAA,mBA8CC,GA9CDA,SAAAA,oBAAoBvJ,SAA0B,EAAEI,QAAgB,EAAQ;QACtE,IAAqC,QAAA,IAAI,EAA5B/K,KAAwB,MAA7B+C,KAASgG,SAAoB,MAApBA;QACjB,IAAQnK,eAAiBgK,OAAjBhK;QACR,IAAMuV,eAAevL,OAAOwL,eAAe,CAAC;QAC5C,IAAMC,aAAatJ,aAAa,IAAI,CAACmI,YAAY;QAEjDlT,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAAC4I,YAAY;QAEpD,IAAIK,cAAc;YAChB,IAAMtK,SAASsK,YAAAA,cAAwBT;YACvC,IAAIW,cAAcxK,QAAQ;gBACxB7J,GAAGoL,oBAAoB,CACrBpL,GAAGkL,WAAW,EACdlL,GAAGqL,iBAAiB,EACpBxB,SAAS7J,GAAG4K,2BAA2B,GAAGD,YAAY3K,GAAGsL,UAAU;gBAElE6I,aAAaG,gBAAgB,CAAetL,UAAU,EACvD+B;aAEH;SACF;QACD,IAAInM,cAAc;YAChB,IAAMiL,UAASjL,YAAAA,cAAwB8U;YACvC,IAAIW,cAAcxK,SAAQ;;gBAExB,IAAM0K,kBAA6B3V,aAAa0V,gBAAgB;gBAChEtU,GAAGoL,oBAAoB,CACrBpL,GAAGkL,WAAW,EACdqJ,gBAAgBpL,aAAa,CAAC+F,UAAU,EACxCrF,UAAS7J,GAAG4K,2BAA2B,GAAGD,YAAY3K,GAAGsL,UAAU,EACnEiJ,gBAAgBvL,UAAU,EAC1B+B;aAEH;eACI;YACL,IAAIsJ,YAAY;;gBAEd,IAAM,iBAAqB3L,UAAUyH,iCAAiC,CAACvH,OAAOwK,MAAM,EAAEpT,IAAI,IAAI,CAAC8I,SAAS,EAAhGgB;gBACR9J,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAE,IAAI,CAACC,kBAAkB;gBAC5D1U,GAAG2U,mBAAmB,CAAC3U,GAAGyU,YAAY,EAAE3K,gBAAgBlB,OAAO/M,KAAK,IAAIkP,UAAUnC,OAAO9M,MAAM,IAAIiP;aACpG;SACF;QACD,IAAI,CAACmI,YAAY,GAAGnI;;QAGpB,IAAI,CAAC6J,mBAAmB;;;;MAM1BC,OAAAA,gBAuBC,GAvBDA,SAAAA,mBAAyB;QACvB,IAAI,CAAC,IAAI,CAACb,gBAAgB,EAAE;QAE5B,IAAMhU,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM+R,OAAO9U,GAAG+U,gBAAgB,IAAI,IAAI,CAAChM,OAAO,CAACnK,YAAY,GAAGoB,GAAGgV,gBAAgB,GAAG,CAAC;QACvF,IAA6C,gBAAA,IAAI,CAACjM,OAAO,EAAjDkM,oBAAqC,cAArCA,mBAAmBpZ,QAAkB,cAAlBA,OAAOC,SAAW,cAAXA;QAElCkE,GAAGiL,eAAe,CAACjL,GAAGkV,gBAAgB,EAAE,IAAI,CAAClB,gBAAgB;QAC7DhU,GAAGiL,eAAe,CAACjL,GAAGmV,gBAAgB,EAAE,IAAI,CAACrB,YAAY;QAEzD,IAAK,IAAIsB,eAAe,GAAGA,eAAeH,mBAAmBG,eAAgB;YAC3E,IAAMlG,aAAalP,GAAGqL,iBAAiB,GAAG+J;YAE1C,IAAI,CAACC,gBAAgB,CAACD,aAAa,GAAGlG;YAEtClP,GAAGsV,UAAU,CAACpG;YACdlP,GAAGhB,WAAW,CAAC,IAAI,CAACqW,gBAAgB;YACpCrV,GAAGuV,eAAe,CAAC,GAAG,GAAG1Z,OAAOC,QAAQ,GAAG,GAAGD,OAAOC,QAAQgZ,MAAM9U,GAAGqR,OAAO;YAE7E,IAAI,CAACgE,gBAAgB,CAACD,aAAa,GAAGpV,GAAGwJ,IAAI;;QAG/CxJ,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;;;;MAMzCtG,OAAAA,OAiBC,GAjBDA,SAAAA,UAAgB;QACd,IAAM5E,KAAK,IAAI,CAAC+C,GAAG;QAEnB,IAAI,CAAC+Q,YAAY,IAAI9T,GAAGwV,iBAAiB,CAAC,IAAI,CAAC1B,YAAY;QAC3D,IAAI,CAACY,kBAAkB,IAAI1U,GAAGyV,kBAAkB,CAAC,IAAI,CAACf,kBAAkB;QACxE,IAAI,CAACV,gBAAgB,IAAIhU,GAAGwV,iBAAiB,CAAC,IAAI,CAACxB,gBAAgB;QACnE,IAAI,CAAC0B,sBAAsB,IAAI1V,GAAGyV,kBAAkB,CAAC,IAAI,CAACC,sBAAsB;QAEhF,IAAK,IAAI1U,IAAI,GAAGA,IAAI,IAAI,CAACiS,uBAAuB,CAAClO,MAAM,EAAE/D,IAAK;YAC5DhB,GAAGyV,kBAAkB,CAAC,IAAI,CAACxC,uBAAuB,CAACjS,EAAE;;QAGvD,IAAI,CAAC8S,YAAY,GAAG,IAAI;QACxB,IAAI,CAACY,kBAAkB,GAAG,IAAI;QAC9B,IAAI,CAACV,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAACf,uBAAuB,CAAClO,MAAM,GAAG;QACtC,IAAI,CAAC2Q,sBAAsB,GAAG,IAAI;;;;;;;;MAUpCd,OAAAA,mBAQC,GARDA,SAAAA,sBAA4B;QAC1B,IAAM5U,KAAK,IAAI,CAAC+C,GAAG;QAEnB,IAAI,IAAI,CAACiR,gBAAgB,EAAE;YACzBhU,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAAC8I,gBAAgB;eACnD;YACLhU,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAAC4I,YAAY;SACrD;;IAGH,OAAQC,YA4DP,GA5DD,SAAQA,eAAqB;QAC3B,IAAM/T,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAoB,IAAI,CAACyK,SAAS;0BAGxC,IAAqD,gBAAA,IAAI,CAACC,OAAO,EAAzDqK,SAA6C,cAA7CA,QAAQ6B,oBAAqC,cAArCA,mBAAmBpZ,QAAkB,cAAlBA,OAAOC,SAAW,cAAXA;QAC1C,IAAMkD,cAAc,IAAI2W,MAAMV;QAE9BjV,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAAC4I,YAAY;mCAGpD,IAAK,IAAI9S,IAAI,GAAGA,IAAIiU,mBAAmBjU,IAAK;YAC1C,IAAMmT,eAAe,IAAI,CAACpL,OAAO,CAACqL,eAAe,CAACpT;YAClD,IAAMkO,aAAalP,GAAGqL,iBAAiB,GAAGrK;YAE1ChC,WAAW,CAACgC,EAAE,GAAGkO;YAEjB,IAAI,CAAc,YAAZiF,cAAwBT,cAAc;gBAC1C1T,GAAGoL,oBAAoB,CACrBpL,GAAGkL,WAAW,EACdgE,YACAlP,GAAGsL,UAAU,oBAEZ6I,aAAaG,gBAAgB,CAAetL,UAAU,EACvD;aAEH;;QAGH,IAAIiM,oBAAoB,GAAG;YACzBjV,GAAGhB,WAAW,CAACA;SAChB;QACD,IAAI,CAAC4W,eAAe,GAAG5W;mCAGvB,IAAIoU,WAAW,IAAI,EAAE;YACnB,IAAU,YAANA,QAAkBE,YAAW,CAAEF,YAAAA,QAAkBM,cAAc;;gBAEjE,IAAMa,kBAAkBnB,OAAOkB,gBAAgB;gBAC/CtU,GAAGoL,oBAAoB,CACrBpL,GAAGkL,WAAW,EACdqJ,gBAAgBpL,aAAa,CAAC+F,UAAU,EACxClP,GAAGsL,UAAU,EACbiJ,gBAAgBvL,UAAU,EAC1B;mBAEG,IAAI,IAAI,CAACD,OAAO,CAAC6K,YAAY,IAAI,GAAG;gBACzC,IAAuClL,+CAAAA,UAAUyH,iCAAiC,CAACiD,QAAQpT,IAAI3B,WAAvFyL,iBAA+BpB,6CAA/BoB,gBAAgBoF,cAAexG,6CAAfwG;gBACxB,IAAM2G,oBAAoB7V,GAAG8V,kBAAkB;gBAE/C,IAAI,CAACpB,kBAAkB,GAAGmB;gBAE1B7V,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAEoB;gBACrC7V,GAAG2U,mBAAmB,CAAC3U,GAAGyU,YAAY,EAAE3K,gBAAgBjO,OAAOC;gBAC/DkE,GAAG+V,uBAAuB,CAAC/V,GAAGkL,WAAW,EAAEgE,aAAYlP,GAAGyU,YAAY,EAAEoB;aACzE;SACF;QAED7V,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;QACvClL,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAE,IAAI;;IAG3C,OAAQR,YAiDP,GAjDD,SAAQA,eAAqB;QAC3B,IAAMjU,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAW,IAAI,CAACyK,SAAS;QAC/B,IAAMkN,wBAAwBhW,GAAG8V,kBAAkB;0BAGnD,IAAmE,gBAAA,IAAI,CAAC/M,OAAO,EAAvEqK,SAA2D,cAA3DA,QAAQ6B,oBAAmD,cAAnDA,mBAAmBrB,eAAgC,cAAhCA,cAAc/X,QAAkB,cAAlBA,OAAOC,SAAW,cAAXA;QAExD,IAAI,CAACuZ,gBAAgB,GAAG,IAAIM,MAAMV;QAClC,IAAI,CAACS,sBAAsB,GAAGM;QAE9BhW,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAAC8I,gBAAgB;;QAGxD,IAAK,IAAIhT,IAAI,GAAGA,IAAIiU,mBAAmBjU,IAAK;YAC1C,IAAMiV,wBAAwBjW,GAAG8V,kBAAkB;YAEnD,IAAI,CAAC7C,uBAAuB,CAACjS,EAAE,GAAGiV;YAClC,IAAI,CAACZ,gBAAgB,CAACrU,EAAE,GAAGhB,GAAGwJ,IAAI;YAElCxJ,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAEwB;YACrCjW,GAAGkW,8BAA8B,CAC/BlW,GAAGyU,YAAY,EACfb,gCAEC,IAAI,CAAC7K,OAAO,CAACqL,eAAe,CAACpT,GAAGsT,gBAAgB,CAAenL,aAAa,CAACW,cAAc,EAC5FjO,OACAC;YAEFkE,GAAG+V,uBAAuB,CAAC/V,GAAGkL,WAAW,EAAElL,GAAGqL,iBAAiB,GAAGrK,GAAGhB,GAAGyU,YAAY,EAAEwB;;QAExFjW,GAAGhB,WAAW,CAAC,IAAI,CAAC4W,eAAe;;QAGnC,IAAIxC,WAAW,IAAI,EAAE;YACnB,IACEA,OAAAA,YAAAA,QAAkBE,6BAEbF,OAAOkB,gBAAgB,CAAenL,aAAa,GACpDT,UAAUyH,iCAAiC,CAACiD,QAAQpT,IAAI3B,SAAS,EAJ/DyL,iBACNsJ,KADMtJ,gBAAgBoF,aACtBkE,KADsBlE;YAMxBlP,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAEuB;YACrChW,GAAGkW,8BAA8B,CAAClW,GAAGyU,YAAY,EAAEb,cAAc9J,gBAAgBjO,OAAOC;YACxFkE,GAAG+V,uBAAuB,CAAC/V,GAAGkL,WAAW,EAAEgE,YAAYlP,GAAGyU,YAAY,EAAEuB;SACzE;QAED,IAAI,CAACG,iBAAiB;QACtBnW,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;QACvClL,GAAGwU,gBAAgB,CAACxU,GAAGyU,YAAY,EAAE,IAAI;;IAG3C,OAAQ0B,iBAyBP,GAzBD,SAAQA,oBAA0B;QAChC,IAAMnW,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAW,IAAI,CAACyK,SAAS;QAC/B,IAAMsN,IAAIpW,GAAGqW,sBAAsB,CAACrW,GAAGkL,WAAW;QAElD,OAAQkL;YACN,KAAKpW,GAAGsW,iCAAiC;gBACvC,MAAM,IAAIpG,MACR,oHACA;YACJ,KAAKlQ,GAAGuW,yCAAyC;gBAC/C,MAAM,IAAIrG,MAAM,0BAA0B;YAC5C,KAAKlQ,GAAGwW,iCAAiC;gBACvC,MAAM,IAAItG,MAAM,yDAAyD;YAC3E,KAAKlQ,GAAGyW,uBAAuB;gBAC7B,MAAM,IAAIvG,MACR,mHACA;;QAGN,IAAI7R,YAAY+X,MAAMpW,GAAG0W,kCAAkC,EAAE;YAC3D,MAAM,IAAIxG,MACR,qKACA;SACH;;WA/UQ8C;;;ACZb;;IAGO,IAAA;cAAM2D;aAAAA,YAICxZ,GAAkB,EAAEyZ,SAAoB;;sCAC5CzZ,KAAKyZ,WAAWzZ,IAAI6C,EAAE,CAACsL,UAAU;wDAHjCuL,uBAA+B;0BAMrC,IAAQvK,SAAmCsK,UAAnCtK,QAAQ2E,UAA2B2F,UAA3B3F,SAASpV,QAAkB+a,UAAlB/a,OAAOC,SAAW8a,UAAX9a;QAChC,IAAMuC,WAAW,MAAKyK,SAAS;0BAG/B,IAAI,CAACJ,UAAU8H,qBAAqB,CAAClE,QAAQnP,MAAM;YACjD,MAAM,IAAI+S,MAAO,qCAAkC3D,aAAa,CAACD,OAAO,EAAI;SAC7E;QAED,IAAI2E,WAAW,CAAC5S,aAAa,CAACqK,UAAUiD,WAAW,CAAC9P,UAAU,CAAC6M,UAAUiD,WAAW,CAAC7P,OAAM,GAAI;YAC7F2I,OAAO4B,IAAI,CACT;8BAIFuQ,UAAU3F,OAAO,GAAG,KAAK;8BAEzB2F,UAAUE,YAAY,GAAGF,UAAUG,eAAe;SACnD;QAED,MAAK5N,aAAa,GAAGT,UAAU2D,gBAAgB,CAACC,QAAQ,MAAKvJ,GAAG,EAAE1E;QACjE,MAAK8K,aAAa,CAACyD,YAAY,IAAI,CAACvO,YAAa,MAAKd,KAAK,CAAC,KAAK;;;iBA5BzDoZ;;;MAkCXK,OAAAA,cAiCC,GAjCDA,SAAAA,eACEC,WAA4B,EAC5BlM,QAAoB,EACpBrO,CAAS,EACTC,CAAS,EACTd,KAAc,EACdC,MAAe,EACT;QALNiP,IAAAA,qBAAAA,WAAmB;QAMnB,IAAM/K,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAoB,IAAI,CAACyK,SAAS;QACxC,IAA+D,sBAAA,IAAI,CAACK,aAAa,EAAzEW,iBAAuD,oBAAvDA,gBAAgBC,aAAuC,oBAAvCA,YAAYC,WAA2B,oBAA3BA,UAAU4C,eAAiB,oBAAjBA;QAC9C,IAAMrC,WAAWC,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC5B,QAAQ,CAAChN,KAAK,IAAIkP;QACpD,IAAML,YAAYF,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC5B,QAAQ,CAAC/M,MAAM,IAAIiP;QAEtDlP,QAAQA,SAAS0O,WAAW7N;QAC5BZ,SAASA,UAAU4O,YAAY/N;QAE/B,IAAI,CAAC+M,KAAK;QAEV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE;QACvCnX,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE;QAElD,IAAIxK,cAAc;YAChB,IAAMyK,SAAS,KAAKtM;YACpB,IAAI1M,YAAY,IAAI,CAACwY,oBAAoB,GAAGQ,QAAQ;gBAClDrX,GAAGsX,uBAAuB,CAAC,IAAI,CAACvO,OAAO,EAAEgC,UAAUrO,GAAGC,GAAGd,OAAOC,QAAQgO,gBAAgBmN;mBACnF;gBACLjX,GAAGuX,oBAAoB,CAAC,IAAI,CAACxO,OAAO,EAAEgC,UAAUjB,gBAAgBjO,OAAOC,QAAQ,GAAGmb;gBAClF,IAAI,CAACJ,oBAAoB,IAAIQ;aAC9B;eACI;YACLrX,GAAGwX,aAAa,CAAC,IAAI,CAACzO,OAAO,EAAEgC,UAAUrO,GAAGC,GAAGd,OAAOC,QAAQiO,YAAYC,UAAUiN;SACrF;;;;MAMHQ,OAAAA,cAeC,GAfDA,SAAAA,eACEC,WAA2B,EAC3B3M,QAAgB,EAChB4M,KAAc,EACdC,gBAAyB,EACzBlb,CAAS,EACTC,CAAS,EACH;QACN,IAAMqD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAiC,sBAAA,IAAI,CAACoG,aAAa,EAA3CY,aAAyB,oBAAzBA,YAAYC,WAAa,oBAAbA;QAEpB,IAAI,CAACN,KAAK;QACV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE,CAACQ;QACxC3X,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE,CAACQ;QACnD5X,GAAGwX,aAAa,CAAC,IAAI,CAACzO,OAAO,EAAEgC,UAAUrO,KAAK,GAAGC,KAAK,GAAGoN,YAAYC,UAAU0N;;;;MAMjFG,OAAAA,cAKC,GALDA,SAAAA,eAAenb,CAAS,EAAEC,CAAS,EAAEd,KAAa,EAAEC,MAAc,EAAEiP,QAAgB,EAAEC,GAAoB,EAAQ;QAChH,IAAI,IAAI,CAAC7B,aAAa,CAACyD,YAAY,EAAE;YACnC,MAAM,IAAIsD,MAAM,qCAAqC;SACtD;QACD,qBAAMrF,eAAD,YAAiB,IAAI,EAAEnO,GAAGC,GAAGd,OAAOC,QAAQiP,UAAUC;;WAhGlD2L;EAAoBjO;;ACHjC;;IAGO,IAAMoP,iCAAN;cAAMA;aAAAA,iBACC3a,GAAkB,EAAE4a,cAA8B;;sCACtD5a,KAAK4a,gBAAyC5a,IAAI6C,EAAE,CAAEgY,gBAAgB;QAE5E,IAAQ1L,SAA+CyL,eAA/CzL,QAAQzQ,QAAuCkc,eAAvClc,OAAOC,SAAgCic,eAAhCjc,QAAQiJ,SAAwBgT,eAAxBhT,QAAQkF,cAAgB8N,eAAhB9N;QAEvC,IAAI,CAAC,MAAKnB,SAAS,EAAE;YACnB,MAAM,IAAIoH,MAAO,gDAA+C;SACjE;0BAGD,IAAI,CAACxH,UAAU8H,qBAAqB,CAAClE,QAAQnP,MAAM;YACjD,MAAM,IAAI+S,MAAO,qCAAkC3D,aAAa,CAACD,OAAO,EAAI;SAC7E;QAED,MAAK5C,KAAK;QACV,MAAKP,aAAa,GAAGT,UAAU2D,gBAAgB,CAACC,QAAQ,MAAKvJ,GAAG,EAAE,IAAI;QACtE,MAAKA,GAAG,CAACkV,YAAY,CAAC,MAAKlP,OAAO,EAAEkB,aAAa,MAAKd,aAAa,CAACW,cAAc,EAAEjO,OAAOC,QAAQiJ;;;iBAjB1F+S;;;MAuBXd,OAAAA,cAqCC,GArCDA,SAAAA,eACEkB,WAAmB,EACnBjB,WAA4B,EAC5BlM,QAAgB,EAChBrO,CAAS,EACTC,CAAS,EACTd,KAAc,EACdC,MAAe,EACfiJ,MAAe,EACT;QACN,IAAqC,QAAA,IAAI,EAAxB6D,SAAoB,MAA7BG,SAAiBhG,KAAY,MAAZA;QACzB,IAA+D,sBAAA,IAAI,CAACoG,aAAa,EAAzEW,iBAAuD,oBAAvDA,gBAAgBC,aAAuC,oBAAvCA,YAAYC,WAA2B,oBAA3BA,UAAU4C,eAAiB,oBAAjBA;QAE9C/Q,QAAQA,SAAS2O,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC5B,QAAQ,CAAChN,KAAK,IAAIkP,YAAYrO;QAChEZ,SAASA,UAAU0O,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC5B,QAAQ,CAAC/M,MAAM,IAAIiP,YAAYpO;QACnEoI,SAASA,UAAU,IAAqB,CAAC8D,QAAQ,CAAE9D,MAAM;QAEzD,IAAI,CAAC2E,KAAK;QACV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE;QACvCnX,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE;QAElD,IAAIxK,cAAc;YAChB5M,GAAGmY,uBAAuB,CACxBvP,QACAmC,UACArO,GACAC,GACAub,aACArc,OACAC,QACAiJ,QACA+E,gBACAmN;eAEG;YACLjX,GAAGoY,aAAa,CAACxP,QAAQmC,UAAUrO,GAAGC,GAAGub,aAAarc,OAAOC,QAAQiJ,QAAQgF,YAAYC,UAAUiN;SACpG;;;;MAMHQ,OAAAA,cA4BC,GA5BDA,SAAAA,eACEY,YAAoB,EACpBX,WAA2B,EAC3B3M,QAAgB,EAChB4M,KAAc,EACdC,gBAAyB,EACzBlb,CAAS,EACTC,CAAS,EACH;QACN,IAAMqD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAiC,sBAAA,IAAI,CAACoG,aAAa,EAA3CY,aAAyB,oBAAzBA,YAAYC,WAAa,oBAAbA;QAEpB,IAAI,CAACN,KAAK;QACV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE,CAACQ;QACxC3X,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE,CAACQ;QACnD5X,GAAGoY,aAAa,CACd,IAAI,CAACrP,OAAO,EACZgC,UACArO,GACAC,GACA0b,cACAX,YAAY7b,KAAK,EACjB6b,YAAY5b,MAAM,EAClB,GACAiO,YACAC,UACA0N;;;;MAOJG,OAAAA,cAmBC,GAnBDA,SAAAA,eACEQ,YAAoB,EACpB3b,CAAS,EACTC,CAAS,EACTd,KAAa,EACbC,MAAc,EACdiP,QAAgB,EAChBC,GAAoB,EACd;QACN,IAAiD,QAAA,IAAI,EAAxChL,KAAoC,MAAzC+C,KAASoG,eAAgC,MAAhCA;QAEjB,IAAImP,aAAa1L,YAAY,EAAE;YAC7B,MAAM,IAAIsD,MAAM,qCAAqC;SACtD;QAEDlQ,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI,CAACC,mBAAmB;QAC3DnL,GAAGuY,uBAAuB,CAACvY,GAAGkL,WAAW,EAAElL,GAAGqL,iBAAiB,EAAE,IAAI,CAACrC,UAAU,EAAE+B,UAAUsN;QAC5FrY,GAAGuL,UAAU,CAAC7O,GAAGC,GAAGd,OAAOC,QAAQwc,aAAavO,UAAU,EAAEuO,aAAatO,QAAQ,EAAEgB;QACnFhL,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;;WApH9B4M;EAAyBpP;;ACHtC;;IAGO,IAAM8P,8BAAN;cAAMA;aAAAA,cAICrb,GAAkB,EAAEsb,WAAwB;;sCAChDtb,KAAKsb,aAAatb,IAAI6C,EAAE,CAAC0Y,gBAAgB;wDAHzCC,wBAAkC;YAAC;YAAG;YAAG;YAAG;YAAG;YAAG;SAAE;0BAM1D,IAAQrM,SAAiCmM,YAAjCnM,QAAQ2E,UAAyBwH,YAAzBxH,SAASpV,OAAgB4c,YAAhB5c;QACzB,IAAMwC,WAAW,MAAKyK,SAAS;0BAG/B,IAAI,CAACJ,UAAU8H,qBAAqB,CAAClE,QAAQnP,MAAM;YACjD,MAAM,IAAI+S,MAAO,qCAAkC3D,aAAa,CAACD,OAAO,EAAI;SAC7E;QAED,IAAI2E,WAAW,CAAC5S,YAAY,CAACqK,UAAUiD,WAAW,CAAC5F,OAAO;YACxDtB,OAAO4B,IAAI,CACT;8BAIFoS,YAAYxH,OAAO,GAAG,KAAK;8BAE3BwH,YAAY3B,YAAY,GAAG2B,YAAY1B,eAAe;SACvD;QAED,MAAK5N,aAAa,GAAGT,UAAU2D,gBAAgB,CAACC,QAAQ,MAAKvJ,GAAG,EAAE1E;QACjE,MAAK8K,aAAa,CAACyD,YAAY,IAAI,CAACvO,YAAa,MAAKd,KAAK,CAAC,IAAI;;;iBA5BxDib;;;MAkCXxB,OAAAA,cA4DC,GA5DDA,SAAAA,eACElM,IAAqB,EACrBmM,WAA4B,EAC5BlM,QAAgB,EAChBrO,CAAS,EACTC,CAAS,EACTd,KAAc,EACdC,MAAe,EACT;QACN,IAAMkE,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAM1E,WAAW,IAAI,CAACyK,SAAS;QAC/B,IAA+D,sBAAA,IAAI,CAACK,aAAa,EAAzEW,iBAAuD,oBAAvDA,gBAAgBC,aAAuC,oBAAvCA,YAAYC,WAA2B,oBAA3BA,UAAU4C,eAAiB,oBAAjBA;QAC9C,IAAMgM,UAAUpO,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC5B,QAAQ,CAAChN,KAAK,IAAIkP;QAEnDlP,QAAQA,SAAS+c,UAAUlc;QAC3BZ,SAASA,UAAU8c,UAAUjc;QAE7B,IAAI,CAAC+M,KAAK;QAEV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE;QACvCnX,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE;QAElD,IAAIxK,cAAc;YAChB,IAAMyK,SAAS,KAAKtM;YACpB,IAAI1M,YAAY,IAAI,CAACsa,qBAAqB,CAAC7N,KAAK,GAAGuM,QAAQ;gBACzDrX,GAAGsX,uBAAuB,CACxBtX,GAAG4K,2BAA2B,GAAGE,MACjCC,UACArO,GACAC,GACAd,OACAC,QACAgO,gBACAmN;mBAEG;gBACLjX,GAAGuX,oBAAoB,CACrBvX,GAAG4K,2BAA2B,GAAGE,MACjCC,UACAjB,gBACAjO,OACAC,QACA,GACAmb;gBAEF,IAAI,CAAC0B,qBAAqB,CAAC7N,KAAK,IAAIuM;aACrC;eACI;YACLrX,GAAGwX,aAAa,CACdxX,GAAG4K,2BAA2B,GAAGE,MACjCC,UACArO,GACAC,GACAd,OACAC,QACAiO,YACAC,UACAiN;SAEH;;;;MAMHQ,OAAAA,cAyBC,GAzBDA,SAAAA,eACE3M,IAAqB,EACrB4M,WAA2B,EAC3B3M,QAAgB,EAChB4M,KAAc,EACdC,gBAAyB,EACzBlb,CAAS,EACTC,CAAS,EACH;QACN,IAAMqD,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAiC,sBAAA,IAAI,CAACoG,aAAa,EAA3CY,aAAyB,oBAAzBA,YAAYC,WAAa,oBAAbA;QAEpB,IAAI,CAACN,KAAK;QAEV1J,GAAGkX,WAAW,CAAClX,GAAGmX,mBAAmB,EAAE,CAACQ;QACxC3X,GAAGkX,WAAW,CAAClX,GAAGoX,8BAA8B,EAAE,CAACQ;QACnD5X,GAAGwX,aAAa,CACdxX,GAAG4K,2BAA2B,GAAGE,MACjCC,UACArO,KAAK,GACLC,KAAK,GACLoN,YACAC,UACA0N;;;;MAOJG,OAAAA,cAaC,GAbDA,SAAAA,eACE/M,IAAqB,EACrBpO,CAAS,EACTC,CAAS,EACTd,KAAa,EACbC,MAAc,EACdiP,QAAgB,EAChBC,GAAoB,EACd;QACN,IAAI,IAAI,CAAC7B,aAAa,CAACyD,YAAY,EAAE;YACnC,MAAM,IAAIsD,MAAM,qCAAqC;SACtD;QACD,qBAAMrF,eAAD,YAAiBC,MAAMpO,GAAGC,GAAGd,OAAOC,QAAQiP,UAAUC;;WA7IlDwN;EAAsB9P;;IC8B5B;UAAKmQ,SAAS;IAATA,UAAAA,8EAEVC,UAAO,KAAPA;IAFUD,UAAAA,2BAIVE,YAAS,KAATA;IAJUF,UAAAA,2BAMVG,YAAS,KAATA;GANUH,cAAAA;AA+BZ;;QAGaI,8BAAN;aAAMA,cAsDCC,iBAA4C;QAA5CA,IAAAA,8BAAAA,oBAA0C;8BAlDtDC,yBAAkC,KAAK;aAc/BC,kBAA+B,IAAIzD,MAAM;;aAGzC0D,gBAAyB,IAAIC,QAAQ,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;aAC3DC,eAAwB,IAAID,QAAQ,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;aAC1DE,kBAAyB,IAAIC,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;aACzDC,iBAA0B,KAAK;QA+BrC,IAAMC,UAAU;YACdC,WAxFG;YAyFHC,OAAO,KAAK;YACZC,SAAS,IAAI;YACbC,aAAa,KAAK;YAClBC,iCAAiC;WAC9Bd;QAEL,IAAIe,WAAWC,QAAQ,KAAKC,SAASC,MAAM,IAAIH,WAAWC,QAAQ,KAAKC,SAASE,IAAI,EAAE;YACpF,IAAMC,UAAUL,WAAWM,eAAe,CAACC,KAAK,CAAC;YACjD,IAAIF,SAAS;gBACX,IAAMG,eAAeC,SAASJ,OAAO,CAAC,EAAE;gBACxC,IAAMK,eAAeD,SAASJ,OAAO,CAAC,EAAE;gBACxC,IAAIG,iBAAiB,MAAME,gBAAgB,KAAKA,gBAAgB,GAAG;oBACjEhB,QAAQI,WAAW,GAAG,IAAI;iBAC3B;aACF;SACF;QACD,IAAI,CAACa,QAAQ,GAAGjB;;iBAzEPV;IA4EX4B,OAAAA,IA6CC,GA7CDA,SAAAA,KAAKC,MAAc,EAAQ;QACzB,IAAMnB,UAAU,IAAI,CAACiB,QAAQ;QAC7B,IAAMlf,YAAa,IAAI,CAACK,UAAU,GAAI+e,OAAqB/e,UAAU;QACrE,IAAM6d,YAAYD,QAAQC,SAAS;QACnC,IAAI5Z;QAEJ,IAAI4Z,aAlHC,KAkH8BA,aAhH5B,GAgH2D;YAChE5Z,KAAKtE,UAAUqf,UAAU,CAAC,UAAUpB;YACpC,IAAI,CAAC3Z,OAAO,OAAO1D,oBAAoB,eAAe,CAAEZ,YAAAA,WAAqBY,gBAAe,GAAI;gBAC9F0D,KAA6BtE,UAAUqf,UAAU,CAAC,uBAAuBpB;aAC1E;YACD,IAAI,CAAC7Q,SAAS,GAAG,IAAI;;YAGrB,IAAI9I,MAAM,CAAC,GAA6Bgb,WAAW,EAAE;gBACnD,IAAI,CAAClS,SAAS,GAAG,KAAK;aACvB;SACF;QAED,IAAI,CAAC9I,IAAI;YACP,IAAI4Z,aAhID,KAgIgCA,aA5H9B,GA4H6D;gBAChE5Z,KAA6CtE,UAAUqf,UAAU,CAAC,SAASpB;gBAC3E,IAAI,CAAC3Z,OAAO,OAAO1D,oBAAoB,eAAe,CAAEZ,YAAAA,WAAqBY,gBAAe,GAAI;oBAC9F0D,KAA6CtE,UAAUqf,UAAU,CAAC,sBAAsBpB;iBACzF;gBACD,IAAI,CAAC7Q,SAAS,GAAG,KAAK;aACvB;SACF;QAED,IAAI,CAAC9I,IAAI;YACP,MAAM,IAAIkQ,MAAM,0BAA0B;SAC3C;QAED,IAAI,CAACnN,GAAG,GAAG/C;QACX,IAAI,CAACib,gBAAgB,GAAGjb,GAAGkb,QAAQ;QACnC,IAAI,CAACC,aAAa,GAAG,IAAIzU,eAAe1G;QACxC,IAAI,CAACob,WAAW,GAAG,IAAIhZ,aAAa,IAAI;QACxC,IAAI,CAACiZ,WAAW,GAAG,IAAIne,aAAa,IAAI;;QAExC8C,GAAGsb,aAAa,CAACtb,GAAGkb,QAAQ;QAE5B,IAAMK,kBAAkBvb,GAAGuC,YAAY,CAAC;QACxC,IAAIgZ,mBAAmB,IAAI,EAAE;YAC3B,IAAI,CAACC,SAAS,GAAGxb,GAAGuB,YAAY,CAACga,gBAAgBE,uBAAuB;SACzE;;IAGHC,OAAAA,uBAEC,GAFDA,SAAAA,wBAAwBjZ,SAAe,EAAsB;QAC3D,OAAO,IAAID,YAAY,IAAI,EAAEC;;IAG/BkZ,OAAAA,uBAEC,GAFDA,SAAAA,wBAAwB/E,SAAoB,EAAsB;QAChE,OAAO,IAAID,YAAY,IAAI,EAAEC;;IAG/BgF,OAAAA,4BAEC,GAFDA,SAAAA,6BAA6BhF,SAAyB,EAAoB;QACxE,OAAO,IAAIkB,iBAAiB,IAAI,EAAElB;;IAGpCiF,OAAAA,yBAEC,GAFDA,SAAAA,0BAA0BpD,WAAwB,EAAwB;QACxE,OAAO,IAAID,cAAc,IAAI,EAAEC;;IAGjCqD,OAAAA,0BAEC,GAFDA,SAAAA,2BAA2BlT,MAAoB,EAAyB;QACtE,OAAO,IAAIoK,eAAe,IAAI,EAAEpK;;IAGlCtK,OAAAA,gBAEC,GAFDA,SAAAA,iBAAiB2B,GAAG,EAAE;QACpB,OAAO,IAAI,CAACmb,WAAW,CAAC9c,gBAAgB,CAAC2B;;IAG3CxC,OAAAA,OAEC,GAFDA,SAAAA,QAAQC,cAAgC,EAAE;QACxC,OAAO,IAAI,CAACiW,UAAU,CAAClW,OAAO,CAACC;;IAGjCE,OAAAA,sCAEC,GAFDA,SAAAA,uCAAuCoI,IAAY,EAAE;QACnD,OAAO,IAAI,CAAC2N,UAAU,CAAC/V,sCAAsC,CAACoI;;IAGhE+V,OAAAA,QAMC,GANDA,SAAAA,SAASrf,CAAS,EAAEC,CAAS,EAAEd,KAAa,EAAEC,MAAc,EAAQ;QAClE,IAAiD,QAAA,IAAI,EAAxCkE,KAAoC,MAAzC+C,KAASsW,eAAgC,MAAhCA;QACjB,IAAI3c,MAAMsf,aAAatf,CAAC,IAAIC,MAAMqf,aAAarf,CAAC,IAAId,UAAUmgB,aAAaC,CAAC,IAAIngB,WAAWkgB,aAAaE,CAAC,EAAE;YACzGlc,GAAG+b,QAAQ,CAACrf,GAAGC,GAAGd,OAAOC;YACzBkgB,aAAapf,GAAG,CAACF,GAAGC,GAAGd,OAAOC;SAC/B;;IAGHqgB,OAAAA,OAkBC,GAlBDA,SAAAA,QAAQzf,CAAS,EAAEC,CAAS,EAAEd,KAAa,EAAEC,MAAc,EAAQ;QACjE,IAA+C,QAAA,IAAI,EAAtCkE,KAAkC,MAAvC+C,KAASwW,cAA8B,MAA9BA;QACjB,IAAI7c,MAAM0f,YAAY1f,CAAC,IAAIC,MAAMyf,YAAYzf,CAAC,IAAId,UAAUugB,YAAYH,CAAC,IAAIngB,WAAWsgB,YAAYF,CAAC,EAAE;YACrG,IAAkC,SAAA,IAAI,EAAlBxgB,YAAc,OAA1BK;YACR,IAAIW,MAAM,KAAKC,MAAM,KAAKd,UAAUH,UAAUG,KAAK,IAAIC,WAAWJ,UAAUI,MAAM,EAAE;gBAClF,IAAI,IAAI,CAAC4d,cAAc,EAAE;oBACvB1Z,GAAGsH,OAAO,CAACtH,GAAGqc,YAAY;oBAC1B,IAAI,CAAC3C,cAAc,GAAG,KAAK;iBAC5B;mBACI;gBACL,IAAI,CAAC,IAAI,CAACA,cAAc,EAAE;oBACxB1Z,GAAGwH,MAAM,CAACxH,GAAGqc,YAAY;oBACzB,IAAI,CAAC3C,cAAc,GAAG,IAAI;iBAC3B;gBACD1Z,GAAGmc,OAAO,CAACzf,GAAGC,GAAGd,OAAOC;aACzB;YACDsgB,YAAYxf,GAAG,CAACF,GAAGC,GAAGd,OAAOC;SAC9B;;IAGHsL,OAAAA,SAEC,GAFDA,SAAAA,UAAUkV,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAE;QACpB,IAAI,CAAC1Z,GAAG,CAACqE,SAAS,CAACkV,GAAGC,GAAGC,GAAGC;;IAG9BC,OAAAA,iBAsCC,GAtCDA,SAAAA,kBAAkBC,MAAc,EAAEC,UAA4B,EAAEC,UAAiB,EAAE;QACjF,IAAM7c,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAII4Z,2BAAAA,OAAOG,gBAAgB,EAHzBC,mBAGEJ,yBAHFI,WAAcC,kBACdC,aAEEN,yBAFFM,YACAC,eACEP,yBADFO;QAEF,IAAIC,YAAY;QAChB,IAAIP,aAAaQ,iBAAiB3D,KAAK,EAAE;YACvC0D,aAAand,GAAG+U,gBAAgB;YAEhC,IAAMsI,KAAK,IAAI,CAAC7D,eAAe;YAC/B,IAAQ8C,IAAeO,WAAfP,GAAGC,IAAYM,WAAZN,GAAGC,IAASK,WAATL,GAAGC,IAAMI,WAANJ;YACjB,IAAII,eAAeP,MAAMe,GAAGf,CAAC,IAAIC,MAAMc,GAAGd,CAAC,IAAIC,MAAMa,GAAGb,CAAC,IAAIC,MAAMY,GAAGZ,CAAC,GAAG;gBACxEzc,GAAG6c,UAAU,CAACP,GAAGC,GAAGC,GAAGC;gBACvBY,GAAGzgB,GAAG,CAAC0f,GAAGC,GAAGC,GAAGC;aACjB;YAED,IAAIO,iBAAiBM,cAAc,KAAKC,eAAeC,GAAG,EAAE;gBAC1Dxd,GAAGoH,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;gBACnC4V,iBAAiBM,cAAc,GAAGC,eAAeC,GAAG;aACrD;SACF;QACD,IAAIZ,aAAaQ,iBAAiBtO,KAAK,EAAE;YACvCqO,aAAand,GAAGgV,gBAAgB;YAChC,IAAIiI,WAAWQ,YAAY,KAAK,IAAI,EAAE;gBACpCzd,GAAG4H,SAAS,CAAC,IAAI;gBACjBqV,WAAWQ,YAAY,GAAG,IAAI;aAC/B;SACF;QACD,IAAIb,aAAaQ,iBAAiB/M,OAAO,EAAE;YACzC8M,aAAand,GAAG0d,kBAAkB;YAClC,IAAIR,aAAaS,SAAS,KAAK,MAAM;gBACnC3d,GAAGoI,WAAW,CAAC;gBACf8U,aAAaS,SAAS,GAAG;aAC1B;SACF;QACD3d,GAAGyG,KAAK,CAAC0W;;IAGXS,OAAAA,aAQC,GARDA,SAAAA,cAAcnb,SAAe,EAAEob,YAAqB,EAAE5a,aAAkB,EAAE;;QAExE,IAAIR,WAAW;;YAEbA,UAAUqb,KAAK,CAAC7a,eAAe4a;eAC1B;YACLpZ,OAAOC,KAAK,CAAC;SACd;;IAGHqZ,OAAAA,kBAmBC,GAnBDA,SAAAA,mBAAmBC,YAA0B,EAAEjC,QAAiB,EAAEhR,QAAgB,EAAE;QAClF,IAAM/K,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAIkb,aAAqBC;QACzB,IAAIF,cAAc;kCAEfA;YAAD,CAACA,sCAAAA,aAAaG,qBAAqB,YAAnC,KAAA,IAAA,oCAAwDvJ;YACxDqJ,cAAcD,aAAaniB,KAAK,IAAIkP;YACpCmT,eAAeF,aAAaliB,MAAM,IAAIiP;eACjC;YACL/K,GAAGiL,eAAe,CAACjL,GAAGkL,WAAW,EAAE,IAAI;YACvC+S,cAAcje,GAAGoe,kBAAkB;YACnCF,eAAele,GAAGqe,mBAAmB;SACtC;QACD,IAAMxiB,QAAQoiB,cAAclC,SAASE,CAAC;QACtC,IAAMngB,SAASoiB,eAAenC,SAASG,CAAC;QACxC,IAAMxf,IAAIqf,SAASrf,CAAC,GAAGuhB;QACvB,IAAMthB,IAAIuhB,eAAenC,SAASpf,CAAC,GAAGuhB,eAAepiB;QACrD,IAAI,CAACigB,QAAQ,CAACrf,GAAGC,GAAGd,OAAOC;QAC3B,IAAI,CAACqgB,OAAO,CAACzf,GAAGC,GAAGd,OAAOC;;IAG5Bwf,OAAAA,aAKC,GALDA,SAAAA,cAAcgD,SAAiB,EAAQ;QACrC,IAAI,IAAI,CAACrD,gBAAgB,KAAKqD,WAAW;YACvC,IAAI,CAACvb,GAAG,CAACuY,aAAa,CAACgD;YACvB,IAAI,CAACrD,gBAAgB,GAAGqD;SACzB;;IAGH1U,OAAAA,WAMC,GANDA,SAAAA,YAAYjB,OAAkB,EAAQ;QACpC,IAAM4V,QAAQ,IAAI,CAACtD,gBAAgB,GAAG,IAAI,CAAClY,GAAG,CAACmY,QAAQ;QACvD,IAAI,IAAI,CAAC9B,eAAe,CAACmF,MAAM,KAAK5V,SAAS;YAC3C,IAAI,CAAC5F,GAAG,CAAC6G,WAAW,CAACjB,QAAQI,OAAO,EAAEJ,QAAQK,UAAU;YACxD,IAAI,CAACoQ,eAAe,CAACmF,MAAM,GAAG5V;SAC/B;;IAGH6V,OAAAA,kBAUC,GAVDA,SAAAA,mBAAmBC,IAAY,EAAEC,SAAiB,EAAQ;QACxD,IAAM1e,KAAK,IAAI,CAAC+C,GAAG;QACnB,IAAMyE,SAASiX,SAAS,KAAKC,cAAc;QAC3C,IAAIlX,QAAQ;YACVxH,GAAGwH,MAAM,CAACxH,GAAGuI,mBAAmB;YAChCvI,GAAGwI,aAAa,CAACkW,WAAWD;eACvB;YACLze,GAAGsH,OAAO,CAACtH,GAAGuI,mBAAmB;SAClC;QACD,IAAI,CAAC4Q,sBAAsB,GAAG3R;;IAGhCmX,OAAAA,KAEC,GAFDA,SAAAA,QAAc;QACZ,IAAI,CAAC5b,GAAG,CAAC4b,KAAK;;IAGhB/Z,OAAAA,OAAY,GAAZA,SAAAA,UAAU;kBAjSCqU;;YA0BP5a,KAAAA;iBAAJ,eAAwB;gBACtB,OAAO,IAAI,CAACyK,SAAS;;;;YAGnB8V,KAAAA;iBAAJ,eAAuB;gBACrB,OAAO,IAAI,CAACpD,SAAS;;;;YAOnBxb,KAAAA;;;;MAAJ,eAAS;gBACP,OAAO,IAAI,CAAC+C,GAAG;;;;YAGbzB,KAAAA;iBAAJ,eAAmC;gBACjC,OAAO,IAAI,CAAC6Z,aAAa;;;;YAGvBxH,KAAAA;iBAAJ,eAA+B;gBAC7B,OAAO,IAAI,CAAC0H,WAAW;;;;YAGrB1Z,KAAAA;iBAAJ,eAAwB;gBACtB,OAAO,IAAI,CAACgS,UAAU,CAAChS,iBAAiB;;;;WAnD/BsX;;;ACjEb;;QAGO;cAAM4F;aAAAA,YAMC/D,MAAoD,EAAEgE,oBAA2C;QAC3G,IAAMpjB,YAAY,IAAID,UACkB,OAAOqf,WAAW,WAAWiE,SAASC,cAAc,CAAClE,UAAUA,MAAM;QAE7G,IAAMmE,mBAAmB,IAAIhG,cAAc6F;iCACrCpjB,WAAWujB;;kBAXRJ;;YAiBP/D,KAAAA;;;MAAJ,eAAwB;gBACtB,OAAO,IAAI,CAACoE,OAAO;;;;WAlBVL;EAAoBM;;;;"}