@zephyr3d/device 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/device.js CHANGED
@@ -60,18 +60,18 @@ class ResizeHandler {
60
60
  const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;
61
61
  const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;
62
62
  // Device pixel
63
- /*
64
- let deviceWidth: number;
65
- let deviceHeight: number;
66
-
67
- const dpBox = (entry as any).devicePixelContentBoxSize?.[0];
68
- if (dpBox) {
69
- deviceWidth = dpBox.inlineSize;
70
- deviceHeight = dpBox.blockSize;
71
- } else {
72
- deviceWidth = Math.round(cssWidth * this._dpr);
73
- deviceHeight = Math.round(cssHeight * this._dpr);
74
- }
63
+ /*
64
+ let deviceWidth: number;
65
+ let deviceHeight: number;
66
+
67
+ const dpBox = (entry as any).devicePixelContentBoxSize?.[0];
68
+ if (dpBox) {
69
+ deviceWidth = dpBox.inlineSize;
70
+ deviceHeight = dpBox.blockSize;
71
+ } else {
72
+ deviceWidth = Math.round(cssWidth * this._dpr);
73
+ deviceHeight = Math.round(cssHeight * this._dpr);
74
+ }
75
75
  */ const deviceWidth = cssWidth * this._dpr;
76
76
  const deviceHeight = cssHeight * this._dpr;
77
77
  if (cssWidth === this._cssWidth && cssHeight === this._cssHeight && deviceWidth === this._deviceWidth && deviceHeight === this._deviceHeight) {
@@ -108,9 +108,9 @@ class ResizeHandler {
108
108
  window.removeEventListener('resize', this._handleLegacyResize);
109
109
  }
110
110
  }
111
- /**
112
- * Base class for rendering device
113
- * @public
111
+ /**
112
+ * Base class for rendering device
113
+ * @public
114
114
  */ class BaseDevice extends Observable {
115
115
  _dpr;
116
116
  _canvas;
@@ -194,10 +194,10 @@ class ResizeHandler {
194
194
  }, this._dpr);
195
195
  }
196
196
  getScaleX() {
197
- return this._canvas.width / this._canvas.clientWidth;
197
+ return this._canvas.clientWidth === 0 ? 0 : this._canvas.width / this._canvas.clientWidth;
198
198
  }
199
199
  getScaleY() {
200
- return this._canvas.height / this._canvas.clientHeight;
200
+ return this._canvas.clientHeight === 0 ? 0 : this._canvas.height / this._canvas.clientHeight;
201
201
  }
