@zephyr3d/device 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"base_types.js","sources":["../src/base_types.ts"],"sourcesContent":["import type { TypedArray, Vector4, IEventTarget, Nullable, Immutable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { float2half } from '@zephyr3d/base';\r\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo, ProgramBuilder } from './builder';\r\nimport type {\r\n BaseTexture,\r\n BindGroup,\r\n BindGroupLayout,\r\n BufferCreationOptions,\r\n FrameBuffer,\r\n FrameBufferOptions,\r\n GPUDataBuffer,\r\n GPUObject,\r\n GPUProgram,\r\n IndexBuffer,\r\n RenderBundle,\r\n SamplerOptions,\r\n StructuredBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCreationOptions,\r\n TextureCube,\r\n TextureImageElement,\r\n TextureMipmapData,\r\n TextureSampler,\r\n TextureVideo,\r\n VertexAttribFormat,\r\n VertexLayout,\r\n VertexLayoutOptions,\r\n VertexSemantic\r\n} from './gpuobject';\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 { Pool } from './pool';\r\nimport type { ITimer } from './timer';\r\n\r\n/**\r\n * The webgl context type\r\n * @public\r\n */\r\nexport type WebGLContext = WebGLRenderingContext | WebGL2RenderingContext;\r\n\r\n/**\r\n * The texture type\r\n * @public\r\n */\r\nexport type TextureType = '2d' | '3d' | 'cube' | '2darray';\r\n\r\n/**\r\n * The comparison function type\r\n * @public\r\n */\r\nexport type CompareFunc = 'always' | 'le' | 'ge' | 'lt' | 'gt' | 'eq' | 'ne' | 'never';\r\n\r\n/**\r\n * The texture address mode\r\n * @public\r\n */\r\nexport type TextureAddressMode = 'repeat' | 'mirrored-repeat' | 'clamp';\r\n\r\n/**\r\n * The texture filter mode\r\n * @public\r\n */\r\nexport type TextureFilterMode = 'none' | 'nearest' | 'linear';\r\n\r\n/**\r\n * Scalar data type\r\n * @public\r\n */\r\nexport type DataType =\r\n | 'u8'\r\n | 'u8norm'\r\n | 'i8'\r\n | 'i8norm'\r\n | 'u16'\r\n | 'u16norm'\r\n | 'i16'\r\n | 'i16norm'\r\n | 'u32'\r\n | 'i32'\r\n | 'f16'\r\n | 'f32';\r\n\r\nconst RED_SHIFT = 0;\r\nconst GREEN_SHIFT = 1;\r\nconst BLUE_SHIFT = 2;\r\nconst ALPHA_SHIFT = 3;\r\nconst DEPTH_SHIFT = 4;\r\nconst STENCIL_SHIFT = 5;\r\nconst FLOAT_SHIFT = 6;\r\nconst INTEGER_SHIFT = 7;\r\nconst SIGNED_SHIFT = 8;\r\nconst SRGB_SHIFT = 9;\r\nconst BGR_SHIFT = 10;\r\nconst BLOCK_SIZE_SHIFT = 11;\r\nconst BLOCK_SIZE_MASK = 0x1f << BLOCK_SIZE_SHIFT;\r\nconst BLOCK_WIDTH_SHIFT = 16;\r\nconst BLOCK_WIDTH_MASK = 0xf << BLOCK_WIDTH_SHIFT;\r\nconst BLOCK_HEIGHT_SHIFT = 20;\r\nconst BLOCK_HEIGHT_MASK = 0xf << BLOCK_HEIGHT_SHIFT;\r\nconst COMPRESSED_FORMAT_SHIFT = 24;\r\n\r\nconst COMPRESSION_FORMAT_BC1 = 1 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC2 = 2 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC3 = 3 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC4 = 4 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC5 = 5 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC6H = 6 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC7 = 7 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC = 8 << COMPRESSED_FORMAT_SHIFT;\r\n/*\r\nconst COMPRESSION_FORMAT_ETC2_RGB8 = 8 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ETC2_RGB8_A1 = 9 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ETC2_RGBA8 = 10 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_4x4 = 11 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_5x4 = 12 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_5x5 = 13 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_6x5 = 14 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_6x6 = 15 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x5 = 16 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x6 = 17 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x8 = 18 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x5 = 19 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x6 = 20 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x8 = 21 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x10 = 22 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_12x10 = 23 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_12x12 = 24 << COMPRESSED_FORMAT_SHIFT;\r\n*/\r\nconst COMPRESSION_FORMAT_BITMASK = 0x1f << COMPRESSED_FORMAT_SHIFT;\r\nconst RED_BITMASK = 1 << RED_SHIFT;\r\nconst GREEN_BITMASK = 1 << GREEN_SHIFT;\r\nconst BLUE_BITMASK = 1 << BLUE_SHIFT;\r\nconst ALPHA_BITMASK = 1 << ALPHA_SHIFT;\r\nconst DEPTH_BITMASK = 1 << DEPTH_SHIFT;\r\nconst STENCIL_BITMASK = 1 << STENCIL_SHIFT;\r\nconst FLOAT_BITMASK = 1 << FLOAT_SHIFT;\r\nconst INTEGER_BITMASK = 1 << INTEGER_SHIFT;\r\nconst SIGNED_BITMASK = 1 << SIGNED_SHIFT;\r\nconst SRGB_BITMASK = 1 << SRGB_SHIFT;\r\nconst BGR_BITMASK = 1 << BGR_SHIFT;\r\n\r\nfunction makeTextureFormat(\r\n compression: number,\r\n r: boolean,\r\n g: boolean,\r\n b: boolean,\r\n a: boolean,\r\n depth: boolean,\r\n stencil: boolean,\r\n float: boolean,\r\n integer: boolean,\r\n signed: boolean,\r\n srgb: boolean,\r\n bgr: boolean,\r\n blockWidth: number,\r\n blockHeight: number,\r\n blockSize: number\r\n) {\r\n const compressionBits = compression;\r\n const colorBits =\r\n (r ? RED_BITMASK : 0) | (g ? GREEN_BITMASK : 0) | (b ? BLUE_BITMASK : 0) | (a ? ALPHA_BITMASK : 0);\r\n const depthStencilBits = (depth ? DEPTH_BITMASK : 0) | (stencil ? STENCIL_BITMASK : 0);\r\n const floatBits = float ? FLOAT_BITMASK : 0;\r\n const integerBits = integer ? INTEGER_BITMASK : 0;\r\n const signedBits = signed ? SIGNED_BITMASK : 0;\r\n const srgbBits = srgb ? SRGB_BITMASK : 0;\r\n const bgrBits = bgr ? BGR_BITMASK : 0;\r\n const blockBits =\r\n (blockWidth << BLOCK_WIDTH_SHIFT) | (blockHeight << BLOCK_HEIGHT_SHIFT) | (blockSize << BLOCK_SIZE_SHIFT);\r\n return (\r\n compressionBits |\r\n colorBits |\r\n depthStencilBits |\r\n floatBits |\r\n integerBits |\r\n signedBits |\r\n srgbBits |\r\n bgrBits |\r\n blockBits\r\n );\r\n}\r\n\r\n/**\r\n * Texture format type\r\n * @public\r\n */\r\nexport type TextureFormat =\r\n | 'r8unorm'\r\n | 'r8snorm'\r\n | 'r16f'\r\n | 'r32f'\r\n | 'r8ui'\r\n | 'r8i'\r\n | 'r16ui'\r\n | 'r16i'\r\n | 'r32ui'\r\n | 'r32i'\r\n | 'rg8unorm'\r\n | 'rg8snorm'\r\n | 'rg16f'\r\n | 'rg32f'\r\n | 'rg8ui'\r\n | 'rg8i'\r\n | 'rg16ui'\r\n | 'rg16i'\r\n | 'rg32ui'\r\n | 'rg32i'\r\n | 'rgba8unorm'\r\n | 'rgba8unorm-srgb'\r\n | 'rgba8snorm'\r\n | 'bgra8unorm'\r\n | 'bgra8unorm-srgb'\r\n | 'rgba16f'\r\n | 'rgba32f'\r\n | 'rgba8ui'\r\n | 'rgba8i'\r\n | 'rgba16ui'\r\n | 'rgba16i'\r\n | 'rgba32ui'\r\n | 'rgba32i'\r\n | 'rg11b10uf'\r\n | 'd16'\r\n | 'd24'\r\n | 'd32f'\r\n | 'd24s8'\r\n | 'd32fs8'\r\n | 'dxt1'\r\n | 'dxt1-srgb'\r\n | 'dxt3'\r\n | 'dxt3-srgb'\r\n | 'dxt5'\r\n | 'dxt5-srgb'\r\n | 'bc4'\r\n | 'bc4-signed'\r\n | 'bc5'\r\n | 'bc5-signed'\r\n | 'bc7'\r\n | 'bc7-srgb'\r\n | 'bc6h'\r\n | 'bc6h-signed'\r\n | 'astc-4x4'\r\n | 'astc-4x4-srgb'\r\n | 'astc-5x4'\r\n | 'astc-5x4-srgb'\r\n | 'astc-5x5'\r\n | 'astc-5x5-srgb'\r\n | 'astc-6x5'\r\n | 'astc-6x5-srgb'\r\n | 'astc-6x6'\r\n | 'astc-6x6-srgb'\r\n | 'astc-8x5'\r\n | 'astc-8x5-srgb'\r\n | 'astc-8x6'\r\n | 'astc-8x6-srgb'\r\n | 'astc-8x8'\r\n | 'astc-8x8-srgb'\r\n | 'astc-10x5'\r\n | 'astc-10x5-srgb'\r\n | 'astc-10x6'\r\n | 'astc-10x6-srgb'\r\n | 'astc-10x8'\r\n | 'astc-10x8-srgb'\r\n | 'astc-10x10'\r\n | 'astc-10x10-srgb'\r\n | 'astc-12x10'\r\n | 'astc-12x10-srgb'\r\n | 'astc-12x12'\r\n | 'astc-12x12-srgb';\r\n\r\nconst textureFormatMap: Record<TextureFormat, number> = {\r\n r8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r16f: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r32f: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n r8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r8i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r16i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n r32i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg16f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg32f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rg8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg8i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg16i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rg32i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n 'rgba8unorm-srgb': makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n bgra8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n 'bgra8unorm-srgb': makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba16f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba32f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rgba8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba8i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba16i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rgba32i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rg11b10uf: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d16: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n d24: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 0,\r\n 0,\r\n 0\r\n ),\r\n d32f: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d24s8: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d32fs8: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 5\r\n ),\r\n // compressed texture formats\r\n dxt1: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC1,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n 'dxt1-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC1,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n dxt3: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC2,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'dxt3-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC2,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n dxt5: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC3,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'dxt5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC3,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc4: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC4,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n 'bc4-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC4,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n bc5: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC5,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc5-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC5,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc6h: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC6H,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc6h-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC6H,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc7: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC7,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc7-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC7,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-4x4': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-4x4-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x4': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 5,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x4-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 5,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 5,\r\n 5,\r\n 16\r\n ),\r\n 'astc-5x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 5,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 6,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 6,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 6,\r\n 6,\r\n 16\r\n ),\r\n 'astc-6x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 6,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 5,\r\n 16\r\n ),\r\n 'astc-8x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 5,\r\n 16\r\n ),\r\n 'astc-8x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x8': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 8,\r\n 16\r\n ),\r\n 'astc-8x8-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 5,\r\n 16\r\n ),\r\n 'astc-10x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 5,\r\n 16\r\n ),\r\n 'astc-10x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 6,\r\n 16\r\n ),\r\n 'astc-10x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 6,\r\n 16\r\n ),\r\n 'astc-10x8': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x8-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x10': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 10,\r\n 16\r\n ),\r\n 'astc-10x10-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x10': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 12,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x10-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 12,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x12': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 12,\r\n 12,\r\n 16\r\n ),\r\n 'astc-12x12-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 12,\r\n 12,\r\n 16\r\n )\r\n};\r\n\r\n/**\r\n * Converts a non-sRGB texture format to the corresponding sRGB texture format\r\n * @param format - The texture format to be converted\r\n * @returns The sRGB texture format\r\n * @public\r\n */\r\nexport function linearTextureFormatToSRGB(format: TextureFormat) {\r\n switch (format) {\r\n case 'rgba8unorm':\r\n return 'rgba8unorm-srgb';\r\n case 'bgra8unorm':\r\n return 'bgra8unorm-srgb';\r\n case 'dxt1':\r\n return 'dxt1-srgb';\r\n case 'dxt3':\r\n return 'dxt3-srgb';\r\n case 'dxt5':\r\n return 'dxt5-srgb';\r\n case 'bc7':\r\n return 'bc7-srgb';\r\n case 'astc-4x4':\r\n return 'astc-4x4-srgb';\r\n case 'astc-5x4':\r\n return 'astc-5x4-srgb';\r\n case 'astc-5x5':\r\n return 'astc-5x5-srgb';\r\n case 'astc-6x5':\r\n return 'astc-6x5-srgb';\r\n case 'astc-6x6':\r\n return 'astc-6x6-srgb';\r\n case 'astc-8x5':\r\n return 'astc-8x5-srgb';\r\n case 'astc-8x6':\r\n return 'astc-8x6-srgb';\r\n case 'astc-8x8':\r\n return 'astc-8x8-srgb';\r\n case 'astc-10x5':\r\n return 'astc-10x5-srgb';\r\n case 'astc-10x6':\r\n return 'astc-10x6-srgb';\r\n case 'astc-10x8':\r\n return 'astc-10x8-srgb';\r\n case 'astc-10x10':\r\n return 'astc-10x10-srgb';\r\n case 'astc-12x10':\r\n return 'astc-12x10-srgb';\r\n case 'astc-12x12':\r\n return 'astc-12x12-srgb';\r\n default:\r\n return format;\r\n }\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains an alpha channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains an alpha channel, otherwise false\r\n * @public\r\n */\r\nexport function hasAlphaChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & ALPHA_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a red channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a red channel, otherwise false\r\n * @public\r\n */\r\nexport function hasRedChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & RED_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a green channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a green channel, otherwise false\r\n * @public\r\n */\r\nexport function hasGreenChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & GREEN_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a blue channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a blue channel, otherwise false\r\n * @public\r\n */\r\nexport function hasBlueChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & BLUE_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a depth channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a depth channel, otherwise false\r\n * @public\r\n */\r\nexport function hasDepthChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & DEPTH_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a stencil channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a stencil channel, otherwise false\r\n * @public\r\n */\r\nexport function hasStencilChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & STENCIL_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is floating-point.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is floating-point, otherwise false\r\n * @public\r\n */\r\nexport function isFloatTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & FLOAT_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is integer.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is integer, otherwise false\r\n * @public\r\n */\r\nexport function isIntegerTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & INTEGER_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is signed.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is signed, otherwise false\r\n * @public\r\n */\r\nexport function isSignedTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & SIGNED_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is a compressed format.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is a compressed format, otherwise false\r\n * @public\r\n */\r\nexport function isCompressedTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & COMPRESSION_FORMAT_BITMASK);\r\n}\r\n/**\r\n * Check whether a given texture format is sRGB format.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is sRGB format, otherwise false\r\n * @public\r\n */\r\nexport function isSRGBTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & SRGB_BITMASK);\r\n}\r\n\r\n/**\r\n * Get block size of given texture format\r\n * @param format - The texture format\r\n * @returns The block size\r\n * @public\r\n */\r\nexport function getTextureFormatBlockSize(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_SIZE_MASK) >> BLOCK_SIZE_SHIFT;\r\n}\r\n\r\n/**\r\n * Get block width of given texture format\r\n * @param format - The texture format\r\n * @returns The block width\r\n * @public\r\n */\r\nexport function getTextureFormatBlockWidth(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_WIDTH_MASK) >> BLOCK_WIDTH_SHIFT;\r\n}\r\n\r\n/**\r\n * Get block height of given texture format\r\n * @param format - The texture format\r\n * @returns The block height\r\n * @public\r\n */\r\nexport function getTextureFormatBlockHeight(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_HEIGHT_MASK) >> BLOCK_HEIGHT_SHIFT;\r\n}\r\n\r\nfunction normalizeColorComponent(val: number, maxval: number) {\r\n return Math.min(maxval, Math.max(Math.floor(val * maxval), 0));\r\n}\r\n\r\nfunction normalizeColorComponentSigned(val: number, maxval: number) {\r\n return normalizeColorComponent(val * 0.5 + 0.5, maxval) - (maxval + 1) / 2;\r\n}\r\n\r\n/** @internal */\r\nexport function encodePixel(format: TextureFormat, r: number, g: number, b: number, a: number) {\r\n switch (format) {\r\n case 'r8unorm':\r\n return new Uint8Array([normalizeColorComponent(r, 255)]);\r\n case 'r8snorm':\r\n return new Int8Array([normalizeColorComponentSigned(r, 255)]);\r\n case 'r16f':\r\n return new Uint16Array([float2half(r)]);\r\n case 'r32f':\r\n return new Float32Array([r]);\r\n case 'r8ui':\r\n return new Uint8Array([r | 0]);\r\n case 'r8i':\r\n return new Int8Array([r | 0]);\r\n case 'r16ui':\r\n return new Uint16Array([r | 0]);\r\n case 'r16i':\r\n return new Int16Array([r | 0]);\r\n case 'r32ui':\r\n return new Uint32Array([r | 0]);\r\n case 'r32i':\r\n return new Int32Array([r | 0]);\r\n case 'rg8unorm':\r\n return new Uint8Array([normalizeColorComponent(r, 255), normalizeColorComponent(g, 255)]);\r\n case 'rg8snorm':\r\n return new Int8Array([normalizeColorComponentSigned(r, 255), normalizeColorComponentSigned(g, 255)]);\r\n case 'rg16f':\r\n return new Uint16Array([float2half(r), float2half(g)]);\r\n case 'rg32f':\r\n return new Float32Array([r, g]);\r\n case 'rg8ui':\r\n return new Uint8Array([r | 0, g | 0]);\r\n case 'rg8i':\r\n return new Int8Array([r | 0, g | 0]);\r\n case 'rg16ui':\r\n return new Uint16Array([r | 0, g | 0]);\r\n case 'rg16i':\r\n return new Int16Array([r | 0, g | 0]);\r\n case 'rg32ui':\r\n return new Uint32Array([r | 0, g | 0]);\r\n case 'rg32i':\r\n return new Int32Array([r | 0, g | 0]);\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n return new Uint8Array([\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(a, 255)\r\n ]);\r\n case 'bgra8unorm':\r\n case 'bgra8unorm-srgb':\r\n return new Uint8Array([\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(a, 255)\r\n ]);\r\n case 'rgba8snorm':\r\n return new Int8Array([\r\n normalizeColorComponentSigned(r, 255),\r\n normalizeColorComponentSigned(g, 255),\r\n normalizeColorComponentSigned(b, 255),\r\n normalizeColorComponentSigned(a, 255)\r\n ]);\r\n case 'rgba16f':\r\n return new Uint16Array([float2half(r), float2half(g), float2half(b), float2half(a)]);\r\n case 'rgba32f':\r\n return new Float32Array([r, g, b, a]);\r\n case 'rgba8ui':\r\n return new Uint8Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba8i':\r\n return new Int8Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba16ui':\r\n return new Uint16Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba16i':\r\n return new Int16Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba32ui':\r\n return new Uint32Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba32i':\r\n return new Int32Array([r | 0, g | 0, b | 0, a | 0]);\r\n default:\r\n throw new Error(`Invalid texture format: ${format}`);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function encodePixelToArray(\r\n format: TextureFormat,\r\n r: number,\r\n g: number,\r\n b: number,\r\n a: number,\r\n arr: Array<number>\r\n) {\r\n switch (format) {\r\n case 'r8unorm':\r\n arr.push(normalizeColorComponent(r, 255));\r\n break;\r\n case 'r8snorm':\r\n arr.push(normalizeColorComponentSigned(r, 255));\r\n break;\r\n case 'r16f':\r\n arr.push(float2half(r));\r\n break;\r\n case 'r32f':\r\n arr.push(r);\r\n break;\r\n case 'r8ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r8i':\r\n arr.push(r | 0);\r\n break;\r\n case 'r16ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r16i':\r\n arr.push(r | 0);\r\n break;\r\n case 'r32ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r32i':\r\n arr.push(r | 0);\r\n break;\r\n case 'rg8unorm':\r\n arr.push(normalizeColorComponent(r, 255), normalizeColorComponent(g, 255));\r\n break;\r\n case 'rg8snorm':\r\n arr.push(normalizeColorComponentSigned(r, 255), normalizeColorComponentSigned(g, 255));\r\n break;\r\n case 'rg16f':\r\n arr.push(float2half(r), float2half(g));\r\n break;\r\n case 'rg32f':\r\n arr.push(r, g);\r\n break;\r\n case 'rg8ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg8i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg16ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg16i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg32ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg32i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n arr.push(\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(a, 255)\r\n );\r\n break;\r\n case 'bgra8unorm':\r\n case 'bgra8unorm-srgb':\r\n arr.push(\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(a, 255)\r\n );\r\n break;\r\n case 'rgba8snorm':\r\n arr.push(\r\n normalizeColorComponentSigned(r, 255),\r\n normalizeColorComponentSigned(g, 255),\r\n normalizeColorComponentSigned(b, 255),\r\n normalizeColorComponentSigned(a, 255)\r\n );\r\n break;\r\n case 'rgba16f':\r\n arr.push(float2half(r), float2half(g), float2half(b), float2half(a));\r\n break;\r\n case 'rgba32f':\r\n arr.push(r, g, b, a);\r\n break;\r\n case 'rgba8ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba8i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba16ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba16i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba32ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba32i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * The primitive type\r\n * @public\r\n */\r\nexport type PrimitiveType =\r\n | 'triangle-list'\r\n | 'triangle-strip'\r\n | 'triangle-fan'\r\n | 'line-list'\r\n | 'line-strip'\r\n | 'point-list';\r\n\r\n/**\r\n * Shader type\r\n * @public\r\n */\r\nexport enum ShaderType {\r\n Vertex = 1 << 0,\r\n Fragment = 1 << 1,\r\n Compute = 1 << 2\r\n}\r\n\r\n/**\r\n * Shader kind\r\n * @public\r\n */\r\nexport type ShaderKind = 'vertex' | 'fragment' | 'compute';\r\n\r\n/**\r\n * Frame information\r\n * @public\r\n */\r\nexport interface FrameInfo {\r\n /** counter of frames */\r\n frameCounter: number;\r\n /** timestamp of current frame, in milliseconds */\r\n frameTimestamp: number;\r\n /** time spent by the CPU from last frame, in milliseconds */\r\n elapsedTimeCPU: number;\r\n /** time spent by the GPU from last frame, in milliseconds */\r\n elapsedTimeGPU: number;\r\n /** time spent from last frame, in milliseconds */\r\n elapsedFrame: number;\r\n /** time spent from the first frame, in milliseconds */\r\n elapsedOverall: number;\r\n /** the FPS calculated for the last one second */\r\n FPS: number;\r\n /** How many draw calls were sent to the GPU in current frame */\r\n drawCalls: number;\r\n /** How many compute calls were sent to the GPU in current frame */\r\n computeCalls: number;\r\n /** @internal */\r\n nextFrameCall: (() => void)[];\r\n /** @internal */\r\n nextFrameCallNext: (() => void)[];\r\n}\r\n\r\n/**\r\n * List of all gpu objects\r\n * @public\r\n */\r\nexport interface GPUObjectList {\r\n /** Creation stack */\r\n stacks: Map<GPUObject, string>;\r\n /** list of textures */\r\n textures: BaseTexture[];\r\n /** list of samplers */\r\n samplers: TextureSampler[];\r\n /** list of buffers */\r\n buffers: GPUDataBuffer[];\r\n /** list of programs */\r\n programs: GPUProgram[];\r\n /** list of frame buffers */\r\n framebuffers: FrameBuffer[];\r\n /** list of vertex layouts */\r\n vertexArrayObjects: VertexLayout[];\r\n /** list of bind groups */\r\n bindGroups: BindGroup[];\r\n}\r\n\r\n/**\r\n * The device capabilities\r\n * @public\r\n */\r\nexport interface DeviceCaps {\r\n /** Miscellaneous capabilities */\r\n miscCaps: MiscCaps;\r\n /** Frame buffer related capabilities */\r\n framebufferCaps: FramebufferCaps;\r\n /** Shader related capabilities */\r\n shaderCaps: ShaderCaps;\r\n /** Texture related capabilities */\r\n textureCaps: TextureCaps;\r\n}\r\n\r\n/**\r\n * Frame buffer related capabilities of the device\r\n * @public\r\n */\r\nexport interface FramebufferCaps {\r\n /** The maximum number of framebuffer color attachment points */\r\n maxDrawBuffers: number;\r\n /** True if device supports rendering to mipmap */\r\n supportRenderMipmap: boolean;\r\n /** True if device supports multisampled frame buffer */\r\n supportMultisampledFramebuffer: boolean;\r\n /** True if device supports blending on float point frame buffer */\r\n supportFloatBlending: boolean;\r\n /** True if device supports 32bits float depth buffer */\r\n supportDepth32float: boolean;\r\n /** True if device supports 32bits float depth buffer with 8bits stencil */\r\n supportDepth32floatStencil8: boolean;\r\n /** Maximum color attachment bytes per sample */\r\n maxColorAttachmentBytesPerSample: number;\r\n}\r\n\r\n/**\r\n * Miscellaneous capabilities of the device\r\n * @public\r\n */\r\nexport interface MiscCaps {\r\n /** True if the device supports oversized viewport */\r\n supportOversizedViewport: boolean;\r\n /** True if the device supports minimum and maximum blending equations */\r\n supportBlendMinMax: boolean;\r\n /** True if the device supports 32-bits index buffer */\r\n support32BitIndex: boolean;\r\n /** The maximum number of {@link BindGroupLayout}'s in a shader program */\r\n maxBindGroups: number;\r\n /** The maximum number of texture coordinate index */\r\n maxTexCoordIndex: number;\r\n}\r\n\r\n/**\r\n * Shader related capabilities of the device\r\n * @public\r\n */\r\nexport interface ShaderCaps {\r\n /** True if the device supports writing depth value in a fragment shader */\r\n supportFragmentDepth: boolean;\r\n /** True if the device supports derivative functions in a fragment shader */\r\n supportStandardDerivatives: boolean;\r\n /** True if the device supports explicit control of texture LOD in a fragment shader */\r\n supportShaderTextureLod: boolean;\r\n /** True if the device supports high precison float number for shader programs */\r\n supportHighPrecisionFloat: boolean;\r\n /** The maximum number of bytes of uniform buffer */\r\n maxUniformBufferSize: number;\r\n /** The uniform buffer offset alignment */\r\n uniformBufferOffsetAlignment: number;\r\n /** The maximum number of bytes of storage buffer */\r\n maxStorageBufferSize: number;\r\n /** The storage buffer offset alignment */\r\n storageBufferOffsetAlignment: number;\r\n}\r\n\r\n/**\r\n * Information of a texture format\r\n * @public\r\n */\r\nexport interface TextureFormatInfo {\r\n /** True if the texture format supports linear filtering */\r\n filterable: boolean;\r\n /** True if the texture format can be used as a render target */\r\n renderable: boolean;\r\n /** True if the texture format is a compressed format */\r\n compressed: boolean;\r\n /** Number of bytes per-block */\r\n size: number;\r\n /** Block width */\r\n blockWidth: number;\r\n /** Block height */\r\n blockHeight: number;\r\n}\r\n\r\n/**\r\n * Texture related capabilities of the device'\r\n * @public\r\n */\r\nexport interface TextureCaps {\r\n /** The maximum size for 2d texture */\r\n maxTextureSize: number;\r\n /** The maximum size for cube texture */\r\n maxCubeTextureSize: number;\r\n /** True if mipmapping is supported for non power of 2 textures */\r\n npo2Mipmapping: boolean;\r\n /** True if repeat address mode is supported for non power of 2 textures */\r\n npo2Repeating: boolean;\r\n /** True if device supports dxt1, dxt3, dxt5 texture format */\r\n supportS3TC: boolean;\r\n /** True if device supports bptc texture format */\r\n supportBPTC: boolean;\r\n /** True if device supports rgtc texture format */\r\n supportRGTC: boolean;\r\n /** True if device supports astc texture format */\r\n supportASTC: boolean;\r\n /** True if device supports dxt1_srgb, dxt3-srgb, dxt5-srgb texture format */\r\n supportS3TCSRGB: boolean;\r\n /** True if device supports depth texture */\r\n supportDepthTexture: boolean;\r\n /** True if device supports 3d texture */\r\n support3DTexture: boolean;\r\n /** True if device supports sRGB texture */\r\n supportSRGBTexture: boolean;\r\n /** True if device supports 32bit floating-point texture */\r\n supportFloatTexture: boolean;\r\n /** True if device supports linear filtering on 32bit floating-point textures */\r\n supportLinearFloatTexture: boolean;\r\n /** True if device supports 16bit floating-point texture */\r\n supportHalfFloatTexture: boolean;\r\n /** True if device supports linear filtering on 16bit floating-point textures */\r\n supportLinearHalfFloatTexture: boolean;\r\n /** True if device supports anisotropic filtering */\r\n supportAnisotropicFiltering: boolean;\r\n /** True if device supports rendering into a 32bit floating-point frame buffer */\r\n supportFloatColorBuffer: boolean;\r\n /** True if device supports rendering into a 16bit floating-point frame buffer */\r\n supportHalfFloatColorBuffer: boolean;\r\n /** True if device supports alpha blending with floating-point frame buffer */\r\n supportFloatBlending: boolean;\r\n /**\r\n * Get information of a given texture format\r\n * @param format - The texture format\r\n * @returns the texture format infomation\r\n */\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfo>;\r\n}\r\n\r\n/**\r\n * Creation options of rendering shader program\r\n * @public\r\n */\r\nexport interface RenderProgramConstructParams {\r\n /** The vertex shader source code */\r\n vs: string;\r\n /** The fragment shader source code */\r\n fs: string;\r\n /** Number of fragment color outputs declared by the shader */\r\n fragmentOutputCount?: number;\r\n /** Bind group layouts for the program */\r\n bindGroupLayouts: BindGroupLayout[];\r\n /** Vertex attributes used in the program */\r\n vertexAttributes: number[];\r\n}\r\n\r\n/**\r\n * Creation options of computing shader program\r\n * @public\r\n */\r\nexport interface ComputeProgramConstructParams {\r\n /** The shader source */\r\n source: string;\r\n /** Bind group layouts for the program */\r\n bindGroupLayouts: BindGroupLayout[];\r\n}\r\n\r\n/**\r\n * Creation options for shader program\r\n * @public\r\n */\r\nexport interface GPUProgramConstructParams {\r\n /** Type of the program to be created */\r\n type: 'render' | 'compute';\r\n /** Label of the program */\r\n label?: string;\r\n /** The creation options */\r\n params: RenderProgramConstructParams | ComputeProgramConstructParams;\r\n}\r\n\r\n/**\r\n * Creation options for device\r\n * @public\r\n */\r\nexport interface DeviceOptions {\r\n /** True if the device must have a MSAA back buffer */\r\n msaa?: boolean;\r\n /** The device pixel ratio */\r\n dpr?: number;\r\n}\r\n\r\n/**\r\n * The device event map\r\n * @public\r\n */\r\nexport type DeviceEventMap = {\r\n resize: [cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number];\r\n devicelost: [];\r\n devicerestored: [];\r\n gpuobject_added: [obj: GPUObject];\r\n gpuobject_removed: [obj: GPUObject];\r\n gpuobject_rename: [obj: GPUObject, lastName: string];\r\n};\r\n\r\n/**\r\n * Structure that contains the device viewport information\r\n * @public\r\n */\r\nexport type DeviceViewport = {\r\n /** viewport left */\r\n x: number;\r\n /** viewport top */\r\n y: number;\r\n /** viewport width */\r\n width: number;\r\n /** viewport height */\r\n height: number;\r\n /**\r\n * A boolean value that indicates whether this is full screen viewport\r\n * @remarks\r\n * The full screen viewport will be automatically resized when the screen size chenged\r\n */\r\n default: boolean;\r\n};\r\n\r\n/**\r\n * Horizontal alignment for text layout\r\n * @public\r\n */\r\nexport type TextHorizontalAlignment = 'left' | 'center' | 'right';\r\n\r\n/**\r\n * Vertical alignment for text layout\r\n * @public\r\n */\r\nexport type TextVerticalAlignment = 'top' | 'center' | 'bottom';\r\n\r\n/**\r\n * Layout options for drawing text inside a rectangle\r\n * @public\r\n */\r\nexport interface DrawTextLayoutOptions {\r\n /** Horizontal alignment of each line */\r\n halign?: TextHorizontalAlignment;\r\n /** Vertical alignment of the text block */\r\n valign?: TextVerticalAlignment;\r\n /** Whether to wrap text automatically to fit the rectangle width */\r\n wordWrap?: boolean;\r\n}\r\n\r\n/**\r\n * Abstract interface for the rendering device.\r\n * @public\r\n */\r\nexport interface AbstractDevice extends IEventTarget<DeviceEventMap> {\r\n /** Get pool object */\r\n pool: Pool;\r\n /** vSync */\r\n vSync: boolean;\r\n /** Check if a pool with given key exists */\r\n poolExists(key: string | symbol): boolean;\r\n /** Get the pool with given key, or create a new one if not exists */\r\n getPool(key: string | symbol): Pool;\r\n /** Get adapter information */\r\n getAdapterInfo(): any;\r\n /** Get sample count of current frame buffer */\r\n getFrameBufferSampleCount(): number;\r\n /** Returns true if device context is lost. */\r\n isContextLost(): boolean;\r\n /** Get the value of device pixel ratio in X axis */\r\n getScaleX(): number;\r\n /** Get the value of device pixel ratio in Y axis */\r\n getScaleY(): number;\r\n /** Get the width of current frame buffer */\r\n getDrawingBufferWidth(): number;\r\n /** Get the height of current frame buffer */\r\n getDrawingBufferHeight(): number;\r\n /** Get the width of back buffer */\r\n getBackBufferWidth(): number;\r\n /** Get the height of back buffer */\r\n getBackBufferHeight(): number;\r\n /** Get the device capabilities */\r\n getDeviceCaps(): Immutable<DeviceCaps>;\r\n /** Schedule next frame */\r\n nextFrame(callback: () => void): number;\r\n /** Cancel schedule next frame */\r\n cancelNextFrame(handle: number): void;\r\n /** Set font for drawText function */\r\n setFont(fontName: Nullable<string>): void;\r\n /** Set render states to be used when drawing text. If not set, default states will be used. */\r\n setTextRenderStates(states: Nullable<RenderStateSet>): void;\r\n /**\r\n * Draw a string\r\n * @param text - The string that will be drawn\r\n * @param x - x coordinate in pixels related to the viewport origin\r\n * @param y - y coordinate in pixels related to the viewport origin\r\n * @param color - A CSS color value\r\n */\r\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\r\n /**\r\n * Draw a string inside a rectangle with layout and clipping\r\n * @param text - The string that will be drawn\r\n * @param rect - Layout rectangle in pixels related to the viewport origin\r\n * @param color - A CSS color value\r\n * @param options - Text layout options\r\n */\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 /**\r\n * Clears the current frame buffer\r\n * @param clearColor - If not null, the color buffer will be cleared to this value.\r\n * @param clearDepth - If not null, the depth buffer will be cleared to this value.\r\n * @param clearStencil - If not null, the stencil buffer will be cleared to this value.\r\n */\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n /** Creates a GPU timer */\r\n createGPUTimer(): Nullable<ITimer>;\r\n /** Creates a render state set object */\r\n createRenderStateSet(): RenderStateSet;\r\n /** Creates a blending state object */\r\n createBlendingState(): BlendingState;\r\n /** Creates a color state object */\r\n createColorState(): ColorState;\r\n /** Creates a rasterizer state object */\r\n createRasterizerState(): RasterizerState;\r\n /** Creates a depth state object */\r\n createDepthState(): DepthState;\r\n /** Creates a stencil state object */\r\n createStencilState(): StencilState;\r\n /**\r\n * Creates a texture sampler object\r\n * @param options - The creation options\r\n * @returns The created texture sampler\r\n */\r\n createSampler(options: SamplerOptions): TextureSampler;\r\n /**\r\n * Creates a texture from given mipmap data\r\n * @param data - Mipmap data\r\n * @param options - Texture creation options\r\n * @returns The created texture\r\n */\r\n createTextureFromMipmapData<T extends BaseTexture = BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<T>;\r\n /**\r\n * Creates a 2d texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param options - The creation options\r\n * @returns The created 2D texture\r\n */\r\n createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n /**\r\n * Creates a 2d texture from a image element\r\n * @param element - The image element\r\n * @param options - The creation options\r\n * @returns The created 2D texture.\r\n */\r\n createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n /**\r\n * Creates a 2d array texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param depth - Array length of the texture\r\n * @param options - The creation options\r\n * @returns The created 2D array texture.\r\n */\r\n 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 /**\r\n * Creates a 2d array texture from a seris of image elements\r\n * @remarks image elements must have the same size.\r\n * @param elements - image elements\r\n * @param options - The creation options\r\n * @returns The created 2D array texture.\r\n */\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n /**\r\n * Creates a 3D texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param depth - Pixel depth of the texture\r\n * @param options - The creation options\r\n * @returns The created 3D texture.\r\n */\r\n 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 /**\r\n * Creates a cube texture\r\n * @param format - The texture format\r\n * @param size - Pixel width of the texture\r\n * @param options - The creation options\r\n * @returns The created cube texture.\r\n */\r\n createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<TextureCube>;\r\n /**\r\n * Creates a video texture from a video element\r\n * @param el - The video element\r\n * @returns The created video texture.\r\n */\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n /**\r\n * Copies a 2d texture to another texture.\r\n *\r\n * @remarks\r\n * The two textures must have the same size and format\r\n *\r\n * @param src - Texture that will be copied from.\r\n * @param srcLevel - Which mipmap level to be copied from.\r\n * @param dst - Texture that will be copied to.\r\n * @param dstLevel - Which mipmap level to be copied to.\r\n */\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\r\n /**\r\n * Copies a color attachment of a framebuffer to a mipmap level of a texture.\r\n *\r\n * @remarks\r\n * The color attachment and the mipmap level must have the same size and format\r\n *\r\n * @param src - Framebuffer that will be copied from.\r\n * @param index - Color attachment index of the framebuffer.\r\n * @param dst - Texture that will be copied to.\r\n * @param level - Which mipmap level should be copied to.\r\n */\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n /**\r\n * Set wether to reverse the winding order\r\n *\r\n * @remarks\r\n * The default winding order is counter-clockwise.\r\n *\r\n * @param reverse - true if the winding order should be reversed.\r\n */\r\n reverseVertexWindingOrder(reverse: boolean): void;\r\n /**\r\n * Check if the current winding order is reversed.\r\n */\r\n isWindingOrderReversed(): boolean;\r\n /**\r\n * Creates a gpu program\r\n * @param params - The creation options\r\n * @returns The created program.\r\n */\r\n createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n /**\r\n * Creates a bind group\r\n * @param layout - Layout of the bind group\r\n * @returns The created bind group.\r\n */\r\n createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\r\n /**\r\n * Creates a gpu buffer\r\n * @param sizeInBytes - Size of the buffer in bytes\r\n * @param options - The creation options\r\n * @returns The created buffer.\r\n */\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n /**\r\n * Copies a buffer to another buffer\r\n * @param sourceBuffer - Source buffer\r\n * @param destBuffer - destination buffer\r\n * @param srcOffset - Source offset in bytes\r\n * @param dstOffset - Destination offset in bytes\r\n * @param bytes - How many bytes to be copy\r\n */\r\n 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 /**\r\n * Creates an index buffer\r\n * @param data - Data of the index buffer\r\n * @param options - The creation options\r\n * @returns The created index buffer.\r\n */\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n /**\r\n * Creates a structured buffer\r\n * @param structureType - The structure type\r\n * @param options - The creation options\r\n * @param data - Data to be filled with\r\n * @returns The created structured buffer.\r\n */\r\n createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n /**\r\n * Creates a vertex layout object.\r\n * @param options - The creation options\r\n * @returns The created vertex layout object.\r\n */\r\n createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n /**\r\n * Creates a frame buffer\r\n * @param options - The creation options\r\n * @returns The created framebuffer.\r\n */\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n /**\r\n * Set viewport from an array that contains the position and size\r\n *\r\n * @param vp - The viewport position and size, if not specified, the viewport will be set to [0, 0, drawingBufferWidth, drawingBufferHeight]\r\n */\r\n setViewport(vp: Nullable<Immutable<DeviceViewport | number[]>>): void;\r\n /** Get current viewport as [x, y, width, height] */\r\n getViewport(): Immutable<DeviceViewport>;\r\n /**\r\n * Set scissor rectangle from an array that contains the position and size\r\n * @param scissor - The scissor rectangle position and size, if not specified, the scissor rectangle will be set to [0, 0, drawingBufferWidth,drawingBufferHeight]\r\n */\r\n setScissor(scissor: Nullable<Immutable<DeviceViewport | number[]>>): void;\r\n /**\r\n * Get current scissor rectangle\r\n */\r\n getScissor(): Immutable<DeviceViewport>;\r\n /**\r\n * Set current GPU program\r\n * @param program - The GPU program to be set\r\n */\r\n setProgram(program: Nullable<GPUProgram>): void;\r\n /**\r\n * Get current GPU program\r\n */\r\n getProgram(): Nullable<GPUProgram>;\r\n /**\r\n * Set current vertex layout\r\n *\r\n * @param vertexData - The vertex layout to be set\r\n */\r\n setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n /** Get current vertex layout */\r\n getVertexLayout(): Nullable<VertexLayout>;\r\n /**\r\n * Set current render states\r\n *\r\n * @param renderStates - The render state set\r\n */\r\n setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n /** Get current render states */\r\n getRenderStates(): Nullable<RenderStateSet>;\r\n /**\r\n * Sets the current framebuffer to the specified FrameBuffer object.\r\n *\r\n * @param rt - The FrameBuffer object to set as the current framebuffer.\r\n */\r\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\r\n /**\r\n * Sets the current framebuffer specifying complex color attachments, an optional depth attachment, MIP level, face, and sample count.\r\n *\r\n * @param color - An array of BaseTextures or objects containing a BaseTexture and optional properties. Each BaseTexture or object will serve as a color attachment.\r\n * - If an object is provided, it can specify:\r\n * - `texture`: The BaseTexture to use.\r\n * - `miplevel`: Optional MIP level for this specific texture. default is 0.\r\n * - `face`: Optional face index for cube map textures, specifying the cube face this texture is attached to. default is 0.\r\n * - `layer`: Optional layer index, useful for texture arrays. default is 0.\r\n * @param depth - Optional BaseTexture to serve as the depth attachment.\r\n * @param sampleCount - Optional sample count defining the number of samples for multisampling.\r\n */\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 ): void;\r\n /** Get current frame buffer */\r\n getFramebuffer(): Nullable<FrameBuffer>;\r\n /**\r\n * Set current bind group\r\n *\r\n * @param index - index of the bind group\r\n * @param bindGroup - The bind group to be set\r\n * @param dynamicOffsets - dynamic uniform buffer offsets of the bind group or null\r\n */\r\n setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>): void;\r\n /**\r\n * Get current bind group\r\n * @param index - index of the bind group to get\r\n */\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n /** Flush the gpu command buffer */\r\n flush(): void;\r\n /**\r\n * Read pixel values from current frame buffer\r\n *\r\n * @remarks\r\n * This method reads the data asynchronously to prevent GPU stall.\r\n * For WebGL1 devices, the GPU stall is still inevitable.\r\n *\r\n * @param index - color attachment index\r\n * @param x - x position of the reading area\r\n * @param y - y position of the reading area\r\n * @param w - width of the reading area\r\n * @param h - height of the reading area\r\n * @param buffer - The output buffer\r\n */\r\n readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray): Promise<void>;\r\n /**\r\n * Read pixel values from current frame buffer to a GPU buffer\r\n *\r\n * @remarks\r\n * This method does not support WebGL1 device\r\n *\r\n * @param index - color attachment index\r\n * @param x - x position of the reading area\r\n * @param y - y position of the reading area\r\n * @param w - width of the reading area\r\n * @param h - height of the reading area\r\n * @param buffer - The output buffer\r\n */\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer): void;\r\n /**\r\n * Begin capture draw commands\r\n */\r\n beginCapture(): void;\r\n /**\r\n * Executes render bundle\r\n * @param renderBundle - RenderBundle to be execute\r\n */\r\n executeRenderBundle(renderBundle: RenderBundle): void;\r\n /**\r\n * End capture draw commands\r\n * @returns A RenderBundle that holds the captured draw commands\r\n */\r\n endCapture(): RenderBundle;\r\n /** Get the video memory usage in bytes */\r\n videoMemoryUsage: number;\r\n /** Get the current frame information */\r\n frameInfo: FrameInfo;\r\n /** Check if the device is running a rendering loop by calling {@link AbstractDevice.runLoop} */\r\n isRendering: boolean;\r\n /** Get the canvas element for this device */\r\n canvas: HTMLCanvasElement;\r\n /** Get the device type */\r\n type: string;\r\n /** Get the program builder */\r\n programBuilder: ProgramBuilder;\r\n /** Get the run loop callback function */\r\n runLoopFunction: Nullable<(device: AbstractDevice) => void>;\r\n /**\r\n * Begins a frame for rendering\r\n *\r\n * @remarks\r\n * All rendering call must occur between the @see AbstractDevice.beginFrame and @see AbstractDevice.endFrame methods\r\n */\r\n beginFrame(): boolean;\r\n /**\r\n * Ends a frame for rendering\r\n *\r\n * @remarks\r\n * All rendering call must occur between the @see AbstractDevice.beginFrame and @see AbstractDevice.endFrame methods\r\n */\r\n endFrame(): void;\r\n /**\r\n * Get the vertex attribute format from vertex semantic and data type\r\n *\r\n * @param semantic - The vertex semantic\r\n * @param dataType - The data type\r\n * @param componentCount - The component count\r\n */\r\n getVertexAttribFormat(\r\n semantic: VertexSemantic,\r\n dataType: DataType,\r\n componentCount: number\r\n ): Nullable<VertexAttribFormat>;\r\n /**\r\n * Creates an interleaved vertex buffer\r\n *\r\n * @param attribFormats - The vertex attribute formats for each vertex stream in the vertex buffer\r\n * @param data - Data to be filled with\r\n * @param options - The creation options\r\n * @returns The created vertex buffer.\r\n */\r\n createInterleavedVertexBuffer(\r\n attribFormats: VertexAttribFormat[],\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): Nullable<StructuredBuffer>;\r\n /**\r\n * Creates a non-interleaved vertex buffer\r\n *\r\n * @param attribFormat - The vertex attribute format\r\n * @param data - Data to be filled with\r\n * @param options - The creation options\r\n * @returns The created vertex buffer\r\n */\r\n createVertexBuffer(\r\n attribFormat: VertexAttribFormat,\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): Nullable<StructuredBuffer>;\r\n /**\r\n * Draw primitives\r\n *\r\n * @param primitiveType - The primitive type\r\n * @param first - The vertex offset (or index offset if an index buffer exists)\r\n * @param count - The vertex count (or index count if an index buffer exists) to be drawn\r\n */\r\n draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n /**\r\n * Draw multiple instances of primitives\r\n *\r\n * @param primitiveType - The primitive type\r\n * @param first - The vertex offset (or index offset if an index buffer exists)\r\n * @param count - The vertex count (or index count if an index buffer exists) to be drawn\r\n * @param numInstances - How many instances to be drawn\r\n */\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): void;\r\n /**\r\n * Dispatches a compute task to the GPU\r\n *\r\n * @param workgroupCountX - X dimension of the grid of workgroups to be dispatch\r\n * @param workgroupCountY - Y dimension of the grid of workgroups to be dispatch\r\n * @param workgroupCountZ - Z dimension of the grid of workgroups to be dispatch\r\n */\r\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number): void;\r\n /**\r\n * Schedules a function to be executed at the beginning of the next frame\r\n *\r\n * @param f - The function to be scheduled\r\n */\r\n runNextFrame(f: () => void): void;\r\n /**\r\n * Asyncronized version of scheduling a function to be executed at the beginning of the next frame\r\n *\r\n * @param f - The function to be scheduled\r\n */\r\n runNextFrameAsync(f: () => void): Promise<void>;\r\n /** Exits from current rendering loop */\r\n exitLoop(): void;\r\n /**\r\n * Begins a rendering loop\r\n *\r\n * @param func - The function to be executed at every frame\r\n */\r\n runLoop(func: (device: AbstractDevice) => void): void;\r\n /** Get all GPU objects */\r\n getGPUObjects(): GPUObjectList;\r\n /**\r\n * Get GPU object by id\r\n *\r\n * @param uid - id of the GPU object\r\n */\r\n getGPUObjectById(uid: number): Nullable<GPUObject>;\r\n /**\r\n * Calculates the actual position of current frame buffer from screen position in X axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.\r\n *\r\n * @param val - The screen position in pixels\r\n */\r\n screenXToDevice(val: number): number;\r\n /**\r\n * Calculates the screen position from position of current frame buffer in X axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.\r\n *\r\n * @param val - The position of current frame buffer in pixels\r\n */\r\n deviceXToScreen(val: number): number;\r\n /**\r\n * Calculates the actual position of current frame buffer from screen position in Y axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.\r\n *\r\n * @param val - The screen position in pixels\r\n */\r\n screenYToDevice(val: number): number;\r\n /**\r\n * Calculates the screen position from position of current frame buffer in Y axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.\r\n *\r\n * @param val - The position of current frame buffer in pixels\r\n */\r\n deviceYToScreen(val: number): number;\r\n /** Builds render program */\r\n buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram>;\r\n /** Builds compute program */\r\n buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram>;\r\n /** Pushes current FrameBuffer state */\r\n pushDeviceStates(): void;\r\n /** Pops last FrameBuffer state */\r\n popDeviceStates(): void;\r\n}\r\n"],"names":["RED_SHIFT","GREEN_SHIFT","BLUE_SHIFT","ALPHA_SHIFT","DEPTH_SHIFT","STENCIL_SHIFT","FLOAT_SHIFT","INTEGER_SHIFT","SIGNED_SHIFT","SRGB_SHIFT","BGR_SHIFT","BLOCK_SIZE_SHIFT","BLOCK_SIZE_MASK","BLOCK_WIDTH_SHIFT","BLOCK_WIDTH_MASK","BLOCK_HEIGHT_SHIFT","BLOCK_HEIGHT_MASK","COMPRESSED_FORMAT_SHIFT","COMPRESSION_FORMAT_BC1","COMPRESSION_FORMAT_BC2","COMPRESSION_FORMAT_BC3","COMPRESSION_FORMAT_BC4","COMPRESSION_FORMAT_BC5","COMPRESSION_FORMAT_BC6H","COMPRESSION_FORMAT_BC7","COMPRESSION_FORMAT_ASTC","COMPRESSION_FORMAT_BITMASK","RED_BITMASK","GREEN_BITMASK","BLUE_BITMASK","ALPHA_BITMASK","DEPTH_BITMASK","STENCIL_BITMASK","FLOAT_BITMASK","INTEGER_BITMASK","SIGNED_BITMASK","SRGB_BITMASK","BGR_BITMASK","makeTextureFormat","compression","r","g","b","a","depth","stencil","float","integer","signed","srgb","bgr","blockWidth","blockHeight","blockSize","compressionBits","colorBits","depthStencilBits","floatBits","integerBits","signedBits","srgbBits","bgrBits","blockBits","textureFormatMap","r8unorm","r8snorm","r16f","r32f","r8ui","r8i","r16ui","r16i","r32ui","r32i","rg8unorm","rg8snorm","rg16f","rg32f","rg8ui","rg8i","rg16ui","rg16i","rg32ui","rg32i","rgba8unorm","rgba8snorm","bgra8unorm","rgba16f","rgba32f","rgba8ui","rgba8i","rgba16ui","rgba16i","rgba32ui","rgba32i","rg11b10uf","d16","d24","d32f","d24s8","d32fs8","dxt1","dxt3","dxt5","bc4","bc5","bc6h","bc7","linearTextureFormatToSRGB","format","hasAlphaChannel","hasRedChannel","hasGreenChannel","hasBlueChannel","hasDepthChannel","hasStencilChannel","isFloatTextureFormat","isIntegerTextureFormat","isSignedTextureFormat","isCompressedTextureFormat","isSRGBTextureFormat","getTextureFormatBlockSize","getTextureFormatBlockWidth","getTextureFormatBlockHeight","normalizeColorComponent","val","maxval","Math","min","max","floor","normalizeColorComponentSigned","encodePixel","Uint8Array","Int8Array","Uint16Array","float2half","Float32Array","Int16Array","Uint32Array","Int32Array","Error","encodePixelToArray","arr","push","ShaderType"],"mappings":"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"}
1
+ {"version":3,"file":"base_types.js","sources":["../src/base_types.ts"],"sourcesContent":["import type { TypedArray, Vector4, IEventTarget, Nullable, Immutable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { float2half } from '@zephyr3d/base';\r\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo, ProgramBuilder } from './builder';\r\nimport type {\r\n BaseTexture,\r\n BindGroup,\r\n BindGroupLayout,\r\n BufferCreationOptions,\r\n FrameBuffer,\r\n FrameBufferOptions,\r\n GPUDataBuffer,\r\n GPUObject,\r\n GPUProgram,\r\n IndexBuffer,\r\n RenderBundle,\r\n SamplerOptions,\r\n StructuredBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCreationOptions,\r\n TextureCube,\r\n TextureImageElement,\r\n TextureMipmapData,\r\n TextureSampler,\r\n TextureVideo,\r\n VertexAttribFormat,\r\n VertexLayout,\r\n VertexLayoutOptions,\r\n VertexSemantic\r\n} from './gpuobject';\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 { Pool } from './pool';\r\nimport type { ITimer } from './timer';\r\n\r\n/**\r\n * The webgl context type\r\n * @public\r\n */\r\nexport type WebGLContext = WebGLRenderingContext | WebGL2RenderingContext;\r\n\r\n/**\r\n * The texture type\r\n * @public\r\n */\r\nexport type TextureType = '2d' | '3d' | 'cube' | '2darray';\r\n\r\n/**\r\n * The comparison function type\r\n * @public\r\n */\r\nexport type CompareFunc = 'always' | 'le' | 'ge' | 'lt' | 'gt' | 'eq' | 'ne' | 'never';\r\n\r\n/**\r\n * The texture address mode\r\n * @public\r\n */\r\nexport type TextureAddressMode = 'repeat' | 'mirrored-repeat' | 'clamp';\r\n\r\n/**\r\n * The texture filter mode\r\n * @public\r\n */\r\nexport type TextureFilterMode = 'none' | 'nearest' | 'linear';\r\n\r\n/**\r\n * Scalar data type\r\n * @public\r\n */\r\nexport type DataType =\r\n | 'u8'\r\n | 'u8norm'\r\n | 'i8'\r\n | 'i8norm'\r\n | 'u16'\r\n | 'u16norm'\r\n | 'i16'\r\n | 'i16norm'\r\n | 'u32'\r\n | 'i32'\r\n | 'f16'\r\n | 'f32';\r\n\r\nconst RED_SHIFT = 0;\r\nconst GREEN_SHIFT = 1;\r\nconst BLUE_SHIFT = 2;\r\nconst ALPHA_SHIFT = 3;\r\nconst DEPTH_SHIFT = 4;\r\nconst STENCIL_SHIFT = 5;\r\nconst FLOAT_SHIFT = 6;\r\nconst INTEGER_SHIFT = 7;\r\nconst SIGNED_SHIFT = 8;\r\nconst SRGB_SHIFT = 9;\r\nconst BGR_SHIFT = 10;\r\nconst BLOCK_SIZE_SHIFT = 11;\r\nconst BLOCK_SIZE_MASK = 0x1f << BLOCK_SIZE_SHIFT;\r\nconst BLOCK_WIDTH_SHIFT = 16;\r\nconst BLOCK_WIDTH_MASK = 0xf << BLOCK_WIDTH_SHIFT;\r\nconst BLOCK_HEIGHT_SHIFT = 20;\r\nconst BLOCK_HEIGHT_MASK = 0xf << BLOCK_HEIGHT_SHIFT;\r\nconst COMPRESSED_FORMAT_SHIFT = 24;\r\n\r\nconst COMPRESSION_FORMAT_BC1 = 1 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC2 = 2 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC3 = 3 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC4 = 4 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC5 = 5 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC6H = 6 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_BC7 = 7 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC = 8 << COMPRESSED_FORMAT_SHIFT;\r\n/*\r\nconst COMPRESSION_FORMAT_ETC2_RGB8 = 8 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ETC2_RGB8_A1 = 9 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ETC2_RGBA8 = 10 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_4x4 = 11 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_5x4 = 12 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_5x5 = 13 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_6x5 = 14 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_6x6 = 15 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x5 = 16 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x6 = 17 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_8x8 = 18 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x5 = 19 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x6 = 20 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x8 = 21 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_10x10 = 22 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_12x10 = 23 << COMPRESSED_FORMAT_SHIFT;\r\nconst COMPRESSION_FORMAT_ASTC_12x12 = 24 << COMPRESSED_FORMAT_SHIFT;\r\n*/\r\nconst COMPRESSION_FORMAT_BITMASK = 0x1f << COMPRESSED_FORMAT_SHIFT;\r\nconst RED_BITMASK = 1 << RED_SHIFT;\r\nconst GREEN_BITMASK = 1 << GREEN_SHIFT;\r\nconst BLUE_BITMASK = 1 << BLUE_SHIFT;\r\nconst ALPHA_BITMASK = 1 << ALPHA_SHIFT;\r\nconst DEPTH_BITMASK = 1 << DEPTH_SHIFT;\r\nconst STENCIL_BITMASK = 1 << STENCIL_SHIFT;\r\nconst FLOAT_BITMASK = 1 << FLOAT_SHIFT;\r\nconst INTEGER_BITMASK = 1 << INTEGER_SHIFT;\r\nconst SIGNED_BITMASK = 1 << SIGNED_SHIFT;\r\nconst SRGB_BITMASK = 1 << SRGB_SHIFT;\r\nconst BGR_BITMASK = 1 << BGR_SHIFT;\r\n\r\nfunction makeTextureFormat(\r\n compression: number,\r\n r: boolean,\r\n g: boolean,\r\n b: boolean,\r\n a: boolean,\r\n depth: boolean,\r\n stencil: boolean,\r\n float: boolean,\r\n integer: boolean,\r\n signed: boolean,\r\n srgb: boolean,\r\n bgr: boolean,\r\n blockWidth: number,\r\n blockHeight: number,\r\n blockSize: number\r\n) {\r\n const compressionBits = compression;\r\n const colorBits =\r\n (r ? RED_BITMASK : 0) | (g ? GREEN_BITMASK : 0) | (b ? BLUE_BITMASK : 0) | (a ? ALPHA_BITMASK : 0);\r\n const depthStencilBits = (depth ? DEPTH_BITMASK : 0) | (stencil ? STENCIL_BITMASK : 0);\r\n const floatBits = float ? FLOAT_BITMASK : 0;\r\n const integerBits = integer ? INTEGER_BITMASK : 0;\r\n const signedBits = signed ? SIGNED_BITMASK : 0;\r\n const srgbBits = srgb ? SRGB_BITMASK : 0;\r\n const bgrBits = bgr ? BGR_BITMASK : 0;\r\n const blockBits =\r\n (blockWidth << BLOCK_WIDTH_SHIFT) | (blockHeight << BLOCK_HEIGHT_SHIFT) | (blockSize << BLOCK_SIZE_SHIFT);\r\n return (\r\n compressionBits |\r\n colorBits |\r\n depthStencilBits |\r\n floatBits |\r\n integerBits |\r\n signedBits |\r\n srgbBits |\r\n bgrBits |\r\n blockBits\r\n );\r\n}\r\n\r\n/**\r\n * Texture format type\r\n * @public\r\n */\r\nexport type TextureFormat =\r\n | 'r8unorm'\r\n | 'r8snorm'\r\n | 'r16f'\r\n | 'r32f'\r\n | 'r8ui'\r\n | 'r8i'\r\n | 'r16ui'\r\n | 'r16i'\r\n | 'r32ui'\r\n | 'r32i'\r\n | 'rg8unorm'\r\n | 'rg8snorm'\r\n | 'rg16f'\r\n | 'rg32f'\r\n | 'rg8ui'\r\n | 'rg8i'\r\n | 'rg16ui'\r\n | 'rg16i'\r\n | 'rg32ui'\r\n | 'rg32i'\r\n | 'rgba8unorm'\r\n | 'rgba8unorm-srgb'\r\n | 'rgba8snorm'\r\n | 'bgra8unorm'\r\n | 'bgra8unorm-srgb'\r\n | 'rgba16f'\r\n | 'rgba32f'\r\n | 'rgba8ui'\r\n | 'rgba8i'\r\n | 'rgba16ui'\r\n | 'rgba16i'\r\n | 'rgba32ui'\r\n | 'rgba32i'\r\n | 'rg11b10uf'\r\n | 'd16'\r\n | 'd24'\r\n | 'd32f'\r\n | 'd24s8'\r\n | 'd32fs8'\r\n | 'dxt1'\r\n | 'dxt1-srgb'\r\n | 'dxt3'\r\n | 'dxt3-srgb'\r\n | 'dxt5'\r\n | 'dxt5-srgb'\r\n | 'bc4'\r\n | 'bc4-signed'\r\n | 'bc5'\r\n | 'bc5-signed'\r\n | 'bc7'\r\n | 'bc7-srgb'\r\n | 'bc6h'\r\n | 'bc6h-signed'\r\n | 'astc-4x4'\r\n | 'astc-4x4-srgb'\r\n | 'astc-5x4'\r\n | 'astc-5x4-srgb'\r\n | 'astc-5x5'\r\n | 'astc-5x5-srgb'\r\n | 'astc-6x5'\r\n | 'astc-6x5-srgb'\r\n | 'astc-6x6'\r\n | 'astc-6x6-srgb'\r\n | 'astc-8x5'\r\n | 'astc-8x5-srgb'\r\n | 'astc-8x6'\r\n | 'astc-8x6-srgb'\r\n | 'astc-8x8'\r\n | 'astc-8x8-srgb'\r\n | 'astc-10x5'\r\n | 'astc-10x5-srgb'\r\n | 'astc-10x6'\r\n | 'astc-10x6-srgb'\r\n | 'astc-10x8'\r\n | 'astc-10x8-srgb'\r\n | 'astc-10x10'\r\n | 'astc-10x10-srgb'\r\n | 'astc-12x10'\r\n | 'astc-12x10-srgb'\r\n | 'astc-12x12'\r\n | 'astc-12x12-srgb';\r\n\r\nconst textureFormatMap: Record<TextureFormat, number> = {\r\n r8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r16f: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r32f: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n r8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r8i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 1\r\n ),\r\n r16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r16i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n r32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n r32i: makeTextureFormat(\r\n 0,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg16f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg32f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rg8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg8i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n rg16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg16i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rg32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rg32i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n 'rgba8unorm-srgb': makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba8snorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n bgra8unorm: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n 'bgra8unorm-srgb': makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba16f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba32f: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rgba8ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba8i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n rgba16ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba16i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 8\r\n ),\r\n rgba32ui: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rgba32i: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 16\r\n ),\r\n rg11b10uf: makeTextureFormat(\r\n 0,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d16: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 2\r\n ),\r\n d24: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 0,\r\n 0,\r\n 0\r\n ),\r\n d32f: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d24s8: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 4\r\n ),\r\n d32fs8: makeTextureFormat(\r\n 0,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n true,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 1,\r\n 1,\r\n 5\r\n ),\r\n // compressed texture formats\r\n dxt1: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC1,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n 'dxt1-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC1,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n dxt3: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC2,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'dxt3-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC2,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n dxt5: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC3,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'dxt5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC3,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc4: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC4,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n 'bc4-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC4,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 8\r\n ),\r\n bc5: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC5,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc5-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC5,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc6h: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC6H,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc6h-signed': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC6H,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n true,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n bc7: makeTextureFormat(\r\n COMPRESSION_FORMAT_BC7,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'bc7-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_BC7,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-4x4': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-4x4-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 4,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x4': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 5,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x4-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 5,\r\n 4,\r\n 16\r\n ),\r\n 'astc-5x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 5,\r\n 5,\r\n 16\r\n ),\r\n 'astc-5x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 5,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 6,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 6,\r\n 5,\r\n 16\r\n ),\r\n 'astc-6x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 6,\r\n 6,\r\n 16\r\n ),\r\n 'astc-6x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 6,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 5,\r\n 16\r\n ),\r\n 'astc-8x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 5,\r\n 16\r\n ),\r\n 'astc-8x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 6,\r\n 16\r\n ),\r\n 'astc-8x8': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 8,\r\n 8,\r\n 16\r\n ),\r\n 'astc-8x8-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 8,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x5': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 5,\r\n 16\r\n ),\r\n 'astc-10x5-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 5,\r\n 16\r\n ),\r\n 'astc-10x6': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 6,\r\n 16\r\n ),\r\n 'astc-10x6-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 6,\r\n 16\r\n ),\r\n 'astc-10x8': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x8-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 8,\r\n 16\r\n ),\r\n 'astc-10x10': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 10,\r\n 10,\r\n 16\r\n ),\r\n 'astc-10x10-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 10,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x10': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 12,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x10-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 12,\r\n 10,\r\n 16\r\n ),\r\n 'astc-12x12': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n 12,\r\n 12,\r\n 16\r\n ),\r\n 'astc-12x12-srgb': makeTextureFormat(\r\n COMPRESSION_FORMAT_ASTC,\r\n true,\r\n true,\r\n true,\r\n true,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n true,\r\n false,\r\n 12,\r\n 12,\r\n 16\r\n )\r\n};\r\n\r\n/**\r\n * Converts a non-sRGB texture format to the corresponding sRGB texture format\r\n * @param format - The texture format to be converted\r\n * @returns The sRGB texture format\r\n * @public\r\n */\r\nexport function linearTextureFormatToSRGB(format: TextureFormat) {\r\n switch (format) {\r\n case 'rgba8unorm':\r\n return 'rgba8unorm-srgb';\r\n case 'bgra8unorm':\r\n return 'bgra8unorm-srgb';\r\n case 'dxt1':\r\n return 'dxt1-srgb';\r\n case 'dxt3':\r\n return 'dxt3-srgb';\r\n case 'dxt5':\r\n return 'dxt5-srgb';\r\n case 'bc7':\r\n return 'bc7-srgb';\r\n case 'astc-4x4':\r\n return 'astc-4x4-srgb';\r\n case 'astc-5x4':\r\n return 'astc-5x4-srgb';\r\n case 'astc-5x5':\r\n return 'astc-5x5-srgb';\r\n case 'astc-6x5':\r\n return 'astc-6x5-srgb';\r\n case 'astc-6x6':\r\n return 'astc-6x6-srgb';\r\n case 'astc-8x5':\r\n return 'astc-8x5-srgb';\r\n case 'astc-8x6':\r\n return 'astc-8x6-srgb';\r\n case 'astc-8x8':\r\n return 'astc-8x8-srgb';\r\n case 'astc-10x5':\r\n return 'astc-10x5-srgb';\r\n case 'astc-10x6':\r\n return 'astc-10x6-srgb';\r\n case 'astc-10x8':\r\n return 'astc-10x8-srgb';\r\n case 'astc-10x10':\r\n return 'astc-10x10-srgb';\r\n case 'astc-12x10':\r\n return 'astc-12x10-srgb';\r\n case 'astc-12x12':\r\n return 'astc-12x12-srgb';\r\n default:\r\n return format;\r\n }\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains an alpha channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains an alpha channel, otherwise false\r\n * @public\r\n */\r\nexport function hasAlphaChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & ALPHA_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a red channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a red channel, otherwise false\r\n * @public\r\n */\r\nexport function hasRedChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & RED_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a green channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a green channel, otherwise false\r\n * @public\r\n */\r\nexport function hasGreenChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & GREEN_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a blue channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a blue channel, otherwise false\r\n * @public\r\n */\r\nexport function hasBlueChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & BLUE_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a depth channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a depth channel, otherwise false\r\n * @public\r\n */\r\nexport function hasDepthChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & DEPTH_BITMASK);\r\n}\r\n\r\n/**\r\n * Check if a given texture format contains a stencil channel.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format contains a stencil channel, otherwise false\r\n * @public\r\n */\r\nexport function hasStencilChannel(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & STENCIL_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is floating-point.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is floating-point, otherwise false\r\n * @public\r\n */\r\nexport function isFloatTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & FLOAT_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is integer.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is integer, otherwise false\r\n * @public\r\n */\r\nexport function isIntegerTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & INTEGER_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is signed.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is signed, otherwise false\r\n * @public\r\n */\r\nexport function isSignedTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & SIGNED_BITMASK);\r\n}\r\n\r\n/**\r\n * Check whether a given texture format is a compressed format.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is a compressed format, otherwise false\r\n * @public\r\n */\r\nexport function isCompressedTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & COMPRESSION_FORMAT_BITMASK);\r\n}\r\n/**\r\n * Check whether a given texture format is sRGB format.\r\n * @param format - The texture format to be checked.\r\n * @returns true if the texture format is sRGB format, otherwise false\r\n * @public\r\n */\r\nexport function isSRGBTextureFormat(format: TextureFormat) {\r\n return !!(textureFormatMap[format] & SRGB_BITMASK);\r\n}\r\n\r\n/**\r\n * Get block size of given texture format\r\n * @param format - The texture format\r\n * @returns The block size\r\n * @public\r\n */\r\nexport function getTextureFormatBlockSize(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_SIZE_MASK) >> BLOCK_SIZE_SHIFT;\r\n}\r\n\r\n/**\r\n * Get block width of given texture format\r\n * @param format - The texture format\r\n * @returns The block width\r\n * @public\r\n */\r\nexport function getTextureFormatBlockWidth(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_WIDTH_MASK) >> BLOCK_WIDTH_SHIFT;\r\n}\r\n\r\n/**\r\n * Get block height of given texture format\r\n * @param format - The texture format\r\n * @returns The block height\r\n * @public\r\n */\r\nexport function getTextureFormatBlockHeight(format: TextureFormat) {\r\n return (textureFormatMap[format] & BLOCK_HEIGHT_MASK) >> BLOCK_HEIGHT_SHIFT;\r\n}\r\n\r\nfunction normalizeColorComponent(val: number, maxval: number) {\r\n return Math.min(maxval, Math.max(Math.floor(val * maxval), 0));\r\n}\r\n\r\nfunction normalizeColorComponentSigned(val: number, maxval: number) {\r\n return normalizeColorComponent(val * 0.5 + 0.5, maxval) - (maxval + 1) / 2;\r\n}\r\n\r\n/** @internal */\r\nexport function encodePixel(format: TextureFormat, r: number, g: number, b: number, a: number) {\r\n switch (format) {\r\n case 'r8unorm':\r\n return new Uint8Array([normalizeColorComponent(r, 255)]);\r\n case 'r8snorm':\r\n return new Int8Array([normalizeColorComponentSigned(r, 255)]);\r\n case 'r16f':\r\n return new Uint16Array([float2half(r)]);\r\n case 'r32f':\r\n return new Float32Array([r]);\r\n case 'r8ui':\r\n return new Uint8Array([r | 0]);\r\n case 'r8i':\r\n return new Int8Array([r | 0]);\r\n case 'r16ui':\r\n return new Uint16Array([r | 0]);\r\n case 'r16i':\r\n return new Int16Array([r | 0]);\r\n case 'r32ui':\r\n return new Uint32Array([r | 0]);\r\n case 'r32i':\r\n return new Int32Array([r | 0]);\r\n case 'rg8unorm':\r\n return new Uint8Array([normalizeColorComponent(r, 255), normalizeColorComponent(g, 255)]);\r\n case 'rg8snorm':\r\n return new Int8Array([normalizeColorComponentSigned(r, 255), normalizeColorComponentSigned(g, 255)]);\r\n case 'rg16f':\r\n return new Uint16Array([float2half(r), float2half(g)]);\r\n case 'rg32f':\r\n return new Float32Array([r, g]);\r\n case 'rg8ui':\r\n return new Uint8Array([r | 0, g | 0]);\r\n case 'rg8i':\r\n return new Int8Array([r | 0, g | 0]);\r\n case 'rg16ui':\r\n return new Uint16Array([r | 0, g | 0]);\r\n case 'rg16i':\r\n return new Int16Array([r | 0, g | 0]);\r\n case 'rg32ui':\r\n return new Uint32Array([r | 0, g | 0]);\r\n case 'rg32i':\r\n return new Int32Array([r | 0, g | 0]);\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n return new Uint8Array([\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(a, 255)\r\n ]);\r\n case 'bgra8unorm':\r\n case 'bgra8unorm-srgb':\r\n return new Uint8Array([\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(a, 255)\r\n ]);\r\n case 'rgba8snorm':\r\n return new Int8Array([\r\n normalizeColorComponentSigned(r, 255),\r\n normalizeColorComponentSigned(g, 255),\r\n normalizeColorComponentSigned(b, 255),\r\n normalizeColorComponentSigned(a, 255)\r\n ]);\r\n case 'rgba16f':\r\n return new Uint16Array([float2half(r), float2half(g), float2half(b), float2half(a)]);\r\n case 'rgba32f':\r\n return new Float32Array([r, g, b, a]);\r\n case 'rgba8ui':\r\n return new Uint8Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba8i':\r\n return new Int8Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba16ui':\r\n return new Uint16Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba16i':\r\n return new Int16Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba32ui':\r\n return new Uint32Array([r | 0, g | 0, b | 0, a | 0]);\r\n case 'rgba32i':\r\n return new Int32Array([r | 0, g | 0, b | 0, a | 0]);\r\n default:\r\n throw new Error(`Invalid texture format: ${format}`);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function encodePixelToArray(\r\n format: TextureFormat,\r\n r: number,\r\n g: number,\r\n b: number,\r\n a: number,\r\n arr: Array<number>\r\n) {\r\n switch (format) {\r\n case 'r8unorm':\r\n arr.push(normalizeColorComponent(r, 255));\r\n break;\r\n case 'r8snorm':\r\n arr.push(normalizeColorComponentSigned(r, 255));\r\n break;\r\n case 'r16f':\r\n arr.push(float2half(r));\r\n break;\r\n case 'r32f':\r\n arr.push(r);\r\n break;\r\n case 'r8ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r8i':\r\n arr.push(r | 0);\r\n break;\r\n case 'r16ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r16i':\r\n arr.push(r | 0);\r\n break;\r\n case 'r32ui':\r\n arr.push(r | 0);\r\n break;\r\n case 'r32i':\r\n arr.push(r | 0);\r\n break;\r\n case 'rg8unorm':\r\n arr.push(normalizeColorComponent(r, 255), normalizeColorComponent(g, 255));\r\n break;\r\n case 'rg8snorm':\r\n arr.push(normalizeColorComponentSigned(r, 255), normalizeColorComponentSigned(g, 255));\r\n break;\r\n case 'rg16f':\r\n arr.push(float2half(r), float2half(g));\r\n break;\r\n case 'rg32f':\r\n arr.push(r, g);\r\n break;\r\n case 'rg8ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg8i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg16ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg16i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg32ui':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rg32i':\r\n arr.push(r | 0, g | 0);\r\n break;\r\n case 'rgba8unorm':\r\n case 'rgba8unorm-srgb':\r\n arr.push(\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(a, 255)\r\n );\r\n break;\r\n case 'bgra8unorm':\r\n case 'bgra8unorm-srgb':\r\n arr.push(\r\n normalizeColorComponent(b, 255),\r\n normalizeColorComponent(g, 255),\r\n normalizeColorComponent(r, 255),\r\n normalizeColorComponent(a, 255)\r\n );\r\n break;\r\n case 'rgba8snorm':\r\n arr.push(\r\n normalizeColorComponentSigned(r, 255),\r\n normalizeColorComponentSigned(g, 255),\r\n normalizeColorComponentSigned(b, 255),\r\n normalizeColorComponentSigned(a, 255)\r\n );\r\n break;\r\n case 'rgba16f':\r\n arr.push(float2half(r), float2half(g), float2half(b), float2half(a));\r\n break;\r\n case 'rgba32f':\r\n arr.push(r, g, b, a);\r\n break;\r\n case 'rgba8ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba8i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba16ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba16i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba32ui':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n case 'rgba32i':\r\n arr.push(r | 0, g | 0, b | 0, a | 0);\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * The primitive type\r\n * @public\r\n */\r\nexport type PrimitiveType =\r\n | 'triangle-list'\r\n | 'triangle-strip'\r\n | 'triangle-fan'\r\n | 'line-list'\r\n | 'line-strip'\r\n | 'point-list';\r\n\r\n/**\r\n * Shader type\r\n * @public\r\n */\r\nexport enum ShaderType {\r\n Vertex = 1 << 0,\r\n Fragment = 1 << 1,\r\n Compute = 1 << 2\r\n}\r\n\r\n/**\r\n * Shader kind\r\n * @public\r\n */\r\nexport type ShaderKind = 'vertex' | 'fragment' | 'compute';\r\n\r\n/**\r\n * Frame information\r\n * @public\r\n */\r\nexport interface FrameInfo {\r\n /** counter of frames */\r\n frameCounter: number;\r\n /** timestamp of current frame, in milliseconds */\r\n frameTimestamp: number;\r\n /** time spent by the CPU from last frame, in milliseconds */\r\n elapsedTimeCPU: number;\r\n /** time spent by the GPU from last frame, in milliseconds */\r\n elapsedTimeGPU: number;\r\n /** time spent from last frame, in milliseconds */\r\n elapsedFrame: number;\r\n /** time spent from the first frame, in milliseconds */\r\n elapsedOverall: number;\r\n /** the FPS calculated for the last one second */\r\n FPS: number;\r\n /** How many draw calls were sent to the GPU in current frame */\r\n drawCalls: number;\r\n /** How many compute calls were sent to the GPU in current frame */\r\n computeCalls: number;\r\n /** @internal */\r\n nextFrameCall: (() => void)[];\r\n /** @internal */\r\n nextFrameCallNext: (() => void)[];\r\n}\r\n\r\n/**\r\n * Timestamp query result status.\r\n * @public\r\n */\r\nexport type TimestampQueryStatus =\r\n | 'pending'\r\n | 'resolved'\r\n | 'unsupported'\r\n | 'invalid'\r\n | 'auto-closed'\r\n | 'exhausted'\r\n | 'failed';\r\n\r\n/**\r\n * Options for a GPU timestamp query scope.\r\n * @public\r\n */\r\nexport interface TimestampQueryOptions {\r\n /** Include pending GPU upload/copy commands at the timestamp boundary. Default true. */\r\n includePendingUploads?: boolean;\r\n /** Allow the query scope to remain open across frame boundaries. Default false. */\r\n allowCrossFrame?: boolean;\r\n /** Throw on invalid begin/end usage instead of warning. Default false. */\r\n strict?: boolean;\r\n}\r\n\r\n/**\r\n * GPU timestamp query scope result.\r\n * @public\r\n */\r\nexport type TimestampQueryHandle = number | string;\r\n\r\nexport interface TimestampQueryResult {\r\n /** Unique query scope id. */\r\n id: number;\r\n /** Debug label. Labels are not unique. */\r\n label: string;\r\n /** Frame in which the scope began. */\r\n frameId: number;\r\n /** Duration in milliseconds. */\r\n durationMs: number;\r\n /** Raw GPU start timestamp. */\r\n start: bigint;\r\n /** Raw GPU end timestamp. */\r\n end: bigint;\r\n /** Query result status. */\r\n status: TimestampQueryStatus;\r\n /** True if the scope was closed automatically at frame end. */\r\n autoClosed?: boolean;\r\n /** Optional diagnostic message. */\r\n message?: string;\r\n}\r\n\r\n/**\r\n * Filter used to collect timestamp query results.\r\n * @public\r\n */\r\nexport interface TimestampQueryFilter {\r\n /** Result label to match. */\r\n label?: string;\r\n /** Frame id to match. */\r\n frameId?: number;\r\n}\r\n\r\n/**\r\n * List of all gpu objects\r\n * @public\r\n */\r\nexport interface GPUObjectList {\r\n /** Creation stack */\r\n stacks: Map<GPUObject, string>;\r\n /** list of textures */\r\n textures: BaseTexture[];\r\n /** list of samplers */\r\n samplers: TextureSampler[];\r\n /** list of buffers */\r\n buffers: GPUDataBuffer[];\r\n /** list of programs */\r\n programs: GPUProgram[];\r\n /** list of frame buffers */\r\n framebuffers: FrameBuffer[];\r\n /** list of vertex layouts */\r\n vertexArrayObjects: VertexLayout[];\r\n /** list of bind groups */\r\n bindGroups: BindGroup[];\r\n}\r\n\r\n/**\r\n * The device capabilities\r\n * @public\r\n */\r\nexport interface DeviceCaps {\r\n /** Miscellaneous capabilities */\r\n miscCaps: MiscCaps;\r\n /** Frame buffer related capabilities */\r\n framebufferCaps: FramebufferCaps;\r\n /** Shader related capabilities */\r\n shaderCaps: ShaderCaps;\r\n /** Texture related capabilities */\r\n textureCaps: TextureCaps;\r\n}\r\n\r\n/**\r\n * Frame buffer related capabilities of the device\r\n * @public\r\n */\r\nexport interface FramebufferCaps {\r\n /** The maximum number of framebuffer color attachment points */\r\n maxDrawBuffers: number;\r\n /** True if device supports rendering to mipmap */\r\n supportRenderMipmap: boolean;\r\n /** True if device supports multisampled frame buffer */\r\n supportMultisampledFramebuffer: boolean;\r\n /** True if device supports blending on float point frame buffer */\r\n supportFloatBlending: boolean;\r\n /** True if device supports 32bits float depth buffer */\r\n supportDepth32float: boolean;\r\n /** True if device supports 32bits float depth buffer with 8bits stencil */\r\n supportDepth32floatStencil8: boolean;\r\n /** Maximum color attachment bytes per sample */\r\n maxColorAttachmentBytesPerSample: number;\r\n}\r\n\r\n/**\r\n * Miscellaneous capabilities of the device\r\n * @public\r\n */\r\nexport interface MiscCaps {\r\n /** True if the device supports oversized viewport */\r\n supportOversizedViewport: boolean;\r\n /** True if the device supports minimum and maximum blending equations */\r\n supportBlendMinMax: boolean;\r\n /** True if the device supports 32-bits index buffer */\r\n support32BitIndex: boolean;\r\n /** The maximum number of {@link BindGroupLayout}'s in a shader program */\r\n maxBindGroups: number;\r\n /** The maximum number of texture coordinate index */\r\n maxTexCoordIndex: number;\r\n /** True if the device supports GPU timestamp query scopes */\r\n supportTimestampQuery: boolean;\r\n}\r\n\r\n/**\r\n * Shader related capabilities of the device\r\n * @public\r\n */\r\nexport interface ShaderCaps {\r\n /** True if the device supports writing depth value in a fragment shader */\r\n supportFragmentDepth: boolean;\r\n /** True if the device supports derivative functions in a fragment shader */\r\n supportStandardDerivatives: boolean;\r\n /** True if the device supports explicit control of texture LOD in a fragment shader */\r\n supportShaderTextureLod: boolean;\r\n /** True if the device supports high precison float number for shader programs */\r\n supportHighPrecisionFloat: boolean;\r\n /** The maximum number of bytes of uniform buffer */\r\n maxUniformBufferSize: number;\r\n /** The uniform buffer offset alignment */\r\n uniformBufferOffsetAlignment: number;\r\n /** The maximum number of bytes of storage buffer */\r\n maxStorageBufferSize: number;\r\n /** The storage buffer offset alignment */\r\n storageBufferOffsetAlignment: number;\r\n}\r\n\r\n/**\r\n * Information of a texture format\r\n * @public\r\n */\r\nexport interface TextureFormatInfo {\r\n /** True if the texture format supports linear filtering */\r\n filterable: boolean;\r\n /** True if the texture format can be used as a render target */\r\n renderable: boolean;\r\n /** True if the texture format is a compressed format */\r\n compressed: boolean;\r\n /** Number of bytes per-block */\r\n size: number;\r\n /** Block width */\r\n blockWidth: number;\r\n /** Block height */\r\n blockHeight: number;\r\n}\r\n\r\n/**\r\n * Texture related capabilities of the device'\r\n * @public\r\n */\r\nexport interface TextureCaps {\r\n /** The maximum size for 2d texture */\r\n maxTextureSize: number;\r\n /** The maximum size for cube texture */\r\n maxCubeTextureSize: number;\r\n /** True if mipmapping is supported for non power of 2 textures */\r\n npo2Mipmapping: boolean;\r\n /** True if repeat address mode is supported for non power of 2 textures */\r\n npo2Repeating: boolean;\r\n /** True if device supports dxt1, dxt3, dxt5 texture format */\r\n supportS3TC: boolean;\r\n /** True if device supports bptc texture format */\r\n supportBPTC: boolean;\r\n /** True if device supports rgtc texture format */\r\n supportRGTC: boolean;\r\n /** True if device supports astc texture format */\r\n supportASTC: boolean;\r\n /** True if device supports dxt1_srgb, dxt3-srgb, dxt5-srgb texture format */\r\n supportS3TCSRGB: boolean;\r\n /** True if device supports depth texture */\r\n supportDepthTexture: boolean;\r\n /** True if device supports 3d texture */\r\n support3DTexture: boolean;\r\n /** True if device supports sRGB texture */\r\n supportSRGBTexture: boolean;\r\n /** True if device supports 32bit floating-point texture */\r\n supportFloatTexture: boolean;\r\n /** True if device supports linear filtering on 32bit floating-point textures */\r\n supportLinearFloatTexture: boolean;\r\n /** True if device supports 16bit floating-point texture */\r\n supportHalfFloatTexture: boolean;\r\n /** True if device supports linear filtering on 16bit floating-point textures */\r\n supportLinearHalfFloatTexture: boolean;\r\n /** True if device supports anisotropic filtering */\r\n supportAnisotropicFiltering: boolean;\r\n /** True if device supports rendering into a 32bit floating-point frame buffer */\r\n supportFloatColorBuffer: boolean;\r\n /** True if device supports rendering into a 16bit floating-point frame buffer */\r\n supportHalfFloatColorBuffer: boolean;\r\n /** True if device supports alpha blending with floating-point frame buffer */\r\n supportFloatBlending: boolean;\r\n /**\r\n * Get information of a given texture format\r\n * @param format - The texture format\r\n * @returns the texture format infomation\r\n */\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfo>;\r\n}\r\n\r\n/**\r\n * Creation options of rendering shader program\r\n * @public\r\n */\r\nexport interface RenderProgramConstructParams {\r\n /** The vertex shader source code */\r\n vs: string;\r\n /** The fragment shader source code */\r\n fs: string;\r\n /** Number of fragment color outputs declared by the shader */\r\n fragmentOutputCount?: number;\r\n /** Bind group layouts for the program */\r\n bindGroupLayouts: BindGroupLayout[];\r\n /** Vertex attributes used in the program */\r\n vertexAttributes: number[];\r\n}\r\n\r\n/**\r\n * Creation options of computing shader program\r\n * @public\r\n */\r\nexport interface ComputeProgramConstructParams {\r\n /** The shader source */\r\n source: string;\r\n /** Bind group layouts for the program */\r\n bindGroupLayouts: BindGroupLayout[];\r\n}\r\n\r\n/**\r\n * Creation options for shader program\r\n * @public\r\n */\r\nexport interface GPUProgramConstructParams {\r\n /** Type of the program to be created */\r\n type: 'render' | 'compute';\r\n /** Label of the program */\r\n label?: string;\r\n /** The creation options */\r\n params: RenderProgramConstructParams | ComputeProgramConstructParams;\r\n}\r\n\r\n/**\r\n * Creation options for device\r\n * @public\r\n */\r\nexport interface DeviceOptions {\r\n /** True if the device must have a MSAA back buffer */\r\n msaa?: boolean;\r\n /** The device pixel ratio */\r\n dpr?: number;\r\n}\r\n\r\n/**\r\n * The device event map\r\n * @public\r\n */\r\nexport type DeviceEventMap = {\r\n resize: [cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number];\r\n devicelost: [];\r\n devicerestored: [];\r\n gpuobject_added: [obj: GPUObject];\r\n gpuobject_removed: [obj: GPUObject];\r\n gpuobject_rename: [obj: GPUObject, lastName: string];\r\n};\r\n\r\n/**\r\n * Structure that contains the device viewport information\r\n * @public\r\n */\r\nexport type DeviceViewport = {\r\n /** viewport left */\r\n x: number;\r\n /** viewport top */\r\n y: number;\r\n /** viewport width */\r\n width: number;\r\n /** viewport height */\r\n height: number;\r\n /**\r\n * A boolean value that indicates whether this is full screen viewport\r\n * @remarks\r\n * The full screen viewport will be automatically resized when the screen size chenged\r\n */\r\n default: boolean;\r\n};\r\n\r\n/**\r\n * Horizontal alignment for text layout\r\n * @public\r\n */\r\nexport type TextHorizontalAlignment = 'left' | 'center' | 'right';\r\n\r\n/**\r\n * Vertical alignment for text layout\r\n * @public\r\n */\r\nexport type TextVerticalAlignment = 'top' | 'center' | 'bottom';\r\n\r\n/**\r\n * Layout options for drawing text inside a rectangle\r\n * @public\r\n */\r\nexport interface DrawTextLayoutOptions {\r\n /** Horizontal alignment of each line */\r\n halign?: TextHorizontalAlignment;\r\n /** Vertical alignment of the text block */\r\n valign?: TextVerticalAlignment;\r\n /** Whether to wrap text automatically to fit the rectangle width */\r\n wordWrap?: boolean;\r\n}\r\n\r\n/**\r\n * Abstract interface for the rendering device.\r\n * @public\r\n */\r\nexport interface AbstractDevice extends IEventTarget<DeviceEventMap> {\r\n /** Get pool object */\r\n pool: Pool;\r\n /** vSync */\r\n vSync: boolean;\r\n /** Check if a pool with given key exists */\r\n poolExists(key: string | symbol): boolean;\r\n /** Get the pool with given key, or create a new one if not exists */\r\n getPool(key: string | symbol): Pool;\r\n /** Get adapter information */\r\n getAdapterInfo(): any;\r\n /** Get sample count of current frame buffer */\r\n getFrameBufferSampleCount(): number;\r\n /** Returns true if device context is lost. */\r\n isContextLost(): boolean;\r\n /** Get the value of device pixel ratio in X axis */\r\n getScaleX(): number;\r\n /** Get the value of device pixel ratio in Y axis */\r\n getScaleY(): number;\r\n /** Get the width of current frame buffer */\r\n getDrawingBufferWidth(): number;\r\n /** Get the height of current frame buffer */\r\n getDrawingBufferHeight(): number;\r\n /** Get the width of back buffer */\r\n getBackBufferWidth(): number;\r\n /** Get the height of back buffer */\r\n getBackBufferHeight(): number;\r\n /** Get the device capabilities */\r\n getDeviceCaps(): Immutable<DeviceCaps>;\r\n /** Schedule next frame */\r\n nextFrame(callback: () => void): number;\r\n /** Cancel schedule next frame */\r\n cancelNextFrame(handle: number): void;\r\n /** Set font for drawText function */\r\n setFont(fontName: Nullable<string>): void;\r\n /** Set render states to be used when drawing text. If not set, default states will be used. */\r\n setTextRenderStates(states: Nullable<RenderStateSet>): void;\r\n /**\r\n * Draw a string\r\n * @param text - The string that will be drawn\r\n * @param x - x coordinate in pixels related to the viewport origin\r\n * @param y - y coordinate in pixels related to the viewport origin\r\n * @param color - A CSS color value\r\n */\r\n drawText(text: string, x: number, y: number, color: string | Vector3 | Vector4): void;\r\n /**\r\n * Draw a string inside a rectangle with layout and clipping\r\n * @param text - The string that will be drawn\r\n * @param rect - Layout rectangle in pixels related to the viewport origin\r\n * @param color - A CSS color value\r\n * @param options - Text layout options\r\n */\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 /**\r\n * Clears the current frame buffer\r\n * @param clearColor - If not null, the color buffer will be cleared to this value.\r\n * @param clearDepth - If not null, the depth buffer will be cleared to this value.\r\n * @param clearStencil - If not null, the stencil buffer will be cleared to this value.\r\n */\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n /** Creates a GPU timer */\r\n createGPUTimer(): Nullable<ITimer>;\r\n /**\r\n * Begin a GPU timestamp query scope.\r\n *\r\n * @remarks\r\n * The returned id is the only unique handle. Labels are only for grouping/debugging.\r\n */\r\n beginTimestampQuery(label?: string, options?: TimestampQueryOptions): number;\r\n /** End a GPU timestamp query scope. */\r\n endTimestampQuery(id: number): void;\r\n /**\r\n * Poll a timestamp query result. Returns null when the query is still pending.\r\n *\r\n * @remarks\r\n * Passing a numeric id is unambiguous. Passing a label resolves the latest matching scope.\r\n */\r\n pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult>;\r\n /** Resolve a timestamp query result asynchronously. */\r\n resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult>;\r\n /** Collect resolved timestamp query results. */\r\n collectTimestampQueries(filter?: TimestampQueryFilter): TimestampQueryResult[];\r\n /** Creates a render state set object */\r\n createRenderStateSet(): RenderStateSet;\r\n /** Creates a blending state object */\r\n createBlendingState(): BlendingState;\r\n /** Creates a color state object */\r\n createColorState(): ColorState;\r\n /** Creates a rasterizer state object */\r\n createRasterizerState(): RasterizerState;\r\n /** Creates a depth state object */\r\n createDepthState(): DepthState;\r\n /** Creates a stencil state object */\r\n createStencilState(): StencilState;\r\n /**\r\n * Creates a texture sampler object\r\n * @param options - The creation options\r\n * @returns The created texture sampler\r\n */\r\n createSampler(options: SamplerOptions): TextureSampler;\r\n /**\r\n * Creates a texture from given mipmap data\r\n * @param data - Mipmap data\r\n * @param options - Texture creation options\r\n * @returns The created texture\r\n */\r\n createTextureFromMipmapData<T extends BaseTexture = BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<T>;\r\n /**\r\n * Creates a 2d texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param options - The creation options\r\n * @returns The created 2D texture\r\n */\r\n createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n /**\r\n * Creates a 2d texture from a image element\r\n * @param element - The image element\r\n * @param options - The creation options\r\n * @returns The created 2D texture.\r\n */\r\n createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n /**\r\n * Creates a 2d array texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param depth - Array length of the texture\r\n * @param options - The creation options\r\n * @returns The created 2D array texture.\r\n */\r\n 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 /**\r\n * Creates a 2d array texture from a seris of image elements\r\n * @remarks image elements must have the same size.\r\n * @param elements - image elements\r\n * @param options - The creation options\r\n * @returns The created 2D array texture.\r\n */\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n /**\r\n * Creates a 3D texture\r\n * @param format - The texture format\r\n * @param width - Pixel width of the texture\r\n * @param height - Pixel height of the texture\r\n * @param depth - Pixel depth of the texture\r\n * @param options - The creation options\r\n * @returns The created 3D texture.\r\n */\r\n 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 /**\r\n * Creates a cube texture\r\n * @param format - The texture format\r\n * @param size - Pixel width of the texture\r\n * @param options - The creation options\r\n * @returns The created cube texture.\r\n */\r\n createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<TextureCube>;\r\n /**\r\n * Creates a video texture from a video element\r\n * @param el - The video element\r\n * @returns The created video texture.\r\n */\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n /**\r\n * Copies a 2d texture to another texture.\r\n *\r\n * @remarks\r\n * The two textures must have the same size and format\r\n *\r\n * @param src - Texture that will be copied from.\r\n * @param srcLevel - Which mipmap level to be copied from.\r\n * @param dst - Texture that will be copied to.\r\n * @param dstLevel - Which mipmap level to be copied to.\r\n */\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\r\n /**\r\n * Copies a color attachment of a framebuffer to a mipmap level of a texture.\r\n *\r\n * @remarks\r\n * The color attachment and the mipmap level must have the same size and format\r\n *\r\n * @param src - Framebuffer that will be copied from.\r\n * @param index - Color attachment index of the framebuffer.\r\n * @param dst - Texture that will be copied to.\r\n * @param level - Which mipmap level should be copied to.\r\n */\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n /**\r\n * Set wether to reverse the winding order\r\n *\r\n * @remarks\r\n * The default winding order is counter-clockwise.\r\n *\r\n * @param reverse - true if the winding order should be reversed.\r\n */\r\n reverseVertexWindingOrder(reverse: boolean): void;\r\n /**\r\n * Check if the current winding order is reversed.\r\n */\r\n isWindingOrderReversed(): boolean;\r\n /**\r\n * Creates a gpu program\r\n * @param params - The creation options\r\n * @returns The created program.\r\n */\r\n createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n /**\r\n * Creates a bind group\r\n * @param layout - Layout of the bind group\r\n * @returns The created bind group.\r\n */\r\n createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\r\n /**\r\n * Creates a gpu buffer\r\n * @param sizeInBytes - Size of the buffer in bytes\r\n * @param options - The creation options\r\n * @returns The created buffer.\r\n */\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n /**\r\n * Copies a buffer to another buffer\r\n * @param sourceBuffer - Source buffer\r\n * @param destBuffer - destination buffer\r\n * @param srcOffset - Source offset in bytes\r\n * @param dstOffset - Destination offset in bytes\r\n * @param bytes - How many bytes to be copy\r\n */\r\n 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 /**\r\n * Creates an index buffer\r\n * @param data - Data of the index buffer\r\n * @param options - The creation options\r\n * @returns The created index buffer.\r\n */\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n /**\r\n * Creates a structured buffer\r\n * @param structureType - The structure type\r\n * @param options - The creation options\r\n * @param data - Data to be filled with\r\n * @returns The created structured buffer.\r\n */\r\n createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n /**\r\n * Creates a vertex layout object.\r\n * @param options - The creation options\r\n * @returns The created vertex layout object.\r\n */\r\n createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n /**\r\n * Creates a frame buffer\r\n * @param options - The creation options\r\n * @returns The created framebuffer.\r\n */\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n /**\r\n * Set viewport from an array that contains the position and size\r\n *\r\n * @param vp - The viewport position and size, if not specified, the viewport will be set to [0, 0, drawingBufferWidth, drawingBufferHeight]\r\n */\r\n setViewport(vp: Nullable<Immutable<DeviceViewport | number[]>>): void;\r\n /** Get current viewport as [x, y, width, height] */\r\n getViewport(): Immutable<DeviceViewport>;\r\n /**\r\n * Set scissor rectangle from an array that contains the position and size\r\n * @param scissor - The scissor rectangle position and size, if not specified, the scissor rectangle will be set to [0, 0, drawingBufferWidth,drawingBufferHeight]\r\n */\r\n setScissor(scissor: Nullable<Immutable<DeviceViewport | number[]>>): void;\r\n /**\r\n * Get current scissor rectangle\r\n */\r\n getScissor(): Immutable<DeviceViewport>;\r\n /**\r\n * Set current GPU program\r\n * @param program - The GPU program to be set\r\n */\r\n setProgram(program: Nullable<GPUProgram>): void;\r\n /**\r\n * Get current GPU program\r\n */\r\n getProgram(): Nullable<GPUProgram>;\r\n /**\r\n * Set current vertex layout\r\n *\r\n * @param vertexData - The vertex layout to be set\r\n */\r\n setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n /** Get current vertex layout */\r\n getVertexLayout(): Nullable<VertexLayout>;\r\n /**\r\n * Set current render states\r\n *\r\n * @param renderStates - The render state set\r\n */\r\n setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n /** Get current render states */\r\n getRenderStates(): Nullable<RenderStateSet>;\r\n /**\r\n * Sets the current framebuffer to the specified FrameBuffer object.\r\n *\r\n * @param rt - The FrameBuffer object to set as the current framebuffer.\r\n */\r\n setFramebuffer(rt: Nullable<FrameBuffer>): void;\r\n /**\r\n * Sets the current framebuffer specifying complex color attachments, an optional depth attachment, MIP level, face, and sample count.\r\n *\r\n * @param color - An array of BaseTextures or objects containing a BaseTexture and optional properties. Each BaseTexture or object will serve as a color attachment.\r\n * - If an object is provided, it can specify:\r\n * - `texture`: The BaseTexture to use.\r\n * - `miplevel`: Optional MIP level for this specific texture. default is 0.\r\n * - `face`: Optional face index for cube map textures, specifying the cube face this texture is attached to. default is 0.\r\n * - `layer`: Optional layer index, useful for texture arrays. default is 0.\r\n * @param depth - Optional BaseTexture to serve as the depth attachment.\r\n * @param sampleCount - Optional sample count defining the number of samples for multisampling.\r\n */\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 ): void;\r\n /** Get current frame buffer */\r\n getFramebuffer(): Nullable<FrameBuffer>;\r\n /**\r\n * Set current bind group\r\n *\r\n * @param index - index of the bind group\r\n * @param bindGroup - The bind group to be set\r\n * @param dynamicOffsets - dynamic uniform buffer offsets of the bind group or null\r\n */\r\n setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>): void;\r\n /**\r\n * Get current bind group\r\n * @param index - index of the bind group to get\r\n */\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n /** Flush the gpu command buffer */\r\n flush(): void;\r\n /**\r\n * Read pixel values from current frame buffer\r\n *\r\n * @remarks\r\n * This method reads the data asynchronously to prevent GPU stall.\r\n * For WebGL1 devices, the GPU stall is still inevitable.\r\n *\r\n * @param index - color attachment index\r\n * @param x - x position of the reading area\r\n * @param y - y position of the reading area\r\n * @param w - width of the reading area\r\n * @param h - height of the reading area\r\n * @param buffer - The output buffer\r\n */\r\n readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray): Promise<void>;\r\n /**\r\n * Read pixel values from current frame buffer to a GPU buffer\r\n *\r\n * @remarks\r\n * This method does not support WebGL1 device\r\n *\r\n * @param index - color attachment index\r\n * @param x - x position of the reading area\r\n * @param y - y position of the reading area\r\n * @param w - width of the reading area\r\n * @param h - height of the reading area\r\n * @param buffer - The output buffer\r\n */\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer): void;\r\n /**\r\n * Begin capture draw commands\r\n */\r\n beginCapture(): void;\r\n /**\r\n * Executes render bundle\r\n * @param renderBundle - RenderBundle to be execute\r\n */\r\n executeRenderBundle(renderBundle: RenderBundle): void;\r\n /**\r\n * End capture draw commands\r\n * @returns A RenderBundle that holds the captured draw commands\r\n */\r\n endCapture(): RenderBundle;\r\n /** Get the video memory usage in bytes */\r\n videoMemoryUsage: number;\r\n /** Get the current frame information */\r\n frameInfo: FrameInfo;\r\n /** Check if the device is running a rendering loop by calling {@link AbstractDevice.runLoop} */\r\n isRendering: boolean;\r\n /** Get the canvas element for this device */\r\n canvas: HTMLCanvasElement;\r\n /** Get the device type */\r\n type: string;\r\n /** Get the program builder */\r\n programBuilder: ProgramBuilder;\r\n /** Get the run loop callback function */\r\n runLoopFunction: Nullable<(device: AbstractDevice) => void>;\r\n /**\r\n * Begins a frame for rendering\r\n *\r\n * @remarks\r\n * All rendering call must occur between the @see AbstractDevice.beginFrame and @see AbstractDevice.endFrame methods\r\n */\r\n beginFrame(): boolean;\r\n /**\r\n * Ends a frame for rendering\r\n *\r\n * @remarks\r\n * All rendering call must occur between the @see AbstractDevice.beginFrame and @see AbstractDevice.endFrame methods\r\n */\r\n endFrame(): void;\r\n /**\r\n * Get the vertex attribute format from vertex semantic and data type\r\n *\r\n * @param semantic - The vertex semantic\r\n * @param dataType - The data type\r\n * @param componentCount - The component count\r\n */\r\n getVertexAttribFormat(\r\n semantic: VertexSemantic,\r\n dataType: DataType,\r\n componentCount: number\r\n ): Nullable<VertexAttribFormat>;\r\n /**\r\n * Creates an interleaved vertex buffer\r\n *\r\n * @param attribFormats - The vertex attribute formats for each vertex stream in the vertex buffer\r\n * @param data - Data to be filled with\r\n * @param options - The creation options\r\n * @returns The created vertex buffer.\r\n */\r\n createInterleavedVertexBuffer(\r\n attribFormats: VertexAttribFormat[],\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): Nullable<StructuredBuffer>;\r\n /**\r\n * Creates a non-interleaved vertex buffer\r\n *\r\n * @param attribFormat - The vertex attribute format\r\n * @param data - Data to be filled with\r\n * @param options - The creation options\r\n * @returns The created vertex buffer\r\n */\r\n createVertexBuffer(\r\n attribFormat: VertexAttribFormat,\r\n data: TypedArray,\r\n options?: BufferCreationOptions\r\n ): Nullable<StructuredBuffer>;\r\n /**\r\n * Draw primitives\r\n *\r\n * @param primitiveType - The primitive type\r\n * @param first - The vertex offset (or index offset if an index buffer exists)\r\n * @param count - The vertex count (or index count if an index buffer exists) to be drawn\r\n */\r\n draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n /**\r\n * Draw multiple instances of primitives\r\n *\r\n * @param primitiveType - The primitive type\r\n * @param first - The vertex offset (or index offset if an index buffer exists)\r\n * @param count - The vertex count (or index count if an index buffer exists) to be drawn\r\n * @param numInstances - How many instances to be drawn\r\n */\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): void;\r\n /**\r\n * Dispatches a compute task to the GPU\r\n *\r\n * @param workgroupCountX - X dimension of the grid of workgroups to be dispatch\r\n * @param workgroupCountY - Y dimension of the grid of workgroups to be dispatch\r\n * @param workgroupCountZ - Z dimension of the grid of workgroups to be dispatch\r\n */\r\n compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number): void;\r\n /**\r\n * Schedules a function to be executed at the beginning of the next frame\r\n *\r\n * @param f - The function to be scheduled\r\n */\r\n runNextFrame(f: () => void): void;\r\n /**\r\n * Asyncronized version of scheduling a function to be executed at the beginning of the next frame\r\n *\r\n * @param f - The function to be scheduled\r\n */\r\n runNextFrameAsync(f: () => void): Promise<void>;\r\n /** Exits from current rendering loop */\r\n exitLoop(): void;\r\n /**\r\n * Begins a rendering loop\r\n *\r\n * @param func - The function to be executed at every frame\r\n */\r\n runLoop(func: (device: AbstractDevice) => void): void;\r\n /** Get all GPU objects */\r\n getGPUObjects(): GPUObjectList;\r\n /**\r\n * Get GPU object by id\r\n *\r\n * @param uid - id of the GPU object\r\n */\r\n getGPUObjectById(uid: number): Nullable<GPUObject>;\r\n /**\r\n * Calculates the actual position of current frame buffer from screen position in X axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.\r\n *\r\n * @param val - The screen position in pixels\r\n */\r\n screenXToDevice(val: number): number;\r\n /**\r\n * Calculates the screen position from position of current frame buffer in X axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.\r\n *\r\n * @param val - The position of current frame buffer in pixels\r\n */\r\n deviceXToScreen(val: number): number;\r\n /**\r\n * Calculates the actual position of current frame buffer from screen position in Y axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.\r\n *\r\n * @param val - The screen position in pixels\r\n */\r\n screenYToDevice(val: number): number;\r\n /**\r\n * Calculates the screen position from position of current frame buffer in Y axis.\r\n *\r\n * @remarks\r\n * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.\r\n *\r\n * @param val - The position of current frame buffer in pixels\r\n */\r\n deviceYToScreen(val: number): number;\r\n /** Builds render program */\r\n buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram>;\r\n /** Builds compute program */\r\n buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram>;\r\n /** Pushes current FrameBuffer state */\r\n pushDeviceStates(): void;\r\n /** Pops last FrameBuffer state */\r\n popDeviceStates(): void;\r\n}\r\n"],"names":["RED_SHIFT","GREEN_SHIFT","BLUE_SHIFT","ALPHA_SHIFT","DEPTH_SHIFT","STENCIL_SHIFT","FLOAT_SHIFT","INTEGER_SHIFT","SIGNED_SHIFT","SRGB_SHIFT","BGR_SHIFT","BLOCK_SIZE_SHIFT","BLOCK_SIZE_MASK","BLOCK_WIDTH_SHIFT","BLOCK_WIDTH_MASK","BLOCK_HEIGHT_SHIFT","BLOCK_HEIGHT_MASK","COMPRESSED_FORMAT_SHIFT","COMPRESSION_FORMAT_BC1","COMPRESSION_FORMAT_BC2","COMPRESSION_FORMAT_BC3","COMPRESSION_FORMAT_BC4","COMPRESSION_FORMAT_BC5","COMPRESSION_FORMAT_BC6H","COMPRESSION_FORMAT_BC7","COMPRESSION_FORMAT_ASTC","COMPRESSION_FORMAT_BITMASK","RED_BITMASK","GREEN_BITMASK","BLUE_BITMASK","ALPHA_BITMASK","DEPTH_BITMASK","STENCIL_BITMASK","FLOAT_BITMASK","INTEGER_BITMASK","SIGNED_BITMASK","SRGB_BITMASK","BGR_BITMASK","makeTextureFormat","compression","r","g","b","a","depth","stencil","float","integer","signed","srgb","bgr","blockWidth","blockHeight","blockSize","compressionBits","colorBits","depthStencilBits","floatBits","integerBits","signedBits","srgbBits","bgrBits","blockBits","textureFormatMap","r8unorm","r8snorm","r16f","r32f","r8ui","r8i","r16ui","r16i","r32ui","r32i","rg8unorm","rg8snorm","rg16f","rg32f","rg8ui","rg8i","rg16ui","rg16i","rg32ui","rg32i","rgba8unorm","rgba8snorm","bgra8unorm","rgba16f","rgba32f","rgba8ui","rgba8i","rgba16ui","rgba16i","rgba32ui","rgba32i","rg11b10uf","d16","d24","d32f","d24s8","d32fs8","dxt1","dxt3","dxt5","bc4","bc5","bc6h","bc7","linearTextureFormatToSRGB","format","hasAlphaChannel","hasRedChannel","hasGreenChannel","hasBlueChannel","hasDepthChannel","hasStencilChannel","isFloatTextureFormat","isIntegerTextureFormat","isSignedTextureFormat","isCompressedTextureFormat","isSRGBTextureFormat","getTextureFormatBlockSize","getTextureFormatBlockWidth","getTextureFormatBlockHeight","normalizeColorComponent","val","maxval","Math","min","max","floor","normalizeColorComponentSigned","encodePixel","Uint8Array","Int8Array","Uint16Array","float2half","Float32Array","Int16Array","Uint32Array","Int32Array","Error","encodePixelToArray","arr","push","ShaderType"],"mappings":"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"}
package/dist/device.js CHANGED
@@ -300,6 +300,21 @@ class ResizeHandler {
300
300
  this._gpuTimer = null;
301
301
  }
