@zephyr3d/device 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base_types.js.map +1 -1
- package/dist/device.js +9 -2
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/pool.js +2 -2
- package/dist/pool.js.map +1 -1
- package/package.json +2 -2
package/dist/base_types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_types.js","sources":["../src/base_types.ts"],"sourcesContent":["import type { TypedArray, Vector4, IEventTarget, Nullable, Immutable } 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 /** 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 /** 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 * 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: string): 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, viewport?: Immutable<number[]>): 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 } 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 /** 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 * 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: string): 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, viewport?: Immutable<number[]>): 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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"}
|
package/dist/device.js
CHANGED
|
@@ -56,8 +56,9 @@ class ResizeHandler {
|
|
|
56
56
|
}
|
|
57
57
|
_handleResizeEntry(_entry) {
|
|
58
58
|
// CSS pixel
|
|
59
|
-
const
|
|
60
|
-
const
|
|
59
|
+
const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;
|
|
60
|
+
const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;
|
|
61
|
+
const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;
|
|
61
62
|
// Device pixel
|
|
62
63
|
/*
|
|
63
64
|
let deviceWidth: number;
|
|
@@ -140,6 +141,7 @@ class ResizeHandler {
|
|
|
140
141
|
this._dpr = dpr ?? window.devicePixelRatio ?? 1;
|
|
141
142
|
this._backend = backend;
|
|
142
143
|
this._gpuObjectList = {
|
|
144
|
+
stacks: new Map(),
|
|
143
145
|
textures: [],
|
|
144
146
|
samplers: [],
|
|
145
147
|
buffers: [],
|
|
@@ -518,10 +520,14 @@ class ResizeHandler {
|
|
|
518
520
|
buildComputeProgram(options) {
|
|
519
521
|
return this._programBuilder.buildComputeProgram(options);
|
|
520
522
|
}
|
|
523
|
+
getGPUObjectStack(obj) {
|
|
524
|
+
return this._gpuObjectList.stacks.get(obj) ?? '';
|
|
525
|
+
}
|
|
521
526
|
addGPUObject(obj) {
|
|
522
527
|
const list = this.getGPUObjectList(obj);
|
|
523
528
|
if (list && list.indexOf(obj) < 0) {
|
|
524
529
|
list.push(obj);
|
|
530
|
+
this._gpuObjectList.stacks.set(obj, new Error().stack ?? '');
|
|
525
531
|
this.dispatchEvent('gpuobject_added', obj);
|
|
526
532
|
}
|
|
527
533
|
}
|
|
@@ -531,6 +537,7 @@ class ResizeHandler {
|
|
|
531
537
|
const index = list.indexOf(obj);
|
|
532
538
|
if (index >= 0) {
|
|
533
539
|
list.splice(index, 1);
|
|
540
|
+
this._gpuObjectList.stacks.delete(obj);
|
|
534
541
|
this.dispatchEvent('gpuobject_removed', obj);
|
|
535
542
|
}
|
|
536
543
|
}
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable } 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} 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 cssWidth = _entry.contentBoxSize[0].inlineSize;\r\n const cssHeight = _entry.contentBoxSize[0].blockSize;\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 textures: [],\r\n samplers: [],\r\n buffers: [],\r\n programs: [],\r\n framebuffers: [],\r\n vertexArrayObjects: [],\r\n bindGroups: []\r\n };\r\n this._canvas = cvs;\r\n this._canvas.setAttribute('tabindex', '1');\r\n this._canvasClientWidth = cvs.clientWidth;\r\n this._canvasClientHeight = cvs.clientHeight;\r\n this._gpuMemCost = 0;\r\n this._disposeObjectList = [];\r\n this._beginFrameTime = 0;\r\n this._endFrameTime = 0;\r\n this._runLoopFunc = null;\r\n this._frameInfo = {\r\n frameCounter: 0,\r\n frameTimestamp: 0,\r\n elapsedTimeCPU: 0,\r\n elapsedTimeGPU: 0,\r\n elapsedFrame: 0,\r\n elapsedOverall: 0,\r\n FPS: 0,\r\n drawCalls: 0,\r\n computeCalls: 0,\r\n nextFrameCall: [],\r\n nextFrameCallNext: []\r\n };\r\n this._programBuilder = new ProgramBuilder(this);\r\n this._cpuTimer = new CPUTimer();\r\n this._gpuTimer = null;\r\n this._runningLoop = null;\r\n this._fpsCounter = { time: 0, frame: 0 };\r\n this._stateStack = [];\r\n this._beginFrameCounter = 0;\r\n this._poolMap = new Map();\r\n this._defaultPoolKey = Symbol('defaultPool');\r\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\r\n this._temporalFramebuffer = false;\r\n this._temporalFramebuffer = false;\r\n this._vSync = true;\r\n //this._registerEventHandlers();\r\n this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.height / this._canvas.clientHeight;\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n abstract createGPUTimer(): Nullable<ITimer>;\r\n abstract createRenderStateSet(): RenderStateSet;\r\n abstract createBlendingState(): BlendingState;\r\n abstract createColorState(): ColorState;\r\n abstract createRasterizerState(): RasterizerState;\r\n abstract createDepthState(): DepthState;\r\n abstract createStencilState(): StencilState;\r\n abstract createSampler(options: SamplerOptions): TextureSampler;\r\n abstract createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<T>;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture3D>;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<TextureCube>;\r\n abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n abstract reverseVertexWindingOrder(reverse: boolean): void;\r\n abstract isWindingOrderReversed(): boolean;\r\n abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\r\n abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n abstract copyBuffer(\r\n sourceBuffer: GPUDataBuffer,\r\n destBuffer: GPUDataBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ): void;\r\n abstract createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n abstract createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n abstract createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getViewport(): Immutable<DeviceViewport>;\r\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getScissor(): Immutable<DeviceViewport>;\r\n abstract setProgram(program: Nullable<GPUProgram>): void;\r\n abstract getProgram(): Nullable<GPUProgram>;\r\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n abstract getVertexLayout(): Nullable<VertexLayout>;\r\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n abstract getRenderStates(): Nullable<RenderStateSet>;\r\n abstract getFramebuffer(): Nullable<FrameBuffer>;\r\n abstract setBindGroup(\r\n index: number,\r\n bindGroup: BindGroup,\r\n dynamicOffsets?: Nullable<Iterable<number>>\r\n ): void;\r\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number): void;\r\n // misc\r\n abstract readPixels(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n abstract beginCapture(): void;\r\n abstract endCapture(): RenderBundle;\r\n abstract looseContext(): void;\r\n abstract restoreContext(): void;\r\n protected abstract _executeRenderBundle(renderBundle: RenderBundle): number;\r\n protected abstract _draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n protected abstract _drawInstanced(\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ): void;\r\n protected abstract _compute(\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ): void;\r\n get backend() {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage() {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo() {\r\n return this._frameInfo;\r\n }\r\n get isRendering() {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get type() {\r\n return this._backend.typeName();\r\n }\r\n get vSync() {\r\n return this._vSync;\r\n }\r\n set vSync(val) {\r\n this._vSync = !!val;\r\n }\r\n get pool() {\r\n return this._poolMap.get(this._defaultPoolKey)!;\r\n }\r\n get runLoopFunction() {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder() {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol) {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol) {\r\n let pool = this._poolMap.get(key);\r\n if (!pool) {\r\n pool = new Pool(this, key);\r\n this._poolMap.set(key, pool);\r\n }\r\n return pool;\r\n }\r\n setFont(fontName: string) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n drawText(text: string, x: number, y: number, color: string, viewport?: Immutable<number[]>) {\r\n DrawText.drawText(this, text, color, x, y, viewport);\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 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.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.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","cssWidth","contentBoxSize","inlineSize","cssHeight","blockSize","deviceWidth","deviceHeight","clientWidth","clientHeight","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","textures","samplers","buffers","programs","framebuffers","vertexArrayObjects","bindGroups","setAttribute","frameCounter","frameTimestamp","elapsedTimeCPU","elapsedTimeGPU","elapsedFrame","elapsedOverall","FPS","drawCalls","computeCalls","nextFrameCall","nextFrameCallNext","ProgramBuilder","CPUTimer","time","frame","Map","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","drawText","text","x","y","color","viewport","setFramebuffer","colorOrRT","depth","sampleCount","newRT","temporal","Array","isArray","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","options","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","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setRenderStates","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","addGPUObject","getGPUObjectList","indexOf","index","splice","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Immutable, Nullable } 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} from './base_types';\r\nimport { DrawText } from './helpers';\r\nimport { Pool } from './pool';\r\n\r\n/**\r\n * The device backend interface\r\n * @public\r\n */\r\nexport interface DeviceBackend {\r\n typeName(): string;\r\n supported(): Promise<boolean>;\r\n createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;\r\n}\r\n\r\ntype DeviceState = {\r\n framebuffer: Nullable<FrameBuffer>;\r\n windowOrderReversed: boolean;\r\n viewport: DeviceViewport;\r\n scissor: DeviceViewport;\r\n renderStateSet: Nullable<RenderStateSet>;\r\n program: Nullable<GPUProgram>;\r\n vertexLayout: Nullable<VertexLayout>;\r\n bindGroups: [BindGroup, Nullable<Iterable<number>>][];\r\n};\r\n\r\ntype ResizeCallback = (\r\n cssWidth: number,\r\n cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n) => void;\r\n\r\nclass ResizeHandler {\r\n private readonly _canvas: HTMLCanvasElement;\r\n private readonly _dpr: number;\r\n private _cssWidth: number;\r\n private _cssHeight: number;\r\n private _deviceWidth: number;\r\n private _deviceHeight: number;\r\n\r\n private _resizeObserver!: ResizeObserver;\r\n private _mutationObserver!: MutationObserver;\r\n private _onResizeCallback: ResizeCallback;\r\n\r\n constructor(canvas: HTMLCanvasElement, onResize: ResizeCallback, dpr: number) {\r\n this._canvas = canvas;\r\n this._dpr = dpr;\r\n this._cssWidth = 0;\r\n this._cssHeight = 0;\r\n this._deviceWidth = 0;\r\n this._deviceHeight = 0;\r\n this._onResizeCallback = onResize;\r\n }\r\n\r\n init() {\r\n const canvas = this._canvas;\r\n if (window.ResizeObserver) {\r\n this._resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this._handleResizeEntry(entry);\r\n });\r\n try {\r\n (this._resizeObserver as any).observe(canvas);\r\n } catch {\r\n this._resizeObserver.observe(canvas);\r\n }\r\n } else {\r\n if (window.MutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n if (mutations.length > 0) {\r\n this._handleLegacyResize();\r\n }\r\n });\r\n this._mutationObserver.observe(canvas, { attributes: true, attributeFilter: ['style'] });\r\n }\r\n window.addEventListener('resize', this._handleLegacyResize);\r\n this._handleLegacyResize();\r\n }\r\n }\r\n\r\n private _handleResizeEntry(_entry: ResizeObserverEntry) {\r\n // CSS pixel\r\n const boxSize = Array.isArray(_entry.contentBoxSize) ? _entry.contentBoxSize[0] : _entry.contentBoxSize;\r\n const cssWidth = boxSize?.inlineSize ?? this._canvas.clientWidth;\r\n const cssHeight = boxSize?.blockSize ?? this._canvas.clientHeight;\r\n\r\n // Device pixel\r\n /*\r\n let deviceWidth: number;\r\n let deviceHeight: number;\r\n\r\n const dpBox = (entry as any).devicePixelContentBoxSize?.[0];\r\n if (dpBox) {\r\n deviceWidth = dpBox.inlineSize;\r\n deviceHeight = dpBox.blockSize;\r\n } else {\r\n deviceWidth = Math.round(cssWidth * this._dpr);\r\n deviceHeight = Math.round(cssHeight * this._dpr);\r\n }\r\n */\r\n const deviceWidth = cssWidth * this._dpr;\r\n const deviceHeight = cssHeight * this._dpr;\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n }\r\n\r\n private _handleLegacyResize = () => {\r\n const cssWidth = this._canvas.clientWidth;\r\n const cssHeight = this._canvas.clientHeight;\r\n const dpr = window.devicePixelRatio || 1;\r\n const deviceWidth = Math.round(cssWidth * dpr);\r\n const deviceHeight = Math.round(cssHeight * dpr);\r\n\r\n if (\r\n cssWidth === this._cssWidth &&\r\n cssHeight === this._cssHeight &&\r\n deviceWidth === this._deviceWidth &&\r\n deviceHeight === this._deviceHeight\r\n ) {\r\n return;\r\n }\r\n\r\n this._cssWidth = cssWidth;\r\n this._cssHeight = cssHeight;\r\n this._deviceWidth = deviceWidth;\r\n this._deviceHeight = deviceHeight;\r\n\r\n this._onResizeCallback(cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n };\r\n\r\n public dispose() {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n }\r\n window.removeEventListener('resize', this._handleLegacyResize);\r\n }\r\n}\r\n\r\n/**\r\n * Base class for rendering device\r\n * @public\r\n */\r\nexport abstract class BaseDevice extends Observable<DeviceEventMap> {\r\n protected _dpr: number;\r\n protected _canvas: HTMLCanvasElement;\r\n protected _canvasClientWidth: number;\r\n protected _canvasClientHeight: number;\r\n protected _gpuObjectList: GPUObjectList;\r\n protected _gpuMemCost: number;\r\n protected _disposeObjectList: GPUObject[];\r\n protected _beginFrameTime: number;\r\n protected _endFrameTime: number;\r\n protected _frameInfo: FrameInfo;\r\n protected _cpuTimer: CPUTimer;\r\n protected _gpuTimer: Nullable<ITimer>;\r\n protected _runningLoop: Nullable<number>;\r\n protected _fpsCounter: { time: number; frame: number };\r\n protected _runLoopFunc: Nullable<(device: AbstractDevice) => void>;\r\n protected _backend: DeviceBackend;\r\n protected _beginFrameCounter: number;\r\n protected _programBuilder: ProgramBuilder;\r\n protected _poolMap: Map<string | symbol, Pool>;\r\n protected _defaultPoolKey: symbol;\r\n protected _temporalFramebuffer: boolean;\r\n protected _vSync: boolean;\r\n private readonly _resizer: ResizeHandler;\r\n private readonly _stateStack: DeviceState[];\r\n constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number) {\r\n super();\r\n this._dpr = dpr ?? window.devicePixelRatio ?? 1;\r\n this._backend = backend;\r\n this._gpuObjectList = {\r\n stacks: new Map(),\r\n textures: [],\r\n samplers: [],\r\n buffers: [],\r\n programs: [],\r\n framebuffers: [],\r\n vertexArrayObjects: [],\r\n bindGroups: []\r\n };\r\n this._canvas = cvs;\r\n this._canvas.setAttribute('tabindex', '1');\r\n this._canvasClientWidth = cvs.clientWidth;\r\n this._canvasClientHeight = cvs.clientHeight;\r\n this._gpuMemCost = 0;\r\n this._disposeObjectList = [];\r\n this._beginFrameTime = 0;\r\n this._endFrameTime = 0;\r\n this._runLoopFunc = null;\r\n this._frameInfo = {\r\n frameCounter: 0,\r\n frameTimestamp: 0,\r\n elapsedTimeCPU: 0,\r\n elapsedTimeGPU: 0,\r\n elapsedFrame: 0,\r\n elapsedOverall: 0,\r\n FPS: 0,\r\n drawCalls: 0,\r\n computeCalls: 0,\r\n nextFrameCall: [],\r\n nextFrameCallNext: []\r\n };\r\n this._programBuilder = new ProgramBuilder(this);\r\n this._cpuTimer = new CPUTimer();\r\n this._gpuTimer = null;\r\n this._runningLoop = null;\r\n this._fpsCounter = { time: 0, frame: 0 };\r\n this._stateStack = [];\r\n this._beginFrameCounter = 0;\r\n this._poolMap = new Map();\r\n this._defaultPoolKey = Symbol('defaultPool');\r\n this._poolMap.set(this._defaultPoolKey, new Pool(this, this._defaultPoolKey));\r\n this._temporalFramebuffer = false;\r\n this._temporalFramebuffer = false;\r\n this._vSync = true;\r\n //this._registerEventHandlers();\r\n this._resizer = new ResizeHandler(\r\n this._canvas,\r\n (cssWidth, cssHeight, deviceWidth, deviceHeight) => {\r\n this.dispatchEvent('resize', cssWidth, cssHeight, deviceWidth, deviceHeight);\r\n },\r\n this._dpr\r\n );\r\n }\r\n getScaleX() {\r\n return this._canvas.width / this._canvas.clientWidth;\r\n }\r\n getScaleY() {\r\n return this._canvas.height / this._canvas.clientHeight;\r\n }\r\n abstract getAdapterInfo(): any;\r\n abstract getFrameBufferSampleCount(): number;\r\n abstract isContextLost(): boolean;\r\n abstract getDrawingBufferWidth(): number;\r\n abstract getDrawingBufferHeight(): number;\r\n abstract getBackBufferWidth(): number;\r\n abstract getBackBufferHeight(): number;\r\n abstract getDeviceCaps(): Immutable<DeviceCaps>;\r\n abstract initContext(): Promise<void>;\r\n abstract clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ): void;\r\n abstract createGPUTimer(): Nullable<ITimer>;\r\n abstract createRenderStateSet(): RenderStateSet;\r\n abstract createBlendingState(): BlendingState;\r\n abstract createColorState(): ColorState;\r\n abstract createRasterizerState(): RasterizerState;\r\n abstract createDepthState(): DepthState;\r\n abstract createStencilState(): StencilState;\r\n abstract createSampler(options: SamplerOptions): TextureSampler;\r\n abstract createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<T>;\r\n abstract createTexture2D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DFromImage(\r\n element: TextureImageElement,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2D>;\r\n abstract createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture2DArray>;\r\n abstract createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<Texture3D>;\r\n abstract createCubeTexture(\r\n format: TextureFormat,\r\n size: number,\r\n options?: TextureCreationOptions\r\n ): Nullable<TextureCube>;\r\n abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;\r\n abstract reverseVertexWindingOrder(reverse: boolean): void;\r\n abstract isWindingOrderReversed(): boolean;\r\n abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;\r\n abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;\r\n // program\r\n abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;\r\n abstract createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;\r\n abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;\r\n abstract copyBuffer(\r\n sourceBuffer: GPUDataBuffer,\r\n destBuffer: GPUDataBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ): void;\r\n abstract createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ): IndexBuffer;\r\n abstract createStructuredBuffer(\r\n structureType: PBStructTypeInfo,\r\n options: BufferCreationOptions,\r\n data?: TypedArray\r\n ): StructuredBuffer;\r\n abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;\r\n abstract createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture>,\r\n options?: Nullable<FrameBufferOptions>\r\n ): FrameBuffer;\r\n // render related\r\n abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getViewport(): Immutable<DeviceViewport>;\r\n abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;\r\n abstract getScissor(): Immutable<DeviceViewport>;\r\n abstract setProgram(program: Nullable<GPUProgram>): void;\r\n abstract getProgram(): Nullable<GPUProgram>;\r\n abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;\r\n abstract getVertexLayout(): Nullable<VertexLayout>;\r\n abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;\r\n abstract getRenderStates(): Nullable<RenderStateSet>;\r\n abstract getFramebuffer(): Nullable<FrameBuffer>;\r\n abstract setBindGroup(\r\n index: number,\r\n bindGroup: BindGroup,\r\n dynamicOffsets?: Nullable<Iterable<number>>\r\n ): void;\r\n abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];\r\n abstract flush(): void;\r\n abstract nextFrame(callback: () => void): number;\r\n abstract cancelNextFrame(handle: number): void;\r\n // misc\r\n abstract readPixels(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n index: number,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n abstract beginCapture(): void;\r\n abstract endCapture(): RenderBundle;\r\n abstract looseContext(): void;\r\n abstract restoreContext(): void;\r\n protected abstract _executeRenderBundle(renderBundle: RenderBundle): number;\r\n protected abstract _draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n protected abstract _drawInstanced(\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ): void;\r\n protected abstract _compute(\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ): void;\r\n get backend() {\r\n return this._backend;\r\n }\r\n get videoMemoryUsage() {\r\n return this._gpuMemCost;\r\n }\r\n get frameInfo() {\r\n return this._frameInfo;\r\n }\r\n get isRendering() {\r\n return this._runningLoop !== null;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get type() {\r\n return this._backend.typeName();\r\n }\r\n get vSync() {\r\n return this._vSync;\r\n }\r\n set vSync(val) {\r\n this._vSync = !!val;\r\n }\r\n get pool() {\r\n return this._poolMap.get(this._defaultPoolKey)!;\r\n }\r\n get runLoopFunction() {\r\n return this._runLoopFunc;\r\n }\r\n get programBuilder() {\r\n return this._programBuilder;\r\n }\r\n poolExists(key: string | symbol) {\r\n return this._poolMap.has(key);\r\n }\r\n getPool(key: string | symbol) {\r\n let pool = this._poolMap.get(key);\r\n if (!pool) {\r\n pool = new Pool(this, key);\r\n this._poolMap.set(key, pool);\r\n }\r\n return pool;\r\n }\r\n setFont(fontName: string) {\r\n DrawText.setFont(this, fontName);\r\n }\r\n drawText(text: string, x: number, y: number, color: string, viewport?: Immutable<number[]>) {\r\n DrawText.drawText(this, text, color, x, y, viewport);\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","drawText","text","x","y","color","viewport","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","options","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","getViewport","scissor","getScissor","program","getProgram","renderStateSet","getRenderStates","vertexLayout","getVertexLayout","getBindGroup","popDeviceStates","top","pop","setViewport","setScissor","setProgram","setRenderStates","setVertexLayout","setBindGroup","reverseVertexWindingOrder","getGPUObjects","getGPUObjectById","uid","list","screenXToDevice","deviceXToScreen","screenYToDevice","deviceYToScreen","buildRenderProgram","buildComputeProgram","getGPUObjectStack","addGPUObject","getGPUObjectList","indexOf","Error","stack","index","splice","delete","updateVideoMemoryCost","delta","initResizer","once","_handleResize","on","begin","gpuTime","cpuTime","tmp","isTexture","isSampler","isBuffer","isFramebuffer","isProgram","isVertexLayout","isBindGroup","invalidateAll","reloadAll","slice","reload","parseTextureOptions","noMipmapFlag","mipmapping","GPUResourceUsageFlags","TF_NO_MIPMAP","writableFlag","writable","TF_WRITABLE","dynamicFlag","DYNAMIC","samplerOptions","mipFilter","parseBufferOptions","defaultUsage","usageFlag","BF_UNIFORM","BF_VERTEX","BF_INDEX","BF_READ","BF_WRITE","BF_PACK_PIXEL","BF_UNPACK_PIXEL","storageFlag","BF_STORAGE","managedFlag","MANAGED"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3122,6 +3122,8 @@ interface FrameInfo {
|
|
|
3122
3122
|
* @public
|
|
3123
3123
|
*/
|
|
3124
3124
|
interface GPUObjectList {
|
|
3125
|
+
/** Creation stack */
|
|
3126
|
+
stacks: Map<GPUObject, string>;
|
|
3125
3127
|
/** list of textures */
|
|
3126
3128
|
textures: BaseTexture[];
|
|
3127
3129
|
/** list of samplers */
|
|
@@ -4014,6 +4016,7 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
|
|
|
4014
4016
|
deviceYToScreen(val: number): number;
|
|
4015
4017
|
buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram<unknown>>;
|
|
4016
4018
|
buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram<unknown>>;
|
|
4019
|
+
getGPUObjectStack(obj: GPUObject): string;
|
|
4017
4020
|
addGPUObject(obj: GPUObject): void;
|
|
4018
4021
|
removeGPUObject(obj: GPUObject): void;
|
|
4019
4022
|
updateVideoMemoryCost(delta: number): void;
|
package/dist/pool.js
CHANGED
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
*/ releaseTexture(texture) {
|
|
260
260
|
const info = this._allocatedTextures.get(texture);
|
|
261
261
|
if (!info) {
|
|
262
|
-
console.error(`ObjectPool.releaseTexture(): texture is not allocated from pool`);
|
|
262
|
+
console.error(`ObjectPool.releaseTexture(): texture is not allocated from pool: ${this._device.getGPUObjects().stacks.get(texture) ?? '<No stack>'}`);
|
|
263
263
|
} else {
|
|
264
264
|
this.safeReleaseTexture(texture);
|
|
265
265
|
}
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
*/ retainTexture(texture) {
|
|
271
271
|
const info = this._allocatedTextures.get(texture);
|
|
272
272
|
if (!info) {
|
|
273
|
-
console.error(`ObjectPool.retainTexture(): texture is not allocated from pool`);
|
|
273
|
+
console.error(`ObjectPool.retainTexture(): texture is not allocated from pool: ${this._device.getGPUObjects().stacks.get(texture) ?? '<No stack>'}`);
|
|
274
274
|
} else {
|
|
275
275
|
info.refcount++;
|
|
276
276
|
}
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sources":["../src/pool.ts"],"sourcesContent":["import type { Nullable, MaybeArray } from '@zephyr3d/base';\r\nimport type { AbstractDevice, TextureFormat } from './base_types';\r\nimport type { BaseTexture, FrameBuffer, Texture2D, Texture2DArray, TextureCube } from './gpuobject';\r\n\r\n/**\r\n * ObjectPool class is responsible for managing and reusing textures and framebuffers.\r\n * @public\r\n */\r\nexport class Pool {\r\n /** @internal */\r\n private _memCost: number;\r\n /** @internal */\r\n private readonly _memCostThreshold: number;\r\n /** @internal */\r\n private readonly _device: AbstractDevice;\r\n /** @internal */\r\n private readonly _id: string | symbol;\r\n /** @internal */\r\n private _freeTextures: Record<string, BaseTexture[]> = {};\r\n /** @internal */\r\n private readonly _allocatedTextures: WeakMap<\r\n BaseTexture,\r\n { hash: string; refcount: number; dispose: boolean }\r\n > = new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseTextures: Set<BaseTexture> = new Set();\r\n /** @internal */\r\n private _freeFramebuffers: Record<string, FrameBuffer[]> = {};\r\n /** @internal */\r\n private readonly _allocatedFramebuffers: WeakMap<FrameBuffer, { hash: string; refcount: number }> =\r\n new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseFramebuffers: Set<FrameBuffer> = new Set();\r\n /**\r\n * Creates an instance of Pool class\r\n * @param device - Rendering device\r\n */\r\n constructor(device: AbstractDevice, id: string | symbol, memCostThreshold = 1024 * 1024 * 1024) {\r\n this._device = device;\r\n this._id = id;\r\n this._memCost = 0;\r\n this._memCostThreshold = memCostThreshold;\r\n this._freeTextures = {};\r\n this._allocatedTextures = new WeakMap();\r\n this._autoReleaseTextures = new Set();\r\n this._freeFramebuffers = {};\r\n this._allocatedFramebuffers = new WeakMap();\r\n this._autoReleaseFramebuffers = new Set();\r\n this._memCost = 0;\r\n }\r\n /**\r\n * Id for this pool\r\n */\r\n get id() {\r\n return this._id;\r\n }\r\n autoRelease() {\r\n // auto release objects\r\n for (const tex of this._autoReleaseTextures) {\r\n this.releaseTexture(tex);\r\n }\r\n this._autoReleaseTextures.clear();\r\n for (const fb of this._autoReleaseFramebuffers) {\r\n this.releaseFrameBuffer(fb);\r\n }\r\n this._autoReleaseFramebuffers.clear();\r\n // Free up video memory if memory usage is greater than specific value\r\n if (this._memCost >= this._memCostThreshold) {\r\n this.purge();\r\n }\r\n }\r\n /**\r\n * Fetch a temporal 2D texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - The format of the texture.\r\n * @param width - The width of the texture.\r\n * @param height - The height of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2D object.\r\n */\r\n fetchTemporalTexture2D(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2d:${format}:${width}:${height}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2D(format, width, height, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2D texture failed: ${format}-${width}x${height}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2D;\r\n }\r\n /**\r\n * Fetch a temporal 2D array texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param width - Width of the texture.\r\n * @param height - Height of the texture.\r\n * @param numLayers - Layer count of the texture\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2DArray object.\r\n */\r\n fetchTemporalTexture2DArray(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n numLayers: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2darray:${format}:${width}:${height}:${numLayers}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2DArray(format, width, height, numLayers, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2DArray texture failed: ${format}-${width}x${height}x${numLayers}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2DArray;\r\n }\r\n /**\r\n * Fetch a temporal Cube texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param size - size of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched TextureCube object.\r\n */\r\n fetchTemporalTextureCube(autoRelease: boolean, format: TextureFormat, size: number, mipmapping = false) {\r\n const hash = `cube:${format}:${size}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createCubeTexture(format, size, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create Cube texture failed: ${format}-${size}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as TextureCube;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param width - Width of the framebuffer\r\n * @param height - Height of the framebuffer\r\n * @param colorAttachments - Array of color attachments or texture format of the framebuffer.\r\n * @param depthAttachment - Depth attachment or texture format of the framebuffer.\r\n * @param mipmapping - Whether mipmapping should be enabled when creating color attachment textures, default is false.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(\r\n autoRelease: boolean,\r\n width: number,\r\n height: number,\r\n colorTexOrFormat: MaybeArray<TextureFormat | T>,\r\n depthTexOrFormat: Nullable<TextureFormat | T> = null,\r\n mipmapping = false,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n const colors = Array.isArray(colorTexOrFormat)\r\n ? colorTexOrFormat\r\n : colorTexOrFormat\r\n ? [colorTexOrFormat]\r\n : [];\r\n const colorAttachments = colors.map((val) => {\r\n return typeof val === 'string'\r\n ? this.fetchTemporalTexture2D(false, val, width, height, mipmapping)\r\n : val;\r\n });\r\n const depthAttachment =\r\n typeof depthTexOrFormat === 'string'\r\n ? this.fetchTemporalTexture2D(false, depthTexOrFormat, width, height, false)\r\n : depthTexOrFormat;\r\n const fb = this.createTemporalFramebuffer(\r\n autoRelease,\r\n colorAttachments,\r\n depthAttachment,\r\n sampleCount,\r\n ignoreDepthStencil,\r\n attachmentMipLevel,\r\n attachmentCubeface,\r\n attachmentLayer\r\n );\r\n for (let i = 0; i < colors.length; i++) {\r\n if (typeof colors[i] === 'string') {\r\n this.releaseTexture(colorAttachments[i]);\r\n }\r\n }\r\n if (!!depthAttachment && typeof depthTexOrFormat === 'string') {\r\n this.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param colorAttachments - Array of color attachments for the framebuffer.\r\n * @param depthAttachment - Depth attachment for the framebuffer.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0.\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0.\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0.\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n createTemporalFramebuffer(\r\n autoRelease: boolean,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture> = null,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n colorAttachments = colorAttachments ?? [];\r\n let hash = `${depthAttachment?.uid ?? 0}:${sampleCount ?? 1}:${ignoreDepthStencil ? 1 : 0}`;\r\n if (colorAttachments.length > 0) {\r\n hash += `:${attachmentMipLevel}:${attachmentCubeface}:${attachmentLayer}`;\r\n for (const tex of colorAttachments) {\r\n hash += `:${tex.uid}`;\r\n }\r\n }\r\n let fb: Nullable<FrameBuffer> = null;\r\n const list = this._freeFramebuffers[hash];\r\n if (!list) {\r\n fb = this._device.createFrameBuffer(colorAttachments, depthAttachment, {\r\n ignoreDepthStencil,\r\n sampleCount\r\n });\r\n for (let i = 0; i < fb.getColorAttachments().length; i++) {\r\n fb.setColorAttachmentMipLevel(i, attachmentMipLevel);\r\n fb.setColorAttachmentCubeFace(i, attachmentCubeface);\r\n fb.setColorAttachmentLayer(i, attachmentLayer);\r\n }\r\n } else {\r\n fb = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeFramebuffers[hash];\r\n }\r\n }\r\n // Mark referenced textures\r\n const info = depthAttachment ? this._allocatedTextures.get(depthAttachment) : null;\r\n if (info) {\r\n info.refcount++;\r\n }\r\n for (const tex of colorAttachments) {\r\n const info = this._allocatedTextures.get(tex);\r\n if (info) {\r\n info.refcount++;\r\n }\r\n }\r\n this._allocatedFramebuffers.set(fb, { hash, refcount: 1 });\r\n if (autoRelease) {\r\n this._autoReleaseFramebuffers.add(fb);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Dispose a texture that is allocated from the object pool.\r\n * @param texture - The texture to dispose.\r\n */\r\n disposeTexture(texture: BaseTexture) {\r\n this.safeReleaseTexture(texture, true);\r\n }\r\n /**\r\n * Release a texture back to the object pool.\r\n * @param texture - The texture to release.\r\n */\r\n releaseTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseTexture(): texture is not allocated from pool`);\r\n } else {\r\n this.safeReleaseTexture(texture);\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given texture\r\n * @param texture - The texture to retain\r\n */\r\n retainTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(`ObjectPool.retainTexture(): texture is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Dispose a framebuffer that is allocated from the object pool.\r\n * @param fb - The framebuffer to dispose.\r\n */\r\n disposeFrameBuffer(fb: FrameBuffer) {\r\n const hash = this._allocatedFramebuffers.get(fb);\r\n if (!hash) {\r\n console.error(`ObjectPool.disposeFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n /**\r\n * Release a framebuffer back to the object pool.\r\n * @param fb - The framebuffer to release.\r\n */\r\n releaseFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this.internalDisposeFrameBuffer(fb);\r\n const list = this._freeFramebuffers[info.hash];\r\n if (list) {\r\n list.push(fb);\r\n } else {\r\n this._freeFramebuffers[info.hash] = [fb];\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given framebuffer\r\n * @param fb - The framebuffer to retain\r\n */\r\n retainFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.retainFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Purge the object pool by disposing all free framebuffers and textures.\r\n */\r\n purge() {\r\n for (const k in this._freeFramebuffers) {\r\n const list = this._freeFramebuffers[k];\r\n if (list) {\r\n for (const fb of this._freeFramebuffers[k]) {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n this._freeFramebuffers = {};\r\n for (const k in this._freeTextures) {\r\n const list = this._freeTextures[k];\r\n for (const tex of list) {\r\n this._memCost -= tex.memCost;\r\n tex.dispose();\r\n }\r\n }\r\n this._freeTextures = {};\r\n }\r\n /** @internal */\r\n private internalDisposeFrameBuffer(fb: FrameBuffer) {\r\n if (fb) {\r\n // Release attachment textures\r\n const colorAttachments = fb.getColorAttachments();\r\n if (colorAttachments) {\r\n for (const tex of colorAttachments) {\r\n this.safeReleaseTexture(tex);\r\n }\r\n }\r\n const depthAttachment = fb.getDepthAttachment();\r\n if (depthAttachment) {\r\n this.safeReleaseTexture(depthAttachment);\r\n }\r\n this._allocatedFramebuffers.delete(fb);\r\n this._autoReleaseFramebuffers.delete(fb);\r\n }\r\n }\r\n /** @internal */\r\n private safeReleaseTexture(texture: BaseTexture, purge = false) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (info) {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this._allocatedTextures.delete(texture);\r\n this._autoReleaseTextures.delete(texture);\r\n if (purge || info.dispose) {\r\n this._memCost -= texture.memCost;\r\n texture.dispose();\r\n } else {\r\n const list = this._freeTextures[info.hash];\r\n if (list) {\r\n list.push(texture);\r\n } else {\r\n this._freeTextures[info.hash] = [texture];\r\n }\r\n }\r\n } else if (purge) {\r\n info.dispose = true;\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Pool","_freeTextures","_allocatedTextures","WeakMap","_autoReleaseTextures","Set","_freeFramebuffers","_allocatedFramebuffers","_autoReleaseFramebuffers","device","id","memCostThreshold","_device","_id","_memCost","_memCostThreshold","autoRelease","tex","releaseTexture","clear","fb","releaseFrameBuffer","purge","fetchTemporalTexture2D","format","width","height","mipmapping","hash","texture","list","createTexture2D","Error","memCost","pop","length","set","refcount","dispose","add","fetchTemporalTexture2DArray","numLayers","createTexture2DArray","fetchTemporalTextureCube","size","createCubeTexture","fetchTemporalFramebuffer","colorTexOrFormat","depthTexOrFormat","sampleCount","ignoreDepthStencil","attachmentMipLevel","attachmentCubeface","attachmentLayer","colors","Array","isArray","colorAttachments","map","val","depthAttachment","createTemporalFramebuffer","i","uid","createFrameBuffer","getColorAttachments","setColorAttachmentMipLevel","setColorAttachmentCubeFace","setColorAttachmentLayer","info","get","disposeTexture","safeReleaseTexture","console","error","retainTexture","disposeFrameBuffer","internalDisposeFrameBuffer","push","retainFrameBuffer","k","getDepthAttachment","delete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pool.js","sources":["../src/pool.ts"],"sourcesContent":["import type { Nullable, MaybeArray } from '@zephyr3d/base';\r\nimport type { AbstractDevice, TextureFormat } from './base_types';\r\nimport type { BaseTexture, FrameBuffer, Texture2D, Texture2DArray, TextureCube } from './gpuobject';\r\n\r\n/**\r\n * ObjectPool class is responsible for managing and reusing textures and framebuffers.\r\n * @public\r\n */\r\nexport class Pool {\r\n /** @internal */\r\n private _memCost: number;\r\n /** @internal */\r\n private readonly _memCostThreshold: number;\r\n /** @internal */\r\n private readonly _device: AbstractDevice;\r\n /** @internal */\r\n private readonly _id: string | symbol;\r\n /** @internal */\r\n private _freeTextures: Record<string, BaseTexture[]> = {};\r\n /** @internal */\r\n private readonly _allocatedTextures: WeakMap<\r\n BaseTexture,\r\n { hash: string; refcount: number; dispose: boolean }\r\n > = new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseTextures: Set<BaseTexture> = new Set();\r\n /** @internal */\r\n private _freeFramebuffers: Record<string, FrameBuffer[]> = {};\r\n /** @internal */\r\n private readonly _allocatedFramebuffers: WeakMap<FrameBuffer, { hash: string; refcount: number }> =\r\n new WeakMap();\r\n /** @internal */\r\n private readonly _autoReleaseFramebuffers: Set<FrameBuffer> = new Set();\r\n /**\r\n * Creates an instance of Pool class\r\n * @param device - Rendering device\r\n */\r\n constructor(device: AbstractDevice, id: string | symbol, memCostThreshold = 1024 * 1024 * 1024) {\r\n this._device = device;\r\n this._id = id;\r\n this._memCost = 0;\r\n this._memCostThreshold = memCostThreshold;\r\n this._freeTextures = {};\r\n this._allocatedTextures = new WeakMap();\r\n this._autoReleaseTextures = new Set();\r\n this._freeFramebuffers = {};\r\n this._allocatedFramebuffers = new WeakMap();\r\n this._autoReleaseFramebuffers = new Set();\r\n this._memCost = 0;\r\n }\r\n /**\r\n * Id for this pool\r\n */\r\n get id() {\r\n return this._id;\r\n }\r\n autoRelease() {\r\n // auto release objects\r\n for (const tex of this._autoReleaseTextures) {\r\n this.releaseTexture(tex);\r\n }\r\n this._autoReleaseTextures.clear();\r\n for (const fb of this._autoReleaseFramebuffers) {\r\n this.releaseFrameBuffer(fb);\r\n }\r\n this._autoReleaseFramebuffers.clear();\r\n // Free up video memory if memory usage is greater than specific value\r\n if (this._memCost >= this._memCostThreshold) {\r\n this.purge();\r\n }\r\n }\r\n /**\r\n * Fetch a temporal 2D texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - The format of the texture.\r\n * @param width - The width of the texture.\r\n * @param height - The height of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2D object.\r\n */\r\n fetchTemporalTexture2D(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2d:${format}:${width}:${height}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2D(format, width, height, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2D texture failed: ${format}-${width}x${height}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2D;\r\n }\r\n /**\r\n * Fetch a temporal 2D array texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param width - Width of the texture.\r\n * @param height - Height of the texture.\r\n * @param numLayers - Layer count of the texture\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched Texture2DArray object.\r\n */\r\n fetchTemporalTexture2DArray(\r\n autoRelease: boolean,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n numLayers: number,\r\n mipmapping = false\r\n ) {\r\n const hash = `2darray:${format}:${width}:${height}:${numLayers}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createTexture2DArray(format, width, height, numLayers, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create 2DArray texture failed: ${format}-${width}x${height}x${numLayers}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as Texture2DArray;\r\n }\r\n /**\r\n * Fetch a temporal Cube texture from the object pool.\r\n * @param autoRelease - Whether the texture should be automatically released at the next frame.\r\n * @param format - Format of the texture.\r\n * @param size - size of the texture.\r\n * @param mipmapping - Whether this texture support mipmapping\r\n * @returns The fetched TextureCube object.\r\n */\r\n fetchTemporalTextureCube(autoRelease: boolean, format: TextureFormat, size: number, mipmapping = false) {\r\n const hash = `cube:${format}:${size}:${mipmapping ? 1 : 0}`;\r\n let texture: Nullable<BaseTexture> = null;\r\n const list = this._freeTextures[hash];\r\n if (!list) {\r\n texture = this._device.createCubeTexture(format, size, { mipmapping });\r\n if (!texture) {\r\n throw new Error(`Create Cube texture failed: ${format}-${size}`);\r\n }\r\n this._memCost += texture.memCost;\r\n } else {\r\n texture = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeTextures[hash];\r\n }\r\n }\r\n this._allocatedTextures.set(texture, { hash, refcount: 1, dispose: false });\r\n if (autoRelease) {\r\n this._autoReleaseTextures.add(texture);\r\n }\r\n return texture as TextureCube;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param width - Width of the framebuffer\r\n * @param height - Height of the framebuffer\r\n * @param colorAttachments - Array of color attachments or texture format of the framebuffer.\r\n * @param depthAttachment - Depth attachment or texture format of the framebuffer.\r\n * @param mipmapping - Whether mipmapping should be enabled when creating color attachment textures, default is false.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(\r\n autoRelease: boolean,\r\n width: number,\r\n height: number,\r\n colorTexOrFormat: MaybeArray<TextureFormat | T>,\r\n depthTexOrFormat: Nullable<TextureFormat | T> = null,\r\n mipmapping = false,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n const colors = Array.isArray(colorTexOrFormat)\r\n ? colorTexOrFormat\r\n : colorTexOrFormat\r\n ? [colorTexOrFormat]\r\n : [];\r\n const colorAttachments = colors.map((val) => {\r\n return typeof val === 'string'\r\n ? this.fetchTemporalTexture2D(false, val, width, height, mipmapping)\r\n : val;\r\n });\r\n const depthAttachment =\r\n typeof depthTexOrFormat === 'string'\r\n ? this.fetchTemporalTexture2D(false, depthTexOrFormat, width, height, false)\r\n : depthTexOrFormat;\r\n const fb = this.createTemporalFramebuffer(\r\n autoRelease,\r\n colorAttachments,\r\n depthAttachment,\r\n sampleCount,\r\n ignoreDepthStencil,\r\n attachmentMipLevel,\r\n attachmentCubeface,\r\n attachmentLayer\r\n );\r\n for (let i = 0; i < colors.length; i++) {\r\n if (typeof colors[i] === 'string') {\r\n this.releaseTexture(colorAttachments[i]);\r\n }\r\n }\r\n if (!!depthAttachment && typeof depthTexOrFormat === 'string') {\r\n this.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Creates a temporal framebuffer from the object pool.\r\n * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.\r\n * @param colorAttachments - Array of color attachments for the framebuffer.\r\n * @param depthAttachment - Depth attachment for the framebuffer.\r\n * @param sampleCount - The sample count for the framebuffer, default is 1.\r\n * @param ignoreDepthStencil - Whether to ignore depth stencil when resolving msaa framebuffer, default is true.\r\n * @param attachmentMipLevel - The mipmap level to which the color attachment will render, default is 0.\r\n * @param attachmentCubeface - The cubemap face to which the color attachment will render, default is 0.\r\n * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0.\r\n * @returns The fetched FrameBuffer object.\r\n */\r\n createTemporalFramebuffer(\r\n autoRelease: boolean,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: Nullable<BaseTexture> = null,\r\n sampleCount = 1,\r\n ignoreDepthStencil = true,\r\n attachmentMipLevel = 0,\r\n attachmentCubeface = 0,\r\n attachmentLayer = 0\r\n ) {\r\n colorAttachments = colorAttachments ?? [];\r\n let hash = `${depthAttachment?.uid ?? 0}:${sampleCount ?? 1}:${ignoreDepthStencil ? 1 : 0}`;\r\n if (colorAttachments.length > 0) {\r\n hash += `:${attachmentMipLevel}:${attachmentCubeface}:${attachmentLayer}`;\r\n for (const tex of colorAttachments) {\r\n hash += `:${tex.uid}`;\r\n }\r\n }\r\n let fb: Nullable<FrameBuffer> = null;\r\n const list = this._freeFramebuffers[hash];\r\n if (!list) {\r\n fb = this._device.createFrameBuffer(colorAttachments, depthAttachment, {\r\n ignoreDepthStencil,\r\n sampleCount\r\n });\r\n for (let i = 0; i < fb.getColorAttachments().length; i++) {\r\n fb.setColorAttachmentMipLevel(i, attachmentMipLevel);\r\n fb.setColorAttachmentCubeFace(i, attachmentCubeface);\r\n fb.setColorAttachmentLayer(i, attachmentLayer);\r\n }\r\n } else {\r\n fb = list.pop()!;\r\n if (list.length === 0) {\r\n delete this._freeFramebuffers[hash];\r\n }\r\n }\r\n // Mark referenced textures\r\n const info = depthAttachment ? this._allocatedTextures.get(depthAttachment) : null;\r\n if (info) {\r\n info.refcount++;\r\n }\r\n for (const tex of colorAttachments) {\r\n const info = this._allocatedTextures.get(tex);\r\n if (info) {\r\n info.refcount++;\r\n }\r\n }\r\n this._allocatedFramebuffers.set(fb, { hash, refcount: 1 });\r\n if (autoRelease) {\r\n this._autoReleaseFramebuffers.add(fb);\r\n }\r\n return fb;\r\n }\r\n /**\r\n * Dispose a texture that is allocated from the object pool.\r\n * @param texture - The texture to dispose.\r\n */\r\n disposeTexture(texture: BaseTexture) {\r\n this.safeReleaseTexture(texture, true);\r\n }\r\n /**\r\n * Release a texture back to the object pool.\r\n * @param texture - The texture to release.\r\n */\r\n releaseTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(\r\n `ObjectPool.releaseTexture(): texture is not allocated from pool: ${this._device.getGPUObjects().stacks.get(texture) ?? '<No stack>'}`\r\n );\r\n } else {\r\n this.safeReleaseTexture(texture);\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given texture\r\n * @param texture - The texture to retain\r\n */\r\n retainTexture(texture: BaseTexture) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (!info) {\r\n console.error(\r\n `ObjectPool.retainTexture(): texture is not allocated from pool: ${this._device.getGPUObjects().stacks.get(texture) ?? '<No stack>'}`\r\n );\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Dispose a framebuffer that is allocated from the object pool.\r\n * @param fb - The framebuffer to dispose.\r\n */\r\n disposeFrameBuffer(fb: FrameBuffer) {\r\n const hash = this._allocatedFramebuffers.get(fb);\r\n if (!hash) {\r\n console.error(`ObjectPool.disposeFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n /**\r\n * Release a framebuffer back to the object pool.\r\n * @param fb - The framebuffer to release.\r\n */\r\n releaseFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.releaseFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this.internalDisposeFrameBuffer(fb);\r\n const list = this._freeFramebuffers[info.hash];\r\n if (list) {\r\n list.push(fb);\r\n } else {\r\n this._freeFramebuffers[info.hash] = [fb];\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Increment reference counter for given framebuffer\r\n * @param fb - The framebuffer to retain\r\n */\r\n retainFrameBuffer(fb: FrameBuffer) {\r\n const info = this._allocatedFramebuffers.get(fb);\r\n if (!info) {\r\n console.error(`ObjectPool.retainFrameBuffer(): framebuffer is not allocated from pool`);\r\n } else {\r\n info.refcount++;\r\n }\r\n }\r\n /**\r\n * Purge the object pool by disposing all free framebuffers and textures.\r\n */\r\n purge() {\r\n for (const k in this._freeFramebuffers) {\r\n const list = this._freeFramebuffers[k];\r\n if (list) {\r\n for (const fb of this._freeFramebuffers[k]) {\r\n this.internalDisposeFrameBuffer(fb);\r\n fb.dispose();\r\n }\r\n }\r\n }\r\n this._freeFramebuffers = {};\r\n for (const k in this._freeTextures) {\r\n const list = this._freeTextures[k];\r\n for (const tex of list) {\r\n this._memCost -= tex.memCost;\r\n tex.dispose();\r\n }\r\n }\r\n this._freeTextures = {};\r\n }\r\n /** @internal */\r\n private internalDisposeFrameBuffer(fb: FrameBuffer) {\r\n if (fb) {\r\n // Release attachment textures\r\n const colorAttachments = fb.getColorAttachments();\r\n if (colorAttachments) {\r\n for (const tex of colorAttachments) {\r\n this.safeReleaseTexture(tex);\r\n }\r\n }\r\n const depthAttachment = fb.getDepthAttachment();\r\n if (depthAttachment) {\r\n this.safeReleaseTexture(depthAttachment);\r\n }\r\n this._allocatedFramebuffers.delete(fb);\r\n this._autoReleaseFramebuffers.delete(fb);\r\n }\r\n }\r\n /** @internal */\r\n private safeReleaseTexture(texture: BaseTexture, purge = false) {\r\n const info = this._allocatedTextures.get(texture);\r\n if (info) {\r\n info.refcount--;\r\n if (info.refcount <= 0) {\r\n this._allocatedTextures.delete(texture);\r\n this._autoReleaseTextures.delete(texture);\r\n if (purge || info.dispose) {\r\n this._memCost -= texture.memCost;\r\n texture.dispose();\r\n } else {\r\n const list = this._freeTextures[info.hash];\r\n if (list) {\r\n list.push(texture);\r\n } else {\r\n this._freeTextures[info.hash] = [texture];\r\n }\r\n }\r\n } else if (purge) {\r\n info.dispose = true;\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["Pool","_freeTextures","_allocatedTextures","WeakMap","_autoReleaseTextures","Set","_freeFramebuffers","_allocatedFramebuffers","_autoReleaseFramebuffers","device","id","memCostThreshold","_device","_id","_memCost","_memCostThreshold","autoRelease","tex","releaseTexture","clear","fb","releaseFrameBuffer","purge","fetchTemporalTexture2D","format","width","height","mipmapping","hash","texture","list","createTexture2D","Error","memCost","pop","length","set","refcount","dispose","add","fetchTemporalTexture2DArray","numLayers","createTexture2DArray","fetchTemporalTextureCube","size","createCubeTexture","fetchTemporalFramebuffer","colorTexOrFormat","depthTexOrFormat","sampleCount","ignoreDepthStencil","attachmentMipLevel","attachmentCubeface","attachmentLayer","colors","Array","isArray","colorAttachments","map","val","depthAttachment","createTemporalFramebuffer","i","uid","createFrameBuffer","getColorAttachments","setColorAttachmentMipLevel","setColorAttachmentCubeFace","setColorAttachmentLayer","info","get","disposeTexture","safeReleaseTexture","console","error","getGPUObjects","stacks","retainTexture","disposeFrameBuffer","internalDisposeFrameBuffer","push","retainFrameBuffer","k","getDepthAttachment","delete"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zephyr3d/device",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Device API for zephyr3d",
|
|
5
5
|
"homepage": "https://github.com/gavinyork/zephyr3d#readme",
|
|
6
6
|
"type": "module",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@rollup/plugin-commonjs": "~28.0.2",
|
|
69
69
|
"@types/node": "^22.12.0",
|
|
70
70
|
"@webgpu/types": "^0.1.65",
|
|
71
|
-
"@zephyr3d/base": "^0.2.
|
|
71
|
+
"@zephyr3d/base": "^0.2.3",
|
|
72
72
|
"rollup-plugin-import-css": "~3.5.8"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|