202
202
  get backend() {
203
203
  return this._backend;
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { type Vector4, type TypedArray, type IEventTarget, Observable } from '@zephyr3d/base';\r\nimport type { ITimer } from './timer';\r\nimport { CPUTimer } from './timer';\r\nimport type {\r\n BlendingState,\r\n ColorState,\r\n DepthState,\r\n RasterizerState,\r\n RenderStateSet,\r\n StencilState\r\n} from './render_states';\r\nimport type {\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n TextureSampler,\r\n Texture2D,\r\n Texture3D,\r\n TextureCube,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n GPUObject,\r\n StructuredBuffer,\r\n BindGroupLayout,\r\n BindGroup,\r\n IndexBuffer,\r\n TextureVideo,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n BufferUsage,\r\n VertexSemantic,\r\n VertexAttribFormat,\r\n VertexLayoutOptions,\r\n BaseTexture,\r\n RenderBundle\r\n} from './gpuobject';\r\nimport {\r\n GPUResourceUsageFlags,\r\n makeVertexBufferType,\r\n getVertexFormatSize,\r\n getVertexAttribFormat\r\n} from './gpuobject';\r\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo } from './builder';\r\nimport { ProgramBuilder } from './builder';\r\nimport type {\r\n DataType,\r\n PrimitiveType,\r\n TextureFormat,\r\n GPUObjectList,\r\n FrameInfo,\r\n DeviceCaps,\r\n GPUProgramConstructParams,\r\n AbstractDevice,\r\n DeviceOptions,\r\n DeviceEventMap,\r\n DeviceViewport,\r\n DrawTextLayoutOptions\r\n} from './base_types';\r\nimport { DrawText } from './helpers';\r\nimport { Pool } from './pool';\r\n\r\n/**\r\n * The device backend interface\r\n * @public\r\n */\r\nexport interface DeviceBackend {\r\n typeName(): string;\r\n supported(): Promise<boolean>;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: Nullable<FrameBuffer>;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n program: Nullable<GPUProgram>;\r\n vertexLayout: Nullable<VertexLayout>;\r\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\r\n};\r\n\r\ntype ResizeCallback = (\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n) => void;\r\n\r\nclass ResizeHandler {\r\n private readonly _canvas: HTMLCanvasElement;\r\n private readonly _dpr: number;\r\n private _cssWidth: number;\r\n private _cssHeight: number;\r\n private _deviceWidth: number;\r\n private _deviceHeight: number;\r\n\r\n private _resizeObserver!: ResizeObserver;\r\n private _mutationObserver!: MutationObserver;\r\n private _onResizeCallback: ResizeCallback;\r\n\r\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\r\n this._canvas = canvas;\r\n this._dpr = dpr;\r\n this._cssWidth = 0;\r\n this._cssHeight = 0;\r\n this._deviceWidth = 0;\r\n this._deviceHeight = 0;\r\n this._onResizeCallback = onResize;\r\n }\r\n\r\n init() {\r\n const canvas = this._canvas;\r\n if (window.ResizeObserver) {\r\n this._resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this._handleResizeEntry(entry);\r\n });\r\n try {\r\n (this._resizeObserver as any).observe(canvas);\r\n } catch {\r\n this._resizeObserver.observe(canvas);\r\n }\r\n } else {\r\n if (window.MutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n if (mutations.length > 0) {\r\n this._handleLegacyResize();\r\n }\r\n });\r\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', this._handleLegacyResize);\r\n this._handleLegacyResize();\r\n }\r\n }\r\n\r\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\r\n // CSS pixel\r\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\r\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\r\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\r\n\r\n // Device pixel\r\n /*\r\n let deviceWidth: number;\r\n let deviceHeight: number;\r\n\r\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\r\n if (dpBox) {\r\n deviceWidth = dpBox.inlineSize;\r\n deviceHeight = dpBox.blockSize;\r\n } else {\r\n deviceWidth = Math.round(cssWidth * this._dpr);\r\n deviceHeight = Math.round(cssHeight * this._dpr);\r\n }\r\n */\r\n const deviceWidth = cssWidth * this._dpr;\r\n const deviceHeight = cssHeight * this._dpr;\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n\r\n private _handleLegacyResize = () => {\r\n const cssWidth = this._canvas.clientWidth;\r\n const cssHeight = this._canvas.clientHeight;\r\n const dpr = window.devicePixelRatio || 1;\r\n const deviceWidth = Math.round(cssWidth * dpr);\r\n const deviceHeight = Math.round(cssHeight * dpr);\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n };\r\n\r\n public dispose() {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n }\r\n window.removeEventListener('resize', this._handleLegacyResize);\r\n }\r\n}\r\n\r\n/**\r\n * Base class for rendering device\r\n * @public\r\n */\r\nexport abstract class BaseDevice extends Observable<DeviceEventMap> {\r\n protected _dpr: number;\r\n protected _canvas: HTMLCanvasElement;\r\n protected _canvasClientWidth: number;\r\n protected _canvasClientHeight: number;\r\n protected _gpuObjectList: GPUObjectList;\r\n protected _gpuMemCost: number;\r\n protected _disposeObjectList: GPUObject[];\r\n protected _beginFrameTime: number;\r\n protected _endFrameTime: number;\r\n protected _frameInfo: FrameInfo;\r\n protected _cpuTimer: CPUTimer;\r\n protected _gpuTimer: Nullable<ITimer>;\r\n protected _runningLoop: Nullable<number>;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: Nullable<(device: AbstractDevice) => void>;\r\n protected _backend: DeviceBackend;\r\n protected _beginFrameCounter: number;\r\n protected _programBuilder: ProgramBuilder;\r\n protected _poolMap: Map<string | symbol, Pool>;\r\n protected _defaultPoolKey: symbol;\r\n protected _temporalFramebuffer: boolean;\r\n protected _vSync: boolean;\r\n private readonly _resizer: ResizeHandler;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\r\n super();\r\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n stacks: new Map(),\r\n textures: [],\r\n samplers: [],\r\n buffers: [],\r\n programs: [],\r\n framebuffers: [],\r\n vertexArrayObjects: [],\r\n bindGroups: []\r\n };\r\n this._canvas = cvs;\r\n this._canvas.setAttribute('tabindex', '1');\r\n this._canvasClientWidth = cvs.clientWidth;\r\n this._canvasClientHeight = cvs.clientHeight;\r\n this._gpuMemCost = 0;\r\n this._disposeObjectList = [];\r\n this._beginFrameTime = 0;\r\n this._endFrameTime = 0;\r\n this._runLoopFunc = null;\r\n this._frameInfo = {\r\n frameCounter: 0,\r\n frameTimestamp: 0,\r\n elapsedTimeCPU: 0,\r\n elapsedTimeGPU: 0,\r\n elapsedFrame: 0,\r\n elapsedOverall: 0,\r\n FPS: 0,\r\n drawCalls: 0,\r\n computeCalls: 0,\r\n nextFrameCall: [],\r\n nextFrameCallNext: []\r\n };\r\n this._programBuilder = new ProgramBuilder(this);\r\n this._cpuTimer = new CPUTimer();\r\n this._gpuTimer = null;\r\n this._runningLoop = null;\r\n this._fpsCounter = { time: 0, frame: 0 };\r\n this._stateStack = [];\r\n this._beginFrameCounter = 0;\r\n this._poolMap = new Map();\r\n this._defaultPoolKey = Symbol('defaultPool');\r\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\r\n this._temporalFramebuffer = false;\r\n this._temporalFramebuffer = false;\r\n this._vSync = true;\r\n //this._registerEventHandlers();\r\n this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.height / this._canvas.clientHeight;\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n abstract createGPUTimer(): Nullable<ITimer>;\r\n abstract createRenderStateSet(): RenderStateSet;\r\n abstract createBlendingState(): BlendingState;\r\n abstract createColorState(): ColorState;\r\n abstract createRasterizerState(): RasterizerState;\r\n abstract createDepthState(): DepthState;\r\n abstract createStencilState(): StencilState;\r\n abstract createSampler(options: SamplerOptions): TextureSampler;\r\n abstract createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<T>;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture3D>;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<TextureCube>;\r\n abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n abstract reverseVertexWindingOrder(reverse: boolean): void;\r\n abstract isWindingOrderReversed(): boolean;\r\n abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\r\n abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n abstract copyBuffer(\r\n sourceBuffer: GPUDataBuffer,\r\n destBuffer: GPUDataBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ): void;\r\n abstract createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n abstract createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n abstract createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getViewport(): Immutable<DeviceViewport>;\r\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getScissor(): Immutable<DeviceViewport>;\r\n abstract setProgram(program: Nullable<GPUProgram>): void;\r\n abstract getProgram(): Nullable<GPUProgram>;\r\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n abstract getVertexLayout(): Nullable<VertexLayout>;\r\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n abstract getRenderStates(): Nullable<RenderStateSet>;\r\n abstract getFramebuffer(): Nullable<FrameBuffer>;\r\n abstract setBindGroup(\r\n index: number,\r\n bindGroup: BindGroup,\r\n dynamicOffsets?: Nullable<Iterable<number>>\r\n ): void;\r\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number): void;\r\n // misc\r\n abstract readPixels(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n abstract beginCapture(): void;\r\n abstract endCapture(): RenderBundle;\r\n abstract looseContext(): void;\r\n abstract restoreContext(): void;\r\n protected abstract _executeRenderBundle(renderBundle: RenderBundle): number;\r\n protected abstract _draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n protected abstract _drawInstanced(\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ): void;\r\n protected abstract _compute(\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ): void;\r\n get backend() {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage() {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo() {\r\n return this._frameInfo;\r\n }\r\n get isRendering() {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get type() {\r\n return this._backend.typeName();\r\n }\r\n get vSync() {\r\n return this._vSync;\r\n }\r\n set vSync(val) {\r\n this._vSync = !!val;\r\n }\r\n get pool() {\r\n return this._poolMap.get(this._defaultPoolKey)!;\r\n }\r\n get runLoopFunction() {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder() {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol) {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol) {\r\n let pool = this._poolMap.get(key);\r\n if (!pool) {\r\n pool = new Pool(this, key);\r\n this._poolMap.set(key, pool);\r\n }\r\n return pool;\r\n }\r\n setFont(fontName: Nullable<string>) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n setTextRenderStates(renderStates: Nullable<RenderStateSet>) {\r\n DrawText.setRenderStates(renderStates);\r\n }\r\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\r\n drawText(\r\n text: string,\r\n rect: Immutable<Rect>,\r\n color: string | Vector3 | Vector4,\r\n options?: DrawTextLayoutOptions\r\n ): void;\r\n drawText(\r\n text: string,\r\n xOrRect: number | Immutable<Rect>,\r\n yOrColor: number | string | Vector3 | Vector4,\r\n colorOrOptions?: string | Vector3 | Vector4 | DrawTextLayoutOptions,\r\n options?: DrawTextLayoutOptions\r\n ) {\r\n if (typeof xOrRect === 'number') {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n colorOrOptions as string | Vector3 | Vector4,\r\n xOrRect,\r\n yOrColor as number\r\n );\r\n } else {\r\n DrawText.drawText(\r\n this,\r\n text,\r\n yOrColor as string | Vector3 | Vector4,\r\n xOrRect,\r\n options ?? (colorOrOptions as DrawTextLayoutOptions)\r\n );\r\n }\r\n }\r\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\r\n setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;\r\n setFramebuffer(\r\n colorOrRT: BaseTexture[] | Nullable<FrameBuffer>,\r\n depth?: BaseTexture,\r\n sampleCount?: number\r\n ) {\r\n let newRT: Nullable<FrameBuffer> = null;\r\n let temporal = false;\r\n if (!Array.isArray(colorOrRT)) {\r\n newRT = colorOrRT ?? null;\r\n } else {\r\n newRT = this.pool!.fetchTemporalFramebuffer(false, 0, 0, colorOrRT, depth, true, sampleCount);\r\n temporal = true;\r\n }\r\n const currentRT = this.getFramebuffer();\r\n if (currentRT !== newRT) {\r\n if (this._temporalFramebuffer && currentRT) {\r\n this.pool!.releaseFrameBuffer(currentRT);\r\n }\r\n this._temporalFramebuffer = temporal;\r\n this._setFramebuffer(newRT);\r\n }\r\n }\r\n disposeObject(obj: GPUObject, remove = true) {\r\n if (obj) {\r\n if (remove) {\r\n this.removeGPUObject(obj);\r\n }\r\n if (this.isContextLost()) {\r\n obj.destroy();\r\n } else {\r\n this._disposeObjectList.push(obj);\r\n }\r\n }\r\n }\r\n restoreObject(obj: GPUObject) {\r\n if (obj && obj.disposed && !this.isContextLost()) {\r\n obj.restore();\r\n obj.restoreHandler?.(obj);\r\n }\r\n }\r\n enableGPUTimeRecording(enable: boolean) {\r\n if (enable && !this._gpuTimer) {\r\n this._gpuTimer = this.createGPUTimer();\r\n } else if (!enable) {\r\n this._gpuTimer?.end();\r\n this._gpuTimer = null;\r\n }\r\n }\r\n beginFrame() {\r\n if (this._beginFrameCounter === 0) {\r\n for (const obj of this._disposeObjectList) {\r\n obj.destroy();\r\n }\r\n this._disposeObjectList = [];\r\n }\r\n this._beginFrameCounter++;\r\n this._beginFrameTime = this._cpuTimer.now();\r\n this.updateFrameInfo();\r\n this._poolMap.forEach((pool) => pool.autoRelease());\r\n return this.onBeginFrame();\r\n }\r\n endFrame() {\r\n if (this._beginFrameCounter > 0) {\r\n this._beginFrameCounter--;\r\n if (this._beginFrameCounter === 0) {\r\n this._endFrameTime = this._cpuTimer.now();\r\n this._frameInfo.frameCounter++;\r\n this.onEndFrame();\r\n }\r\n }\r\n }\r\n getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number) {\r\n return getVertexAttribFormat(semantic, dataType, componentCount);\r\n }\r\n createInterleavedVertexBuffer(\r\n attribFormats: VertexAttribFormat[],\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ) {\r\n if (options && options.usage && options.usage !== 'vertex') {\r\n console.error(`createInterleavedVertexBuffer() failed: options.usage must be 'vertex' or not set`);\r\n return null;\r\n }\r\n let size = 0;\r\n for (const format of attribFormats) {\r\n size += getVertexFormatSize(format);\r\n }\r\n const vertexBufferType = makeVertexBufferType((data.byteLength / size) >> 0, ...attribFormats);\r\n if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\r\n const opt = Object.assign(\r\n {\r\n usage: 'vertex',\r\n dynamic: false,\r\n managed: true,\r\n storage: false\r\n },\r\n options || {}\r\n );\r\n if (opt.storage) {\r\n opt.dynamic = false;\r\n opt.managed = false;\r\n }\r\n if (opt.dynamic) {\r\n opt.managed = false;\r\n }\r\n return this.createStructuredBuffer(vertexBufferType, opt, data);\r\n }\r\n createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions) {\r\n if (options && options.usage && options.usage !== 'vertex') {\r\n console.error(`createVertexBuffer() failed: options.usage must be 'vertex' or not set`);\r\n return null;\r\n }\r\n const count = getVertexFormatSize(attribFormat);\r\n const vertexBufferType = makeVertexBufferType((data.byteLength / count) >> 0, attribFormat);\r\n if (!vertexBufferType) {\r\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\r\n return null;\r\n }\r\n const opt = Object.assign(\r\n {\r\n usage: 'vertex',\r\n dynamic: false,\r\n managed: true,\r\n storage: false\r\n },\r\n options || {}\r\n );\r\n if (opt.storage) {\r\n opt.dynamic = false;\r\n opt.managed = false;\r\n }\r\n if (opt.dynamic) {\r\n opt.managed = false;\r\n }\r\n return this.createStructuredBuffer(vertexBufferType, opt, data);\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this._frameInfo.drawCalls++;\r\n this._draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this._frameInfo.drawCalls++;\r\n this._drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n executeRenderBundle(renderBundle: RenderBundle): void {\r\n this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);\r\n }\r\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\r\n this._frameInfo.computeCalls++;\r\n this._compute(workgroupCountX, workgroupCountY, workgroupCountZ);\r\n }\r\n runNextFrame(f: () => void) {\r\n if (f) {\r\n this._frameInfo.nextFrameCall.push(f);\r\n }\r\n }\r\n async runNextFrameAsync(f: () => void | Promise<void>) {\r\n return new Promise<void>((resolve) => {\r\n if (f) {\r\n this._frameInfo.nextFrameCall.push(() => {\r\n const p = f();\r\n if (p instanceof Promise) {\r\n p.then(() => resolve());\r\n } else {\r\n resolve();\r\n }\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n exitLoop() {\r\n if (this._runningLoop !== null) {\r\n if (this._runningLoop !== 0) {\r\n cancelAnimationFrame(this._runningLoop);\r\n } else {\r\n this.cancelNextFrame(this._runningLoop);\r\n }\r\n this._runningLoop = null;\r\n }\r\n }\r\n runLoop(func: (device: AbstractDevice) => void) {\r\n if (this._runningLoop !== null) {\r\n console.error('Device.runLoop() can not be nested');\r\n return;\r\n }\r\n if (!func) {\r\n console.error('Device.runLoop() argment error');\r\n return;\r\n }\r\n const that = this;\r\n that._runLoopFunc = func;\r\n (function entry() {\r\n if (that._vSync) {\r\n that._runningLoop = requestAnimationFrame(entry);\r\n } else {\r\n that._runningLoop = that.nextFrame(() => {\r\n if (that._runningLoop !== null) {\r\n entry();\r\n }\r\n });\r\n }\r\n if (that.beginFrame()) {\r\n that._runLoopFunc(that as unknown as AbstractDevice);\r\n that.endFrame();\r\n }\r\n })();\r\n }\r\n pushDeviceStates() {\r\n this._stateStack.push({\r\n windowOrderReversed: this.isWindingOrderReversed(),\r\n framebuffer: this.getFramebuffer(),\r\n viewport: this.getViewport(),\r\n scissor: this.getScissor(),\r\n program: this.getProgram(),\r\n renderStateSet: this.getRenderStates(),\r\n vertexLayout: this.getVertexLayout(),\r\n bindGroups: [this.getBindGroup(0), this.getBindGroup(1), this.getBindGroup(2), this.getBindGroup(3)]\r\n });\r\n }\r\n popDeviceStates() {\r\n if (this._stateStack.length === 0) {\r\n console.error('Device.popDeviceStates(): stack is empty');\r\n } else {\r\n const top = this._stateStack.pop()!;\r\n this.setFramebuffer(top.framebuffer);\r\n this.setViewport(top.viewport);\r\n this.setScissor(top.scissor);\r\n this.setProgram(top.program);\r\n this.setRenderStates(top.renderStateSet);\r\n this.setVertexLayout(top.vertexLayout);\r\n this.setBindGroup(0, ...top.bindGroups[0]);\r\n this.setBindGroup(1, ...top.bindGroups[1]);\r\n this.setBindGroup(2, ...top.bindGroups[2]);\r\n this.setBindGroup(3, ...top.bindGroups[3]);\r\n this.reverseVertexWindingOrder(top.windowOrderReversed);\r\n }\r\n }\r\n getGPUObjects() {\r\n return this._gpuObjectList;\r\n }\r\n getGPUObjectById(uid: number) {\r\n for (const list of [\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.vertexArrayObjects\r\n ]) {\r\n for (const obj of list) {\r\n if (obj.uid === uid) {\r\n return obj;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n screenXToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleX());\r\n }\r\n deviceXToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleX());\r\n }\r\n screenYToDevice(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleY());\r\n }\r\n deviceYToScreen(val: number) {\r\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleY());\r\n }\r\n buildRenderProgram(options: PBRenderOptions) {\r\n return this._programBuilder.buildRenderProgram(options);\r\n }\r\n buildComputeProgram(options: PBComputeOptions) {\r\n return this._programBuilder.buildComputeProgram(options);\r\n }\r\n getGPUObjectStack(obj: GPUObject): string {\r\n return this._gpuObjectList.stacks.get(obj) ?? '';\r\n }\r\n addGPUObject(obj: GPUObject) {\r\n const list = this.getGPUObjectList(obj);\r\n if (list && list.indexOf(obj) < 0) {\r\n list.push(obj);\r\n this._gpuObjectList.stacks.set(obj, new Error().stack ?? '');\r\n this.dispatchEvent('gpuobject_added', obj);\r\n }\r\n }\r\n removeGPUObject(obj: GPUObject) {\r\n const list = this.getGPUObjectList(obj);\r\n if (list) {\r\n const index = list.indexOf(obj);\r\n if (index >= 0) {\r\n list.splice(index, 1);\r\n this._gpuObjectList.stacks.delete(obj);\r\n this.dispatchEvent('gpuobject_removed', obj);\r\n }\r\n }\r\n }\r\n updateVideoMemoryCost(delta: number) {\r\n this._gpuMemCost += delta;\r\n }\r\n protected abstract onBeginFrame(): boolean;\r\n protected abstract onEndFrame(): void;\r\n protected abstract _setFramebuffer(fb: Nullable<FrameBuffer>): void;\r\n protected abstract _handleResize(\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n ): void;\r\n protected async initResizer() {\r\n return new Promise<void>((resolve) => {\r\n this.once(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n this.on(\r\n 'resize',\r\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\r\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n );\r\n resolve();\r\n }\r\n );\r\n this._resizer.init();\r\n });\r\n }\r\n private updateFrameInfo() {\r\n this._frameInfo.drawCalls = 0;\r\n this._frameInfo.computeCalls = 0;\r\n const now = this._beginFrameTime;\r\n if (this._frameInfo.frameTimestamp === 0) {\r\n this._frameInfo.frameTimestamp = now;\r\n this._frameInfo.elapsedTimeCPU = 0;\r\n this._frameInfo.elapsedTimeGPU = 0;\r\n this._frameInfo.elapsedFrame = 0;\r\n this._frameInfo.elapsedOverall = 0;\r\n this._frameInfo.FPS = 0;\r\n this._fpsCounter.time = now;\r\n this._fpsCounter.frame = this._frameInfo.frameCounter;\r\n if (this._gpuTimer) {\r\n this._gpuTimer.begin();\r\n }\r\n } else {\r\n this._frameInfo.elapsedFrame = now - this._frameInfo.frameTimestamp;\r\n this._frameInfo.elapsedOverall += this._frameInfo.elapsedFrame;\r\n let gpuTime = 0;\r\n let cpuTime = 0;\r\n if (this._endFrameTime !== 0) {\r\n gpuTime = now - this._endFrameTime;\r\n cpuTime = this._endFrameTime - this._frameInfo.frameTimestamp;\r\n }\r\n this._frameInfo.frameTimestamp = now;\r\n if (now >= this._fpsCounter.time + 1000) {\r\n this._frameInfo.FPS =\r\n ((this._frameInfo.frameCounter - this._fpsCounter.frame) * 1000) / (now - this._fpsCounter.time);\r\n this._fpsCounter.time = now;\r\n this._fpsCounter.frame = this._frameInfo.frameCounter;\r\n this._frameInfo.elapsedTimeGPU = gpuTime;\r\n this._frameInfo.elapsedTimeCPU = cpuTime;\r\n }\r\n }\r\n const tmp = this._frameInfo.nextFrameCall;\r\n this._frameInfo.nextFrameCall = this._frameInfo.nextFrameCallNext;\r\n this._frameInfo.nextFrameCallNext = tmp;\r\n for (const f of this._frameInfo.nextFrameCallNext) {\r\n f();\r\n }\r\n this._frameInfo.nextFrameCallNext.length = 0;\r\n }\r\n private getGPUObjectList(obj: GPUObject) {\r\n let list: Nullable<GPUObject[]> = null;\r\n if (obj.isTexture()) {\r\n list = this._gpuObjectList.textures;\r\n } else if (obj.isSampler()) {\r\n list = this._gpuObjectList.samplers;\r\n } else if (obj.isBuffer()) {\r\n list = this._gpuObjectList.buffers;\r\n } else if (obj.isFramebuffer()) {\r\n list = this._gpuObjectList.framebuffers;\r\n } else if (obj.isProgram()) {\r\n list = this._gpuObjectList.programs;\r\n } else if (obj.isVertexLayout()) {\r\n list = this._gpuObjectList.vertexArrayObjects;\r\n } else if (obj.isBindGroup()) {\r\n list = this._gpuObjectList.bindGroups;\r\n }\r\n return list;\r\n }\r\n protected invalidateAll() {\r\n for (const list of [\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.vertexArrayObjects,\r\n this._gpuObjectList.bindGroups\r\n ]) {\r\n for (const obj of list) {\r\n this.disposeObject(obj, false);\r\n }\r\n }\r\n if (this.isContextLost()) {\r\n for (const obj of this._disposeObjectList) {\r\n obj.destroy();\r\n }\r\n this._disposeObjectList = [];\r\n }\r\n }\r\n protected reloadAll() {\r\n for (const list of [\r\n this._gpuObjectList.buffers,\r\n this._gpuObjectList.textures,\r\n this._gpuObjectList.samplers,\r\n this._gpuObjectList.programs,\r\n this._gpuObjectList.framebuffers,\r\n this._gpuObjectList.vertexArrayObjects,\r\n this._gpuObjectList.bindGroups\r\n ]) {\r\n // obj.reload() may change the list, so make a copy first\r\n for (const obj of list.slice()) {\r\n obj.reload();\r\n }\r\n }\r\n return;\r\n }\r\n protected parseTextureOptions(options?: TextureCreationOptions) {\r\n const noMipmapFlag = options?.mipmapping === false ? GPUResourceUsageFlags.TF_NO_MIPMAP : 0;\r\n const writableFlag = options?.writable ? GPUResourceUsageFlags.TF_WRITABLE : 0;\r\n const dynamicFlag = options?.dynamic ? GPUResourceUsageFlags.DYNAMIC : 0;\r\n if (noMipmapFlag && options?.samplerOptions) {\r\n options.samplerOptions.mipFilter = 'none';\r\n }\r\n return noMipmapFlag | writableFlag | dynamicFlag;\r\n }\r\n protected parseBufferOptions(options?: BufferCreationOptions, defaultUsage?: BufferUsage) {\r\n options = options ?? {};\r\n const usage = options.usage ?? defaultUsage;\r\n let usageFlag: number;\r\n switch (usage) {\r\n case 'uniform':\r\n usageFlag = GPUResourceUsageFlags.BF_UNIFORM;\r\n options.managed = false;\r\n options.dynamic = options.dynamic ?? true;\r\n break;\r\n case 'vertex':\r\n usageFlag = GPUResourceUsageFlags.BF_VERTEX;\r\n break;\r\n case 'index':\r\n usageFlag = GPUResourceUsageFlags.BF_INDEX;\r\n break;\r\n case 'read':\r\n usageFlag = GPUResourceUsageFlags.BF_READ;\r\n options.managed = false;\r\n break;\r\n case 'write':\r\n usageFlag = GPUResourceUsageFlags.BF_WRITE;\r\n options.managed = false;\r\n break;\r\n case 'pack-pixel':\r\n usageFlag = GPUResourceUsageFlags.BF_PACK_PIXEL;\r\n options.managed = false;\r\n break;\r\n case 'unpack-pixel':\r\n usageFlag = GPUResourceUsageFlags.BF_UNPACK_PIXEL;\r\n options.managed = false;\r\n break;\r\n default:\r\n usageFlag = 0;\r\n break;\r\n }\r\n const storageFlag = (options?.storage ?? false) ? GPUResourceUsageFlags.BF_STORAGE : 0;\r\n const dynamicFlag = (options?.dynamic ?? false) ? GPUResourceUsageFlags.DYNAMIC : 0;\r\n const managedFlag = dynamicFlag === 0 && (options?.managed ?? true) ? GPUResourceUsageFlags.MANAGED : 0;\r\n return usageFlag | storageFlag | dynamicFlag | managedFlag;\r\n }\r\n}\r\n\r\n/**\r\n * Merge event target interface\r\n * @public\r\n */\r\nexport interface BaseDevice extends IEventTarget<DeviceEventMap> {}\r\n"],"names":["ResizeHandler","_canvas","_dpr","_cssWidth","_cssHeight","_deviceWidth","_deviceHeight","_resizeObserver","_mutationObserver","_onResizeCallback","canvas","onResize","dpr","init","window","ResizeObserver","entries","entry","_handleResizeEntry","observe","MutationObserver","mutations","length","_handleLegacyResize","attributes","attributeFilter","addEventListener","_entry","boxSize","Array","isArray","contentBoxSize","cssWidth","inlineSize","clientWidth","cssHeight","blockSize","clientHeight","deviceWidth","deviceHeight","devicePixelRatio","Math","round","dispose","disconnect","removeEventListener","BaseDevice","Observable","_canvasClientWidth","_canvasClientHeight","_gpuObjectList","_gpuMemCost","_disposeObjectList","_beginFrameTime","_endFrameTime","_frameInfo","_cpuTimer","_gpuTimer","_runningLoop","_fpsCounter","_runLoopFunc","_backend","_beginFrameCounter","_programBuilder","_poolMap","_defaultPoolKey","_temporalFramebuffer","_vSync","_resizer","_stateStack","cvs","backend","stacks","Map","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Symbol","set","Pool","dispatchEvent","getScaleX","width","getScaleY","height","videoMemoryUsage","frameInfo","isRendering","type","typeName","vSync","val","pool","get","runLoopFunction","programBuilder","poolExists","key","has","getPool","setFont","fontName","DrawText","setTextRenderStates","renderStates","setRenderStates","drawText","text","xOrRect","yOrColor","colorOrOptions","options","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","fetchTemporalFramebuffer","currentRT","getFramebuffer","releaseFrameBuffer","_setFramebuffer","disposeObject","obj","remove","removeGPUObject","isContextLost","destroy","push","restoreObject","disposed","restore","restoreHandler","enableGPUTimeRecording","enable","createGPUTimer","end","beginFrame","now","updateFrameInfo","forEach","autoRelease","onBeginFrame","endFrame","onEndFrame","getVertexAttribFormat","semantic","dataType","componentCount","createInterleavedVertexBuffer","attribFormats","data","usage","console","error","size","format","getVertexFormatSize","vertexBufferType","makeVertexBufferType","byteLength","opt","Object","assign","dynamic","managed","storage","createStructuredBuffer","createVertexBuffer","attribFormat","count","draw","primitiveType","first","_draw","drawInstanced","numInstances","_drawInstanced","executeRenderBundle","renderBundle","_executeRenderBundle","compute","workgroupCountX","workgroupCountY","workgroupCountZ","_compute","runNextFrame","f","runNextFrameAsync","Promise","resolve","p","then","exitLoop","cancelAnimationFrame","cancelNextFrame","runLoop","func","that","requestAnimationFrame","nextFrame","pushDeviceStates","windowOrderReversed","isWindingOrderReversed","framebuffer","viewport","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","getGPUObjectStack","addGPUObject","getGPUObjectList","indexOf","Error","stack","index","splice","delete","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":";;;;;;;AA8FA,MAAMA,aAAAA,CAAAA;IACaC,OAA2B;IAC3BC,IAAa;IACtBC,SAAkB;IAClBC,UAAmB;IACnBC,YAAqB;IACrBC,aAAsB;IAEtBC,eAAiC;IACjCC,iBAAqC;IACrCC,iBAAkC;AAE1C,IAAA,WAAA,CAAYC,MAAyB,EAAEC,QAAwB,EAAEC,GAAW,CAAE;QAC5E,IAAI,CAACX,OAAO,GAAGS,MAAAA;QACf,IAAI,CAACR,IAAI,GAAGU,GAAAA;QACZ,IAAI,CAACT,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,YAAY,GAAG,CAAA;QACpB,IAAI,CAACC,aAAa,GAAG,CAAA;QACrB,IAAI,CAACG,iBAAiB,GAAGE,QAAAA;AAC3B;IAEAE,IAAO,GAAA;QACL,MAAMH,MAAAA,GAAS,IAAI,CAACT,OAAO;QAC3B,IAAIa,MAAAA,CAAOC,cAAc,EAAE;AACzB,YAAA,IAAI,CAACR,eAAe,GAAG,IAAIQ,eAAe,CAACC,OAAAA,GAAAA;gBACzC,MAAMC,KAAAA,GAAQD,OAAO,CAAC,CAAE,CAAA;gBACxB,IAAI,CAACE,kBAAkB,CAACD,KAAAA,CAAAA;AAC1B,aAAA,CAAA;YACA,IAAI;AACD,gBAAA,IAAI,CAACV,eAAe,CAASY,OAAO,CAACT,MAAAA,CAAAA;AACxC,aAAA,CAAE,OAAM;AACN,gBAAA,IAAI,CAACH,eAAe,CAACY,OAAO,CAACT,MAAAA,CAAAA;AAC/B;SACK,MAAA;YACL,IAAII,MAAAA,CAAOM,gBAAgB,EAAE;AAC3B,gBAAA,IAAI,CAACZ,iBAAiB,GAAG,IAAIY,iBAAiB,CAACC,SAAAA,GAAAA;oBAC7C,IAAIA,SAAAA,CAAUC,MAAM,GAAG,CAAG,EAAA;AACxB,wBAAA,IAAI,CAACC,mBAAmB,EAAA;AAC1B;AACF,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACf,iBAAiB,CAACW,OAAO,CAACT,MAAQ,EAAA;oBAAEc,UAAY,EAAA,IAAA;oBAAMC,eAAiB,EAAA;AAAC,wBAAA;AAAQ;AAAC,iBAAA,CAAA;AACxF;AACAX,YAAAA,MAAAA,CAAOY,gBAAgB,CAAC,QAAU,EAAA,IAAI,CAACH,mBAAmB,CAAA;AAC1D,YAAA,IAAI,CAACA,mBAAmB,EAAA;AAC1B;AACF;AAEQL,IAAAA,kBAAAA,CAAmBS,MAA2B,EAAE;;AAEtD,QAAA,MAAMC,OAAUC,GAAAA,KAAAA,CAAMC,OAAO,CAACH,MAAOI,CAAAA,cAAc,CAAIJ,GAAAA,MAAAA,CAAOI,cAAc,CAAC,CAAE,CAAA,GAAGJ,OAAOI,cAAc;AACvG,QAAA,MAAMC,WAAWJ,OAASK,EAAAA,UAAAA,IAAc,IAAI,CAAChC,OAAO,CAACiC,WAAW;AAChE,QAAA,MAAMC,YAAYP,OAASQ,EAAAA,SAAAA,IAAa,IAAI,CAACnC,OAAO,CAACoC,YAAY;;AAGjE;;;;;;;;;;;;AAYA,OACA,MAAMC,WAAAA,GAAcN,QAAW,GAAA,IAAI,CAAC9B,IAAI;AACxC,QAAA,MAAMqC,YAAeJ,GAAAA,SAAAA,GAAY,IAAI,CAACjC,IAAI;AAE1C,QAAA,IACE8B,aAAa,IAAI,CAAC7B,SAAS,IAC3BgC,SAAAA,KAAc,IAAI,CAAC/B,UAAU,IAC7BkC,WAAgB,KAAA,IAAI,CAACjC,YAAY,IACjCkC,iBAAiB,IAAI,CAACjC,aAAa,EACnC;AACA,YAAA;AACF;QAEA,IAAI,CAACH,SAAS,GAAG6B,QAAAA;QACjB,IAAI,CAAC5B,UAAU,GAAG+B,SAAAA;QAClB,IAAI,CAAC9B,YAAY,GAAGiC,WAAAA;QACpB,IAAI,CAAChC,aAAa,GAAGiC,YAAAA;AAErB,QAAA,IAAI,CAAC9B,iBAAiB,CAACuB,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AAC3D;IAEQhB,mBAAsB,GAAA,IAAA;AAC5B,QAAA,MAAMS,QAAW,GAAA,IAAI,CAAC/B,OAAO,CAACiC,WAAW;AACzC,QAAA,MAAMC,SAAY,GAAA,IAAI,CAAClC,OAAO,CAACoC,YAAY;QAC3C,MAAMzB,GAAAA,GAAME,MAAO0B,CAAAA,gBAAgB,IAAI,CAAA;AACvC,QAAA,MAAMF,WAAcG,GAAAA,IAAAA,CAAKC,KAAK,CAACV,QAAWpB,GAAAA,GAAAA,CAAAA;AAC1C,QAAA,MAAM2B,YAAeE,GAAAA,IAAAA,CAAKC,KAAK,CAACP,SAAYvB,GAAAA,GAAAA,CAAAA;AAE5C,QAAA,IACEoB,aAAa,IAAI,CAAC7B,SAAS,IAC3BgC,SAAAA,KAAc,IAAI,CAAC/B,UAAU,IAC7BkC,WAAgB,KAAA,IAAI,CAACjC,YAAY,IACjCkC,iBAAiB,IAAI,CAACjC,aAAa,EACnC;AACA,YAAA;AACF;QAEA,IAAI,CAACH,SAAS,GAAG6B,QAAAA;QACjB,IAAI,CAAC5B,UAAU,GAAG+B,SAAAA;QAClB,IAAI,CAAC9B,YAAY,GAAGiC,WAAAA;QACpB,IAAI,CAAChC,aAAa,GAAGiC,YAAAA;AAErB,QAAA,IAAI,CAAC9B,iBAAiB,CAACuB,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;KACzD;IAEKI,OAAU,GAAA;QACf,IAAI,IAAI,CAACpC,eAAe,EAAE;YACxB,IAAI,CAACA,eAAe,CAACqC,UAAU,EAAA;AACjC;QACA,IAAI,IAAI,CAACpC,iBAAiB,EAAE;YAC1B,IAAI,CAACA,iBAAiB,CAACoC,UAAU,EAAA;AACnC;AACA9B,QAAAA,MAAAA,CAAO+B,mBAAmB,CAAC,QAAU,EAAA,IAAI,CAACtB,mBAAmB,CAAA;AAC/D;AACF;AAEA;;;IAIO,MAAeuB,UAAmBC,SAAAA,UAAAA,CAAAA;IAC7B7C,IAAa;IACbD,OAA2B;IAC3B+C,kBAA2B;IAC3BC,mBAA4B;IAC5BC,cAA8B;IAC9BC,WAAoB;IACpBC,kBAAgC;IAChCC,eAAwB;IACxBC,aAAsB;IACtBC,UAAsB;IACtBC,SAAoB;IACpBC,SAA4B;IAC5BC,YAA+B;IAC/BC,WAA6C;IAC7CC,YAAyD;IACzDC,QAAwB;IACxBC,kBAA2B;IAC3BC,eAAgC;IAChCC,QAAqC;IACrCC,eAAwB;IACxBC,oBAA8B;IAC9BC,MAAgB;IACTC,QAAwB;IACxBC,WAA2B;AAC5C,IAAA,WAAA,CAAYC,GAAsB,EAAEC,OAAsB,EAAE3D,GAAY,CAAE;QACxE,KAAK,EAAA;AACL,QAAA,IAAI,CAACV,IAAI,GAAGU,GAAOE,IAAAA,MAAAA,CAAO0B,gBAAgB,IAAI,CAAA;QAC9C,IAAI,CAACqB,QAAQ,GAAGU,OAAAA;QAChB,IAAI,CAACrB,cAAc,GAAG;AACpBsB,YAAAA,MAAAA,EAAQ,IAAIC,GAAAA,EAAAA;AACZC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,OAAAA,EAAS,EAAE;AACXC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,YAAAA,EAAc,EAAE;AAChBC,YAAAA,kBAAAA,EAAoB,EAAE;AACtBC,YAAAA,UAAAA,EAAY;AACd,SAAA;QACA,IAAI,CAAC/E,OAAO,GAAGqE,GAAAA;AACf,QAAA,IAAI,CAACrE,OAAO,CAACgF,YAAY,CAAC,UAAY,EAAA,GAAA,CAAA;AACtC,QAAA,IAAI,CAACjC,kBAAkB,GAAGsB,GAAAA,CAAIpC,WAAW;AACzC,QAAA,IAAI,CAACe,mBAAmB,GAAGqB,GAAAA,CAAIjC,YAAY;QAC3C,IAAI,CAACc,WAAW,GAAG,CAAA;QACnB,IAAI,CAACC,kBAAkB,GAAG,EAAE;QAC5B,IAAI,CAACC,eAAe,GAAG,CAAA;QACvB,IAAI,CAACC,aAAa,GAAG,CAAA;QACrB,IAAI,CAACM,YAAY,GAAG,IAAA;QACpB,IAAI,CAACL,UAAU,GAAG;YAChB2B,YAAc,EAAA,CAAA;YACdC,cAAgB,EAAA,CAAA;YAChBC,cAAgB,EAAA,CAAA;YAChBC,cAAgB,EAAA,CAAA;YAChBC,YAAc,EAAA,CAAA;YACdC,cAAgB,EAAA,CAAA;YAChBC,GAAK,EAAA,CAAA;YACLC,SAAW,EAAA,CAAA;YACXC,YAAc,EAAA,CAAA;AACdC,YAAAA,aAAAA,EAAe,EAAE;AACjBC,YAAAA,iBAAAA,EAAmB;AACrB,SAAA;AACA,QAAA,IAAI,CAAC7B,eAAe,GAAG,IAAI8B,eAAe,IAAI,CAAA;QAC9C,IAAI,CAACrC,SAAS,GAAG,IAAIsC,QAAAA,EAAAA;QACrB,IAAI,CAACrC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,WAAW,GAAG;YAAEoC,IAAM,EAAA,CAAA;YAAGC,KAAO,EAAA;AAAE,SAAA;QACvC,IAAI,CAAC3B,WAAW,GAAG,EAAE;QACrB,IAAI,CAACP,kBAAkB,GAAG,CAAA;QAC1B,IAAI,CAACE,QAAQ,GAAG,IAAIS,GAAAA,EAAAA;QACpB,IAAI,CAACR,eAAe,GAAGgC,MAAO,CAAA,aAAA,CAAA;AAC9B,QAAA,IAAI,CAACjC,QAAQ,CAACkC,GAAG,CAAC,IAAI,CAACjC,eAAe,EAAE,IAAIkC,IAAK,CAAA,IAAI,EAAE,IAAI,CAAClC,eAAe,CAAA,CAAA;QAC3E,IAAI,CAACC,oBAAoB,GAAG,KAAA;QAC5B,IAAI,CAACA,oBAAoB,GAAG,KAAA;QAC5B,IAAI,CAACC,MAAM,GAAG,IAAA;;AAEd,QAAA,IAAI,CAACC,QAAQ,GAAG,IAAIpE,aAClB,CAAA,IAAI,CAACC,OAAO,EACZ,CAAC+B,QAAUG,EAAAA,SAAAA,EAAWG,WAAaC,EAAAA,YAAAA,GAAAA;AACjC,YAAA,IAAI,CAAC6D,aAAa,CAAC,QAAUpE,EAAAA,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;SAEjE,EAAA,IAAI,CAACrC,IAAI,CAAA;AAEb;IACAmG,SAAY,GAAA;QACV,OAAO,IAAI,CAACpG,OAAO,CAACqG,KAAK,GAAG,IAAI,CAACrG,OAAO,CAACiC,WAAW;AACtD;IACAqE,SAAY,GAAA;QACV,OAAO,IAAI,CAACtG,OAAO,CAACuG,MAAM,GAAG,IAAI,CAACvG,OAAO,CAACoC,YAAY;AACxD;AAqJA,IAAA,IAAIkC,OAAU,GAAA;QACZ,OAAO,IAAI,CAACV,QAAQ;AACtB;AACA,IAAA,IAAI4C,gBAAmB,GAAA;QACrB,OAAO,IAAI,CAACtD,WAAW;AACzB;AACA,IAAA,IAAIuD,SAAY,GAAA;QACd,OAAO,IAAI,CAACnD,UAAU;AACxB;AACA,IAAA,IAAIoD,WAAc,GAAA;QAChB,OAAO,IAAI,CAACjD,YAAY,KAAK,IAAA;AAC/B;AACA,IAAA,IAAIhD,MAAS,GAAA;QACX,OAAO,IAAI,CAACT,OAAO;AACrB;AACA,IAAA,IAAI2G,IAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC/C,QAAQ,CAACgD,QAAQ,EAAA;AAC/B;AACA,IAAA,IAAIC,KAAQ,GAAA;QACV,OAAO,IAAI,CAAC3C,MAAM;AACpB;IACA,IAAI2C,KAAAA,CAAMC,GAAG,EAAE;AACb,QAAA,IAAI,CAAC5C,MAAM,GAAG,CAAC,CAAC4C,GAAAA;AAClB;AACA,IAAA,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAAChD,QAAQ,CAACiD,GAAG,CAAC,IAAI,CAAChD,eAAe,CAAA;AAC/C;AACA,IAAA,IAAIiD,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACtD,YAAY;AAC1B;AACA,IAAA,IAAIuD,cAAiB,GAAA;QACnB,OAAO,IAAI,CAACpD,eAAe;AAC7B;AACAqD,IAAAA,UAAAA,CAAWC,GAAoB,EAAE;AAC/B,QAAA,OAAO,IAAI,CAACrD,QAAQ,CAACsD,GAAG,CAACD,GAAAA,CAAAA;AAC3B;AACAE,IAAAA,OAAAA,CAAQF,GAAoB,EAAE;AAC5B,QAAA,IAAIL,OAAO,IAAI,CAAChD,QAAQ,CAACiD,GAAG,CAACI,GAAAA,CAAAA;AAC7B,QAAA,IAAI,CAACL,IAAM,EAAA;YACTA,IAAO,GAAA,IAAIb,IAAK,CAAA,IAAI,EAAEkB,GAAAA,CAAAA;AACtB,YAAA,IAAI,CAACrD,QAAQ,CAACkC,GAAG,CAACmB,GAAKL,EAAAA,IAAAA,CAAAA;AACzB;QACA,OAAOA,IAAAA;AACT;AACAQ,IAAAA,OAAAA,CAAQC,QAA0B,EAAE;QAClCC,QAASF,CAAAA,OAAO,CAAC,IAAI,EAAEC,QAAAA,CAAAA;AACzB;AACAE,IAAAA,mBAAAA,CAAoBC,YAAsC,EAAE;AAC1DF,QAAAA,QAAAA,CAASG,eAAe,CAACD,YAAAA,CAAAA;AAC3B;IAQAE,QACEC,CAAAA,IAAY,EACZC,OAAiC,EACjCC,QAA6C,EAC7CC,cAAmE,EACnEC,OAA+B,EAC/B;QACA,IAAI,OAAOH,YAAY,QAAU,EAAA;AAC/BN,YAAAA,QAAAA,CAASI,QAAQ,CACf,IAAI,EACJC,IAAAA,EACAG,gBACAF,OACAC,EAAAA,QAAAA,CAAAA;SAEG,MAAA;AACLP,YAAAA,QAAAA,CAASI,QAAQ,CACf,IAAI,EACJC,IACAE,EAAAA,QAAAA,EACAD,SACAG,OAAYD,IAAAA,cAAAA,CAAAA;AAEhB;AACF;AAGAE,IAAAA,cAAAA,CACEC,SAAgD,EAChDC,KAAmB,EACnBC,WAAoB,EACpB;AACA,QAAA,IAAIC,KAA+B,GAAA,IAAA;AACnC,QAAA,IAAIC,QAAW,GAAA,KAAA;AACf,QAAA,IAAI,CAAC5G,KAAAA,CAAMC,OAAO,CAACuG,SAAY,CAAA,EAAA;AAC7BG,YAAAA,KAAAA,GAAQH,SAAa,IAAA,IAAA;SAChB,MAAA;YACLG,KAAQ,GAAA,IAAI,CAACxB,IAAI,CAAE0B,wBAAwB,CAAC,KAAA,EAAO,CAAG,EAAA,CAAA,EAAGL,SAAWC,EAAAA,KAAAA,EAAO,IAAMC,EAAAA,WAAAA,CAAAA;YACjFE,QAAW,GAAA,IAAA;AACb;QACA,MAAME,SAAAA,GAAY,IAAI,CAACC,cAAc,EAAA;AACrC,QAAA,IAAID,cAAcH,KAAO,EAAA;AACvB,YAAA,IAAI,IAAI,CAACtE,oBAAoB,IAAIyE,SAAW,EAAA;AAC1C,gBAAA,IAAI,CAAC3B,IAAI,CAAE6B,kBAAkB,CAACF,SAAAA,CAAAA;AAChC;YACA,IAAI,CAACzE,oBAAoB,GAAGuE,QAAAA;YAC5B,IAAI,CAACK,eAAe,CAACN,KAAAA,CAAAA;AACvB;AACF;AACAO,IAAAA,aAAAA,CAAcC,GAAc,EAAEC,MAAS,GAAA,IAAI,EAAE;AAC3C,QAAA,IAAID,GAAK,EAAA;AACP,YAAA,IAAIC,MAAQ,EAAA;gBACV,IAAI,CAACC,eAAe,CAACF,GAAAA,CAAAA;AACvB;YACA,IAAI,IAAI,CAACG,aAAa,EAAI,EAAA;AACxBH,gBAAAA,GAAAA,CAAII,OAAO,EAAA;aACN,MAAA;AACL,gBAAA,IAAI,CAAChG,kBAAkB,CAACiG,IAAI,CAACL,GAAAA,CAAAA;AAC/B;AACF;AACF;AACAM,IAAAA,aAAAA,CAAcN,GAAc,EAAE;QAC5B,IAAIA,GAAAA,IAAOA,IAAIO,QAAQ,IAAI,CAAC,IAAI,CAACJ,aAAa,EAAI,EAAA;AAChDH,YAAAA,GAAAA,CAAIQ,OAAO,EAAA;AACXR,YAAAA,GAAAA,CAAIS,cAAc,GAAGT,GAAAA,CAAAA;AACvB;AACF;AACAU,IAAAA,sBAAAA,CAAuBC,MAAe,EAAE;AACtC,QAAA,IAAIA,MAAU,IAAA,CAAC,IAAI,CAAClG,SAAS,EAAE;AAC7B,YAAA,IAAI,CAACA,SAAS,GAAG,IAAI,CAACmG,cAAc,EAAA;SAC/B,MAAA,IAAI,CAACD,MAAQ,EAAA;YAClB,IAAI,CAAClG,SAAS,EAAEoG,GAAAA,EAAAA;YAChB,IAAI,CAACpG,SAAS,GAAG,IAAA;AACnB;AACF;IACAqG,UAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAChG,kBAAkB,KAAK,CAAG,EAAA;AACjC,YAAA,KAAK,MAAMkF,GAAAA,IAAO,IAAI,CAAC5F,kBAAkB,CAAE;AACzC4F,gBAAAA,GAAAA,CAAII,OAAO,EAAA;AACb;YACA,IAAI,CAAChG,kBAAkB,GAAG,EAAE;AAC9B;AACA,QAAA,IAAI,CAACU,kBAAkB,EAAA;AACvB,QAAA,IAAI,CAACT,eAAe,GAAG,IAAI,CAACG,SAAS,CAACuG,GAAG,EAAA;AACzC,QAAA,IAAI,CAACC,eAAe,EAAA;QACpB,IAAI,CAAChG,QAAQ,CAACiG,OAAO,CAAC,CAACjD,IAAAA,GAASA,KAAKkD,WAAW,EAAA,CAAA;QAChD,OAAO,IAAI,CAACC,YAAY,EAAA;AAC1B;IACAC,QAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAACtG,kBAAkB,GAAG,CAAG,EAAA;AAC/B,YAAA,IAAI,CAACA,kBAAkB,EAAA;AACvB,YAAA,IAAI,IAAI,CAACA,kBAAkB,KAAK,CAAG,EAAA;AACjC,gBAAA,IAAI,CAACR,aAAa,GAAG,IAAI,CAACE,SAAS,CAACuG,GAAG,EAAA;gBACvC,IAAI,CAACxG,UAAU,CAAC2B,YAAY,EAAA;AAC5B,gBAAA,IAAI,CAACmF,UAAU,EAAA;AACjB;AACF;AACF;AACAC,IAAAA,qBAAAA,CAAsBC,QAAwB,EAAEC,QAAkB,EAAEC,cAAsB,EAAE;QAC1F,OAAOH,qBAAAA,CAAsBC,UAAUC,QAAUC,EAAAA,cAAAA,CAAAA;AACnD;AACAC,IAAAA,6BAAAA,CACEC,aAAmC,EACnCC,IAAgB,EAChBzC,OAA+B,EAC/B;AACA,QAAA,IAAIA,WAAWA,OAAQ0C,CAAAA,KAAK,IAAI1C,OAAQ0C,CAAAA,KAAK,KAAK,QAAU,EAAA;AAC1DC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,iFAAiF,CAAC,CAAA;YACjG,OAAO,IAAA;AACT;AACA,QAAA,IAAIC,IAAO,GAAA,CAAA;QACX,KAAK,MAAMC,UAAUN,aAAe,CAAA;AAClCK,YAAAA,IAAAA,IAAQE,mBAAoBD,CAAAA,MAAAA,CAAAA;AAC9B;AACA,QAAA,MAAME,mBAAmBC,oBAAqB,CAACR,KAAKS,UAAU,GAAGL,QAAS,CAAML,EAAAA,GAAAA,aAAAA,CAAAA;AAChF,QAAA,IAAI,CAACQ,gBAAkB,EAAA;AACrBL,YAAAA,OAAAA,CAAQC,KAAK,CAAC,6EAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,MAAMO,GAAAA,GAAMC,MAAOC,CAAAA,MAAM,CACvB;YACEX,KAAO,EAAA,QAAA;YACPY,OAAS,EAAA,KAAA;YACTC,OAAS,EAAA,IAAA;YACTC,OAAS,EAAA;AACX,SAAA,EACAxD,WAAW,EAAC,CAAA;QAEd,IAAImD,GAAAA,CAAIK,OAAO,EAAE;AACfL,YAAAA,GAAAA,CAAIG,OAAO,GAAG,KAAA;AACdH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;QACA,IAAIJ,GAAAA,CAAIG,OAAO,EAAE;AACfH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;AACA,QAAA,OAAO,IAAI,CAACE,sBAAsB,CAACT,kBAAkBG,GAAKV,EAAAA,IAAAA,CAAAA;AAC5D;AACAiB,IAAAA,kBAAAA,CAAmBC,YAAgC,EAAElB,IAAgB,EAAEzC,OAA+B,EAAE;AACtG,QAAA,IAAIA,WAAWA,OAAQ0C,CAAAA,KAAK,IAAI1C,OAAQ0C,CAAAA,KAAK,KAAK,QAAU,EAAA;AAC1DC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,sEAAsE,CAAC,CAAA;YACtF,OAAO,IAAA;AACT;AACA,QAAA,MAAMgB,QAAQb,mBAAoBY,CAAAA,YAAAA,CAAAA;AAClC,QAAA,MAAMX,mBAAmBC,oBAAqB,CAACR,KAAKS,UAAU,GAAGU,SAAU,CAAGD,EAAAA,YAAAA,CAAAA;AAC9E,QAAA,IAAI,CAACX,gBAAkB,EAAA;AACrBL,YAAAA,OAAAA,CAAQC,KAAK,CAAC,6EAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,MAAMO,GAAAA,GAAMC,MAAOC,CAAAA,MAAM,CACvB;YACEX,KAAO,EAAA,QAAA;YACPY,OAAS,EAAA,KAAA;YACTC,OAAS,EAAA,IAAA;YACTC,OAAS,EAAA;AACX,SAAA,EACAxD,WAAW,EAAC,CAAA;QAEd,IAAImD,GAAAA,CAAIK,OAAO,EAAE;AACfL,YAAAA,GAAAA,CAAIG,OAAO,GAAG,KAAA;AACdH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;QACA,IAAIJ,GAAAA,CAAIG,OAAO,EAAE;AACfH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;AACA,QAAA,OAAO,IAAI,CAACE,sBAAsB,CAACT,kBAAkBG,GAAKV,EAAAA,IAAAA,CAAAA;AAC5D;AACAoB,IAAAA,IAAAA,CAAKC,aAA4B,EAAEC,KAAa,EAAEH,KAAa,EAAE;QAC/D,IAAI,CAACxI,UAAU,CAACkC,SAAS,EAAA;AACzB,QAAA,IAAI,CAAC0G,KAAK,CAACF,aAAAA,EAAeC,KAAOH,EAAAA,KAAAA,CAAAA;AACnC;AACAK,IAAAA,aAAAA,CAAcH,aAA4B,EAAEC,KAAa,EAAEH,KAAa,EAAEM,YAAoB,EAAE;QAC9F,IAAI,CAAC9I,UAAU,CAACkC,SAAS,EAAA;AACzB,QAAA,IAAI,CAAC6G,cAAc,CAACL,aAAAA,EAAeC,OAAOH,KAAOM,EAAAA,YAAAA,CAAAA;AACnD;AACAE,IAAAA,mBAAAA,CAAoBC,YAA0B,EAAQ;QACpD,IAAI,CAACjJ,UAAU,CAACkC,SAAS,IAAI,IAAI,CAACgH,oBAAoB,CAACD,YAAAA,CAAAA;AACzD;AACAE,IAAAA,OAAAA,CAAQC,eAAuB,EAAEC,eAAuB,EAAEC,eAAuB,EAAE;QACjF,IAAI,CAACtJ,UAAU,CAACmC,YAAY,EAAA;AAC5B,QAAA,IAAI,CAACoH,QAAQ,CAACH,eAAAA,EAAiBC,eAAiBC,EAAAA,eAAAA,CAAAA;AAClD;AACAE,IAAAA,YAAAA,CAAaC,CAAa,EAAE;AAC1B,QAAA,IAAIA,CAAG,EAAA;AACL,YAAA,IAAI,CAACzJ,UAAU,CAACoC,aAAa,CAAC0D,IAAI,CAAC2D,CAAAA,CAAAA;AACrC;AACF;IACA,MAAMC,iBAAAA,CAAkBD,CAA6B,EAAE;QACrD,OAAO,IAAIE,QAAc,CAACC,OAAAA,GAAAA;AACxB,YAAA,IAAIH,CAAG,EAAA;AACL,gBAAA,IAAI,CAACzJ,UAAU,CAACoC,aAAa,CAAC0D,IAAI,CAAC,IAAA;AACjC,oBAAA,MAAM+D,CAAIJ,GAAAA,CAAAA,EAAAA;AACV,oBAAA,IAAII,aAAaF,OAAS,EAAA;wBACxBE,CAAEC,CAAAA,IAAI,CAAC,IAAMF,OAAAA,EAAAA,CAAAA;qBACR,MAAA;AACLA,wBAAAA,OAAAA,EAAAA;AACF;AACF,iBAAA,CAAA;aACK,MAAA;AACLA,gBAAAA,OAAAA,EAAAA;AACF;AACF,SAAA,CAAA;AACF;IACAG,QAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC5J,YAAY,KAAK,IAAM,EAAA;AAC9B,YAAA,IAAI,IAAI,CAACA,YAAY,KAAK,CAAG,EAAA;gBAC3B6J,oBAAqB,CAAA,IAAI,CAAC7J,YAAY,CAAA;aACjC,MAAA;AACL,gBAAA,IAAI,CAAC8J,eAAe,CAAC,IAAI,CAAC9J,YAAY,CAAA;AACxC;YACA,IAAI,CAACA,YAAY,GAAG,IAAA;AACtB;AACF;AACA+J,IAAAA,OAAAA,CAAQC,IAAsC,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAChK,YAAY,KAAK,IAAM,EAAA;AAC9BoH,YAAAA,OAAAA,CAAQC,KAAK,CAAC,oCAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,IAAI,CAAC2C,IAAM,EAAA;AACT5C,YAAAA,OAAAA,CAAQC,KAAK,CAAC,gCAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAM4C,OAAO,IAAI;AACjBA,QAAAA,IAAAA,CAAK/J,YAAY,GAAG8J,IAAAA;AACnB,QAAA,CAAA,SAASzM,KAAAA,GAAAA;YACR,IAAI0M,IAAAA,CAAKxJ,MAAM,EAAE;gBACfwJ,IAAKjK,CAAAA,YAAY,GAAGkK,qBAAsB3M,CAAAA,KAAAA,CAAAA;aACrC,MAAA;AACL0M,gBAAAA,IAAAA,CAAKjK,YAAY,GAAGiK,IAAKE,CAAAA,SAAS,CAAC,IAAA;oBACjC,IAAIF,IAAAA,CAAKjK,YAAY,KAAK,IAAM,EAAA;AAC9BzC,wBAAAA,KAAAA,EAAAA;AACF;AACF,iBAAA,CAAA;AACF;YACA,IAAI0M,IAAAA,CAAK7D,UAAU,EAAI,EAAA;AACrB6D,gBAAAA,IAAAA,CAAK/J,YAAY,CAAC+J,IAAAA,CAAAA;AAClBA,gBAAAA,IAAAA,CAAKvD,QAAQ,EAAA;AACf;SACF,GAAA;AACF;IACA0D,gBAAmB,GAAA;AACjB,QAAA,IAAI,CAACzJ,WAAW,CAACgF,IAAI,CAAC;YACpB0E,mBAAqB,EAAA,IAAI,CAACC,sBAAsB,EAAA;YAChDC,WAAa,EAAA,IAAI,CAACrF,cAAc,EAAA;YAChCsF,QAAU,EAAA,IAAI,CAACC,WAAW,EAAA;YAC1BC,OAAS,EAAA,IAAI,CAACC,UAAU,EAAA;YACxBC,OAAS,EAAA,IAAI,CAACC,UAAU,EAAA;YACxBC,cAAgB,EAAA,IAAI,CAACC,eAAe,EAAA;YACpCC,YAAc,EAAA,IAAI,CAACC,eAAe,EAAA;YAClC3J,UAAY,EAAA;gBAAC,IAAI,CAAC4J,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA;AAAG;AACtG,SAAA,CAAA;AACF;IACAC,eAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAACxK,WAAW,CAAC/C,MAAM,KAAK,CAAG,EAAA;AACjCwJ,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0CAAA,CAAA;SACT,MAAA;AACL,YAAA,MAAM+D,GAAM,GAAA,IAAI,CAACzK,WAAW,CAAC0K,GAAG,EAAA;AAChC,YAAA,IAAI,CAAC3G,cAAc,CAAC0G,GAAAA,CAAIb,WAAW,CAAA;AACnC,YAAA,IAAI,CAACe,WAAW,CAACF,GAAAA,CAAIZ,QAAQ,CAAA;AAC7B,YAAA,IAAI,CAACe,UAAU,CAACH,GAAAA,CAAIV,OAAO,CAAA;AAC3B,YAAA,IAAI,CAACc,UAAU,CAACJ,GAAAA,CAAIR,OAAO,CAAA;AAC3B,YAAA,IAAI,CAACzG,eAAe,CAACiH,GAAAA,CAAIN,cAAc,CAAA;AACvC,YAAA,IAAI,CAACW,eAAe,CAACL,GAAAA,CAAIJ,YAAY,CAAA;AACrC,YAAA,IAAI,CAACU,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACqK,yBAAyB,CAACP,GAAAA,CAAIf,mBAAmB,CAAA;AACxD;AACF;IACAuB,aAAgB,GAAA;QACd,OAAO,IAAI,CAACpM,cAAc;AAC5B;AACAqM,IAAAA,gBAAAA,CAAiBC,GAAW,EAAE;AAC5B,QAAA,KAAK,MAAMC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC6B;SACrB,CAAE;YACD,KAAK,MAAMiE,OAAOyG,IAAM,CAAA;gBACtB,IAAIzG,GAAAA,CAAIwG,GAAG,KAAKA,GAAK,EAAA;oBACnB,OAAOxG,GAAAA;AACT;AACF;AACF;QACA,OAAO,IAAA;AACT;AACA0G,IAAAA,eAAAA,CAAgB3I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACV,SAAS,EAAA,CAAA;AACtE;AACAsJ,IAAAA,eAAAA,CAAgB5I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACV,SAAS,EAAA,CAAA;AACtE;AACAuJ,IAAAA,eAAAA,CAAgB7I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACR,SAAS,EAAA,CAAA;AACtE;AACAsJ,IAAAA,eAAAA,CAAgB9I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACR,SAAS,EAAA,CAAA;AACtE;AACAuJ,IAAAA,kBAAAA,CAAmB3H,OAAwB,EAAE;AAC3C,QAAA,OAAO,IAAI,CAACpE,eAAe,CAAC+L,kBAAkB,CAAC3H,OAAAA,CAAAA;AACjD;AACA4H,IAAAA,mBAAAA,CAAoB5H,OAAyB,EAAE;AAC7C,QAAA,OAAO,IAAI,CAACpE,eAAe,CAACgM,mBAAmB,CAAC5H,OAAAA,CAAAA;AAClD;AACA6H,IAAAA,iBAAAA,CAAkBhH,GAAc,EAAU;QACxC,OAAO,IAAI,CAAC9F,cAAc,CAACsB,MAAM,CAACyC,GAAG,CAAC+B,GAAQ,CAAA,IAAA,EAAA;AAChD;AACAiH,IAAAA,YAAAA,CAAajH,GAAc,EAAE;AAC3B,QAAA,MAAMyG,IAAO,GAAA,IAAI,CAACS,gBAAgB,CAAClH,GAAAA,CAAAA;AACnC,QAAA,IAAIyG,IAAQA,IAAAA,IAAAA,CAAKU,OAAO,CAACnH,OAAO,CAAG,EAAA;AACjCyG,YAAAA,IAAAA,CAAKpG,IAAI,CAACL,GAAAA,CAAAA;YACV,IAAI,CAAC9F,cAAc,CAACsB,MAAM,CAAC0B,GAAG,CAAC8C,GAAK,EAAA,IAAIoH,KAAQC,EAAAA,CAAAA,KAAK,IAAI,EAAA,CAAA;YACzD,IAAI,CAACjK,aAAa,CAAC,iBAAmB4C,EAAAA,GAAAA,CAAAA;AACxC;AACF;AACAE,IAAAA,eAAAA,CAAgBF,GAAc,EAAE;AAC9B,QAAA,MAAMyG,IAAO,GAAA,IAAI,CAACS,gBAAgB,CAAClH,GAAAA,CAAAA;AACnC,QAAA,IAAIyG,IAAM,EAAA;YACR,MAAMa,KAAAA,GAAQb,IAAKU,CAAAA,OAAO,CAACnH,GAAAA,CAAAA;AAC3B,YAAA,IAAIsH,SAAS,CAAG,EAAA;gBACdb,IAAKc,CAAAA,MAAM,CAACD,KAAO,EAAA,CAAA,CAAA;AACnB,gBAAA,IAAI,CAACpN,cAAc,CAACsB,MAAM,CAACgM,MAAM,CAACxH,GAAAA,CAAAA;gBAClC,IAAI,CAAC5C,aAAa,CAAC,mBAAqB4C,EAAAA,GAAAA,CAAAA;AAC1C;AACF;AACF;AACAyH,IAAAA,qBAAAA,CAAsBC,KAAa,EAAE;QACnC,IAAI,CAACvN,WAAW,IAAIuN,KAAAA;AACtB;AAUA,IAAA,MAAgBC,WAAc,GAAA;QAC5B,OAAO,IAAIzD,QAAc,CAACC,OAAAA,GAAAA;AACxB,YAAA,IAAI,CAACyD,IAAI,CACP,UACA,CAAC5O,QAAAA,EAAkBG,WAAmBG,WAAqBC,EAAAA,YAAAA,GAAAA;AACzD,gBAAA,IAAI,CAACsO,aAAa,CAAC7O,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AACrD,gBAAA,IAAI,CAACuO,EAAE,CACL,UACA,CAAC9O,QAAAA,EAAkBG,WAAmBG,WAAqBC,EAAAA,YAAAA,GAAAA;AACzD,oBAAA,IAAI,CAACsO,aAAa,CAAC7O,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AACvD,iBAAA,CAAA;AAEF4K,gBAAAA,OAAAA,EAAAA;AACF,aAAA,CAAA;YAEF,IAAI,CAAC/I,QAAQ,CAACvD,IAAI,EAAA;AACpB,SAAA,CAAA;AACF;IACQmJ,eAAkB,GAAA;AACxB,QAAA,IAAI,CAACzG,UAAU,CAACkC,SAAS,GAAG,CAAA;AAC5B,QAAA,IAAI,CAAClC,UAAU,CAACmC,YAAY,GAAG,CAAA;QAC/B,MAAMqE,GAAAA,GAAM,IAAI,CAAC1G,eAAe;AAChC,QAAA,IAAI,IAAI,CAACE,UAAU,CAAC4B,cAAc,KAAK,CAAG,EAAA;AACxC,YAAA,IAAI,CAAC5B,UAAU,CAAC4B,cAAc,GAAG4E,GAAAA;AACjC,YAAA,IAAI,CAACxG,UAAU,CAAC6B,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAC7B,UAAU,CAAC8B,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAC9B,UAAU,CAAC+B,YAAY,GAAG,CAAA;AAC/B,YAAA,IAAI,CAAC/B,UAAU,CAACgC,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAChC,UAAU,CAACiC,GAAG,GAAG,CAAA;AACtB,YAAA,IAAI,CAAC7B,WAAW,CAACoC,IAAI,GAAGgE,GAAAA;YACxB,IAAI,CAACpG,WAAW,CAACqC,KAAK,GAAG,IAAI,CAACzC,UAAU,CAAC2B,YAAY;YACrD,IAAI,IAAI,CAACzB,SAAS,EAAE;gBAClB,IAAI,CAACA,SAAS,CAACsN,KAAK,EAAA;AACtB;SACK,MAAA;YACL,IAAI,CAACxN,UAAU,CAAC+B,YAAY,GAAGyE,MAAM,IAAI,CAACxG,UAAU,CAAC4B,cAAc;YACnE,IAAI,CAAC5B,UAAU,CAACgC,cAAc,IAAI,IAAI,CAAChC,UAAU,CAAC+B,YAAY;AAC9D,YAAA,IAAI0L,OAAU,GAAA,CAAA;AACd,YAAA,IAAIC,OAAU,GAAA,CAAA;AACd,YAAA,IAAI,IAAI,CAAC3N,aAAa,KAAK,CAAG,EAAA;gBAC5B0N,OAAUjH,GAAAA,GAAAA,GAAM,IAAI,CAACzG,aAAa;gBAClC2N,OAAU,GAAA,IAAI,CAAC3N,aAAa,GAAG,IAAI,CAACC,UAAU,CAAC4B,cAAc;AAC/D;AACA,YAAA,IAAI,CAAC5B,UAAU,CAAC4B,cAAc,GAAG4E,GAAAA;AACjC,YAAA,IAAIA,OAAO,IAAI,CAACpG,WAAW,CAACoC,IAAI,GAAG,IAAM,EAAA;AACvC,gBAAA,IAAI,CAACxC,UAAU,CAACiC,GAAG,GACf,CAAA,IAAI,CAACjC,UAAU,CAAC2B,YAAY,GAAG,IAAI,CAACvB,WAAW,CAACqC,KAAK,IAAI,IAAS+D,IAAAA,GAAM,GAAA,IAAI,CAACpG,WAAW,CAACoC,IAAI,CAAD;AAChG,gBAAA,IAAI,CAACpC,WAAW,CAACoC,IAAI,GAAGgE,GAAAA;gBACxB,IAAI,CAACpG,WAAW,CAACqC,KAAK,GAAG,IAAI,CAACzC,UAAU,CAAC2B,YAAY;AACrD,gBAAA,IAAI,CAAC3B,UAAU,CAAC8B,cAAc,GAAG2L,OAAAA;AACjC,gBAAA,IAAI,CAACzN,UAAU,CAAC6B,cAAc,GAAG6L,OAAAA;AACnC;AACF;AACA,QAAA,MAAMC,GAAM,GAAA,IAAI,CAAC3N,UAAU,CAACoC,aAAa;QACzC,IAAI,CAACpC,UAAU,CAACoC,aAAa,GAAG,IAAI,CAACpC,UAAU,CAACqC,iBAAiB;AACjE,QAAA,IAAI,CAACrC,UAAU,CAACqC,iBAAiB,GAAGsL,GAAAA;AACpC,QAAA,KAAK,MAAMlE,CAAK,IAAA,IAAI,CAACzJ,UAAU,CAACqC,iBAAiB,CAAE;AACjDoH,YAAAA,CAAAA,EAAAA;AACF;AACA,QAAA,IAAI,CAACzJ,UAAU,CAACqC,iBAAiB,CAACtE,MAAM,GAAG,CAAA;AAC7C;AACQ4O,IAAAA,gBAAAA,CAAiBlH,GAAc,EAAE;AACvC,QAAA,IAAIyG,IAA8B,GAAA,IAAA;QAClC,IAAIzG,GAAAA,CAAImI,SAAS,EAAI,EAAA;AACnB1B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAACwB,QAAQ;SAC9B,MAAA,IAAIsE,GAAIoI,CAAAA,SAAS,EAAI,EAAA;AAC1B3B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAACyB,QAAQ;SAC9B,MAAA,IAAIqE,GAAIqI,CAAAA,QAAQ,EAAI,EAAA;AACzB5B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC0B,OAAO;SAC7B,MAAA,IAAIoE,GAAIsI,CAAAA,aAAa,EAAI,EAAA;AAC9B7B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC4B,YAAY;SAClC,MAAA,IAAIkE,GAAIuI,CAAAA,SAAS,EAAI,EAAA;AAC1B9B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC2B,QAAQ;SAC9B,MAAA,IAAImE,GAAIwI,CAAAA,cAAc,EAAI,EAAA;AAC/B/B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC6B,kBAAkB;SACxC,MAAA,IAAIiE,GAAIyI,CAAAA,WAAW,EAAI,EAAA;AAC5BhC,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC8B,UAAU;AACvC;QACA,OAAOyK,IAAAA;AACT;IACUiC,aAAgB,GAAA;AACxB,QAAA,KAAK,MAAMjC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC6B,kBAAkB;YACtC,IAAI,CAAC7B,cAAc,CAAC8B;SACrB,CAAE;YACD,KAAK,MAAMgE,OAAOyG,IAAM,CAAA;gBACtB,IAAI,CAAC1G,aAAa,CAACC,GAAK,EAAA,KAAA,CAAA;AAC1B;AACF;QACA,IAAI,IAAI,CAACG,aAAa,EAAI,EAAA;AACxB,YAAA,KAAK,MAAMH,GAAAA,IAAO,IAAI,CAAC5F,kBAAkB,CAAE;AACzC4F,gBAAAA,GAAAA,CAAII,OAAO,EAAA;AACb;YACA,IAAI,CAAChG,kBAAkB,GAAG,EAAE;AAC9B;AACF;IACUuO,SAAY,GAAA;AACpB,QAAA,KAAK,MAAMlC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC6B,kBAAkB;YACtC,IAAI,CAAC7B,cAAc,CAAC8B;SACrB,CAAE;;AAED,YAAA,KAAK,MAAMgE,GAAAA,IAAOyG,IAAKmC,CAAAA,KAAK,EAAI,CAAA;AAC9B5I,gBAAAA,GAAAA,CAAI6I,MAAM,EAAA;AACZ;AACF;AACA,QAAA;AACF;AACUC,IAAAA,mBAAAA,CAAoB3J,OAAgC,EAAE;AAC9D,QAAA,MAAM4J,eAAe5J,OAAS6J,EAAAA,UAAAA,KAAe,KAAQC,GAAAA,qBAAAA,CAAsBC,YAAY,GAAG,CAAA;AAC1F,QAAA,MAAMC,YAAehK,GAAAA,OAAAA,EAASiK,QAAWH,GAAAA,qBAAAA,CAAsBI,WAAW,GAAG,CAAA;AAC7E,QAAA,MAAMC,WAAcnK,GAAAA,OAAAA,EAASsD,OAAUwG,GAAAA,qBAAAA,CAAsBM,OAAO,GAAG,CAAA;QACvE,IAAIR,YAAAA,IAAgB5J,SAASqK,cAAgB,EAAA;YAC3CrK,OAAQqK,CAAAA,cAAc,CAACC,SAAS,GAAG,MAAA;AACrC;AACA,QAAA,OAAOV,eAAeI,YAAeG,GAAAA,WAAAA;AACvC;IACUI,kBAAmBvK,CAAAA,OAA+B,EAAEwK,YAA0B,EAAE;AACxFxK,QAAAA,OAAAA,GAAUA,WAAW,EAAC;QACtB,MAAM0C,KAAAA,GAAQ1C,OAAQ0C,CAAAA,KAAK,IAAI8H,YAAAA;QAC/B,IAAIC,SAAAA;QACJ,OAAQ/H,KAAAA;YACN,KAAK,SAAA;AACH+H,gBAAAA,SAAAA,GAAYX,sBAAsBY,UAAU;AAC5C1K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClBvD,gBAAAA,OAAAA,CAAQsD,OAAO,GAAGtD,OAAQsD,CAAAA,OAAO,IAAI,IAAA;AACrC,gBAAA;YACF,KAAK,QAAA;AACHmH,gBAAAA,SAAAA,GAAYX,sBAAsBa,SAAS;AAC3C,gBAAA;YACF,KAAK,OAAA;AACHF,gBAAAA,SAAAA,GAAYX,sBAAsBc,QAAQ;AAC1C,gBAAA;YACF,KAAK,MAAA;AACHH,gBAAAA,SAAAA,GAAYX,sBAAsBe,OAAO;AACzC7K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,OAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBgB,QAAQ;AAC1C9K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,YAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBiB,aAAa;AAC/C/K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,cAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBkB,eAAe;AACjDhL,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;AACF,YAAA;gBACEkH,SAAY,GAAA,CAAA;AACZ,gBAAA;AACJ;AACA,QAAA,MAAMQ,cAAc,OAACjL,EAASwD,WAAW,KAASsG,GAAAA,qBAAAA,CAAsBoB,UAAU,GAAG,CAAA;AACrF,QAAA,MAAMf,cAAc,OAACnK,EAASsD,WAAW,KAASwG,GAAAA,qBAAAA,CAAsBM,OAAO,GAAG,CAAA;QAClF,MAAMe,WAAAA,GAAchB,WAAgB,KAAA,CAAA,KAAMnK,OAAAA,EAASuD,WAAW,IAAG,CAAA,GAAKuG,qBAAsBsB,CAAAA,OAAO,GAAG,CAAA;QACtG,OAAOX,SAAAA,GAAYQ,cAAcd,WAAcgB,GAAAA,WAAAA;AACjD;AACF;;;;"}
1
+ {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\nimport { type Vector4, type TypedArray, type IEventTarget, Observable } from '@zephyr3d/base';\nimport type { ITimer } from './timer';\nimport { CPUTimer } from './timer';\nimport type {\n BlendingState,\n ColorState,\n DepthState,\n RasterizerState,\n RenderStateSet,\n StencilState\n} from './render_states';\nimport type {\n FrameBufferOptions,\n SamplerOptions,\n TextureSampler,\n Texture2D,\n Texture3D,\n TextureCube,\n VertexLayout,\n GPUDataBuffer,\n FrameBuffer,\n GPUProgram,\n GPUObject,\n StructuredBuffer,\n BindGroupLayout,\n BindGroup,\n IndexBuffer,\n TextureVideo,\n TextureMipmapData,\n TextureImageElement,\n Texture2DArray,\n TextureCreationOptions,\n BufferCreationOptions,\n BufferUsage,\n VertexSemantic,\n VertexAttribFormat,\n VertexLayoutOptions,\n BaseTexture,\n RenderBundle\n} from './gpuobject';\nimport {\n GPUResourceUsageFlags,\n makeVertexBufferType,\n getVertexFormatSize,\n getVertexAttribFormat\n} from './gpuobject';\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo } from './builder';\nimport { ProgramBuilder } from './builder';\nimport type {\n DataType,\n PrimitiveType,\n TextureFormat,\n GPUObjectList,\n FrameInfo,\n DeviceCaps,\n GPUProgramConstructParams,\n AbstractDevice,\n DeviceOptions,\n DeviceEventMap,\n DeviceViewport,\n DrawTextLayoutOptions\n} from './base_types';\nimport { DrawText } from './helpers';\nimport { Pool } from './pool';\n\n/**\n * The device backend interface\n * @public\n */\nexport interface DeviceBackend {\n typeName(): string;\n supported(): Promise<boolean>;\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\n}\n\ntype DeviceState = {\n framebuffer: Nullable<FrameBuffer>;\n windowOrderReversed: boolean;\n viewport: DeviceViewport;\n scissor: DeviceViewport;\n renderStateSet: Nullable<RenderStateSet>;\n program: Nullable<GPUProgram>;\n vertexLayout: Nullable<VertexLayout>;\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\n};\n\ntype ResizeCallback = (\n cssWidth: number,\n cssHeight: number,\n deviceWidth: number,\n deviceHeight: number\n) => void;\n\nclass ResizeHandler {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _dpr: number;\n private _cssWidth: number;\n private _cssHeight: number;\n private _deviceWidth: number;\n private _deviceHeight: number;\n\n private _resizeObserver!: ResizeObserver;\n private _mutationObserver!: MutationObserver;\n private _onResizeCallback: ResizeCallback;\n\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\n this._canvas = canvas;\n this._dpr = dpr;\n this._cssWidth = 0;\n this._cssHeight = 0;\n this._deviceWidth = 0;\n this._deviceHeight = 0;\n this._onResizeCallback = onResize;\n }\n\n init() {\n const canvas = this._canvas;\n if (window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n this._handleResizeEntry(entry);\n });\n try {\n (this._resizeObserver as any).observe(canvas);\n } catch {\n this._resizeObserver.observe(canvas);\n }\n } else {\n if (window.MutationObserver) {\n this._mutationObserver = new MutationObserver((mutations) => {\n if (mutations.length > 0) {\n this._handleLegacyResize();\n }\n });\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\n }\n window.addEventListener('resize', this._handleLegacyResize);\n this._handleLegacyResize();\n }\n }\n\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\n // CSS pixel\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\n\n // Device pixel\n /*\n let deviceWidth: number;\n let deviceHeight: number;\n\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\n if (dpBox) {\n deviceWidth = dpBox.inlineSize;\n deviceHeight = dpBox.blockSize;\n } else {\n deviceWidth = Math.round(cssWidth * this._dpr);\n deviceHeight = Math.round(cssHeight * this._dpr);\n }\n */\n const deviceWidth = cssWidth * this._dpr;\n const deviceHeight = cssHeight * this._dpr;\n\n if (\n cssWidth === this._cssWidth &&\n cssHeight === this._cssHeight &&\n deviceWidth === this._deviceWidth &&\n deviceHeight === this._deviceHeight\n ) {\n return;\n }\n\n this._cssWidth = cssWidth;\n this._cssHeight = cssHeight;\n this._deviceWidth = deviceWidth;\n this._deviceHeight = deviceHeight;\n\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\n }\n\n private _handleLegacyResize = () => {\n const cssWidth = this._canvas.clientWidth;\n const cssHeight = this._canvas.clientHeight;\n const dpr = window.devicePixelRatio || 1;\n const deviceWidth = Math.round(cssWidth * dpr);\n const deviceHeight = Math.round(cssHeight * dpr);\n\n if (\n cssWidth === this._cssWidth &&\n cssHeight === this._cssHeight &&\n deviceWidth === this._deviceWidth &&\n deviceHeight === this._deviceHeight\n ) {\n return;\n }\n\n this._cssWidth = cssWidth;\n this._cssHeight = cssHeight;\n this._deviceWidth = deviceWidth;\n this._deviceHeight = deviceHeight;\n\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\n };\n\n public dispose() {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n if (this._mutationObserver) {\n this._mutationObserver.disconnect();\n }\n window.removeEventListener('resize', this._handleLegacyResize);\n }\n}\n\n/**\n * Base class for rendering device\n * @public\n */\nexport abstract class BaseDevice extends Observable<DeviceEventMap> {\n protected _dpr: number;\n protected _canvas: HTMLCanvasElement;\n protected _canvasClientWidth: number;\n protected _canvasClientHeight: number;\n protected _gpuObjectList: GPUObjectList;\n protected _gpuMemCost: number;\n protected _disposeObjectList: GPUObject[];\n protected _beginFrameTime: number;\n protected _endFrameTime: number;\n protected _frameInfo: FrameInfo;\n protected _cpuTimer: CPUTimer;\n protected _gpuTimer: Nullable<ITimer>;\n protected _runningLoop: Nullable<number>;\n protected _fpsCounter: { time: number; frame: number };\n protected _runLoopFunc: Nullable<(device: AbstractDevice) => void>;\n protected _backend: DeviceBackend;\n protected _beginFrameCounter: number;\n protected _programBuilder: ProgramBuilder;\n protected _poolMap: Map<string | symbol, Pool>;\n protected _defaultPoolKey: symbol;\n protected _temporalFramebuffer: boolean;\n protected _vSync: boolean;\n private readonly _resizer: ResizeHandler;\n private readonly _stateStack: DeviceState[];\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\n super();\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\n this._backend = backend;\n this._gpuObjectList = {\n stacks: new Map(),\n textures: [],\n samplers: [],\n buffers: [],\n programs: [],\n framebuffers: [],\n vertexArrayObjects: [],\n bindGroups: []\n };\n this._canvas = cvs;\n this._canvas.setAttribute('tabindex', '1');\n this._canvasClientWidth = cvs.clientWidth;\n this._canvasClientHeight = cvs.clientHeight;\n this._gpuMemCost = 0;\n this._disposeObjectList = [];\n this._beginFrameTime = 0;\n this._endFrameTime = 0;\n this._runLoopFunc = null;\n this._frameInfo = {\n frameCounter: 0,\n frameTimestamp: 0,\n elapsedTimeCPU: 0,\n elapsedTimeGPU: 0,\n elapsedFrame: 0,\n elapsedOverall: 0,\n FPS: 0,\n drawCalls: 0,\n computeCalls: 0,\n nextFrameCall: [],\n nextFrameCallNext: []\n };\n this._programBuilder = new ProgramBuilder(this);\n this._cpuTimer = new CPUTimer();\n this._gpuTimer = null;\n this._runningLoop = null;\n this._fpsCounter = { time: 0, frame: 0 };\n this._stateStack = [];\n this._beginFrameCounter = 0;\n this._poolMap = new Map();\n this._defaultPoolKey = Symbol('defaultPool');\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\n this._temporalFramebuffer = false;\n this._temporalFramebuffer = false;\n this._vSync = true;\n //this._registerEventHandlers();\n this._resizer = new ResizeHandler(\n this._canvas,\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\n },\n this._dpr\n );\n }\n getScaleX() {\n return this._canvas.clientWidth === 0 ? 0 : this._canvas.width / this._canvas.clientWidth;\n }\n getScaleY() {\n return this._canvas.clientHeight === 0 ? 0 : this._canvas.height / this._canvas.clientHeight;\n }\n abstract getAdapterInfo(): any;\n abstract getFrameBufferSampleCount(): number;\n abstract isContextLost(): boolean;\n abstract getDrawingBufferWidth(): number;\n abstract getDrawingBufferHeight(): number;\n abstract getBackBufferWidth(): number;\n abstract getBackBufferHeight(): number;\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\n abstract initContext(): Promise<void>;\n abstract clearFrameBuffer(\n clearColor: Nullable<Vector4>,\n clearDepth: Nullable<number>,\n clearStencil: Nullable<number>\n ): void;\n abstract createGPUTimer(): Nullable<ITimer>;\n abstract createRenderStateSet(): RenderStateSet;\n abstract createBlendingState(): BlendingState;\n abstract createColorState(): ColorState;\n abstract createRasterizerState(): RasterizerState;\n abstract createDepthState(): DepthState;\n abstract createStencilState(): StencilState;\n abstract createSampler(options: SamplerOptions): TextureSampler;\n abstract createTextureFromMipmapData<T extends BaseTexture>(\n data: TextureMipmapData,\n sRGB: boolean,\n options?: TextureCreationOptions\n ): Nullable<T>;\n abstract createTexture2D(\n format: TextureFormat,\n width: number,\n height: number,\n options?: TextureCreationOptions\n ): Nullable<Texture2D>;\n abstract createTexture2DFromImage(\n element: TextureImageElement,\n sRGB: boolean,\n options?: TextureCreationOptions\n ): Nullable<Texture2D>;\n abstract createTexture2DArray(\n format: TextureFormat,\n width: number,\n height: number,\n depth: number,\n options?: TextureCreationOptions\n ): Nullable<Texture2DArray>;\n abstract createTexture2DArrayFromImages(\n elements: TextureImageElement[],\n sRGB: boolean,\n options?: TextureCreationOptions\n ): Nullable<Texture2DArray>;\n abstract createTexture3D(\n format: TextureFormat,\n width: number,\n height: number,\n depth: number,\n options?: TextureCreationOptions\n ): Nullable<Texture3D>;\n abstract createCubeTexture(\n format: TextureFormat,\n size: number,\n options?: TextureCreationOptions\n ): Nullable<TextureCube>;\n abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\n abstract reverseVertexWindingOrder(reverse: boolean): void;\n abstract isWindingOrderReversed(): boolean;\n abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\n // program\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\n abstract createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\n abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\n abstract copyBuffer(\n sourceBuffer: GPUDataBuffer,\n destBuffer: GPUDataBuffer,\n srcOffset: number,\n dstOffset: number,\n bytes: number\n ): void;\n abstract createIndexBuffer(\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\n options?: BufferCreationOptions\n ): IndexBuffer;\n abstract createStructuredBuffer(\n structureType: PBStructTypeInfo,\n options: BufferCreationOptions,\n data?: TypedArray\n ): StructuredBuffer;\n abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;\n abstract createFrameBuffer(\n colorAttachments: BaseTexture[],\n depthAttachment: Nullable<BaseTexture>,\n options?: Nullable<FrameBufferOptions>\n ): FrameBuffer;\n // render related\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\n abstract getViewport(): Immutable<DeviceViewport>;\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\n abstract getScissor(): Immutable<DeviceViewport>;\n abstract setProgram(program: Nullable<GPUProgram>): void;\n abstract getProgram(): Nullable<GPUProgram>;\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\n abstract getVertexLayout(): Nullable<VertexLayout>;\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\n abstract getRenderStates(): Nullable<RenderStateSet>;\n abstract getFramebuffer(): Nullable<FrameBuffer>;\n abstract setBindGroup(\n index: number,\n bindGroup: BindGroup,\n dynamicOffsets?: Nullable<Iterable<number>>\n ): void;\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\n abstract flush(): void;\n abstract nextFrame(callback: () => void): number;\n abstract cancelNextFrame(handle: number): void;\n // misc\n abstract readPixels(\n index: number,\n x: number,\n y: number,\n w: number,\n h: number,\n buffer: TypedArray\n ): Promise<void>;\n abstract readPixelsToBuffer(\n index: number,\n x: number,\n y: number,\n w: number,\n h: number,\n buffer: GPUDataBuffer\n ): void;\n abstract beginCapture(): void;\n abstract endCapture(): RenderBundle;\n abstract looseContext(): void;\n abstract restoreContext(): void;\n protected abstract _executeRenderBundle(renderBundle: RenderBundle): number;\n protected abstract _draw(primitiveType: PrimitiveType, first: number, count: number): void;\n protected abstract _drawInstanced(\n primitiveType: PrimitiveType,\n first: number,\n count: number,\n numInstances: number\n ): void;\n protected abstract _compute(\n workgroupCountX: number,\n workgroupCountY: number,\n workgroupCountZ: number\n ): void;\n get backend() {\n return this._backend;\n }\n get videoMemoryUsage() {\n return this._gpuMemCost;\n }\n get frameInfo() {\n return this._frameInfo;\n }\n get isRendering() {\n return this._runningLoop !== null;\n }\n get canvas() {\n return this._canvas;\n }\n get type() {\n return this._backend.typeName();\n }\n get vSync() {\n return this._vSync;\n }\n set vSync(val) {\n this._vSync = !!val;\n }\n get pool() {\n return this._poolMap.get(this._defaultPoolKey)!;\n }\n get runLoopFunction() {\n return this._runLoopFunc;\n }\n get programBuilder() {\n return this._programBuilder;\n }\n poolExists(key: string | symbol) {\n return this._poolMap.has(key);\n }\n getPool(key: string | symbol) {\n let pool = this._poolMap.get(key);\n if (!pool) {\n pool = new Pool(this, key);\n this._poolMap.set(key, pool);\n }\n return pool;\n }\n setFont(fontName: Nullable<string>) {\n DrawText.setFont(this, fontName);\n }\n setTextRenderStates(renderStates: Nullable<RenderStateSet>) {\n DrawText.setRenderStates(renderStates);\n }\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\n drawText(\n text: string,\n rect: Immutable<Rect>,\n color: string | Vector3 | Vector4,\n options?: DrawTextLayoutOptions\n ): void;\n drawText(\n text: string,\n xOrRect: number | Immutable<Rect>,\n yOrColor: number | string | Vector3 | Vector4,\n colorOrOptions?: string | Vector3 | Vector4 | DrawTextLayoutOptions,\n options?: DrawTextLayoutOptions\n ) {\n if (typeof xOrRect === 'number') {\n DrawText.drawText(\n this,\n text,\n colorOrOptions as string | Vector3 | Vector4,\n xOrRect,\n yOrColor as number\n );\n } else {\n DrawText.drawText(\n this,\n text,\n yOrColor as string | Vector3 | Vector4,\n xOrRect,\n options ?? (colorOrOptions as DrawTextLayoutOptions)\n );\n }\n }\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\n setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;\n setFramebuffer(\n colorOrRT: BaseTexture[] | Nullable<FrameBuffer>,\n depth?: BaseTexture,\n sampleCount?: number\n ) {\n let newRT: Nullable<FrameBuffer> = null;\n let temporal = false;\n if (!Array.isArray(colorOrRT)) {\n newRT = colorOrRT ?? null;\n } else {\n newRT = this.pool!.fetchTemporalFramebuffer(false, 0, 0, colorOrRT, depth, true, sampleCount);\n temporal = true;\n }\n const currentRT = this.getFramebuffer();\n if (currentRT !== newRT) {\n if (this._temporalFramebuffer && currentRT) {\n this.pool!.releaseFrameBuffer(currentRT);\n }\n this._temporalFramebuffer = temporal;\n this._setFramebuffer(newRT);\n }\n }\n disposeObject(obj: GPUObject, remove = true) {\n if (obj) {\n if (remove) {\n this.removeGPUObject(obj);\n }\n if (this.isContextLost()) {\n obj.destroy();\n } else {\n this._disposeObjectList.push(obj);\n }\n }\n }\n restoreObject(obj: GPUObject) {\n if (obj && obj.disposed && !this.isContextLost()) {\n obj.restore();\n obj.restoreHandler?.(obj);\n }\n }\n enableGPUTimeRecording(enable: boolean) {\n if (enable && !this._gpuTimer) {\n this._gpuTimer = this.createGPUTimer();\n } else if (!enable) {\n this._gpuTimer?.end();\n this._gpuTimer = null;\n }\n }\n beginFrame() {\n if (this._beginFrameCounter === 0) {\n for (const obj of this._disposeObjectList) {\n obj.destroy();\n }\n this._disposeObjectList = [];\n }\n this._beginFrameCounter++;\n this._beginFrameTime = this._cpuTimer.now();\n this.updateFrameInfo();\n this._poolMap.forEach((pool) => pool.autoRelease());\n return this.onBeginFrame();\n }\n endFrame() {\n if (this._beginFrameCounter > 0) {\n this._beginFrameCounter--;\n if (this._beginFrameCounter === 0) {\n this._endFrameTime = this._cpuTimer.now();\n this._frameInfo.frameCounter++;\n this.onEndFrame();\n }\n }\n }\n getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number) {\n return getVertexAttribFormat(semantic, dataType, componentCount);\n }\n createInterleavedVertexBuffer(\n attribFormats: VertexAttribFormat[],\n data: TypedArray,\n options?: BufferCreationOptions\n ) {\n if (options && options.usage && options.usage !== 'vertex') {\n console.error(`createInterleavedVertexBuffer() failed: options.usage must be 'vertex' or not set`);\n return null;\n }\n let size = 0;\n for (const format of attribFormats) {\n size += getVertexFormatSize(format);\n }\n const vertexBufferType = makeVertexBufferType((data.byteLength / size) >> 0, ...attribFormats);\n if (!vertexBufferType) {\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\n return null;\n }\n const opt = Object.assign(\n {\n usage: 'vertex',\n dynamic: false,\n managed: true,\n storage: false\n },\n options || {}\n );\n if (opt.storage) {\n opt.dynamic = false;\n opt.managed = false;\n }\n if (opt.dynamic) {\n opt.managed = false;\n }\n return this.createStructuredBuffer(vertexBufferType, opt, data);\n }\n createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions) {\n if (options && options.usage && options.usage !== 'vertex') {\n console.error(`createVertexBuffer() failed: options.usage must be 'vertex' or not set`);\n return null;\n }\n const count = getVertexFormatSize(attribFormat);\n const vertexBufferType = makeVertexBufferType((data.byteLength / count) >> 0, attribFormat);\n if (!vertexBufferType) {\n console.error('createInterleavedVertexBuffer() failed: Cannot determine vertex buffer type');\n return null;\n }\n const opt = Object.assign(\n {\n usage: 'vertex',\n dynamic: false,\n managed: true,\n storage: false\n },\n options || {}\n );\n if (opt.storage) {\n opt.dynamic = false;\n opt.managed = false;\n }\n if (opt.dynamic) {\n opt.managed = false;\n }\n return this.createStructuredBuffer(vertexBufferType, opt, data);\n }\n draw(primitiveType: PrimitiveType, first: number, count: number) {\n this._frameInfo.drawCalls++;\n this._draw(primitiveType, first, count);\n }\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\n this._frameInfo.drawCalls++;\n this._drawInstanced(primitiveType, first, count, numInstances);\n }\n executeRenderBundle(renderBundle: RenderBundle): void {\n this._frameInfo.drawCalls += this._executeRenderBundle(renderBundle);\n }\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\n this._frameInfo.computeCalls++;\n this._compute(workgroupCountX, workgroupCountY, workgroupCountZ);\n }\n runNextFrame(f: () => void) {\n if (f) {\n this._frameInfo.nextFrameCall.push(f);\n }\n }\n async runNextFrameAsync(f: () => void | Promise<void>) {\n return new Promise<void>((resolve) => {\n if (f) {\n this._frameInfo.nextFrameCall.push(() => {\n const p = f();\n if (p instanceof Promise) {\n p.then(() => resolve());\n } else {\n resolve();\n }\n });\n } else {\n resolve();\n }\n });\n }\n exitLoop() {\n if (this._runningLoop !== null) {\n if (this._runningLoop !== 0) {\n cancelAnimationFrame(this._runningLoop);\n } else {\n this.cancelNextFrame(this._runningLoop);\n }\n this._runningLoop = null;\n }\n }\n runLoop(func: (device: AbstractDevice) => void) {\n if (this._runningLoop !== null) {\n console.error('Device.runLoop() can not be nested');\n return;\n }\n if (!func) {\n console.error('Device.runLoop() argment error');\n return;\n }\n const that = this;\n that._runLoopFunc = func;\n (function entry() {\n if (that._vSync) {\n that._runningLoop = requestAnimationFrame(entry);\n } else {\n that._runningLoop = that.nextFrame(() => {\n if (that._runningLoop !== null) {\n entry();\n }\n });\n }\n if (that.beginFrame()) {\n that._runLoopFunc(that as unknown as AbstractDevice);\n that.endFrame();\n }\n })();\n }\n pushDeviceStates() {\n this._stateStack.push({\n windowOrderReversed: this.isWindingOrderReversed(),\n framebuffer: this.getFramebuffer(),\n viewport: this.getViewport(),\n scissor: this.getScissor(),\n program: this.getProgram(),\n renderStateSet: this.getRenderStates(),\n vertexLayout: this.getVertexLayout(),\n bindGroups: [this.getBindGroup(0), this.getBindGroup(1), this.getBindGroup(2), this.getBindGroup(3)]\n });\n }\n popDeviceStates() {\n if (this._stateStack.length === 0) {\n console.error('Device.popDeviceStates(): stack is empty');\n } else {\n const top = this._stateStack.pop()!;\n this.setFramebuffer(top.framebuffer);\n this.setViewport(top.viewport);\n this.setScissor(top.scissor);\n this.setProgram(top.program);\n this.setRenderStates(top.renderStateSet);\n this.setVertexLayout(top.vertexLayout);\n this.setBindGroup(0, ...top.bindGroups[0]);\n this.setBindGroup(1, ...top.bindGroups[1]);\n this.setBindGroup(2, ...top.bindGroups[2]);\n this.setBindGroup(3, ...top.bindGroups[3]);\n this.reverseVertexWindingOrder(top.windowOrderReversed);\n }\n }\n getGPUObjects() {\n return this._gpuObjectList;\n }\n getGPUObjectById(uid: number) {\n for (const list of [\n this._gpuObjectList.textures,\n this._gpuObjectList.samplers,\n this._gpuObjectList.buffers,\n this._gpuObjectList.framebuffers,\n this._gpuObjectList.programs,\n this._gpuObjectList.vertexArrayObjects\n ]) {\n for (const obj of list) {\n if (obj.uid === uid) {\n return obj;\n }\n }\n }\n return null;\n }\n screenXToDevice(val: number) {\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleX());\n }\n deviceXToScreen(val: number) {\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleX());\n }\n screenYToDevice(val: number) {\n return this.getFramebuffer() ? val : Math.round(val * this.getScaleY());\n }\n deviceYToScreen(val: number) {\n return this.getFramebuffer() ? val : Math.round(val / this.getScaleY());\n }\n buildRenderProgram(options: PBRenderOptions) {\n return this._programBuilder.buildRenderProgram(options);\n }\n buildComputeProgram(options: PBComputeOptions) {\n return this._programBuilder.buildComputeProgram(options);\n }\n getGPUObjectStack(obj: GPUObject): string {\n return this._gpuObjectList.stacks.get(obj) ?? '';\n }\n addGPUObject(obj: GPUObject) {\n const list = this.getGPUObjectList(obj);\n if (list && list.indexOf(obj) < 0) {\n list.push(obj);\n this._gpuObjectList.stacks.set(obj, new Error().stack ?? '');\n this.dispatchEvent('gpuobject_added', obj);\n }\n }\n removeGPUObject(obj: GPUObject) {\n const list = this.getGPUObjectList(obj);\n if (list) {\n const index = list.indexOf(obj);\n if (index >= 0) {\n list.splice(index, 1);\n this._gpuObjectList.stacks.delete(obj);\n this.dispatchEvent('gpuobject_removed', obj);\n }\n }\n }\n updateVideoMemoryCost(delta: number) {\n this._gpuMemCost += delta;\n }\n protected abstract onBeginFrame(): boolean;\n protected abstract onEndFrame(): void;\n protected abstract _setFramebuffer(fb: Nullable<FrameBuffer>): void;\n protected abstract _handleResize(\n cssWidth: number,\n cssHeight: number,\n deviceWidth: number,\n deviceHeight: number\n ): void;\n protected async initResizer() {\n return new Promise<void>((resolve) => {\n this.once(\n 'resize',\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\n this.on(\n 'resize',\n (cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number) => {\n this._handleResize(cssWidth, cssHeight, deviceWidth, deviceHeight);\n }\n );\n resolve();\n }\n );\n this._resizer.init();\n });\n }\n private updateFrameInfo() {\n this._frameInfo.drawCalls = 0;\n this._frameInfo.computeCalls = 0;\n const now = this._beginFrameTime;\n if (this._frameInfo.frameTimestamp === 0) {\n this._frameInfo.frameTimestamp = now;\n this._frameInfo.elapsedTimeCPU = 0;\n this._frameInfo.elapsedTimeGPU = 0;\n this._frameInfo.elapsedFrame = 0;\n this._frameInfo.elapsedOverall = 0;\n this._frameInfo.FPS = 0;\n this._fpsCounter.time = now;\n this._fpsCounter.frame = this._frameInfo.frameCounter;\n if (this._gpuTimer) {\n this._gpuTimer.begin();\n }\n } else {\n this._frameInfo.elapsedFrame = now - this._frameInfo.frameTimestamp;\n this._frameInfo.elapsedOverall += this._frameInfo.elapsedFrame;\n let gpuTime = 0;\n let cpuTime = 0;\n if (this._endFrameTime !== 0) {\n gpuTime = now - this._endFrameTime;\n cpuTime = this._endFrameTime - this._frameInfo.frameTimestamp;\n }\n this._frameInfo.frameTimestamp = now;\n if (now >= this._fpsCounter.time + 1000) {\n this._frameInfo.FPS =\n ((this._frameInfo.frameCounter - this._fpsCounter.frame) * 1000) / (now - this._fpsCounter.time);\n this._fpsCounter.time = now;\n this._fpsCounter.frame = this._frameInfo.frameCounter;\n this._frameInfo.elapsedTimeGPU = gpuTime;\n this._frameInfo.elapsedTimeCPU = cpuTime;\n }\n }\n const tmp = this._frameInfo.nextFrameCall;\n this._frameInfo.nextFrameCall = this._frameInfo.nextFrameCallNext;\n this._frameInfo.nextFrameCallNext = tmp;\n for (const f of this._frameInfo.nextFrameCallNext) {\n f();\n }\n this._frameInfo.nextFrameCallNext.length = 0;\n }\n private getGPUObjectList(obj: GPUObject) {\n let list: Nullable<GPUObject[]> = null;\n if (obj.isTexture()) {\n list = this._gpuObjectList.textures;\n } else if (obj.isSampler()) {\n list = this._gpuObjectList.samplers;\n } else if (obj.isBuffer()) {\n list = this._gpuObjectList.buffers;\n } else if (obj.isFramebuffer()) {\n list = this._gpuObjectList.framebuffers;\n } else if (obj.isProgram()) {\n list = this._gpuObjectList.programs;\n } else if (obj.isVertexLayout()) {\n list = this._gpuObjectList.vertexArrayObjects;\n } else if (obj.isBindGroup()) {\n list = this._gpuObjectList.bindGroups;\n }\n return list;\n }\n protected invalidateAll() {\n for (const list of [\n this._gpuObjectList.buffers,\n this._gpuObjectList.textures,\n this._gpuObjectList.samplers,\n this._gpuObjectList.programs,\n this._gpuObjectList.framebuffers,\n this._gpuObjectList.vertexArrayObjects,\n this._gpuObjectList.bindGroups\n ]) {\n for (const obj of list) {\n this.disposeObject(obj, false);\n }\n }\n if (this.isContextLost()) {\n for (const obj of this._disposeObjectList) {\n obj.destroy();\n }\n this._disposeObjectList = [];\n }\n }\n protected reloadAll() {\n for (const list of [\n this._gpuObjectList.buffers,\n this._gpuObjectList.textures,\n this._gpuObjectList.samplers,\n this._gpuObjectList.programs,\n this._gpuObjectList.framebuffers,\n this._gpuObjectList.vertexArrayObjects,\n this._gpuObjectList.bindGroups\n ]) {\n // obj.reload() may change the list, so make a copy first\n for (const obj of list.slice()) {\n obj.reload();\n }\n }\n return;\n }\n protected parseTextureOptions(options?: TextureCreationOptions) {\n const noMipmapFlag = options?.mipmapping === false ? GPUResourceUsageFlags.TF_NO_MIPMAP : 0;\n const writableFlag = options?.writable ? GPUResourceUsageFlags.TF_WRITABLE : 0;\n const dynamicFlag = options?.dynamic ? GPUResourceUsageFlags.DYNAMIC : 0;\n if (noMipmapFlag && options?.samplerOptions) {\n options.samplerOptions.mipFilter = 'none';\n }\n return noMipmapFlag | writableFlag | dynamicFlag;\n }\n protected parseBufferOptions(options?: BufferCreationOptions, defaultUsage?: BufferUsage) {\n options = options ?? {};\n const usage = options.usage ?? defaultUsage;\n let usageFlag: number;\n switch (usage) {\n case 'uniform':\n usageFlag = GPUResourceUsageFlags.BF_UNIFORM;\n options.managed = false;\n options.dynamic = options.dynamic ?? true;\n break;\n case 'vertex':\n usageFlag = GPUResourceUsageFlags.BF_VERTEX;\n break;\n case 'index':\n usageFlag = GPUResourceUsageFlags.BF_INDEX;\n break;\n case 'read':\n usageFlag = GPUResourceUsageFlags.BF_READ;\n options.managed = false;\n break;\n case 'write':\n usageFlag = GPUResourceUsageFlags.BF_WRITE;\n options.managed = false;\n break;\n case 'pack-pixel':\n usageFlag = GPUResourceUsageFlags.BF_PACK_PIXEL;\n options.managed = false;\n break;\n case 'unpack-pixel':\n usageFlag = GPUResourceUsageFlags.BF_UNPACK_PIXEL;\n options.managed = false;\n break;\n default:\n usageFlag = 0;\n break;\n }\n const storageFlag = (options?.storage ?? false) ? GPUResourceUsageFlags.BF_STORAGE : 0;\n const dynamicFlag = (options?.dynamic ?? false) ? GPUResourceUsageFlags.DYNAMIC : 0;\n const managedFlag = dynamicFlag === 0 && (options?.managed ?? true) ? GPUResourceUsageFlags.MANAGED : 0;\n return usageFlag | storageFlag | dynamicFlag | managedFlag;\n }\n}\n\n/**\n * Merge event target interface\n * @public\n */\nexport interface BaseDevice extends IEventTarget<DeviceEventMap> {}\n"],"names":["ResizeHandler","_canvas","_dpr","_cssWidth","_cssHeight","_deviceWidth","_deviceHeight","_resizeObserver","_mutationObserver","_onResizeCallback","canvas","onResize","dpr","init","window","ResizeObserver","entries","entry","_handleResizeEntry","observe","MutationObserver","mutations","length","_handleLegacyResize","attributes","attributeFilter","addEventListener","_entry","boxSize","Array","isArray","contentBoxSize","cssWidth","inlineSize","clientWidth","cssHeight","blockSize","clientHeight","deviceWidth","deviceHeight","devicePixelRatio","Math","round","dispose","disconnect","removeEventListener","BaseDevice","Observable","_canvasClientWidth","_canvasClientHeight","_gpuObjectList","_gpuMemCost","_disposeObjectList","_beginFrameTime","_endFrameTime","_frameInfo","_cpuTimer","_gpuTimer","_runningLoop","_fpsCounter","_runLoopFunc","_backend","_beginFrameCounter","_programBuilder","_poolMap","_defaultPoolKey","_temporalFramebuffer","_vSync","_resizer","_stateStack","cvs","backend","stacks","Map","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Symbol","set","Pool","dispatchEvent","getScaleX","width","getScaleY","height","videoMemoryUsage","frameInfo","isRendering","type","typeName","vSync","val","pool","get","runLoopFunction","programBuilder","poolExists","key","has","getPool","setFont","fontName","DrawText","setTextRenderStates","renderStates","setRenderStates","drawText","text","xOrRect","yOrColor","colorOrOptions","options","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","fetchTemporalFramebuffer","currentRT","getFramebuffer","releaseFrameBuffer","_setFramebuffer","disposeObject","obj","remove","removeGPUObject","isContextLost","destroy","push","restoreObject","disposed","restore","restoreHandler","enableGPUTimeRecording","enable","createGPUTimer","end","beginFrame","now","updateFrameInfo","forEach","autoRelease","onBeginFrame","endFrame","onEndFrame","getVertexAttribFormat","semantic","dataType","componentCount","createInterleavedVertexBuffer","attribFormats","data","usage","console","error","size","format","getVertexFormatSize","vertexBufferType","makeVertexBufferType","byteLength","opt","Object","assign","dynamic","managed","storage","createStructuredBuffer","createVertexBuffer","attribFormat","count","draw","primitiveType","first","_draw","drawInstanced","numInstances","_drawInstanced","executeRenderBundle","renderBundle","_executeRenderBundle","compute","workgroupCountX","workgroupCountY","workgroupCountZ","_compute","runNextFrame","f","runNextFrameAsync","Promise","resolve","p","then","exitLoop","cancelAnimationFrame","cancelNextFrame","runLoop","func","that","requestAnimationFrame","nextFrame","pushDeviceStates","windowOrderReversed","isWindingOrderReversed","framebuffer","viewport","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","getGPUObjectStack","addGPUObject","getGPUObjectList","indexOf","Error","stack","index","splice","delete","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1572,7 +1572,7 @@ interface ProgramBuilder {
1572
1572
  * @param options - The build options
