@zephyr3d/editor 0.3.4 → 0.3.7
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/assets/{index-DzQzWsCG.js → index-ySiLtSxz.js} +3 -3
- package/dist/assistant/zephyr-types-index.json +14217 -7895
- package/dist/index.html +1 -1
- package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_device.js +15 -15
- package/dist/modules/zephyr3d_device.js.map +1 -1
- package/dist/modules/zephyr3d_imgui.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +3276 -1089
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgl/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
- package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/imgui/dist/index.d.ts +7 -0
- package/dist/vendor/zephyr3d/imgui/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animation.js +87 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/animation.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js +503 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +686 -63
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js +974 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js.map +1 -0
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +17 -12
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js +2 -1
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1271 -10
- package/dist/vendor/zephyr3d/scene/dist/index.js +3 -1
- package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js +7 -3
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +276 -275
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +4 -3
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +3 -2
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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.clientWidth === 0 ? 0 : this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.clientHeight === 0 ? 0 : 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":"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"}
|
|
@@ -4420,6 +4420,13 @@ declare namespace imgui {
|
|
|
4420
4420
|
export { IM_ARRAYSIZE as ARRAYSIZE, imgui_ASSERT as ASSERT, imgui_AcceptDragDropPayload as AcceptDragDropPayload, type ImAccess as Access, imgui_AlignTextToFramePadding as AlignTextToFramePadding, imgui_ArrowButton as ArrowButton, ImGuiBackendFlags as BackendFlags, imgui_Begin as Begin, imgui_BeginChild as BeginChild, imgui_BeginChildFrame as BeginChildFrame, imgui_BeginCombo as BeginCombo, imgui_BeginDragDropSource as BeginDragDropSource, imgui_BeginDragDropTarget as BeginDragDropTarget, imgui_BeginGroup as BeginGroup, imgui_BeginMainMenuBar as BeginMainMenuBar, imgui_BeginMenu as BeginMenu, imgui_BeginMenuBar as BeginMenuBar, imgui_BeginPopup as BeginPopup, imgui_BeginPopupContextItem as BeginPopupContextItem, imgui_BeginPopupContextVoid as BeginPopupContextVoid, imgui_BeginPopupContextWindow as BeginPopupContextWindow, imgui_BeginPopupModal as BeginPopupModal, imgui_BeginSection as BeginSection, imgui_BeginStatusBar as BeginStatusBar, imgui_BeginTabBar as BeginTabBar, imgui_BeginTabItem as BeginTabItem, imgui_BeginTable as BeginTable, imgui_BeginTooltip as BeginTooltip, imgui_Bullet as Bullet, imgui_BulletText as BulletText, imgui_Button as Button, ImGuiButtonFlags as ButtonFlags, IMGUI_CHECKVERSION as CHECKVERSION, IM_COL32 as COL32, IM_COL32_BLACK as COL32_BLACK, IM_COL32_BLACK_TRANS as COL32_BLACK_TRANS, IM_COL32_WHITE as COL32_WHITE, imgui_CalcItemWidth as CalcItemWidth, imgui_CalcListClipping as CalcListClipping, imgui_CalcTextSize as CalcTextSize, imgui_CaptureKeyboardFromApp as CaptureKeyboardFromApp, imgui_CaptureMouseFromApp as CaptureMouseFromApp, imgui_Checkbox as Checkbox, imgui_CheckboxFlags as CheckboxFlags, imgui_CloseCurrentPopup as CloseCurrentPopup, ImGuiCol as Col, imgui_CollapsingHeader as CollapsingHeader, ImColor as Color, imgui_ColorButton as ColorButton, imgui_ColorConvertFloat4ToU32 as ColorConvertFloat4ToU32, imgui_ColorConvertHSVtoRGB as ColorConvertHSVtoRGB, imgui_ColorConvertRGBtoHSV as ColorConvertRGBtoHSV, imgui_ColorConvertU32ToFloat4 as ColorConvertU32ToFloat4, imgui_ColorEdit3 as ColorEdit3, imgui_ColorEdit4 as ColorEdit4, ImGuiColorEditFlags as ColorEditFlags, imgui_ColorPicker3 as ColorPicker3, imgui_ColorPicker4 as ColorPicker4, imgui_Columns as Columns, imgui_Combo as Combo, ImGuiComboFlags as ComboFlags, type imgui_ComboValueGetter as ComboValueGetter, ImGuiCond as Cond, ImGuiConfigFlags as ConfigFlags, imgui_CreateContext as CreateContext, imgui_CreateFont as CreateFont, type imgui_DOMFontConfig as DOMFontConfig, ImGuiDataType as DataType, imgui_DebugCheckVersionAndDataLayout as DebugCheckVersionAndDataLayout, imgui_DestroyContext as DestroyContext, ImGuiDir as Dir, ImGuiDragDropFlags as DragDropFlags, imgui_DragFloat as DragFloat, imgui_DragFloat2 as DragFloat2, imgui_DragFloat3 as DragFloat3, imgui_DragFloat4 as DragFloat4, imgui_DragFloatRange2 as DragFloatRange2, imgui_DragInt as DragInt, imgui_DragInt2 as DragInt2, imgui_DragInt3 as DragInt3, imgui_DragInt4 as DragInt4, imgui_DragIntRange2 as DragIntRange2, imgui_DragScalar as DragScalar, ImDrawCmd as DrawCmd, ImDrawCornerFlags as DrawCornerFlags, ImDrawData as DrawData, type ImDrawIdx as DrawIdx, ImDrawIdxSize as DrawIdxSize, ImDrawList as DrawList, ImDrawVert as DrawVert, ImDrawVertColOffset as DrawVertColOffset, ImDrawVertPosOffset as DrawVertPosOffset, ImDrawVertSize as DrawVertSize, ImDrawVertUVOffset as DrawVertUVOffset, imgui_Dummy as Dummy, imgui_End as End, imgui_EndChild as EndChild, imgui_EndChildFrame as EndChildFrame, imgui_EndCombo as EndCombo, imgui_EndDragDropSource as EndDragDropSource, imgui_EndDragDropTarget as EndDragDropTarget, imgui_EndFrame as EndFrame, imgui_EndGroup as EndGroup, imgui_EndMainMenuBar as EndMainMenuBar, imgui_EndMenu as EndMenu, imgui_EndMenuBar as EndMenuBar, imgui_EndPopup as EndPopup, imgui_EndSection as EndSection, imgui_EndStatusBar as EndStatusBar, imgui_EndTabBar as EndTabBar, imgui_EndTabItem as EndTabItem, imgui_EndTable as EndTable, imgui_EndTooltip as EndTooltip, imgui_FLT_MAX as FLT_MAX, imgui_FLT_MIN as FLT_MIN, ImGuiFocusedFlags as FocusedFlags, ImFont as Font, ImFontAtlas as FontAtlas, ImFontAtlasFlags as FontAtlasFlags, ImFontConfig as FontConfig, ImFontGlyph as FontGlyph, imgui_Font_toString as Font_toString, imgui_GetActiveId as GetActiveId, imgui_GetActiveIdPreviousFrame as GetActiveIdPreviousFrame, imgui_GetActiveWindow as GetActiveWindow, imgui_GetBackgroundDrawList as GetBackgroundDrawList, imgui_GetClipboardText as GetClipboardText, imgui_GetColorU32 as GetColorU32, imgui_GetColumnIndex as GetColumnIndex, imgui_GetColumnOffset as GetColumnOffset, imgui_GetColumnWidth as GetColumnWidth, imgui_GetColumnsCount as GetColumnsCount, imgui_GetContentRegionAvail as GetContentRegionAvail, imgui_GetContentRegionMax as GetContentRegionMax, imgui_GetCurrentContext as GetCurrentContext, imgui_GetCurrentWindow as GetCurrentWindow, imgui_GetCursorPos as GetCursorPos, imgui_GetCursorPosX as GetCursorPosX, imgui_GetCursorPosY as GetCursorPosY, imgui_GetCursorScreenPos as GetCursorScreenPos, imgui_GetCursorStartPos as GetCursorStartPos, imgui_GetDragDropPayload as GetDragDropPayload, imgui_GetDrawData as GetDrawData, imgui_GetDrawListSharedData as GetDrawListSharedData, imgui_GetFont as GetFont, imgui_GetFontSize as GetFontSize, imgui_GetFontTexUvWhitePixel as GetFontTexUvWhitePixel, imgui_GetForegroundDrawList as GetForegroundDrawList, imgui_GetFrameCount as GetFrameCount, imgui_GetFrameHeight as GetFrameHeight, imgui_GetFrameHeightWithSpacing as GetFrameHeightWithSpacing, imgui_GetHoveredId as GetHoveredId, imgui_GetHoveredIdPreviousFrame as GetHoveredIdPreviousFrame, imgui_GetHoveredRootWindow as GetHoveredRootWindow, imgui_GetHoveredWindow as GetHoveredWindow, imgui_GetID as GetID, imgui_GetIO as GetIO, imgui_GetInputTextId as GetInputTextId, imgui_GetInputTextState as GetInputTextState, imgui_GetItemRectMax as GetItemRectMax, imgui_GetItemRectMin as GetItemRectMin, imgui_GetItemRectSize as GetItemRectSize, imgui_GetKeyIndex as GetKeyIndex, imgui_GetKeyPressedAmount as GetKeyPressedAmount, imgui_GetMouseCursor as GetMouseCursor, imgui_GetMouseDragDelta as GetMouseDragDelta, imgui_GetMousePos as GetMousePos, imgui_GetMousePosOnOpeningCurrentPopup as GetMousePosOnOpeningCurrentPopup, imgui_GetScrollMaxX as GetScrollMaxX, imgui_GetScrollMaxY as GetScrollMaxY, imgui_GetScrollX as GetScrollX, imgui_GetScrollY as GetScrollY, imgui_GetStyle as GetStyle, imgui_GetStyleColorName as GetStyleColorName, imgui_GetStyleColorVec4 as GetStyleColorVec4, imgui_GetTextLineHeight as GetTextLineHeight, imgui_GetTextLineHeightWithSpacing as GetTextLineHeightWithSpacing, imgui_GetTime as GetTime, imgui_GetTreeNodeToLabelSpacing as GetTreeNodeToLabelSpacing, imgui_GetVersion as GetVersion, imgui_GetWindowContentRegionMax as GetWindowContentRegionMax, imgui_GetWindowContentRegionMin as GetWindowContentRegionMin, imgui_GetWindowContentRegionWidth as GetWindowContentRegionWidth, imgui_GetWindowDrawList as GetWindowDrawList, imgui_GetWindowHeight as GetWindowHeight, imgui_GetWindowPos as GetWindowPos, imgui_GetWindowSize as GetWindowSize, imgui_GetWindowWidth as GetWindowWidth, ImGuiHoveredFlags as HoveredFlags, type ImGuiID as ID, imgui_IMGUI_CHECKVERSION as IMGUI_CHECKVERSION, imgui_IMGUI_HAS_TABLE as IMGUI_HAS_TABLE, imgui_IMGUI_PAYLOAD_TYPE_COLOR_3F as IMGUI_PAYLOAD_TYPE_COLOR_3F, imgui_IMGUI_PAYLOAD_TYPE_COLOR_4F as IMGUI_PAYLOAD_TYPE_COLOR_4F, imgui_IMGUI_VERSION as IMGUI_VERSION, imgui_IMGUI_VERSION_NUM as IMGUI_VERSION_NUM, imgui_IM_ARRAYSIZE as IM_ARRAYSIZE, imgui_IM_ASSERT as IM_ASSERT, imgui_IM_COL32 as IM_COL32, imgui_IM_COL32_A_MASK as IM_COL32_A_MASK, imgui_IM_COL32_A_SHIFT as IM_COL32_A_SHIFT, imgui_IM_COL32_BLACK as IM_COL32_BLACK, imgui_IM_COL32_BLACK_TRANS as IM_COL32_BLACK_TRANS, imgui_IM_COL32_B_SHIFT as IM_COL32_B_SHIFT, imgui_IM_COL32_G_SHIFT as IM_COL32_G_SHIFT, imgui_IM_COL32_R_SHIFT as IM_COL32_R_SHIFT, imgui_IM_COL32_WHITE as IM_COL32_WHITE, imgui_IM_DRAWLIST_TEX_LINES_WIDTH_MAX as IM_DRAWLIST_TEX_LINES_WIDTH_MAX, imgui_IM_UNICODE_CODEPOINT_MAX as IM_UNICODE_CODEPOINT_MAX, ImGuiIO as IO, type imgui_ImAccess as ImAccess, imgui_ImColor as ImColor, type imgui_ImDrawCallback as ImDrawCallback, imgui_ImDrawCallback_ResetRenderState as ImDrawCallback_ResetRenderState, imgui_ImDrawChannel as ImDrawChannel, imgui_ImDrawCmd as ImDrawCmd, imgui_ImDrawCmdHeader as ImDrawCmdHeader, imgui_ImDrawCornerFlags as ImDrawCornerFlags, imgui_ImDrawData as ImDrawData, type imgui_ImDrawIdx as ImDrawIdx, imgui_ImDrawIdxSize as ImDrawIdxSize, imgui_ImDrawList as ImDrawList, imgui_ImDrawListFlags as ImDrawListFlags, imgui_ImDrawListSharedData as ImDrawListSharedData, imgui_ImDrawVert as ImDrawVert, imgui_ImDrawVertColOffset as ImDrawVertColOffset, imgui_ImDrawVertPosOffset as ImDrawVertPosOffset, imgui_ImDrawVertSize as ImDrawVertSize, imgui_ImDrawVertUVOffset as ImDrawVertUVOffset, imgui_ImFont as ImFont, imgui_ImFontAtlas as ImFontAtlas, imgui_ImFontAtlasCustomRect as ImFontAtlasCustomRect, imgui_ImFontAtlasFlags as ImFontAtlasFlags, imgui_ImFontConfig as ImFontConfig, imgui_ImFontGlyph as ImFontGlyph, imgui_ImGuiBackendFlags as ImGuiBackendFlags, imgui_ImGuiButtonFlags as ImGuiButtonFlags, imgui_ImGuiCol as ImGuiCol, imgui_ImGuiColorEditFlags as ImGuiColorEditFlags, imgui_ImGuiComboFlags as ImGuiComboFlags, imgui_ImGuiCond as ImGuiCond, imgui_ImGuiConfigFlags as ImGuiConfigFlags, imgui_ImGuiContext as ImGuiContext, imgui_ImGuiDataType as ImGuiDataType, imgui_ImGuiDir as ImGuiDir, imgui_ImGuiDragDropFlags as ImGuiDragDropFlags, imgui_ImGuiFocusedFlags as ImGuiFocusedFlags, imgui_ImGuiHoveredFlags as ImGuiHoveredFlags, type imgui_ImGuiID as ImGuiID, imgui_ImGuiIO as ImGuiIO, type imgui_ImGuiInputTextCallback as ImGuiInputTextCallback, imgui_ImGuiInputTextCallbackData as ImGuiInputTextCallbackData, imgui_ImGuiInputTextDefaultSize as ImGuiInputTextDefaultSize, imgui_ImGuiInputTextFlags as ImGuiInputTextFlags, imgui_ImGuiInputTextState as ImGuiInputTextState, imgui_ImGuiKey as ImGuiKey, imgui_ImGuiKeyModFlags as ImGuiKeyModFlags, imgui_ImGuiListClipper as ImGuiListClipper, imgui_ImGuiMouseButton as ImGuiMouseButton, imgui_ImGuiMouseCursor as ImGuiMouseCursor, imgui_ImGuiNavInput as ImGuiNavInput, type imgui_ImGuiPayload as ImGuiPayload, imgui_ImGuiPopupFlags as ImGuiPopupFlags, imgui_ImGuiSelectableFlags as ImGuiSelectableFlags, type imgui_ImGuiSizeCallback as ImGuiSizeCallback, imgui_ImGuiSizeCallbackData as ImGuiSizeCallbackData, imgui_ImGuiSliderFlags as ImGuiSliderFlags, imgui_ImGuiSortDirection as ImGuiSortDirection, imgui_ImGuiStorage as ImGuiStorage, imgui_ImGuiStyle as ImGuiStyle, imgui_ImGuiStyleVar as ImGuiStyleVar, imgui_ImGuiTabBarFlags as ImGuiTabBarFlags, imgui_ImGuiTabItemFlags as ImGuiTabItemFlags, imgui_ImGuiTableBgTarget as ImGuiTableBgTarget, imgui_ImGuiTableColumnFlags as ImGuiTableColumnFlags, imgui_ImGuiTableColumnSortSpecs as ImGuiTableColumnSortSpecs, imgui_ImGuiTableFlags as ImGuiTableFlags, imgui_ImGuiTableRowFlags as ImGuiTableRowFlags, imgui_ImGuiTableSortSpecs as ImGuiTableSortSpecs, imgui_ImGuiTextBuffer as ImGuiTextBuffer, imgui_ImGuiTextFilter as ImGuiTextFilter, imgui_ImGuiTreeNodeFlags as ImGuiTreeNodeFlags, imgui_ImGuiWindow as ImGuiWindow, imgui_ImGuiWindowFlags as ImGuiWindowFlags, type imgui_ImScalar as ImScalar, imgui_ImStringBuffer as ImStringBuffer, type imgui_ImTextureID as ImTextureID, type imgui_ImTuple2 as ImTuple2, type imgui_ImTuple3 as ImTuple3, type imgui_ImTuple4 as ImTuple4, type imgui_ImU32 as ImU32, imgui_ImVec2 as ImVec2, imgui_ImVec4 as ImVec4, imgui_ImVector as ImVector, imgui_Image as Image, imgui_ImageButton as ImageButton, imgui_Indent as Indent, imgui_InputDouble as InputDouble, imgui_InputFloat as InputFloat, imgui_InputFloat2 as InputFloat2, imgui_InputFloat3 as InputFloat3, imgui_InputFloat4 as InputFloat4, imgui_InputInt as InputInt, imgui_InputInt2 as InputInt2, imgui_InputInt3 as InputInt3, imgui_InputInt4 as InputInt4, imgui_InputScalar as InputScalar, imgui_InputText as InputText, type ImGuiInputTextCallback as InputTextCallback, ImGuiInputTextCallbackData as InputTextCallbackData, ImGuiInputTextDefaultSize as InputTextDefaultSize, ImGuiInputTextFlags as InputTextFlags, imgui_InputTextMultiline as InputTextMultiline, ImGuiInputTextState as InputTextState, imgui_InputTextWithHint as InputTextWithHint, imgui_InvisibleButton as InvisibleButton, imgui_IsAnyItemActive as IsAnyItemActive, imgui_IsAnyItemFocused as IsAnyItemFocused, imgui_IsAnyItemHovered as IsAnyItemHovered, imgui_IsAnyMouseDown as IsAnyMouseDown, imgui_IsItemActivated as IsItemActivated, imgui_IsItemActive as IsItemActive, imgui_IsItemClicked as IsItemClicked, imgui_IsItemDeactivated as IsItemDeactivated, imgui_IsItemDeactivatedAfterEdit as IsItemDeactivatedAfterEdit, imgui_IsItemEdited as IsItemEdited, imgui_IsItemFocused as IsItemFocused, imgui_IsItemHovered as IsItemHovered, imgui_IsItemToggledOpen as IsItemToggledOpen, imgui_IsItemVisible as IsItemVisible, imgui_IsKeyDown as IsKeyDown, imgui_IsKeyPressed as IsKeyPressed, imgui_IsKeyReleased as IsKeyReleased, imgui_IsMouseClicked as IsMouseClicked, imgui_IsMouseDoubleClicked as IsMouseDoubleClicked, imgui_IsMouseDown as IsMouseDown, imgui_IsMouseDragging as IsMouseDragging, imgui_IsMouseHoveringRect as IsMouseHoveringRect, imgui_IsMousePosValid as IsMousePosValid, imgui_IsMouseReleased as IsMouseReleased, imgui_IsPopupOpen as IsPopupOpen, imgui_IsRectVisible as IsRectVisible, imgui_IsWindowAppearing as IsWindowAppearing, imgui_IsWindowCollapsed as IsWindowCollapsed, imgui_IsWindowFocused as IsWindowFocused, imgui_IsWindowHovered as IsWindowHovered, ImGuiKey as Key, ImGuiKeyModFlags as KeyModFlags, imgui_LabelText as LabelText, imgui_ListBox as ListBox, imgui_ListBoxFooter as ListBoxFooter, imgui_ListBoxHeader as ListBoxHeader, type imgui_ListBoxItemGetter as ListBoxItemGetter, ImGuiListClipper as ListClipper, imgui_LoadIniSettingsFromDisk as LoadIniSettingsFromDisk, imgui_LoadIniSettingsFromMemory as LoadIniSettingsFromMemory, imgui_LogButtons as LogButtons, imgui_LogFinish as LogFinish, imgui_LogText as LogText, imgui_LogToClipboard as LogToClipboard, imgui_LogToFile as LogToFile, imgui_LogToTTY as LogToTTY, imgui_MemAlloc as MemAlloc, imgui_MemFree as MemFree, imgui_MenuItem as MenuItem, ImGuiMouseButton as MouseButton, ImGuiMouseCursor as MouseCursor, ImGuiNavInput as NavInput, imgui_NewFrame as NewFrame, imgui_NewLine as NewLine, imgui_NextColumn as NextColumn, imgui_OpenPopup as OpenPopup, imgui_OpenPopupOnItemClick as OpenPopupOnItemClick, type ImGuiPayload as Payload, imgui_PlotHistogram as PlotHistogram, type imgui_PlotHistogramValueGetter as PlotHistogramValueGetter, imgui_PlotLines as PlotLines, type imgui_PlotLinesValueGetter as PlotLinesValueGetter, imgui_PopAllowKeyboardFocus as PopAllowKeyboardFocus, imgui_PopButtonRepeat as PopButtonRepeat, imgui_PopClipRect as PopClipRect, imgui_PopFont as PopFont, imgui_PopID as PopID, imgui_PopItemWidth as PopItemWidth, imgui_PopStyleColor as PopStyleColor, imgui_PopStyleVar as PopStyleVar, imgui_PopTextWrapPos as PopTextWrapPos, ImGuiPopupFlags as PopupFlags, imgui_ProgressBar as ProgressBar, imgui_PushAllowKeyboardFocus as PushAllowKeyboardFocus, imgui_PushButtonRepeat as PushButtonRepeat, imgui_PushClipRect as PushClipRect, imgui_PushFont as PushFont, imgui_PushID as PushID, imgui_PushItemWidth as PushItemWidth, imgui_PushStyleColor as PushStyleColor, imgui_PushStyleVar as PushStyleVar, imgui_PushTextWrapPos as PushTextWrapPos, type imgui_RGB as RGB, type imgui_RGBA as RGBA, imgui_RadioButton as RadioButton, imgui_Render as Render, imgui_ResetMouseDragDelta as ResetMouseDragDelta, imgui_SameLine as SameLine, imgui_SaveIniSettingsToDisk as SaveIniSettingsToDisk, imgui_SaveIniSettingsToMemory as SaveIniSettingsToMemory, type ImScalar as Scalar, imgui_Selectable as Selectable, ImGuiSelectableFlags as SelectableFlags, imgui_Separator as Separator, imgui_SetActiveId as SetActiveId, imgui_SetAllocatorFunctions as SetAllocatorFunctions, imgui_SetClipboardText as SetClipboardText, imgui_SetColorEditOptions as SetColorEditOptions, imgui_SetColumnOffset as SetColumnOffset, imgui_SetColumnWidth as SetColumnWidth, imgui_SetCurrentContext as SetCurrentContext, imgui_SetCursorPos as SetCursorPos, imgui_SetCursorPosX as SetCursorPosX, imgui_SetCursorPosY as SetCursorPosY, imgui_SetCursorScreenPos as SetCursorScreenPos, imgui_SetDragDropPayload as SetDragDropPayload, imgui_SetItemAllowOverlap as SetItemAllowOverlap, imgui_SetItemDefaultFocus as SetItemDefaultFocus, imgui_SetKeyboardFocusHere as SetKeyboardFocusHere, imgui_SetMouseCursor as SetMouseCursor, imgui_SetNextItemOpen as SetNextItemOpen, imgui_SetNextItemWidth as SetNextItemWidth, imgui_SetNextWindowBgAlpha as SetNextWindowBgAlpha, imgui_SetNextWindowCollapsed as SetNextWindowCollapsed, imgui_SetNextWindowContentSize as SetNextWindowContentSize, imgui_SetNextWindowFocus as SetNextWindowFocus, imgui_SetNextWindowPos as SetNextWindowPos, imgui_SetNextWindowSize as SetNextWindowSize, imgui_SetNextWindowSizeConstraints as SetNextWindowSizeConstraints, imgui_SetScrollFromPosX as SetScrollFromPosX, imgui_SetScrollFromPosY as SetScrollFromPosY, imgui_SetScrollHereX as SetScrollHereX, imgui_SetScrollHereY as SetScrollHereY, imgui_SetScrollX as SetScrollX, imgui_SetScrollY as SetScrollY, imgui_SetTabItemClosed as SetTabItemClosed, imgui_SetTooltip as SetTooltip, imgui_SetWindowCollapsed as SetWindowCollapsed, imgui_SetWindowFocus as SetWindowFocus, imgui_SetWindowFontScale as SetWindowFontScale, imgui_SetWindowPos as SetWindowPos, imgui_SetWindowSize as SetWindowSize, imgui_ShowAboutWindow as ShowAboutWindow, imgui_ShowDemoWindow as ShowDemoWindow, imgui_ShowFontSelector as ShowFontSelector, imgui_ShowMetricsWindow as ShowMetricsWindow, imgui_ShowStyleEditor as ShowStyleEditor, imgui_ShowStyleSelector as ShowStyleSelector, imgui_ShowUserGuide as ShowUserGuide, type ImGuiSizeCallback as SizeCallback, ImGuiSizeCallbackData as SizeCallbackData, imgui_SliderAngle as SliderAngle, imgui_SliderAngle3 as SliderAngle3, ImGuiSliderFlags as SliderFlags, imgui_SliderFloat as SliderFloat, imgui_SliderFloat2 as SliderFloat2, imgui_SliderFloat3 as SliderFloat3, imgui_SliderFloat4 as SliderFloat4, imgui_SliderInt as SliderInt, imgui_SliderInt2 as SliderInt2, imgui_SliderInt3 as SliderInt3, imgui_SliderInt4 as SliderInt4, imgui_SliderScalar as SliderScalar, imgui_SmallButton as SmallButton, ImGuiSortDirection as SortDirection, imgui_Spacing as Spacing, ImStringBuffer as StringBuffer, ImGuiStyle as Style, imgui_StyleColorsClassic as StyleColorsClassic, imgui_StyleColorsDark as StyleColorsDark, imgui_StyleColorsLight as StyleColorsLight, ImGuiStyleVar as StyleVar, ImGuiTabBarFlags as TabBarFlags, imgui_TabItemButton as TabItemButton, ImGuiTabItemFlags as TabItemFlags, ImGuiTableBgTarget as TableBgTarget, ImGuiTableColumnFlags as TableColumnFlags, ImGuiTableColumnSortSpecs as TableColumnSortSpecs, ImGuiTableFlags as TableFlags, imgui_TableGetColumnCount as TableGetColumnCount, imgui_TableGetColumnFlags as TableGetColumnFlags, imgui_TableGetColumnIndex as TableGetColumnIndex, imgui_TableGetColumnName as TableGetColumnName, imgui_TableGetRowIndex as TableGetRowIndex, imgui_TableGetSortSpecs as TableGetSortSpecs, imgui_TableHeader as TableHeader, imgui_TableHeadersRow as TableHeadersRow, imgui_TableNextColumn as TableNextColumn, imgui_TableNextRow as TableNextRow, ImGuiTableRowFlags as TableRowFlags, imgui_TableSetBgColor as TableSetBgColor, imgui_TableSetColumnIndex as TableSetColumnIndex, imgui_TableSetupColumn as TableSetupColumn, imgui_TableSetupScrollFreeze as TableSetupScrollFreeze, ImGuiTableSortSpecs as TableSortSpecs, imgui_Text as Text, ImGuiTextBuffer as TextBuffer, imgui_TextColored as TextColored, imgui_TextDisabled as TextDisabled, ImGuiTextFilter as TextFilter, imgui_TextUnformatted as TextUnformatted, imgui_TextWrapped as TextWrapped, type ImTextureID as TextureID, imgui_TreeNode as TreeNode, imgui_TreeNodeEx as TreeNodeEx, ImGuiTreeNodeFlags as TreeNodeFlags, imgui_TreePop as TreePop, imgui_TreePush as TreePush, type ImTuple2 as Tuple2, type ImTuple3 as Tuple3, type ImTuple4 as Tuple4, type ImU32 as U32, IM_UNICODE_CODEPOINT_MAX as UNICODE_CODEPOINT_MAX, imgui_Unindent as Unindent, IMGUI_VERSION as VERSION, IMGUI_VERSION_NUM as VERSION_NUM, imgui_VSliderFloat as VSliderFloat, imgui_VSliderInt as VSliderInt, imgui_VSliderScalar as VSliderScalar, imgui_Value as Value, ImVec2 as Vec2, ImVec4 as Vec4, imgui_Vec4_toRGBA as Vec4_toRGBA, ImVector as Vector, ImGuiWindow as Window, ImGuiWindowFlags as WindowFlags, type imgui_XY as XY, type imgui_XYZ as XYZ, type imgui_XYZW as XYZW, imgui_bind as bind, export_default as default, imgui_isMobile as isMobile, imgui_script_ImFontConfig as script_ImFontConfig, imgui_script_ImFontGlyph as script_ImFontGlyph, ImDrawListFlags as wListFlags };
|
|
4421
4421
|
}
|
|
4422
4422
|
|
|
4423
|
+
/**
|
|
4424
|
+
* Dear ImGui bindings for zephyr3d project
|
|
4425
|
+
*
|
|
4426
|
+
* @module imgui
|
|
4427
|
+
* @packageDocumentation
|
|
4428
|
+
*/
|
|
4429
|
+
|
|
4423
4430
|
/**
|
|
4424
4431
|
* Initialize the ImGUI bindings
|
|
4425
4432
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["/**\r\n * Dear ImGui bindings for zephyr3d project\r\n *\r\n * @module imgui\r\n * @packageDocumentation\r\n */\r\nimport type { AbstractDevice, Font } from '@zephyr3d/device';\r\nimport * as ImGui from './imgui';\r\nimport * as ImGui_Impl from './imgui_impl';\r\n\r\n/**\r\n * The ImGui interface\r\n * @public\r\n */\r\nexport { ImGui };\r\n\r\nlet inFrame = false;\r\n\r\n/**\r\n * Initialize the ImGUI bindings\r\n *\r\n * @param device - The device object\r\n * @param fontFamily - Font family, default to arial\r\n * @param fontSize - Default font size, default to 16\r\n * @param fontSizeGlyph - Default font size for glyph, default to fontSize\r\n * @public\r\n */\r\nexport async function imGuiInit(\r\n device: AbstractDevice,\r\n fontFamily?: string,\r\n fontSize?: number,\r\n fontSizeGlyph?: number\r\n) {\r\n await ImGui.default();\r\n ImGui.CHECKVERSION();\r\n console.info('ImGui.CreateContext() VERSION=', ImGui.VERSION);\r\n\r\n ImGui.CreateContext();\r\n ImGui.StyleColorsDark();\r\n const io: ImGui.IO = ImGui.GetIO();\r\n\r\n io.ConfigWindowsResizeFromEdges = true;\r\n io.ConfigDragClickToInputText = true;\r\n io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors;\r\n fontSize = fontSize || 12;\r\n fontSizeGlyph = fontSizeGlyph || fontSize;\r\n const font = io.Fonts.AddFontDefault();\r\n\r\n font.FontName = fontFamily || `'Segoe UI', Tahoma, Geneva, Verdana, sans-serif`;\r\n font.FontSize = fontSize || 12;\r\n ImGui_Impl.Init(device, fontSizeGlyph ?? (fontSize || 12));\r\n}\r\n\r\n/**\r\n * Whether a frame is currently rendering\r\n * @public\r\n */\r\nexport function imGuiInFrame() {\r\n return inFrame;\r\n}\r\n\r\n/**\r\n * Starts a new frame\r\n * @public\r\n */\r\nexport function imGuiNewFrame() {\r\n if (inFrame) {\r\n throw new Error('imGuiNewFrame() failed: alreay in a frame');\r\n }\r\n inFrame = true;\r\n ImGui_Impl.NewFrame(Date.now());\r\n ImGui.NewFrame();\r\n imGuiWantCaptureKeyboard(false);\r\n}\r\n\r\n/**\r\n * Ends current frame\r\n * @public\r\n */\r\nexport function imGuiEndFrame() {\r\n if (!inFrame) {\r\n throw new Error('imGuiEndFrame() failed: not in a frame');\r\n }\r\n inFrame = false;\r\n ImGui.EndFrame();\r\n ImGui.Render();\r\n ImGui_Impl.RenderDrawData(ImGui.GetDrawData());\r\n}\r\n\r\n/**\r\n * Injects a browser event into the GUI system\r\n * @param ev - The event object\r\n * @param type - Event type, default to ev.type if not specified.\r\n * @returns A boolean value indices if the event was processed by GUI system\r\n * @public\r\n */\r\nexport function imGuiInjectEvent(ev: Event, type?: string) {\r\n type = type ?? ev.type;\r\n if (type === 'pointermove' || type === 'pointerdown' || type === 'pointerup') {\r\n return ImGui_Impl.injectPointerEvent(ev as PointerEvent);\r\n } else if (type === 'keydown' || type === 'keyup' || type === 'keypress') {\r\n return ImGui_Impl.injectKeyEvent(ev as KeyboardEvent);\r\n } else if (type === 'wheel') {\r\n return ImGui_Impl.injectWheelEvent(ev as WheelEvent);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Set special text glyph font\r\n * @param charCode - char code of glyph\r\n * @param font - Web font\r\n * @public\r\n */\r\nexport function imGuiSetFontGlyph(charCode: number, font: Font) {\r\n ImGui_Impl.addCustomGlyph(charCode, font);\r\n}\r\n\r\n/**\r\n * Calculate text size\r\n * @param text - text to calculated\r\n * @remarks\r\n * The function ensures all glyphs in text been created\r\n *\r\n * @public\r\n */\r\nexport function imGuiCalcTextSize(text: string, out?: ImGui.ImVec2) {\r\n return ImGui_Impl.calcTextSize(text, out);\r\n}\r\n\r\n/**\r\n * Get char code map, for emoji conversion\r\n * @returns char code map\r\n *\r\n * @public\r\n */\r\nexport function imGuiGetCharCodeMap() {\r\n return ImGui_Impl.getCharCodeMap();\r\n}\r\n\r\n/**\r\n * Sets char code map, for emoji conversion\r\n * @param map - Char code map to set\r\n *\r\n * @public\r\n */\r\nexport function imGuiSetCharCodeMap(map: Record<number, string>) {\r\n ImGui_Impl.setCharCodeMap(map);\r\n}\r\n\r\n/**\r\n * Manual set keyboard capture\r\n * @param capture - Whether keyboard should be captured by ImGUI\r\n *\r\n * @public\r\n */\r\nexport function imGuiWantCaptureKeyboard(capture: boolean) {\r\n ImGui_Impl.captureKeyboard(capture);\r\n}\r\n"],"names":["inFrame","imGuiInit","device","fontFamily","fontSize","fontSizeGlyph","ImGui","console","info","io","ConfigWindowsResizeFromEdges","ConfigDragClickToInputText","BackendFlags","HasMouseCursors","font","Fonts","AddFontDefault","FontName","FontSize","ImGui_Impl","imGuiInFrame","imGuiNewFrame","Error","Date","now","imGuiWantCaptureKeyboard","imGuiEndFrame","imGuiInjectEvent","ev","type","imGuiSetFontGlyph","charCode","imGuiCalcTextSize","text","out","imGuiGetCharCodeMap","imGuiSetCharCodeMap","map","capture"],"mappings":"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"}
|
|
@@ -24,6 +24,8 @@ import { Disposable } from '@zephyr3d/base';
|
|
|
24
24
|
/** @internal */ _tracks;
|
|
25
25
|
_weight;
|
|
26
26
|
/** @internal */ _skeletons;
|
|
27
|
+
/** @internal */ _frameRate;
|
|
28
|
+
/** @internal */ _markers;
|
|
27
29
|
/**
|
|
28
30
|
* Creates an animation instance
|
|
29
31
|
* @param name - Name of the animation
|
|
@@ -38,6 +40,8 @@ import { Disposable } from '@zephyr3d/base';
|
|
|
38
40
|
this._weight = 1;
|
|
39
41
|
this._autoPlay = false;
|
|
40
42
|
this._skeletons = new Set();
|
|
43
|
+
this._frameRate = 30;
|
|
44
|
+
this._markers = [];
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* Whether this clip is embedded (owned inline by its container/resource).
|
|
@@ -88,6 +92,21 @@ import { Disposable } from '@zephyr3d/base';
|
|
|
88
92
|
this._skeletons = val;
|
|
89
93
|
}
|
|
90
94
|
/**
|
|
95
|
+
* Default frame rate used to convert frame-based marker references.
|
|
96
|
+
*/ get frameRate() {
|
|
97
|
+
return this._frameRate;
|
|
98
|
+
}
|
|
99
|
+
set frameRate(val) {
|
|
100
|
+
if (Number.isFinite(val) && val > 0) {
|
|
101
|
+
this._frameRate = val;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Timeline markers stored on this clip.
|
|
106
|
+
*/ get markers() {
|
|
107
|
+
return this._markers;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
91
110
|
* Total time span of the clip in seconds.
|
|
92
111
|
*
|
|
93
112
|
* Automatically extended when adding tracks with longer duration.
|
|
@@ -98,6 +117,74 @@ import { Disposable } from '@zephyr3d/base';
|
|
|
98
117
|
this._duration = val;
|
|
99
118
|
}
|
|
100
119
|
/**
|
|
120
|
+
* Add a serializable marker to this clip.
|
|
121
|
+
*
|
|
122
|
+
* @param marker - Marker metadata. If `id` is omitted, `name` is used as the id.
|
|
123
|
+
* @returns The normalized marker.
|
|
124
|
+
*/ addMarker(marker) {
|
|
125
|
+
if (!marker?.name) {
|
|
126
|
+
console.error('Animation marker must have a name');
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const normalized = {
|
|
130
|
+
...marker,
|
|
131
|
+
id: marker.id || marker.name
|
|
132
|
+
};
|
|
133
|
+
if (this.resolveMarkerTime(normalized) === null) {
|
|
134
|
+
console.error('Animation marker must have either time or frame');
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
this._markers.push(normalized);
|
|
138
|
+
this._markers.sort((a, b)=>(this.resolveMarkerTime(a) ?? 0) - (this.resolveMarkerTime(b) ?? 0));
|
|
139
|
+
return normalized;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Remove markers matching the marker id or name.
|
|
143
|
+
*/ removeMarker(idOrName) {
|
|
144
|
+
const oldLength = this._markers.length;
|
|
145
|
+
this._markers = this._markers.filter((marker)=>marker.id !== idOrName && marker.name !== idOrName);
|
|
146
|
+
return this._markers.length !== oldLength;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get the first marker matching the marker id or name.
|
|
150
|
+
*/ getMarker(idOrName) {
|
|
151
|
+
return this._markers.find((marker)=>marker.id === idOrName || marker.name === idOrName) ?? null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolve a marker to seconds on this clip's timeline.
|
|
155
|
+
*/ resolveMarkerTime(marker) {
|
|
156
|
+
if (typeof marker.time === 'number' && Number.isFinite(marker.time)) {
|
|
157
|
+
return marker.time;
|
|
158
|
+
}
|
|
159
|
+
if (typeof marker.frame === 'number' && Number.isFinite(marker.frame)) {
|
|
160
|
+
const fps = marker.fps ?? this._frameRate;
|
|
161
|
+
return fps > 0 ? marker.frame / fps : null;
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Resolve a time reference to seconds on this clip's timeline.
|
|
167
|
+
*/ resolveTimeRef(ref) {
|
|
168
|
+
if (ref === null || ref === undefined) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
if (typeof ref === 'number') {
|
|
172
|
+
return Number.isFinite(ref) ? ref : null;
|
|
173
|
+
}
|
|
174
|
+
if ('time' in ref) {
|
|
175
|
+
return Number.isFinite(ref.time) ? ref.time : null;
|
|
176
|
+
}
|
|
177
|
+
if ('frame' in ref) {
|
|
178
|
+
const fps = ref.fps ?? this._frameRate;
|
|
179
|
+
return Number.isFinite(ref.frame) && fps > 0 ? ref.frame / fps : null;
|
|
180
|
+
}
|
|
181
|
+
if ('marker' in ref) {
|
|
182
|
+
const marker = this.getMarker(ref.marker);
|
|
183
|
+
return marker ? this.resolveMarkerTime(marker) : null;
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
101
188
|
* Add a skeleton used by this clip.
|
|
102
189
|
*
|
|
103
190
|
* @param skeletonId - Persistent ID of Skeleton to register for this clip.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.js","sources":["../../src/animation/animation.ts"],"sourcesContent":["import { Disposable } from '@zephyr3d/base';\r\nimport type { AnimationSet } from './animationset';\r\nimport type { AnimationTrack } from './animationtrack';\r\n\r\n/**\r\n * Animation clip\r\n *\r\n * Represents a named animation composed of multiple tracks targeting various objects/properties,\r\n * with an overall duration, weight, and optional auto-play behavior. Tracks may target different\r\n * objects and are grouped by a per-target array. Skeletons used by this clip are tracked for\r\n * lifecycle and application during playback.\r\n *\r\n * Typical workflow:\r\n * - Create a clip via `AnimationSet.createAnimation(name)`.\r\n * - Add one or more `AnimationTrack`s via `addTrack(target, track)`.\r\n * - Optionally register skeletons via `addSkeleton(...)`.\r\n * - Start playback through the owning `AnimationSet.playAnimation(name, options)`.\r\n *\r\n * @public\r\n */\r\nexport class AnimationClip extends Disposable {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _animationSet: AnimationSet;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _duration: number;\r\n /** @internal */\r\n protected _autoPlay: boolean;\r\n /** @internal */\r\n protected _tracks: Map<object, AnimationTrack[]>;\r\n protected _weight: number;\r\n /** @internal */\r\n protected _skeletons: Set<string>;\r\n /**\r\n * Creates an animation instance\r\n * @param name - Name of the animation\r\n * @param model - Parent node if this is a skeleton animation\r\n */\r\n constructor(name: string, animationSet: AnimationSet, embedded = false) {\r\n super();\r\n this._name = name;\r\n this._animationSet = animationSet;\r\n this._embedded = embedded;\r\n this._tracks = new Map();\r\n this._duration = 0;\r\n this._weight = 1;\r\n this._autoPlay = false;\r\n this._skeletons = new Set();\r\n }\r\n /**\r\n * Whether this clip is embedded (owned inline by its container/resource).\r\n */\r\n get embedded() {\r\n return this._embedded;\r\n }\r\n /**\r\n * The `AnimationSet` that owns this clip.\r\n */\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n /**\r\n * Global blend weight for the clip.\r\n *\r\n * Used by the animation system when combining multiple active clips.\r\n */\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(val: number) {\r\n this._weight = val;\r\n }\r\n /**\r\n * Whether this clip should start playing automatically when loaded/instantiated.\r\n */\r\n get autoPlay() {\r\n return this._autoPlay;\r\n }\r\n set autoPlay(val: boolean) {\r\n this._autoPlay = val;\r\n }\r\n /**\r\n * The unique name of this clip.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n /**\r\n * All animation tracks grouped by target object.\r\n *\r\n * Key: target object; Value: list of `AnimationTrack`s affecting that target.\r\n */\r\n get tracks() {\r\n return this._tracks;\r\n }\r\n /**\r\n * All skeletons referenced by this clip.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n set skeletons(val: Set<string>) {\r\n this._skeletons = val;\r\n }\r\n /**\r\n * Total time span of the clip in seconds.\r\n *\r\n * Automatically extended when adding tracks with longer duration.\r\n */\r\n get timeDuration() {\r\n return this._duration;\r\n }\r\n set timeDuration(val) {\r\n this._duration = val;\r\n }\r\n /**\r\n * Add a skeleton used by this clip.\r\n *\r\n * @param skeletonId - Persistent ID of Skeleton to register for this clip.\r\n */\r\n addSkeleton(skeletonId: string) {\r\n this._skeletons.add(skeletonId);\r\n }\r\n /**\r\n * Remove a specific track from this clip.\r\n *\r\n * Errors if the track does not belong to this clip. Does nothing if not found.\r\n *\r\n * @param track - The track instance to remove.\r\n * @returns This clip (for chaining).\r\n */\r\n deleteTrack(track: AnimationTrack) {\r\n if (track?.animation !== this) {\r\n console.error('Cannot delete animation track which is not belongs to THIS animation');\r\n }\r\n for (const k of this._tracks.keys()) {\r\n const tracks = this._tracks.get(k)!;\r\n const index = tracks.indexOf(track);\r\n if (index >= 0) {\r\n tracks.splice(index, 1);\r\n }\r\n }\r\n return this;\r\n }\r\n /**\r\n * Add a track to this clip for a specific target object.\r\n *\r\n * Constraints:\r\n * - The track must not already belong to another clip.\r\n * - Only one track with the same blendId may exist per target in a single clip.\r\n *\r\n * Side effects:\r\n * - Assigns this clip to `track.animation`.\r\n * - Extends `timeDuration` to cover the track duration if longer.\r\n * - Calls `track.reset(target)` to initialize the target state if needed.\r\n *\r\n * @param target - Target object controlled by the track.\r\n * @param track - Track to add.\r\n * @returns This clip (for chaining).\r\n */\r\n addTrack(target: object, track: AnimationTrack) {\r\n if (!track) {\r\n return this;\r\n }\r\n if (track.animation) {\r\n if (track.animation === this) {\r\n return this;\r\n } else {\r\n console.error('Track is already in another animation');\r\n return this;\r\n }\r\n }\r\n const blendId = track.getBlendId();\r\n const tracks = this._tracks.get(target);\r\n if (tracks && tracks.findIndex((track) => track.getBlendId() === blendId) >= 0) {\r\n console.error('Tracks with same BlendId could not be added to same animation');\r\n return this;\r\n }\r\n track.animation = this;\r\n let trackInfo = this._tracks.get(target);\r\n if (!trackInfo) {\r\n trackInfo = [];\r\n this._tracks.set(target, trackInfo);\r\n }\r\n trackInfo.push(track);\r\n this._duration = Math.max(this._duration, track.getDuration() ?? 0);\r\n track.reset(target);\r\n return this;\r\n }\r\n /*\r\n resample(frames: number, callback: (frame: number) => void) {\r\n for (let frame = 0; frame <= frames; frame++) {\r\n const t = frame / this.timeDuration;\r\n for (const [k, v] of this.tracks) {\r\n for (const track of v) {\r\n const state = track.calculateState(k, t);\r\n track.applyState(k, state);\r\n }\r\n }\r\n for (const sk of this.skeletons) {\r\n const skeleton = this._animationSet.model.findSkeletonById(sk);\r\n if (skeleton) {\r\n skeleton.computeJoints();\r\n }\r\n }\r\n callback(frame);\r\n }\r\n }\r\n */\r\n}\r\n"],"names":["AnimationClip","Disposable","_weight","name","animationSet","embedded","_name","_animationSet","_embedded","_tracks","Map","_duration","_autoPlay","_skeletons","Set","weight","val","autoPlay","tracks","skeletons","timeDuration","addSkeleton","skeletonId","add","deleteTrack","track","animation","console","error","k","keys","get","index","indexOf","splice","addTrack","target","blendId","getBlendId","findIndex","trackInfo","set","push","Math","max","getDuration","reset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"animation.js","sources":["../../src/animation/animation.ts"],"sourcesContent":["import { Disposable } from '@zephyr3d/base';\r\nimport type { AnimationSet } from './animationset';\r\nimport type { AnimationTrack } from './animationtrack';\r\n\r\n/**\r\n * A serializable reference to a point on an animation clip timeline.\r\n * @public\r\n */\r\nexport type AnimationTimeRef =\r\n | number\r\n | {\r\n time: number;\r\n }\r\n | {\r\n frame: number;\r\n fps?: number;\r\n }\r\n | {\r\n marker: string;\r\n };\r\n\r\n/**\r\n * Timeline marker metadata stored on an animation clip.\r\n *\r\n * Markers are data, not callbacks. Runtime systems may dispatch events when a\r\n * playback cursor crosses the marker.\r\n * @public\r\n */\r\nexport type AnimationMarker = {\r\n /** Stable marker id for editor and blueprint references. */\r\n id?: string;\r\n /** Display/event name. */\r\n name: string;\r\n /** Marker time in seconds. */\r\n time?: number;\r\n /** Marker frame. Converted with `fps` or the owning clip's `frameRate`. */\r\n frame?: number;\r\n /** Optional frame rate used for `frame` conversion. */\r\n fps?: number;\r\n /** Serializable user payload. */\r\n payload?: unknown;\r\n};\r\n\r\n/**\r\n * Animation clip\r\n *\r\n * Represents a named animation composed of multiple tracks targeting various objects/properties,\r\n * with an overall duration, weight, and optional auto-play behavior. Tracks may target different\r\n * objects and are grouped by a per-target array. Skeletons used by this clip are tracked for\r\n * lifecycle and application during playback.\r\n *\r\n * Typical workflow:\r\n * - Create a clip via `AnimationSet.createAnimation(name)`.\r\n * - Add one or more `AnimationTrack`s via `addTrack(target, track)`.\r\n * - Optionally register skeletons via `addSkeleton(...)`.\r\n * - Start playback through the owning `AnimationSet.playAnimation(name, options)`.\r\n *\r\n * @public\r\n */\r\nexport class AnimationClip extends Disposable {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _animationSet: AnimationSet;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _duration: number;\r\n /** @internal */\r\n protected _autoPlay: boolean;\r\n /** @internal */\r\n protected _tracks: Map<object, AnimationTrack[]>;\r\n protected _weight: number;\r\n /** @internal */\r\n protected _skeletons: Set<string>;\r\n /** @internal */\r\n protected _frameRate: number;\r\n /** @internal */\r\n protected _markers: AnimationMarker[];\r\n /**\r\n * Creates an animation instance\r\n * @param name - Name of the animation\r\n * @param model - Parent node if this is a skeleton animation\r\n */\r\n constructor(name: string, animationSet: AnimationSet, embedded = false) {\r\n super();\r\n this._name = name;\r\n this._animationSet = animationSet;\r\n this._embedded = embedded;\r\n this._tracks = new Map();\r\n this._duration = 0;\r\n this._weight = 1;\r\n this._autoPlay = false;\r\n this._skeletons = new Set();\r\n this._frameRate = 30;\r\n this._markers = [];\r\n }\r\n /**\r\n * Whether this clip is embedded (owned inline by its container/resource).\r\n */\r\n get embedded() {\r\n return this._embedded;\r\n }\r\n /**\r\n * The `AnimationSet` that owns this clip.\r\n */\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n /**\r\n * Global blend weight for the clip.\r\n *\r\n * Used by the animation system when combining multiple active clips.\r\n */\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(val: number) {\r\n this._weight = val;\r\n }\r\n /**\r\n * Whether this clip should start playing automatically when loaded/instantiated.\r\n */\r\n get autoPlay() {\r\n return this._autoPlay;\r\n }\r\n set autoPlay(val: boolean) {\r\n this._autoPlay = val;\r\n }\r\n /**\r\n * The unique name of this clip.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n /**\r\n * All animation tracks grouped by target object.\r\n *\r\n * Key: target object; Value: list of `AnimationTrack`s affecting that target.\r\n */\r\n get tracks() {\r\n return this._tracks;\r\n }\r\n /**\r\n * All skeletons referenced by this clip.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n set skeletons(val: Set<string>) {\r\n this._skeletons = val;\r\n }\r\n /**\r\n * Default frame rate used to convert frame-based marker references.\r\n */\r\n get frameRate() {\r\n return this._frameRate;\r\n }\r\n set frameRate(val: number) {\r\n if (Number.isFinite(val) && val > 0) {\r\n this._frameRate = val;\r\n }\r\n }\r\n /**\r\n * Timeline markers stored on this clip.\r\n */\r\n get markers() {\r\n return this._markers;\r\n }\r\n /**\r\n * Total time span of the clip in seconds.\r\n *\r\n * Automatically extended when adding tracks with longer duration.\r\n */\r\n get timeDuration() {\r\n return this._duration;\r\n }\r\n set timeDuration(val) {\r\n this._duration = val;\r\n }\r\n /**\r\n * Add a serializable marker to this clip.\r\n *\r\n * @param marker - Marker metadata. If `id` is omitted, `name` is used as the id.\r\n * @returns The normalized marker.\r\n */\r\n addMarker(marker: AnimationMarker): AnimationMarker | null {\r\n if (!marker?.name) {\r\n console.error('Animation marker must have a name');\r\n return null;\r\n }\r\n const normalized: AnimationMarker = {\r\n ...marker,\r\n id: marker.id || marker.name\r\n };\r\n if (this.resolveMarkerTime(normalized) === null) {\r\n console.error('Animation marker must have either time or frame');\r\n return null;\r\n }\r\n this._markers.push(normalized);\r\n this._markers.sort((a, b) => (this.resolveMarkerTime(a) ?? 0) - (this.resolveMarkerTime(b) ?? 0));\r\n return normalized;\r\n }\r\n /**\r\n * Remove markers matching the marker id or name.\r\n */\r\n removeMarker(idOrName: string) {\r\n const oldLength = this._markers.length;\r\n this._markers = this._markers.filter((marker) => marker.id !== idOrName && marker.name !== idOrName);\r\n return this._markers.length !== oldLength;\r\n }\r\n /**\r\n * Get the first marker matching the marker id or name.\r\n */\r\n getMarker(idOrName: string) {\r\n return this._markers.find((marker) => marker.id === idOrName || marker.name === idOrName) ?? null;\r\n }\r\n /**\r\n * Resolve a marker to seconds on this clip's timeline.\r\n */\r\n resolveMarkerTime(marker: AnimationMarker): number | null {\r\n if (typeof marker.time === 'number' && Number.isFinite(marker.time)) {\r\n return marker.time;\r\n }\r\n if (typeof marker.frame === 'number' && Number.isFinite(marker.frame)) {\r\n const fps = marker.fps ?? this._frameRate;\r\n return fps > 0 ? marker.frame / fps : null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Resolve a time reference to seconds on this clip's timeline.\r\n */\r\n resolveTimeRef(ref: AnimationTimeRef | null | undefined): number | null {\r\n if (ref === null || ref === undefined) {\r\n return null;\r\n }\r\n if (typeof ref === 'number') {\r\n return Number.isFinite(ref) ? ref : null;\r\n }\r\n if ('time' in ref) {\r\n return Number.isFinite(ref.time) ? ref.time : null;\r\n }\r\n if ('frame' in ref) {\r\n const fps = ref.fps ?? this._frameRate;\r\n return Number.isFinite(ref.frame) && fps > 0 ? ref.frame / fps : null;\r\n }\r\n if ('marker' in ref) {\r\n const marker = this.getMarker(ref.marker);\r\n return marker ? this.resolveMarkerTime(marker) : null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Add a skeleton used by this clip.\r\n *\r\n * @param skeletonId - Persistent ID of Skeleton to register for this clip.\r\n */\r\n addSkeleton(skeletonId: string) {\r\n this._skeletons.add(skeletonId);\r\n }\r\n /**\r\n * Remove a specific track from this clip.\r\n *\r\n * Errors if the track does not belong to this clip. Does nothing if not found.\r\n *\r\n * @param track - The track instance to remove.\r\n * @returns This clip (for chaining).\r\n */\r\n deleteTrack(track: AnimationTrack) {\r\n if (track?.animation !== this) {\r\n console.error('Cannot delete animation track which is not belongs to THIS animation');\r\n }\r\n for (const k of this._tracks.keys()) {\r\n const tracks = this._tracks.get(k)!;\r\n const index = tracks.indexOf(track);\r\n if (index >= 0) {\r\n tracks.splice(index, 1);\r\n }\r\n }\r\n return this;\r\n }\r\n /**\r\n * Add a track to this clip for a specific target object.\r\n *\r\n * Constraints:\r\n * - The track must not already belong to another clip.\r\n * - Only one track with the same blendId may exist per target in a single clip.\r\n *\r\n * Side effects:\r\n * - Assigns this clip to `track.animation`.\r\n * - Extends `timeDuration` to cover the track duration if longer.\r\n * - Calls `track.reset(target)` to initialize the target state if needed.\r\n *\r\n * @param target - Target object controlled by the track.\r\n * @param track - Track to add.\r\n * @returns This clip (for chaining).\r\n */\r\n addTrack(target: object, track: AnimationTrack) {\r\n if (!track) {\r\n return this;\r\n }\r\n if (track.animation) {\r\n if (track.animation === this) {\r\n return this;\r\n } else {\r\n console.error('Track is already in another animation');\r\n return this;\r\n }\r\n }\r\n const blendId = track.getBlendId();\r\n const tracks = this._tracks.get(target);\r\n if (tracks && tracks.findIndex((track) => track.getBlendId() === blendId) >= 0) {\r\n console.error('Tracks with same BlendId could not be added to same animation');\r\n return this;\r\n }\r\n track.animation = this;\r\n let trackInfo = this._tracks.get(target);\r\n if (!trackInfo) {\r\n trackInfo = [];\r\n this._tracks.set(target, trackInfo);\r\n }\r\n trackInfo.push(track);\r\n this._duration = Math.max(this._duration, track.getDuration() ?? 0);\r\n track.reset(target);\r\n return this;\r\n }\r\n /*\r\n resample(frames: number, callback: (frame: number) => void) {\r\n for (let frame = 0; frame <= frames; frame++) {\r\n const t = frame / this.timeDuration;\r\n for (const [k, v] of this.tracks) {\r\n for (const track of v) {\r\n const state = track.calculateState(k, t);\r\n track.applyState(k, state);\r\n }\r\n }\r\n for (const sk of this.skeletons) {\r\n const skeleton = this._animationSet.model.findSkeletonById(sk);\r\n if (skeleton) {\r\n skeleton.computeJoints();\r\n }\r\n }\r\n callback(frame);\r\n }\r\n }\r\n */\r\n}\r\n"],"names":["AnimationClip","Disposable","_weight","name","animationSet","embedded","_name","_animationSet","_embedded","_tracks","Map","_duration","_autoPlay","_skeletons","Set","_frameRate","_markers","weight","val","autoPlay","tracks","skeletons","frameRate","Number","isFinite","markers","timeDuration","addMarker","marker","console","error","normalized","id","resolveMarkerTime","push","sort","a","b","removeMarker","idOrName","oldLength","length","filter","getMarker","find","time","frame","fps","resolveTimeRef","ref","undefined","addSkeleton","skeletonId","add","deleteTrack","track","animation","k","keys","get","index","indexOf","splice","addTrack","target","blendId","getBlendId","findIndex","trackInfo","set","Math","max","getDuration","reset"],"mappings":"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"}
|