302
302
  }
303
+ beginTimestampQuery(_label, _options) {
304
+ return 0;
305
+ }
306
+ endTimestampQuery(_id) {
307
+ return;
308
+ }
309
+ pollTimestampQuery(query) {
310
+ return this.createUnsupportedTimestampQueryResult(query);
311
+ }
312
+ resolveTimestampQuery(query) {
313
+ return Promise.resolve(this.createUnsupportedTimestampQueryResult(query));
314
+ }
315
+ collectTimestampQueries(_filter) {
316
+ return [];
317
+ }
303
318
  beginFrame() {
304
319
  if (this._beginFrameCounter === 0) {
305
320
  for (const obj of this._disposeObjectList){
@@ -625,6 +640,18 @@ class ResizeHandler {
625
640
  }
626
641
  return list;
627
642
  }
643
+ createUnsupportedTimestampQueryResult(query) {
644
+ return {
645
+ id: typeof query === 'number' ? query : 0,
646
+ label: typeof query === 'string' ? query : '',
647
+ frameId: this._frameInfo.frameCounter,
648
+ durationMs: 0,
649
+ start: 0n,
650
+ end: 0n,
651
+ status: 'unsupported',
652
+ message: 'GPU timestamp queries are not supported by this device'
653
+ };
654
+ }
628
655
  invalidateAll() {
629
656
  for (const list of [
630
657
  this._gpuObjectList.buffers,
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\r\nimport { type Vector4, type TypedArray, type IEventTarget, Observable } from '@zephyr3d/base';\r\nimport type { ITimer } from './timer';\r\nimport { CPUTimer } from './timer';\r\nimport type {\r\n BlendingState,\r\n ColorState,\r\n DepthState,\r\n RasterizerState,\r\n RenderStateSet,\r\n StencilState\r\n} from './render_states';\r\nimport type {\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n TextureSampler,\r\n Texture2D,\r\n Texture3D,\r\n TextureCube,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n GPUObject,\r\n StructuredBuffer,\r\n BindGroupLayout,\r\n BindGroup,\r\n IndexBuffer,\r\n TextureVideo,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n BufferUsage,\r\n VertexSemantic,\r\n VertexAttribFormat,\r\n VertexLayoutOptions,\r\n BaseTexture,\r\n RenderBundle\r\n} from './gpuobject';\r\nimport {\r\n GPUResourceUsageFlags,\r\n makeVertexBufferType,\r\n getVertexFormatSize,\r\n getVertexAttribFormat\r\n} from './gpuobject';\r\nimport type { PBComputeOptions, PBRenderOptions, PBStructTypeInfo } from './builder';\r\nimport { ProgramBuilder } from './builder';\r\nimport type {\r\n DataType,\r\n PrimitiveType,\r\n TextureFormat,\r\n GPUObjectList,\r\n FrameInfo,\r\n DeviceCaps,\r\n GPUProgramConstructParams,\r\n AbstractDevice,\r\n DeviceOptions,\r\n DeviceEventMap,\r\n DeviceViewport,\r\n DrawTextLayoutOptions\r\n} from './base_types';\r\nimport { DrawText } from './helpers';\r\nimport { Pool } from './pool';\r\n\r\n/**\r\n * The device backend interface\r\n * @public\r\n */\r\nexport interface DeviceBackend {\r\n typeName(): string;\r\n supported(): Promise<boolean>;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: Nullable<FrameBuffer>;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n program: Nullable<GPUProgram>;\r\n vertexLayout: Nullable<VertexLayout>;\r\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\r\n};\r\n\r\ntype ResizeCallback = (\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n) => void;\r\n\r\nclass ResizeHandler {\r\n private readonly _canvas: HTMLCanvasElement;\r\n private readonly _dpr: number;\r\n private _cssWidth: number;\r\n private _cssHeight: number;\r\n private _deviceWidth: number;\r\n private _deviceHeight: number;\r\n\r\n private _resizeObserver!: ResizeObserver;\r\n private _mutationObserver!: MutationObserver;\r\n private _onResizeCallback: ResizeCallback;\r\n\r\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\r\n this._canvas = canvas;\r\n this._dpr = dpr;\r\n this._cssWidth = 0;\r\n this._cssHeight = 0;\r\n this._deviceWidth = 0;\r\n this._deviceHeight = 0;\r\n this._onResizeCallback = onResize;\r\n }\r\n\r\n init() {\r\n const canvas = this._canvas;\r\n if (window.ResizeObserver) {\r\n this._resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this._handleResizeEntry(entry);\r\n });\r\n try {\r\n (this._resizeObserver as any).observe(canvas);\r\n } catch {\r\n this._resizeObserver.observe(canvas);\r\n }\r\n } else {\r\n if (window.MutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n if (mutations.length > 0) {\r\n this._handleLegacyResize();\r\n }\r\n });\r\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', this._handleLegacyResize);\r\n this._handleLegacyResize();\r\n }\r\n }\r\n\r\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\r\n // CSS pixel\r\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\r\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\r\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\r\n\r\n // Device pixel\r\n /*\r\n let deviceWidth: number;\r\n let deviceHeight: number;\r\n\r\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\r\n if (dpBox) {\r\n deviceWidth = dpBox.inlineSize;\r\n deviceHeight = dpBox.blockSize;\r\n } else {\r\n deviceWidth = Math.round(cssWidth * this._dpr);\r\n deviceHeight = Math.round(cssHeight * this._dpr);\r\n }\r\n */\r\n const deviceWidth = cssWidth * this._dpr;\r\n const deviceHeight = cssHeight * this._dpr;\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n\r\n private _handleLegacyResize = () => {\r\n const cssWidth = this._canvas.clientWidth;\r\n const cssHeight = this._canvas.clientHeight;\r\n const dpr = window.devicePixelRatio || 1;\r\n const deviceWidth = Math.round(cssWidth * dpr);\r\n const deviceHeight = Math.round(cssHeight * dpr);\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n };\r\n\r\n public dispose() {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n }\r\n window.removeEventListener('resize', this._handleLegacyResize);\r\n }\r\n}\r\n\r\n/**\r\n * Base class for rendering device\r\n * @public\r\n */\r\nexport abstract class BaseDevice extends Observable<DeviceEventMap> {\r\n protected _dpr: number;\r\n protected _canvas: HTMLCanvasElement;\r\n protected _canvasClientWidth: number;\r\n protected _canvasClientHeight: number;\r\n protected _gpuObjectList: GPUObjectList;\r\n protected _gpuMemCost: number;\r\n protected _disposeObjectList: GPUObject[];\r\n protected _beginFrameTime: number;\r\n protected _endFrameTime: number;\r\n protected _frameInfo: FrameInfo;\r\n protected _cpuTimer: CPUTimer;\r\n protected _gpuTimer: Nullable<ITimer>;\r\n protected _runningLoop: Nullable<number>;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: Nullable<(device: AbstractDevice) => void>;\r\n protected _backend: DeviceBackend;\r\n protected _beginFrameCounter: number;\r\n protected _programBuilder: ProgramBuilder;\r\n protected _poolMap: Map<string | symbol, Pool>;\r\n protected _defaultPoolKey: symbol;\r\n protected _temporalFramebuffer: boolean;\r\n protected _vSync: boolean;\r\n private readonly _resizer: ResizeHandler;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\r\n super();\r\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n stacks: new Map(),\r\n textures: [],\r\n samplers: [],\r\n buffers: [],\r\n programs: [],\r\n framebuffers: [],\r\n vertexArrayObjects: [],\r\n bindGroups: []\r\n };\r\n this._canvas = cvs;\r\n this._canvas.setAttribute('tabindex', '1');\r\n this._canvasClientWidth = cvs.clientWidth;\r\n this._canvasClientHeight = cvs.clientHeight;\r\n this._gpuMemCost = 0;\r\n this._disposeObjectList = [];\r\n this._beginFrameTime = 0;\r\n this._endFrameTime = 0;\r\n this._runLoopFunc = null;\r\n this._frameInfo = {\r\n frameCounter: 0,\r\n frameTimestamp: 0,\r\n elapsedTimeCPU: 0,\r\n elapsedTimeGPU: 0,\r\n elapsedFrame: 0,\r\n elapsedOverall: 0,\r\n FPS: 0,\r\n drawCalls: 0,\r\n computeCalls: 0,\r\n nextFrameCall: [],\r\n nextFrameCallNext: []\r\n };\r\n this._programBuilder = new ProgramBuilder(this);\r\n this._cpuTimer = new CPUTimer();\r\n this._gpuTimer = null;\r\n this._runningLoop = null;\r\n this._fpsCounter = { time: 0, frame: 0 };\r\n this._stateStack = [];\r\n this._beginFrameCounter = 0;\r\n this._poolMap = new Map();\r\n this._defaultPoolKey = Symbol('defaultPool');\r\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\r\n this._temporalFramebuffer = false;\r\n this._temporalFramebuffer = false;\r\n this._vSync = true;\r\n //this._registerEventHandlers();\r\n this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.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":";;;;;;;AA8FA,MAAMA,aAAAA,CAAAA;IACaC,OAA2B;IAC3BC,IAAa;IACtBC,SAAkB;IAClBC,UAAmB;IACnBC,YAAqB;IACrBC,aAAsB;IAEtBC,eAAiC;IACjCC,iBAAqC;IACrCC,iBAAkC;AAE1C,IAAA,WAAA,CAAYC,MAAyB,EAAEC,QAAwB,EAAEC,GAAW,CAAE;QAC5E,IAAI,CAACX,OAAO,GAAGS,MAAAA;QACf,IAAI,CAACR,IAAI,GAAGU,GAAAA;QACZ,IAAI,CAACT,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,YAAY,GAAG,CAAA;QACpB,IAAI,CAACC,aAAa,GAAG,CAAA;QACrB,IAAI,CAACG,iBAAiB,GAAGE,QAAAA;AAC3B;IAEAE,IAAO,GAAA;QACL,MAAMH,MAAAA,GAAS,IAAI,CAACT,OAAO;QAC3B,IAAIa,MAAAA,CAAOC,cAAc,EAAE;AACzB,YAAA,IAAI,CAACR,eAAe,GAAG,IAAIQ,eAAe,CAACC,OAAAA,GAAAA;gBACzC,MAAMC,KAAAA,GAAQD,OAAO,CAAC,CAAE,CAAA;gBACxB,IAAI,CAACE,kBAAkB,CAACD,KAAAA,CAAAA;AAC1B,aAAA,CAAA;YACA,IAAI;AACD,gBAAA,IAAI,CAACV,eAAe,CAASY,OAAO,CAACT,MAAAA,CAAAA;AACxC,aAAA,CAAE,OAAM;AACN,gBAAA,IAAI,CAACH,eAAe,CAACY,OAAO,CAACT,MAAAA,CAAAA;AAC/B;SACK,MAAA;YACL,IAAII,MAAAA,CAAOM,gBAAgB,EAAE;AAC3B,gBAAA,IAAI,CAACZ,iBAAiB,GAAG,IAAIY,iBAAiB,CAACC,SAAAA,GAAAA;oBAC7C,IAAIA,SAAAA,CAAUC,MAAM,GAAG,CAAG,EAAA;AACxB,wBAAA,IAAI,CAACC,mBAAmB,EAAA;AAC1B;AACF,iBAAA,CAAA;AACA,gBAAA,IAAI,CAACf,iBAAiB,CAACW,OAAO,CAACT,MAAQ,EAAA;oBAAEc,UAAY,EAAA,IAAA;oBAAMC,eAAiB,EAAA;AAAC,wBAAA;AAAQ;AAAC,iBAAA,CAAA;AACxF;AACAX,YAAAA,MAAAA,CAAOY,gBAAgB,CAAC,QAAU,EAAA,IAAI,CAACH,mBAAmB,CAAA;AAC1D,YAAA,IAAI,CAACA,mBAAmB,EAAA;AAC1B;AACF;AAEQL,IAAAA,kBAAAA,CAAmBS,MAA2B,EAAE;;AAEtD,QAAA,MAAMC,OAAUC,GAAAA,KAAAA,CAAMC,OAAO,CAACH,MAAOI,CAAAA,cAAc,CAAIJ,GAAAA,MAAAA,CAAOI,cAAc,CAAC,CAAE,CAAA,GAAGJ,OAAOI,cAAc;AACvG,QAAA,MAAMC,WAAWJ,OAASK,EAAAA,UAAAA,IAAc,IAAI,CAAChC,OAAO,CAACiC,WAAW;AAChE,QAAA,MAAMC,YAAYP,OAASQ,EAAAA,SAAAA,IAAa,IAAI,CAACnC,OAAO,CAACoC,YAAY;;AAGjE;;;;;;;;;;;;AAYA,OACA,MAAMC,WAAAA,GAAcN,QAAW,GAAA,IAAI,CAAC9B,IAAI;AACxC,QAAA,MAAMqC,YAAeJ,GAAAA,SAAAA,GAAY,IAAI,CAACjC,IAAI;AAE1C,QAAA,IACE8B,aAAa,IAAI,CAAC7B,SAAS,IAC3BgC,SAAAA,KAAc,IAAI,CAAC/B,UAAU,IAC7BkC,WAAgB,KAAA,IAAI,CAACjC,YAAY,IACjCkC,iBAAiB,IAAI,CAACjC,aAAa,EACnC;AACA,YAAA;AACF;QAEA,IAAI,CAACH,SAAS,GAAG6B,QAAAA;QACjB,IAAI,CAAC5B,UAAU,GAAG+B,SAAAA;QAClB,IAAI,CAAC9B,YAAY,GAAGiC,WAAAA;QACpB,IAAI,CAAChC,aAAa,GAAGiC,YAAAA;AAErB,QAAA,IAAI,CAAC9B,iBAAiB,CAACuB,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AAC3D;IAEQhB,mBAAsB,GAAA,IAAA;AAC5B,QAAA,MAAMS,QAAW,GAAA,IAAI,CAAC/B,OAAO,CAACiC,WAAW;AACzC,QAAA,MAAMC,SAAY,GAAA,IAAI,CAAClC,OAAO,CAACoC,YAAY;QAC3C,MAAMzB,GAAAA,GAAME,MAAO0B,CAAAA,gBAAgB,IAAI,CAAA;AACvC,QAAA,MAAMF,WAAcG,GAAAA,IAAAA,CAAKC,KAAK,CAACV,QAAWpB,GAAAA,GAAAA,CAAAA;AAC1C,QAAA,MAAM2B,YAAeE,GAAAA,IAAAA,CAAKC,KAAK,CAACP,SAAYvB,GAAAA,GAAAA,CAAAA;AAE5C,QAAA,IACEoB,aAAa,IAAI,CAAC7B,SAAS,IAC3BgC,SAAAA,KAAc,IAAI,CAAC/B,UAAU,IAC7BkC,WAAgB,KAAA,IAAI,CAACjC,YAAY,IACjCkC,iBAAiB,IAAI,CAACjC,aAAa,EACnC;AACA,YAAA;AACF;QAEA,IAAI,CAACH,SAAS,GAAG6B,QAAAA;QACjB,IAAI,CAAC5B,UAAU,GAAG+B,SAAAA;QAClB,IAAI,CAAC9B,YAAY,GAAGiC,WAAAA;QACpB,IAAI,CAAChC,aAAa,GAAGiC,YAAAA;AAErB,QAAA,IAAI,CAAC9B,iBAAiB,CAACuB,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;KACzD;IAEKI,OAAU,GAAA;QACf,IAAI,IAAI,CAACpC,eAAe,EAAE;YACxB,IAAI,CAACA,eAAe,CAACqC,UAAU,EAAA;AACjC;QACA,IAAI,IAAI,CAACpC,iBAAiB,EAAE;YAC1B,IAAI,CAACA,iBAAiB,CAACoC,UAAU,EAAA;AACnC;AACA9B,QAAAA,MAAAA,CAAO+B,mBAAmB,CAAC,QAAU,EAAA,IAAI,CAACtB,mBAAmB,CAAA;AAC/D;AACF;AAEA;;;IAIO,MAAeuB,UAAmBC,SAAAA,UAAAA,CAAAA;IAC7B7C,IAAa;IACbD,OAA2B;IAC3B+C,kBAA2B;IAC3BC,mBAA4B;IAC5BC,cAA8B;IAC9BC,WAAoB;IACpBC,kBAAgC;IAChCC,eAAwB;IACxBC,aAAsB;IACtBC,UAAsB;IACtBC,SAAoB;IACpBC,SAA4B;IAC5BC,YAA+B;IAC/BC,WAA6C;IAC7CC,YAAyD;IACzDC,QAAwB;IACxBC,kBAA2B;IAC3BC,eAAgC;IAChCC,QAAqC;IACrCC,eAAwB;IACxBC,oBAA8B;IAC9BC,MAAgB;IACTC,QAAwB;IACxBC,WAA2B;AAC5C,IAAA,WAAA,CAAYC,GAAsB,EAAEC,OAAsB,EAAE3D,GAAY,CAAE;QACxE,KAAK,EAAA;AACL,QAAA,IAAI,CAACV,IAAI,GAAGU,GAAOE,IAAAA,MAAAA,CAAO0B,gBAAgB,IAAI,CAAA;QAC9C,IAAI,CAACqB,QAAQ,GAAGU,OAAAA;QAChB,IAAI,CAACrB,cAAc,GAAG;AACpBsB,YAAAA,MAAAA,EAAQ,IAAIC,GAAAA,EAAAA;AACZC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,OAAAA,EAAS,EAAE;AACXC,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,YAAAA,EAAc,EAAE;AAChBC,YAAAA,kBAAAA,EAAoB,EAAE;AACtBC,YAAAA,UAAAA,EAAY;AACd,SAAA;QACA,IAAI,CAAC/E,OAAO,GAAGqE,GAAAA;AACf,QAAA,IAAI,CAACrE,OAAO,CAACgF,YAAY,CAAC,UAAY,EAAA,GAAA,CAAA;AACtC,QAAA,IAAI,CAACjC,kBAAkB,GAAGsB,GAAAA,CAAIpC,WAAW;AACzC,QAAA,IAAI,CAACe,mBAAmB,GAAGqB,GAAAA,CAAIjC,YAAY;QAC3C,IAAI,CAACc,WAAW,GAAG,CAAA;QACnB,IAAI,CAACC,kBAAkB,GAAG,EAAE;QAC5B,IAAI,CAACC,eAAe,GAAG,CAAA;QACvB,IAAI,CAACC,aAAa,GAAG,CAAA;QACrB,IAAI,CAACM,YAAY,GAAG,IAAA;QACpB,IAAI,CAACL,UAAU,GAAG;YAChB2B,YAAc,EAAA,CAAA;YACdC,cAAgB,EAAA,CAAA;YAChBC,cAAgB,EAAA,CAAA;YAChBC,cAAgB,EAAA,CAAA;YAChBC,YAAc,EAAA,CAAA;YACdC,cAAgB,EAAA,CAAA;YAChBC,GAAK,EAAA,CAAA;YACLC,SAAW,EAAA,CAAA;YACXC,YAAc,EAAA,CAAA;AACdC,YAAAA,aAAAA,EAAe,EAAE;AACjBC,YAAAA,iBAAAA,EAAmB;AACrB,SAAA;AACA,QAAA,IAAI,CAAC7B,eAAe,GAAG,IAAI8B,eAAe,IAAI,CAAA;QAC9C,IAAI,CAACrC,SAAS,GAAG,IAAIsC,QAAAA,EAAAA;QACrB,IAAI,CAACrC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,YAAY,GAAG,IAAA;QACpB,IAAI,CAACC,WAAW,GAAG;YAAEoC,IAAM,EAAA,CAAA;YAAGC,KAAO,EAAA;AAAE,SAAA;QACvC,IAAI,CAAC3B,WAAW,GAAG,EAAE;QACrB,IAAI,CAACP,kBAAkB,GAAG,CAAA;QAC1B,IAAI,CAACE,QAAQ,GAAG,IAAIS,GAAAA,EAAAA;QACpB,IAAI,CAACR,eAAe,GAAGgC,MAAO,CAAA,aAAA,CAAA;AAC9B,QAAA,IAAI,CAACjC,QAAQ,CAACkC,GAAG,CAAC,IAAI,CAACjC,eAAe,EAAE,IAAIkC,IAAK,CAAA,IAAI,EAAE,IAAI,CAAClC,eAAe,CAAA,CAAA;QAC3E,IAAI,CAACC,oBAAoB,GAAG,KAAA;QAC5B,IAAI,CAACA,oBAAoB,GAAG,KAAA;QAC5B,IAAI,CAACC,MAAM,GAAG,IAAA;;AAEd,QAAA,IAAI,CAACC,QAAQ,GAAG,IAAIpE,aAClB,CAAA,IAAI,CAACC,OAAO,EACZ,CAAC+B,QAAUG,EAAAA,SAAAA,EAAWG,WAAaC,EAAAA,YAAAA,GAAAA;AACjC,YAAA,IAAI,CAAC6D,aAAa,CAAC,QAAUpE,EAAAA,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;SAEjE,EAAA,IAAI,CAACrC,IAAI,CAAA;AAEb;IACAmG,SAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAACpG,OAAO,CAACiC,WAAW,KAAK,IAAI,CAAI,GAAA,IAAI,CAACjC,OAAO,CAACqG,KAAK,GAAG,IAAI,CAACrG,OAAO,CAACiC,WAAW;AAC3F;IACAqE,SAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAACtG,OAAO,CAACoC,YAAY,KAAK,IAAI,CAAI,GAAA,IAAI,CAACpC,OAAO,CAACuG,MAAM,GAAG,IAAI,CAACvG,OAAO,CAACoC,YAAY;AAC9F;AAqJA,IAAA,IAAIkC,OAAU,GAAA;QACZ,OAAO,IAAI,CAACV,QAAQ;AACtB;AACA,IAAA,IAAI4C,gBAAmB,GAAA;QACrB,OAAO,IAAI,CAACtD,WAAW;AACzB;AACA,IAAA,IAAIuD,SAAY,GAAA;QACd,OAAO,IAAI,CAACnD,UAAU;AACxB;AACA,IAAA,IAAIoD,WAAc,GAAA;QAChB,OAAO,IAAI,CAACjD,YAAY,KAAK,IAAA;AAC/B;AACA,IAAA,IAAIhD,MAAS,GAAA;QACX,OAAO,IAAI,CAACT,OAAO;AACrB;AACA,IAAA,IAAI2G,IAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC/C,QAAQ,CAACgD,QAAQ,EAAA;AAC/B;AACA,IAAA,IAAIC,KAAQ,GAAA;QACV,OAAO,IAAI,CAAC3C,MAAM;AACpB;IACA,IAAI2C,KAAAA,CAAMC,GAAG,EAAE;AACb,QAAA,IAAI,CAAC5C,MAAM,GAAG,CAAC,CAAC4C,GAAAA;AAClB;AACA,IAAA,IAAIC,IAAO,GAAA;QACT,OAAO,IAAI,CAAChD,QAAQ,CAACiD,GAAG,CAAC,IAAI,CAAChD,eAAe,CAAA;AAC/C;AACA,IAAA,IAAIiD,eAAkB,GAAA;QACpB,OAAO,IAAI,CAACtD,YAAY;AAC1B;AACA,IAAA,IAAIuD,cAAiB,GAAA;QACnB,OAAO,IAAI,CAACpD,eAAe;AAC7B;AACAqD,IAAAA,UAAAA,CAAWC,GAAoB,EAAE;AAC/B,QAAA,OAAO,IAAI,CAACrD,QAAQ,CAACsD,GAAG,CAACD,GAAAA,CAAAA;AAC3B;AACAE,IAAAA,OAAAA,CAAQF,GAAoB,EAAE;AAC5B,QAAA,IAAIL,OAAO,IAAI,CAAChD,QAAQ,CAACiD,GAAG,CAACI,GAAAA,CAAAA;AAC7B,QAAA,IAAI,CAACL,IAAM,EAAA;YACTA,IAAO,GAAA,IAAIb,IAAK,CAAA,IAAI,EAAEkB,GAAAA,CAAAA;AACtB,YAAA,IAAI,CAACrD,QAAQ,CAACkC,GAAG,CAACmB,GAAKL,EAAAA,IAAAA,CAAAA;AACzB;QACA,OAAOA,IAAAA;AACT;AACAQ,IAAAA,OAAAA,CAAQC,QAA0B,EAAE;QAClCC,QAASF,CAAAA,OAAO,CAAC,IAAI,EAAEC,QAAAA,CAAAA;AACzB;AACAE,IAAAA,mBAAAA,CAAoBC,YAAsC,EAAE;AAC1DF,QAAAA,QAAAA,CAASG,eAAe,CAACD,YAAAA,CAAAA;AAC3B;IAQAE,QACEC,CAAAA,IAAY,EACZC,OAAiC,EACjCC,QAA6C,EAC7CC,cAAmE,EACnEC,OAA+B,EAC/B;QACA,IAAI,OAAOH,YAAY,QAAU,EAAA;AAC/BN,YAAAA,QAAAA,CAASI,QAAQ,CACf,IAAI,EACJC,IAAAA,EACAG,gBACAF,OACAC,EAAAA,QAAAA,CAAAA;SAEG,MAAA;AACLP,YAAAA,QAAAA,CAASI,QAAQ,CACf,IAAI,EACJC,IACAE,EAAAA,QAAAA,EACAD,SACAG,OAAYD,IAAAA,cAAAA,CAAAA;AAEhB;AACF;AAGAE,IAAAA,cAAAA,CACEC,SAAgD,EAChDC,KAAmB,EACnBC,WAAoB,EACpB;AACA,QAAA,IAAIC,KAA+B,GAAA,IAAA;AACnC,QAAA,IAAIC,QAAW,GAAA,KAAA;AACf,QAAA,IAAI,CAAC5G,KAAAA,CAAMC,OAAO,CAACuG,SAAY,CAAA,EAAA;AAC7BG,YAAAA,KAAAA,GAAQH,SAAa,IAAA,IAAA;SAChB,MAAA;YACLG,KAAQ,GAAA,IAAI,CAACxB,IAAI,CAAE0B,wBAAwB,CAAC,KAAA,EAAO,CAAG,EAAA,CAAA,EAAGL,SAAWC,EAAAA,KAAAA,EAAO,IAAMC,EAAAA,WAAAA,CAAAA;YACjFE,QAAW,GAAA,IAAA;AACb;QACA,MAAME,SAAAA,GAAY,IAAI,CAACC,cAAc,EAAA;AACrC,QAAA,IAAID,cAAcH,KAAO,EAAA;AACvB,YAAA,IAAI,IAAI,CAACtE,oBAAoB,IAAIyE,SAAW,EAAA;AAC1C,gBAAA,IAAI,CAAC3B,IAAI,CAAE6B,kBAAkB,CAACF,SAAAA,CAAAA;AAChC;YACA,IAAI,CAACzE,oBAAoB,GAAGuE,QAAAA;YAC5B,IAAI,CAACK,eAAe,CAACN,KAAAA,CAAAA;AACvB;AACF;AACAO,IAAAA,aAAAA,CAAcC,GAAc,EAAEC,MAAS,GAAA,IAAI,EAAE;AAC3C,QAAA,IAAID,GAAK,EAAA;AACP,YAAA,IAAIC,MAAQ,EAAA;gBACV,IAAI,CAACC,eAAe,CAACF,GAAAA,CAAAA;AACvB;YACA,IAAI,IAAI,CAACG,aAAa,EAAI,EAAA;AACxBH,gBAAAA,GAAAA,CAAII,OAAO,EAAA;aACN,MAAA;AACL,gBAAA,IAAI,CAAChG,kBAAkB,CAACiG,IAAI,CAACL,GAAAA,CAAAA;AAC/B;AACF;AACF;AACAM,IAAAA,aAAAA,CAAcN,GAAc,EAAE;QAC5B,IAAIA,GAAAA,IAAOA,IAAIO,QAAQ,IAAI,CAAC,IAAI,CAACJ,aAAa,EAAI,EAAA;AAChDH,YAAAA,GAAAA,CAAIQ,OAAO,EAAA;AACXR,YAAAA,GAAAA,CAAIS,cAAc,GAAGT,GAAAA,CAAAA;AACvB;AACF;AACAU,IAAAA,sBAAAA,CAAuBC,MAAe,EAAE;AACtC,QAAA,IAAIA,MAAU,IAAA,CAAC,IAAI,CAAClG,SAAS,EAAE;AAC7B,YAAA,IAAI,CAACA,SAAS,GAAG,IAAI,CAACmG,cAAc,EAAA;SAC/B,MAAA,IAAI,CAACD,MAAQ,EAAA;YAClB,IAAI,CAAClG,SAAS,EAAEoG,GAAAA,EAAAA;YAChB,IAAI,CAACpG,SAAS,GAAG,IAAA;AACnB;AACF;IACAqG,UAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAChG,kBAAkB,KAAK,CAAG,EAAA;AACjC,YAAA,KAAK,MAAMkF,GAAAA,IAAO,IAAI,CAAC5F,kBAAkB,CAAE;AACzC4F,gBAAAA,GAAAA,CAAII,OAAO,EAAA;AACb;YACA,IAAI,CAAChG,kBAAkB,GAAG,EAAE;AAC9B;AACA,QAAA,IAAI,CAACU,kBAAkB,EAAA;AACvB,QAAA,IAAI,CAACT,eAAe,GAAG,IAAI,CAACG,SAAS,CAACuG,GAAG,EAAA;AACzC,QAAA,IAAI,CAACC,eAAe,EAAA;QACpB,IAAI,CAAChG,QAAQ,CAACiG,OAAO,CAAC,CAACjD,IAAAA,GAASA,KAAKkD,WAAW,EAAA,CAAA;QAChD,OAAO,IAAI,CAACC,YAAY,EAAA;AAC1B;IACAC,QAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAACtG,kBAAkB,GAAG,CAAG,EAAA;AAC/B,YAAA,IAAI,CAACA,kBAAkB,EAAA;AACvB,YAAA,IAAI,IAAI,CAACA,kBAAkB,KAAK,CAAG,EAAA;AACjC,gBAAA,IAAI,CAACR,aAAa,GAAG,IAAI,CAACE,SAAS,CAACuG,GAAG,EAAA;gBACvC,IAAI,CAACxG,UAAU,CAAC2B,YAAY,EAAA;AAC5B,gBAAA,IAAI,CAACmF,UAAU,EAAA;AACjB;AACF;AACF;AACAC,IAAAA,qBAAAA,CAAsBC,QAAwB,EAAEC,QAAkB,EAAEC,cAAsB,EAAE;QAC1F,OAAOH,qBAAAA,CAAsBC,UAAUC,QAAUC,EAAAA,cAAAA,CAAAA;AACnD;AACAC,IAAAA,6BAAAA,CACEC,aAAmC,EACnCC,IAAgB,EAChBzC,OAA+B,EAC/B;AACA,QAAA,IAAIA,WAAWA,OAAQ0C,CAAAA,KAAK,IAAI1C,OAAQ0C,CAAAA,KAAK,KAAK,QAAU,EAAA;AAC1DC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,iFAAiF,CAAC,CAAA;YACjG,OAAO,IAAA;AACT;AACA,QAAA,IAAIC,IAAO,GAAA,CAAA;QACX,KAAK,MAAMC,UAAUN,aAAe,CAAA;AAClCK,YAAAA,IAAAA,IAAQE,mBAAoBD,CAAAA,MAAAA,CAAAA;AAC9B;AACA,QAAA,MAAME,mBAAmBC,oBAAqB,CAACR,KAAKS,UAAU,GAAGL,QAAS,CAAML,EAAAA,GAAAA,aAAAA,CAAAA;AAChF,QAAA,IAAI,CAACQ,gBAAkB,EAAA;AACrBL,YAAAA,OAAAA,CAAQC,KAAK,CAAC,6EAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,MAAMO,GAAAA,GAAMC,MAAOC,CAAAA,MAAM,CACvB;YACEX,KAAO,EAAA,QAAA;YACPY,OAAS,EAAA,KAAA;YACTC,OAAS,EAAA,IAAA;YACTC,OAAS,EAAA;AACX,SAAA,EACAxD,WAAW,EAAC,CAAA;QAEd,IAAImD,GAAAA,CAAIK,OAAO,EAAE;AACfL,YAAAA,GAAAA,CAAIG,OAAO,GAAG,KAAA;AACdH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;QACA,IAAIJ,GAAAA,CAAIG,OAAO,EAAE;AACfH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;AACA,QAAA,OAAO,IAAI,CAACE,sBAAsB,CAACT,kBAAkBG,GAAKV,EAAAA,IAAAA,CAAAA;AAC5D;AACAiB,IAAAA,kBAAAA,CAAmBC,YAAgC,EAAElB,IAAgB,EAAEzC,OAA+B,EAAE;AACtG,QAAA,IAAIA,WAAWA,OAAQ0C,CAAAA,KAAK,IAAI1C,OAAQ0C,CAAAA,KAAK,KAAK,QAAU,EAAA;AAC1DC,YAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,sEAAsE,CAAC,CAAA;YACtF,OAAO,IAAA;AACT;AACA,QAAA,MAAMgB,QAAQb,mBAAoBY,CAAAA,YAAAA,CAAAA;AAClC,QAAA,MAAMX,mBAAmBC,oBAAqB,CAACR,KAAKS,UAAU,GAAGU,SAAU,CAAGD,EAAAA,YAAAA,CAAAA;AAC9E,QAAA,IAAI,CAACX,gBAAkB,EAAA;AACrBL,YAAAA,OAAAA,CAAQC,KAAK,CAAC,6EAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA,MAAMO,GAAAA,GAAMC,MAAOC,CAAAA,MAAM,CACvB;YACEX,KAAO,EAAA,QAAA;YACPY,OAAS,EAAA,KAAA;YACTC,OAAS,EAAA,IAAA;YACTC,OAAS,EAAA;AACX,SAAA,EACAxD,WAAW,EAAC,CAAA;QAEd,IAAImD,GAAAA,CAAIK,OAAO,EAAE;AACfL,YAAAA,GAAAA,CAAIG,OAAO,GAAG,KAAA;AACdH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;QACA,IAAIJ,GAAAA,CAAIG,OAAO,EAAE;AACfH,YAAAA,GAAAA,CAAII,OAAO,GAAG,KAAA;AAChB;AACA,QAAA,OAAO,IAAI,CAACE,sBAAsB,CAACT,kBAAkBG,GAAKV,EAAAA,IAAAA,CAAAA;AAC5D;AACAoB,IAAAA,IAAAA,CAAKC,aAA4B,EAAEC,KAAa,EAAEH,KAAa,EAAE;QAC/D,IAAI,CAACxI,UAAU,CAACkC,SAAS,EAAA;AACzB,QAAA,IAAI,CAAC0G,KAAK,CAACF,aAAAA,EAAeC,KAAOH,EAAAA,KAAAA,CAAAA;AACnC;AACAK,IAAAA,aAAAA,CAAcH,aAA4B,EAAEC,KAAa,EAAEH,KAAa,EAAEM,YAAoB,EAAE;QAC9F,IAAI,CAAC9I,UAAU,CAACkC,SAAS,EAAA;AACzB,QAAA,IAAI,CAAC6G,cAAc,CAACL,aAAAA,EAAeC,OAAOH,KAAOM,EAAAA,YAAAA,CAAAA;AACnD;AACAE,IAAAA,mBAAAA,CAAoBC,YAA0B,EAAQ;QACpD,IAAI,CAACjJ,UAAU,CAACkC,SAAS,IAAI,IAAI,CAACgH,oBAAoB,CAACD,YAAAA,CAAAA;AACzD;AACAE,IAAAA,OAAAA,CAAQC,eAAuB,EAAEC,eAAuB,EAAEC,eAAuB,EAAE;QACjF,IAAI,CAACtJ,UAAU,CAACmC,YAAY,EAAA;AAC5B,QAAA,IAAI,CAACoH,QAAQ,CAACH,eAAAA,EAAiBC,eAAiBC,EAAAA,eAAAA,CAAAA;AAClD;AACAE,IAAAA,YAAAA,CAAaC,CAAa,EAAE;AAC1B,QAAA,IAAIA,CAAG,EAAA;AACL,YAAA,IAAI,CAACzJ,UAAU,CAACoC,aAAa,CAAC0D,IAAI,CAAC2D,CAAAA,CAAAA;AACrC;AACF;IACA,MAAMC,iBAAAA,CAAkBD,CAA6B,EAAE;QACrD,OAAO,IAAIE,QAAc,CAACC,OAAAA,GAAAA;AACxB,YAAA,IAAIH,CAAG,EAAA;AACL,gBAAA,IAAI,CAACzJ,UAAU,CAACoC,aAAa,CAAC0D,IAAI,CAAC,IAAA;AACjC,oBAAA,MAAM+D,CAAIJ,GAAAA,CAAAA,EAAAA;AACV,oBAAA,IAAII,aAAaF,OAAS,EAAA;wBACxBE,CAAEC,CAAAA,IAAI,CAAC,IAAMF,OAAAA,EAAAA,CAAAA;qBACR,MAAA;AACLA,wBAAAA,OAAAA,EAAAA;AACF;AACF,iBAAA,CAAA;aACK,MAAA;AACLA,gBAAAA,OAAAA,EAAAA;AACF;AACF,SAAA,CAAA;AACF;IACAG,QAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC5J,YAAY,KAAK,IAAM,EAAA;AAC9B,YAAA,IAAI,IAAI,CAACA,YAAY,KAAK,CAAG,EAAA;gBAC3B6J,oBAAqB,CAAA,IAAI,CAAC7J,YAAY,CAAA;aACjC,MAAA;AACL,gBAAA,IAAI,CAAC8J,eAAe,CAAC,IAAI,CAAC9J,YAAY,CAAA;AACxC;YACA,IAAI,CAACA,YAAY,GAAG,IAAA;AACtB;AACF;AACA+J,IAAAA,OAAAA,CAAQC,IAAsC,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAChK,YAAY,KAAK,IAAM,EAAA;AAC9BoH,YAAAA,OAAAA,CAAQC,KAAK,CAAC,oCAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,IAAI,CAAC2C,IAAM,EAAA;AACT5C,YAAAA,OAAAA,CAAQC,KAAK,CAAC,gCAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAM4C,OAAO,IAAI;AACjBA,QAAAA,IAAAA,CAAK/J,YAAY,GAAG8J,IAAAA;AACnB,QAAA,CAAA,SAASzM,KAAAA,GAAAA;YACR,IAAI0M,IAAAA,CAAKxJ,MAAM,EAAE;gBACfwJ,IAAKjK,CAAAA,YAAY,GAAGkK,qBAAsB3M,CAAAA,KAAAA,CAAAA;aACrC,MAAA;AACL0M,gBAAAA,IAAAA,CAAKjK,YAAY,GAAGiK,IAAKE,CAAAA,SAAS,CAAC,IAAA;oBACjC,IAAIF,IAAAA,CAAKjK,YAAY,KAAK,IAAM,EAAA;AAC9BzC,wBAAAA,KAAAA,EAAAA;AACF;AACF,iBAAA,CAAA;AACF;YACA,IAAI0M,IAAAA,CAAK7D,UAAU,EAAI,EAAA;AACrB6D,gBAAAA,IAAAA,CAAK/J,YAAY,CAAC+J,IAAAA,CAAAA;AAClBA,gBAAAA,IAAAA,CAAKvD,QAAQ,EAAA;AACf;SACF,GAAA;AACF;IACA0D,gBAAmB,GAAA;AACjB,QAAA,IAAI,CAACzJ,WAAW,CAACgF,IAAI,CAAC;YACpB0E,mBAAqB,EAAA,IAAI,CAACC,sBAAsB,EAAA;YAChDC,WAAa,EAAA,IAAI,CAACrF,cAAc,EAAA;YAChCsF,QAAU,EAAA,IAAI,CAACC,WAAW,EAAA;YAC1BC,OAAS,EAAA,IAAI,CAACC,UAAU,EAAA;YACxBC,OAAS,EAAA,IAAI,CAACC,UAAU,EAAA;YACxBC,cAAgB,EAAA,IAAI,CAACC,eAAe,EAAA;YACpCC,YAAc,EAAA,IAAI,CAACC,eAAe,EAAA;YAClC3J,UAAY,EAAA;gBAAC,IAAI,CAAC4J,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA,CAAA;gBAAI,IAAI,CAACA,YAAY,CAAC,CAAA;AAAG;AACtG,SAAA,CAAA;AACF;IACAC,eAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAACxK,WAAW,CAAC/C,MAAM,KAAK,CAAG,EAAA;AACjCwJ,YAAAA,OAAAA,CAAQC,KAAK,CAAC,0CAAA,CAAA;SACT,MAAA;AACL,YAAA,MAAM+D,GAAM,GAAA,IAAI,CAACzK,WAAW,CAAC0K,GAAG,EAAA;AAChC,YAAA,IAAI,CAAC3G,cAAc,CAAC0G,GAAAA,CAAIb,WAAW,CAAA;AACnC,YAAA,IAAI,CAACe,WAAW,CAACF,GAAAA,CAAIZ,QAAQ,CAAA;AAC7B,YAAA,IAAI,CAACe,UAAU,CAACH,GAAAA,CAAIV,OAAO,CAAA;AAC3B,YAAA,IAAI,CAACc,UAAU,CAACJ,GAAAA,CAAIR,OAAO,CAAA;AAC3B,YAAA,IAAI,CAACzG,eAAe,CAACiH,GAAAA,CAAIN,cAAc,CAAA;AACvC,YAAA,IAAI,CAACW,eAAe,CAACL,GAAAA,CAAIJ,YAAY,CAAA;AACrC,YAAA,IAAI,CAACU,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACoK,YAAY,CAAC,MAAMN,GAAI9J,CAAAA,UAAU,CAAC,CAAE,CAAA,CAAA;AACzC,YAAA,IAAI,CAACqK,yBAAyB,CAACP,GAAAA,CAAIf,mBAAmB,CAAA;AACxD;AACF;IACAuB,aAAgB,GAAA;QACd,OAAO,IAAI,CAACpM,cAAc;AAC5B;AACAqM,IAAAA,gBAAAA,CAAiBC,GAAW,EAAE;AAC5B,QAAA,KAAK,MAAMC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC6B;SACrB,CAAE;YACD,KAAK,MAAMiE,OAAOyG,IAAM,CAAA;gBACtB,IAAIzG,GAAAA,CAAIwG,GAAG,KAAKA,GAAK,EAAA;oBACnB,OAAOxG,GAAAA;AACT;AACF;AACF;QACA,OAAO,IAAA;AACT;AACA0G,IAAAA,eAAAA,CAAgB3I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACV,SAAS,EAAA,CAAA;AACtE;AACAsJ,IAAAA,eAAAA,CAAgB5I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACV,SAAS,EAAA,CAAA;AACtE;AACAuJ,IAAAA,eAAAA,CAAgB7I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACR,SAAS,EAAA,CAAA;AACtE;AACAsJ,IAAAA,eAAAA,CAAgB9I,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC6B,cAAc,EAAK7B,GAAAA,GAAAA,GAAMtE,IAAKC,CAAAA,KAAK,CAACqE,GAAAA,GAAM,IAAI,CAACR,SAAS,EAAA,CAAA;AACtE;AACAuJ,IAAAA,kBAAAA,CAAmB3H,OAAwB,EAAE;AAC3C,QAAA,OAAO,IAAI,CAACpE,eAAe,CAAC+L,kBAAkB,CAAC3H,OAAAA,CAAAA;AACjD;AACA4H,IAAAA,mBAAAA,CAAoB5H,OAAyB,EAAE;AAC7C,QAAA,OAAO,IAAI,CAACpE,eAAe,CAACgM,mBAAmB,CAAC5H,OAAAA,CAAAA;AAClD;AACA6H,IAAAA,iBAAAA,CAAkBhH,GAAc,EAAU;QACxC,OAAO,IAAI,CAAC9F,cAAc,CAACsB,MAAM,CAACyC,GAAG,CAAC+B,GAAQ,CAAA,IAAA,EAAA;AAChD;AACAiH,IAAAA,YAAAA,CAAajH,GAAc,EAAE;AAC3B,QAAA,MAAMyG,IAAO,GAAA,IAAI,CAACS,gBAAgB,CAAClH,GAAAA,CAAAA;AACnC,QAAA,IAAIyG,IAAQA,IAAAA,IAAAA,CAAKU,OAAO,CAACnH,OAAO,CAAG,EAAA;AACjCyG,YAAAA,IAAAA,CAAKpG,IAAI,CAACL,GAAAA,CAAAA;YACV,IAAI,CAAC9F,cAAc,CAACsB,MAAM,CAAC0B,GAAG,CAAC8C,GAAK,EAAA,IAAIoH,KAAQC,EAAAA,CAAAA,KAAK,IAAI,EAAA,CAAA;YACzD,IAAI,CAACjK,aAAa,CAAC,iBAAmB4C,EAAAA,GAAAA,CAAAA;AACxC;AACF;AACAE,IAAAA,eAAAA,CAAgBF,GAAc,EAAE;AAC9B,QAAA,MAAMyG,IAAO,GAAA,IAAI,CAACS,gBAAgB,CAAClH,GAAAA,CAAAA;AACnC,QAAA,IAAIyG,IAAM,EAAA;YACR,MAAMa,KAAAA,GAAQb,IAAKU,CAAAA,OAAO,CAACnH,GAAAA,CAAAA;AAC3B,YAAA,IAAIsH,SAAS,CAAG,EAAA;gBACdb,IAAKc,CAAAA,MAAM,CAACD,KAAO,EAAA,CAAA,CAAA;AACnB,gBAAA,IAAI,CAACpN,cAAc,CAACsB,MAAM,CAACgM,MAAM,CAACxH,GAAAA,CAAAA;gBAClC,IAAI,CAAC5C,aAAa,CAAC,mBAAqB4C,EAAAA,GAAAA,CAAAA;AAC1C;AACF;AACF;AACAyH,IAAAA,qBAAAA,CAAsBC,KAAa,EAAE;QACnC,IAAI,CAACvN,WAAW,IAAIuN,KAAAA;AACtB;AAUA,IAAA,MAAgBC,WAAc,GAAA;QAC5B,OAAO,IAAIzD,QAAc,CAACC,OAAAA,GAAAA;AACxB,YAAA,IAAI,CAACyD,IAAI,CACP,UACA,CAAC5O,QAAAA,EAAkBG,WAAmBG,WAAqBC,EAAAA,YAAAA,GAAAA;AACzD,gBAAA,IAAI,CAACsO,aAAa,CAAC7O,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AACrD,gBAAA,IAAI,CAACuO,EAAE,CACL,UACA,CAAC9O,QAAAA,EAAkBG,WAAmBG,WAAqBC,EAAAA,YAAAA,GAAAA;AACzD,oBAAA,IAAI,CAACsO,aAAa,CAAC7O,QAAAA,EAAUG,WAAWG,WAAaC,EAAAA,YAAAA,CAAAA;AACvD,iBAAA,CAAA;AAEF4K,gBAAAA,OAAAA,EAAAA;AACF,aAAA,CAAA;YAEF,IAAI,CAAC/I,QAAQ,CAACvD,IAAI,EAAA;AACpB,SAAA,CAAA;AACF;IACQmJ,eAAkB,GAAA;AACxB,QAAA,IAAI,CAACzG,UAAU,CAACkC,SAAS,GAAG,CAAA;AAC5B,QAAA,IAAI,CAAClC,UAAU,CAACmC,YAAY,GAAG,CAAA;QAC/B,MAAMqE,GAAAA,GAAM,IAAI,CAAC1G,eAAe;AAChC,QAAA,IAAI,IAAI,CAACE,UAAU,CAAC4B,cAAc,KAAK,CAAG,EAAA;AACxC,YAAA,IAAI,CAAC5B,UAAU,CAAC4B,cAAc,GAAG4E,GAAAA;AACjC,YAAA,IAAI,CAACxG,UAAU,CAAC6B,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAC7B,UAAU,CAAC8B,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAC9B,UAAU,CAAC+B,YAAY,GAAG,CAAA;AAC/B,YAAA,IAAI,CAAC/B,UAAU,CAACgC,cAAc,GAAG,CAAA;AACjC,YAAA,IAAI,CAAChC,UAAU,CAACiC,GAAG,GAAG,CAAA;AACtB,YAAA,IAAI,CAAC7B,WAAW,CAACoC,IAAI,GAAGgE,GAAAA;YACxB,IAAI,CAACpG,WAAW,CAACqC,KAAK,GAAG,IAAI,CAACzC,UAAU,CAAC2B,YAAY;YACrD,IAAI,IAAI,CAACzB,SAAS,EAAE;gBAClB,IAAI,CAACA,SAAS,CAACsN,KAAK,EAAA;AACtB;SACK,MAAA;YACL,IAAI,CAACxN,UAAU,CAAC+B,YAAY,GAAGyE,MAAM,IAAI,CAACxG,UAAU,CAAC4B,cAAc;YACnE,IAAI,CAAC5B,UAAU,CAACgC,cAAc,IAAI,IAAI,CAAChC,UAAU,CAAC+B,YAAY;AAC9D,YAAA,IAAI0L,OAAU,GAAA,CAAA;AACd,YAAA,IAAIC,OAAU,GAAA,CAAA;AACd,YAAA,IAAI,IAAI,CAAC3N,aAAa,KAAK,CAAG,EAAA;gBAC5B0N,OAAUjH,GAAAA,GAAAA,GAAM,IAAI,CAACzG,aAAa;gBAClC2N,OAAU,GAAA,IAAI,CAAC3N,aAAa,GAAG,IAAI,CAACC,UAAU,CAAC4B,cAAc;AAC/D;AACA,YAAA,IAAI,CAAC5B,UAAU,CAAC4B,cAAc,GAAG4E,GAAAA;AACjC,YAAA,IAAIA,OAAO,IAAI,CAACpG,WAAW,CAACoC,IAAI,GAAG,IAAM,EAAA;AACvC,gBAAA,IAAI,CAACxC,UAAU,CAACiC,GAAG,GACf,CAAA,IAAI,CAACjC,UAAU,CAAC2B,YAAY,GAAG,IAAI,CAACvB,WAAW,CAACqC,KAAK,IAAI,IAAS+D,IAAAA,GAAM,GAAA,IAAI,CAACpG,WAAW,CAACoC,IAAI,CAAD;AAChG,gBAAA,IAAI,CAACpC,WAAW,CAACoC,IAAI,GAAGgE,GAAAA;gBACxB,IAAI,CAACpG,WAAW,CAACqC,KAAK,GAAG,IAAI,CAACzC,UAAU,CAAC2B,YAAY;AACrD,gBAAA,IAAI,CAAC3B,UAAU,CAAC8B,cAAc,GAAG2L,OAAAA;AACjC,gBAAA,IAAI,CAACzN,UAAU,CAAC6B,cAAc,GAAG6L,OAAAA;AACnC;AACF;AACA,QAAA,MAAMC,GAAM,GAAA,IAAI,CAAC3N,UAAU,CAACoC,aAAa;QACzC,IAAI,CAACpC,UAAU,CAACoC,aAAa,GAAG,IAAI,CAACpC,UAAU,CAACqC,iBAAiB;AACjE,QAAA,IAAI,CAACrC,UAAU,CAACqC,iBAAiB,GAAGsL,GAAAA;AACpC,QAAA,KAAK,MAAMlE,CAAK,IAAA,IAAI,CAACzJ,UAAU,CAACqC,iBAAiB,CAAE;AACjDoH,YAAAA,CAAAA,EAAAA;AACF;AACA,QAAA,IAAI,CAACzJ,UAAU,CAACqC,iBAAiB,CAACtE,MAAM,GAAG,CAAA;AAC7C;AACQ4O,IAAAA,gBAAAA,CAAiBlH,GAAc,EAAE;AACvC,QAAA,IAAIyG,IAA8B,GAAA,IAAA;QAClC,IAAIzG,GAAAA,CAAImI,SAAS,EAAI,EAAA;AACnB1B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAACwB,QAAQ;SAC9B,MAAA,IAAIsE,GAAIoI,CAAAA,SAAS,EAAI,EAAA;AAC1B3B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAACyB,QAAQ;SAC9B,MAAA,IAAIqE,GAAIqI,CAAAA,QAAQ,EAAI,EAAA;AACzB5B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC0B,OAAO;SAC7B,MAAA,IAAIoE,GAAIsI,CAAAA,aAAa,EAAI,EAAA;AAC9B7B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC4B,YAAY;SAClC,MAAA,IAAIkE,GAAIuI,CAAAA,SAAS,EAAI,EAAA;AAC1B9B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC2B,QAAQ;SAC9B,MAAA,IAAImE,GAAIwI,CAAAA,cAAc,EAAI,EAAA;AAC/B/B,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC6B,kBAAkB;SACxC,MAAA,IAAIiE,GAAIyI,CAAAA,WAAW,EAAI,EAAA;AAC5BhC,YAAAA,IAAAA,GAAO,IAAI,CAACvM,cAAc,CAAC8B,UAAU;AACvC;QACA,OAAOyK,IAAAA;AACT;IACUiC,aAAgB,GAAA;AACxB,QAAA,KAAK,MAAMjC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC6B,kBAAkB;YACtC,IAAI,CAAC7B,cAAc,CAAC8B;SACrB,CAAE;YACD,KAAK,MAAMgE,OAAOyG,IAAM,CAAA;gBACtB,IAAI,CAAC1G,aAAa,CAACC,GAAK,EAAA,KAAA,CAAA;AAC1B;AACF;QACA,IAAI,IAAI,CAACG,aAAa,EAAI,EAAA;AACxB,YAAA,KAAK,MAAMH,GAAAA,IAAO,IAAI,CAAC5F,kBAAkB,CAAE;AACzC4F,gBAAAA,GAAAA,CAAII,OAAO,EAAA;AACb;YACA,IAAI,CAAChG,kBAAkB,GAAG,EAAE;AAC9B;AACF;IACUuO,SAAY,GAAA;AACpB,QAAA,KAAK,MAAMlC,IAAQ,IAAA;YACjB,IAAI,CAACvM,cAAc,CAAC0B,OAAO;YAC3B,IAAI,CAAC1B,cAAc,CAACwB,QAAQ;YAC5B,IAAI,CAACxB,cAAc,CAACyB,QAAQ;YAC5B,IAAI,CAACzB,cAAc,CAAC2B,QAAQ;YAC5B,IAAI,CAAC3B,cAAc,CAAC4B,YAAY;YAChC,IAAI,CAAC5B,cAAc,CAAC6B,kBAAkB;YACtC,IAAI,CAAC7B,cAAc,CAAC8B;SACrB,CAAE;;AAED,YAAA,KAAK,MAAMgE,GAAAA,IAAOyG,IAAKmC,CAAAA,KAAK,EAAI,CAAA;AAC9B5I,gBAAAA,GAAAA,CAAI6I,MAAM,EAAA;AACZ;AACF;AACA,QAAA;AACF;AACUC,IAAAA,mBAAAA,CAAoB3J,OAAgC,EAAE;AAC9D,QAAA,MAAM4J,eAAe5J,OAAS6J,EAAAA,UAAAA,KAAe,KAAQC,GAAAA,qBAAAA,CAAsBC,YAAY,GAAG,CAAA;AAC1F,QAAA,MAAMC,YAAehK,GAAAA,OAAAA,EAASiK,QAAWH,GAAAA,qBAAAA,CAAsBI,WAAW,GAAG,CAAA;AAC7E,QAAA,MAAMC,WAAcnK,GAAAA,OAAAA,EAASsD,OAAUwG,GAAAA,qBAAAA,CAAsBM,OAAO,GAAG,CAAA;QACvE,IAAIR,YAAAA,IAAgB5J,SAASqK,cAAgB,EAAA;YAC3CrK,OAAQqK,CAAAA,cAAc,CAACC,SAAS,GAAG,MAAA;AACrC;AACA,QAAA,OAAOV,eAAeI,YAAeG,GAAAA,WAAAA;AACvC;IACUI,kBAAmBvK,CAAAA,OAA+B,EAAEwK,YAA0B,EAAE;AACxFxK,QAAAA,OAAAA,GAAUA,WAAW,EAAC;QACtB,MAAM0C,KAAAA,GAAQ1C,OAAQ0C,CAAAA,KAAK,IAAI8H,YAAAA;QAC/B,IAAIC,SAAAA;QACJ,OAAQ/H,KAAAA;YACN,KAAK,SAAA;AACH+H,gBAAAA,SAAAA,GAAYX,sBAAsBY,UAAU;AAC5C1K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClBvD,gBAAAA,OAAAA,CAAQsD,OAAO,GAAGtD,OAAQsD,CAAAA,OAAO,IAAI,IAAA;AACrC,gBAAA;YACF,KAAK,QAAA;AACHmH,gBAAAA,SAAAA,GAAYX,sBAAsBa,SAAS;AAC3C,gBAAA;YACF,KAAK,OAAA;AACHF,gBAAAA,SAAAA,GAAYX,sBAAsBc,QAAQ;AAC1C,gBAAA;YACF,KAAK,MAAA;AACHH,gBAAAA,SAAAA,GAAYX,sBAAsBe,OAAO;AACzC7K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,OAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBgB,QAAQ;AAC1C9K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,YAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBiB,aAAa;AAC/C/K,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;YACF,KAAK,cAAA;AACHkH,gBAAAA,SAAAA,GAAYX,sBAAsBkB,eAAe;AACjDhL,gBAAAA,OAAAA,CAAQuD,OAAO,GAAG,KAAA;AAClB,gBAAA;AACF,YAAA;gBACEkH,SAAY,GAAA,CAAA;AACZ,gBAAA;AACJ;AACA,QAAA,MAAMQ,cAAc,OAACjL,EAASwD,WAAW,KAASsG,GAAAA,qBAAAA,CAAsBoB,UAAU,GAAG,CAAA;AACrF,QAAA,MAAMf,cAAc,OAACnK,EAASsD,WAAW,KAASwG,GAAAA,qBAAAA,CAAsBM,OAAO,GAAG,CAAA;QAClF,MAAMe,WAAAA,GAAchB,WAAgB,KAAA,CAAA,KAAMnK,OAAAA,EAASuD,WAAW,IAAG,CAAA,GAAKuG,qBAAsBsB,CAAAA,OAAO,GAAG,CAAA;QACtG,OAAOX,SAAAA,GAAYQ,cAAcd,WAAcgB,GAAAA,WAAAA;AACjD;AACF;;;;"}
1
+ {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable, Rect, Vector3 } from '@zephyr3d/base';\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 TimestampQueryFilter,\r\n TimestampQueryHandle,\r\n TimestampQueryOptions,\r\n TimestampQueryResult\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 beginTimestampQuery(_label?: string, _options?: TimestampQueryOptions): number {\r\n return 0;\r\n }\r\n endTimestampQuery(_id: number): void {\r\n return;\r\n }\r\n pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult> {\r\n return this.createUnsupportedTimestampQueryResult(query);\r\n }\r\n resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult> {\r\n return Promise.resolve(this.createUnsupportedTimestampQueryResult(query));\r\n }\r\n collectTimestampQueries(_filter?: TimestampQueryFilter): TimestampQueryResult[] {\r\n return [];\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 private createUnsupportedTimestampQueryResult(query: TimestampQueryHandle): TimestampQueryResult {\r\n return {\r\n id: typeof query === 'number' ? query : 0,\r\n label: typeof query === 'string' ? query : '',\r\n frameId: this._frameInfo.frameCounter,\r\n durationMs: 0,\r\n start: 0n,\r\n end: 0n,\r\n status: 'unsupported',\r\n message: 'GPU timestamp queries are not supported by this device'\r\n };\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","beginTimestampQuery","_label","_options","endTimestampQuery","_id","pollTimestampQuery","query","createUnsupportedTimestampQueryResult","resolveTimestampQuery","Promise","resolve","collectTimestampQueries","_filter","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","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","id","label","frameId","durationMs","start","status","message","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3117,6 +3117,58 @@ interface FrameInfo {
3117
3117
  /** How many compute calls were sent to the GPU in current frame */
3118
3118
  computeCalls: number;
3119
3119
  }
3120
+ /**
3121
+ * Timestamp query result status.
3122
+ * @public
3123
+ */
3124
+ type TimestampQueryStatus = 'pending' | 'resolved' | 'unsupported' | 'invalid' | 'auto-closed' | 'exhausted' | 'failed';
3125
+ /**
3126
+ * Options for a GPU timestamp query scope.
3127
+ * @public
3128
+ */
3129
+ interface TimestampQueryOptions {
3130
+ /** Include pending GPU upload/copy commands at the timestamp boundary. Default true. */
3131
+ includePendingUploads?: boolean;
3132
+ /** Allow the query scope to remain open across frame boundaries. Default false. */
3133
+ allowCrossFrame?: boolean;
3134
+ /** Throw on invalid begin/end usage instead of warning. Default false. */
3135
+ strict?: boolean;
3136
+ }
3137
+ /**
3138
+ * GPU timestamp query scope result.
3139
+ * @public
3140
+ */
3141
+ type TimestampQueryHandle = number | string;
3142
+ interface TimestampQueryResult {
3143
+ /** Unique query scope id. */
3144
+ id: number;
3145
+ /** Debug label. Labels are not unique. */
3146
+ label: string;
3147
+ /** Frame in which the scope began. */
3148
+ frameId: number;
3149
+ /** Duration in milliseconds. */
3150
+ durationMs: number;
3151
+ /** Raw GPU start timestamp. */
3152
+ start: bigint;
3153
+ /** Raw GPU end timestamp. */
3154
+ end: bigint;
3155
+ /** Query result status. */
3156
+ status: TimestampQueryStatus;
3157
+ /** True if the scope was closed automatically at frame end. */
3158
+ autoClosed?: boolean;
3159
+ /** Optional diagnostic message. */
3160
+ message?: string;
3161
+ }
3162
+ /**
3163
+ * Filter used to collect timestamp query results.
3164
+ * @public
3165
+ */
3166
+ interface TimestampQueryFilter {
3167
+ /** Result label to match. */
3168
+ label?: string;
3169
+ /** Frame id to match. */
3170
+ frameId?: number;
3171
+ }
3120
3172
  /**
3121
3173
  * List of all gpu objects
3122
3174
  * @public
@@ -3188,6 +3240,8 @@ interface MiscCaps {
3188
3240
  maxBindGroups: number;
3189
3241
  /** The maximum number of texture coordinate index */
3190
3242
  maxTexCoordIndex: number;
3243
+ /** True if the device supports GPU timestamp query scopes */
3244
+ supportTimestampQuery: boolean;
3191
3245
  }
3192
3246
  /**
3193
3247
  * Shader related capabilities of the device
@@ -3449,6 +3503,26 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3449
3503
  clearFrameBuffer(clearColor: Nullable<Vector4>, clearDepth: Nullable<number>, clearStencil: Nullable<number>): void;
3450
3504
  /** Creates a GPU timer */
3451
3505
  createGPUTimer(): Nullable<ITimer>;
3506
+ /**
3507
+ * Begin a GPU timestamp query scope.
3508
+ *
3509
+ * @remarks
3510
+ * The returned id is the only unique handle. Labels are only for grouping/debugging.
3511
+ */
3512
+ beginTimestampQuery(label?: string, options?: TimestampQueryOptions): number;
3513
+ /** End a GPU timestamp query scope. */
3514
+ endTimestampQuery(id: number): void;
3515
+ /**
3516
+ * Poll a timestamp query result. Returns null when the query is still pending.
3517
+ *
3518
+ * @remarks
3519
+ * Passing a numeric id is unambiguous. Passing a label resolves the latest matching scope.
3520
+ */
3521
+ pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult>;
3522
+ /** Resolve a timestamp query result asynchronously. */
3523
+ resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult>;
3524
+ /** Collect resolved timestamp query results. */
3525
+ collectTimestampQueries(filter?: TimestampQueryFilter): TimestampQueryResult[];
3452
3526
  /** Creates a render state set object */
3453
3527
  createRenderStateSet(): RenderStateSet;
3454
3528
  /** Creates a blending state object */
@@ -4029,6 +4103,11 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
4029
4103
  disposeObject(obj: GPUObject, remove?: boolean): void;
4030
4104
  restoreObject(obj: GPUObject): void;
4031
4105
  enableGPUTimeRecording(enable: boolean): void;
4106
+ beginTimestampQuery(_label?: string, _options?: TimestampQueryOptions): number;
4107
+ endTimestampQuery(_id: number): void;
4108
+ pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult>;
4109
+ resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult>;
4110
+ collectTimestampQueries(_filter?: TimestampQueryFilter): TimestampQueryResult[];
4032
4111
  beginFrame(): boolean;
4033
4112
  endFrame(): void;
4034
4113
  getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number): VertexAttribFormat | null;
@@ -4063,6 +4142,7 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
4063
4142
  protected initResizer(): Promise<void>;
4064
4143
  private updateFrameInfo;
4065
4144
  private getGPUObjectList;
4145
+ private createUnsupportedTimestampQueryResult;
4066
4146
  protected invalidateAll(): void;
4067
4147
  protected reloadAll(): void;
4068
4148
  protected parseTextureOptions(options?: TextureCreationOptions): number;
@@ -4313,4 +4393,4 @@ declare class StructuredBufferData {
4313
4393
  set(name: string, value: StructuredValue): void;
4314
4394
  }
4315
4395
 
4316
- export { type AbstractDevice, type ArrayTypeDetail, type AtlasInfo, type AtomicTypeInfoDetail, type BaseCreationOptions, BaseDevice, type BaseTexture, type BindGroup, type BindGroupLayout, type BindGroupLayoutEntry, type BindPointInfo, type BlendEquation, type BlendFunc, type BlendingState, type BufferBindingLayout, type BufferCreationOptions, type BufferUsage, CPUTimer, type ColorState, type CompareFunc, type ComputeProgramConstructParams, type DataType, type DepthState, type DeviceBackend, type DeviceCaps, type DeviceEventMap, type DeviceOptions, type DeviceViewport, DrawText, type DrawTextLayoutOptions, type ExpValueNonArrayType, type ExpValueType, type ExternalTextureBindingLayout, type FaceMode, type FaceWinding, Font, type FrameBuffer, type FrameBufferOptions, type FrameBufferTextureAttachment, type FrameInfo, type FramebufferCaps, type FunctionTypeDetail, type GPUDataBuffer, type GPUObject, type GPUObjectList, type GPUProgram, type GPUProgramConstructParams, GPUResourceUsageFlags, GlyphManager, type ITimer, type IndexBuffer, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, type MiscCaps, PBAddressSpace, PBAnyTypeInfo, PBArrayTypeInfo, PBAtomicI32TypeInfo, PBAtomicU32TypeInfo, PBBuiltinScope, type PBComputeOptions, PBDoWhileScope, PBForScope, PBFunctionScope, PBFunctionTypeInfo, PBGlobalScope, PBIfScope, PBInputScope, PBInsideFunctionScope, PBLocalScope, PBNakedScope, PBOutputScope, PBPointerTypeInfo, PBPrimitiveType, PBPrimitiveTypeInfo, PBReflection, type PBReflectionTagGetter, type PBRenderOptions, PBSamplerAccessMode, PBSamplerTypeInfo, PBScope, PBShaderExp, type PBStructLayout, PBStructTypeInfo, PBTextureType, PBTextureTypeInfo, PBTypeInfo, PBVoidTypeInfo, PBWhileScope, type PointerTypeDetail, Pool, type PrimitiveType, type PrimitiveTypeDetail, ProgramBuilder, Proxiable, type RasterizerState, type RenderBundle, type RenderProgramConstructParams, type RenderStateSet, type SamplerBindingLayout, type SamplerOptions, type SamplerTypeDetail, type ShaderCaps, type ShaderExpTagRecord, type ShaderExpTagValue, type ShaderKind, ShaderType, type ShaderTypeFunc, type StencilOp, type StencilState, type StorageTextureBindingLayout, type StructTypeDetail, type StructuredBuffer, StructuredBufferData, type StructuredValue, type TextHorizontalAlignment, type TextVerticalAlignment, type Texture2D, type Texture2DArray, type Texture3D, type TextureAddressMode, TextureAtlasManager, type TextureBindingLayout, type TextureCaps, type TextureColorSpace, type TextureCreationOptions, type TextureCube, type TextureFilterMode, type TextureFormat, type TextureFormatInfo, type TextureImageElement, type TextureMipmapData, type TextureMipmapLevelData, type TextureSampler, type TextureType, type TextureTypeDetail, type TextureVideo, type TypeDetailInfo, type UniformBufferLayout, type UniformLayout, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, type VertexAttribFormat, type VertexBufferInfo, VertexData, type VertexLayout, type VertexLayoutOptions, type VertexSemantic, type VertexStepMode, type WebGLContext, genDefaultName, getTextureFormatBlockHeight, getTextureFormatBlockSize, getTextureFormatBlockWidth, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexAttributeFormat, getVertexAttributeIndex, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, hasAlphaChannel, hasBlueChannel, hasDepthChannel, hasGreenChannel, hasRedChannel, hasStencilChannel, isCompressedTextureFormat, isFloatTextureFormat, isIntegerTextureFormat, isSRGBTextureFormat, isSignedTextureFormat, linearTextureFormatToSRGB, makeVertexBufferType, matchVertexBuffer, semanticList };
4396
+ export { type AbstractDevice, type ArrayTypeDetail, type AtlasInfo, type AtomicTypeInfoDetail, type BaseCreationOptions, BaseDevice, type BaseTexture, type BindGroup, type BindGroupLayout, type BindGroupLayoutEntry, type BindPointInfo, type BlendEquation, type BlendFunc, type BlendingState, type BufferBindingLayout, type BufferCreationOptions, type BufferUsage, CPUTimer, type ColorState, type CompareFunc, type ComputeProgramConstructParams, type DataType, type DepthState, type DeviceBackend, type DeviceCaps, type DeviceEventMap, type DeviceOptions, type DeviceViewport, DrawText, type DrawTextLayoutOptions, type ExpValueNonArrayType, type ExpValueType, type ExternalTextureBindingLayout, type FaceMode, type FaceWinding, Font, type FrameBuffer, type FrameBufferOptions, type FrameBufferTextureAttachment, type FrameInfo, type FramebufferCaps, type FunctionTypeDetail, type GPUDataBuffer, type GPUObject, type GPUObjectList, type GPUProgram, type GPUProgramConstructParams, GPUResourceUsageFlags, GlyphManager, type ITimer, type IndexBuffer, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, type MiscCaps, PBAddressSpace, PBAnyTypeInfo, PBArrayTypeInfo, PBAtomicI32TypeInfo, PBAtomicU32TypeInfo, PBBuiltinScope, type PBComputeOptions, PBDoWhileScope, PBForScope, PBFunctionScope, PBFunctionTypeInfo, PBGlobalScope, PBIfScope, PBInputScope, PBInsideFunctionScope, PBLocalScope, PBNakedScope, PBOutputScope, PBPointerTypeInfo, PBPrimitiveType, PBPrimitiveTypeInfo, PBReflection, type PBReflectionTagGetter, type PBRenderOptions, PBSamplerAccessMode, PBSamplerTypeInfo, PBScope, PBShaderExp, type PBStructLayout, PBStructTypeInfo, PBTextureType, PBTextureTypeInfo, PBTypeInfo, PBVoidTypeInfo, PBWhileScope, type PointerTypeDetail, Pool, type PrimitiveType, type PrimitiveTypeDetail, ProgramBuilder, Proxiable, type RasterizerState, type RenderBundle, type RenderProgramConstructParams, type RenderStateSet, type SamplerBindingLayout, type SamplerOptions, type SamplerTypeDetail, type ShaderCaps, type ShaderExpTagRecord, type ShaderExpTagValue, type ShaderKind, ShaderType, type ShaderTypeFunc, type StencilOp, type StencilState, type StorageTextureBindingLayout, type StructTypeDetail, type StructuredBuffer, StructuredBufferData, type StructuredValue, type TextHorizontalAlignment, type TextVerticalAlignment, type Texture2D, type Texture2DArray, type Texture3D, type TextureAddressMode, TextureAtlasManager, type TextureBindingLayout, type TextureCaps, type TextureColorSpace, type TextureCreationOptions, type TextureCube, type TextureFilterMode, type TextureFormat, type TextureFormatInfo, type TextureImageElement, type TextureMipmapData, type TextureMipmapLevelData, type TextureSampler, type TextureType, type TextureTypeDetail, type TextureVideo, type TimestampQueryFilter, type TimestampQueryHandle, type TimestampQueryOptions, type TimestampQueryResult, type TimestampQueryStatus, type TypeDetailInfo, type UniformBufferLayout, type UniformLayout, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, type VertexAttribFormat, type VertexBufferInfo, VertexData, type VertexLayout, type VertexLayoutOptions, type VertexSemantic, type VertexStepMode, type WebGLContext, genDefaultName, getTextureFormatBlockHeight, getTextureFormatBlockSize, getTextureFormatBlockWidth, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexAttributeFormat, getVertexAttributeIndex, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, hasAlphaChannel, hasBlueChannel, hasDepthChannel, hasGreenChannel, hasRedChannel, hasStencilChannel, isCompressedTextureFormat, isFloatTextureFormat, isIntegerTextureFormat, isSRGBTextureFormat, isSignedTextureFormat, linearTextureFormatToSRGB, makeVertexBufferType, matchVertexBuffer, semanticList };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zephyr3d/device",
3
- "version": "0.2.11",
3
+ "version": "0.2.12",
4
4
  "description": "Device API for zephyr3d",
5
5
  "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
6
  "type": "module",