1573
1573
  * @returns a tuple made by vertex shader source, fragment shader source, bind group layouts and vertex attributes used, or null if build faild
1574
1574
  */
1575
- buildRender(options: PBRenderOptions): readonly [string, string, BindGroupLayout[], number[]];
1575
+ buildRender(options: PBRenderOptions): readonly [string, string, BindGroupLayout[], number[], number];
1576
1576
  /**
1577
1577
  * Generates shader code for a compute program
1578
1578
  * @param options - The build programs
@@ -3290,6 +3290,8 @@ interface RenderProgramConstructParams {
3290
3290
  vs: string;
3291
3291
  /** The fragment shader source code */
3292
3292
  fs: string;
3293
+ /** Number of fragment color outputs declared by the shader */
3294
+ fragmentOutputCount?: number;
3293
3295
  /** Bind group layouts for the program */
3294
3296
  bindGroupLayouts: BindGroupLayout[];
3295
3297
  /** Vertex attributes used in the program */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zephyr3d/device",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "Device API for zephyr3d",
5
5
  "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
6
  "type": "module",
@@ -68,7 +68,7 @@
68
68
  "@rollup/plugin-commonjs": "~28.0.2",
69
69
  "@types/node": "^22.12.0",
70
70
  "@webgpu/types": "^0.1.65",
71
- "@zephyr3d/base": "^0.2.5",
71
+ "@zephyr3d/base": "^0.2.7",
72
72
  "rollup-plugin-import-css": "~3.5.8"
73
73
  },
74
74
  "scripts": {