@zephyr3d/device 0.2.3 → 0.2.5
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/README.md +1 -1
- package/dist/base_types.js +7 -66
- package/dist/base_types.js.map +1 -1
- package/dist/builder/ast.js +121 -118
- package/dist/builder/ast.js.map +1 -1
- package/dist/builder/base.js +29 -25
- package/dist/builder/base.js.map +1 -1
- package/dist/builder/builtinfunc.js +62 -19
- package/dist/builder/builtinfunc.js.map +1 -1
- package/dist/builder/constructors.js +1 -1
- package/dist/builder/constructors.js.map +1 -1
- package/dist/builder/errors.js +7 -7
- package/dist/builder/errors.js.map +1 -1
- package/dist/builder/misc.js +10 -0
- package/dist/builder/misc.js.map +1 -0
- package/dist/builder/programbuilder.js +65 -34
- package/dist/builder/programbuilder.js.map +1 -1
- package/dist/builder/reflection.js.map +1 -1
- package/dist/builder/types.js +74 -74
- package/dist/builder/types.js.map +1 -1
- package/dist/device.js +72 -43
- package/dist/device.js.map +1 -1
- package/dist/gpuobject.js +82 -24
- package/dist/gpuobject.js.map +1 -1
- package/dist/helpers/drawtext.js +1 -0
- package/dist/helpers/drawtext.js.map +1 -1
- package/dist/helpers/font.js +1 -0
- package/dist/helpers/font.js.map +1 -1
- package/dist/helpers/glyphmanager.js +7 -7
- package/dist/helpers/glyphmanager.js.map +1 -1
- package/dist/helpers/textureatlas.js +3 -5
- package/dist/helpers/textureatlas.js.map +1 -1
- package/dist/index.d.ts +267 -204
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/pool.js +102 -45
- package/dist/pool.js.map +1 -1
- package/dist/timer.js.map +1 -1
- package/dist/uniformdata.js +2 -2
- package/dist/uniformdata.js.map +1 -1
- package/dist/vertexdata.js +27 -1
- package/dist/vertexdata.js.map +1 -1
- package/package.json +31 -19
package/dist/gpuobject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gpuobject.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"gpuobject.js","sources":["../src/gpuobject.ts"],"sourcesContent":["import type { VectorBase, CubeFace, TypedArray, IDisposable } from '@zephyr3d/base';\r\nimport type { ShaderKind, AbstractDevice } from './base_types';\r\nimport type { PBTypeInfo } from './builder/types';\r\nimport { PBArrayTypeInfo, PBPrimitiveTypeInfo, PBStructTypeInfo, PBPrimitiveType } from './builder/types';\r\nimport type {\r\n TextureType,\r\n CompareFunc,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n DataType,\r\n PrimitiveType,\r\n TextureFormat\r\n} from './base_types';\r\nimport type { VertexBufferInfo } from './vertexdata';\r\n\r\n/**\r\n * The types of image element that can be uploaded to textures\r\n * @public\r\n */\r\nexport type TextureImageElement = ImageBitmap | HTMLCanvasElement;\r\n\r\n/** @public */\r\nexport const MAX_VERTEX_ATTRIBUTES = 16;\r\n/** @public */\r\nexport const MAX_BINDING_GROUPS = 4;\r\n/** @public */\r\nexport const MAX_TEXCOORD_INDEX_COUNT = 8;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_POSITION = 0;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_NORMAL = 1;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_DIFFUSE = 2;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TANGENT = 3;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD0 = 4;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD1 = 5;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD2 = 6;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD3 = 7;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD4 = 8;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD5 = 9;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD6 = 10;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_TEXCOORD7 = 11;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_BLEND_WEIGHT = 12;\r\n/** @public */\r\nexport const VERTEX_ATTRIB_BLEND_INDICES = 13;\r\n\r\n/**\r\n * The vertex format types\r\n * @public\r\n */\r\nexport type VertexAttribFormat =\r\n | 'position_u8normx2'\r\n | 'position_u8normx4'\r\n | 'position_i8normx2'\r\n | 'position_i8normx4'\r\n | 'position_u16x2'\r\n | 'position_u16x4'\r\n | 'position_i16x2'\r\n | 'position_i16x4'\r\n | 'position_u16normx2'\r\n | 'position_u16normx4'\r\n | 'position_i16normx2'\r\n | 'position_i16normx4'\r\n | 'position_f16x2'\r\n | 'position_f16x4'\r\n | 'position_f32'\r\n | 'position_f32x2'\r\n | 'position_f32x3'\r\n | 'position_f32x4'\r\n | 'position_i32'\r\n | 'position_i32x2'\r\n | 'position_i32x3'\r\n | 'position_i32x4'\r\n | 'position_u32'\r\n | 'position_u32x2'\r\n | 'position_u32x3'\r\n | 'position_u32x4'\r\n | 'normal_f16x4'\r\n | 'normal_f32x3'\r\n | 'normal_f32x4'\r\n | 'diffuse_u8normx4'\r\n | 'diffuse_u16x4'\r\n | 'diffuse_u16normx4'\r\n | 'diffuse_f16x4'\r\n | 'diffuse_f32x3'\r\n | 'diffuse_f32x4'\r\n | 'diffuse_u32x3'\r\n | 'diffuse_u32x4'\r\n | 'tangent_f16x4'\r\n | 'tangent_f32x3'\r\n | 'tangent_f32x4'\r\n | 'tex0_u8normx2'\r\n | 'tex0_u8normx4'\r\n | 'tex0_i8normx2'\r\n | 'tex0_i8normx4'\r\n | 'tex0_u16x2'\r\n | 'tex0_u16x4'\r\n | 'tex0_i16x2'\r\n | 'tex0_i16x4'\r\n | 'tex0_u16normx2'\r\n | 'tex0_u16normx4'\r\n | 'tex0_i16normx2'\r\n | 'tex0_i16normx4'\r\n | 'tex0_f16x2'\r\n | 'tex0_f16x4'\r\n | 'tex0_f32'\r\n | 'tex0_f32x2'\r\n | 'tex0_f32x3'\r\n | 'tex0_f32x4'\r\n | 'tex0_i32'\r\n | 'tex0_i32x2'\r\n | 'tex0_i32x3'\r\n | 'tex0_i32x4'\r\n | 'tex0_u32'\r\n | 'tex0_u32x2'\r\n | 'tex0_u32x3'\r\n | 'tex0_u32x4'\r\n | 'tex1_u8normx2'\r\n | 'tex1_u8normx4'\r\n | 'tex1_i8normx2'\r\n | 'tex1_i8normx4'\r\n | 'tex1_u16x2'\r\n | 'tex1_u16x4'\r\n | 'tex1_i16x2'\r\n | 'tex1_i16x4'\r\n | 'tex1_u16normx2'\r\n | 'tex1_u16normx4'\r\n | 'tex1_i16normx2'\r\n | 'tex1_i16normx4'\r\n | 'tex1_f16x2'\r\n | 'tex1_f16x4'\r\n | 'tex1_f32'\r\n | 'tex1_f32x2'\r\n | 'tex1_f32x3'\r\n | 'tex1_f32x4'\r\n | 'tex1_i32'\r\n | 'tex1_i32x2'\r\n | 'tex1_i32x3'\r\n | 'tex1_i32x4'\r\n | 'tex1_u32'\r\n | 'tex1_u32x2'\r\n | 'tex1_u32x3'\r\n | 'tex1_u32x4'\r\n | 'tex2_u8normx2'\r\n | 'tex2_u8normx4'\r\n | 'tex2_i8normx2'\r\n | 'tex2_i8normx4'\r\n | 'tex2_u16x2'\r\n | 'tex2_u16x4'\r\n | 'tex2_i16x2'\r\n | 'tex2_i16x4'\r\n | 'tex2_u16normx2'\r\n | 'tex2_u16normx4'\r\n | 'tex2_i16normx2'\r\n | 'tex2_i16normx4'\r\n | 'tex2_f16x2'\r\n | 'tex2_f16x4'\r\n | 'tex2_f32'\r\n | 'tex2_f32x2'\r\n | 'tex2_f32x3'\r\n | 'tex2_f32x4'\r\n | 'tex2_i32'\r\n | 'tex2_i32x2'\r\n | 'tex2_i32x3'\r\n | 'tex2_i32x4'\r\n | 'tex2_u32'\r\n | 'tex2_u32x2'\r\n | 'tex2_u32x3'\r\n | 'tex2_u32x4'\r\n | 'tex3_u8normx2'\r\n | 'tex3_u8normx4'\r\n | 'tex3_i8normx2'\r\n | 'tex3_i8normx4'\r\n | 'tex3_u16x2'\r\n | 'tex3_u16x4'\r\n | 'tex3_i16x2'\r\n | 'tex3_i16x4'\r\n | 'tex3_u16normx2'\r\n | 'tex3_u16normx4'\r\n | 'tex3_i16normx2'\r\n | 'tex3_i16normx4'\r\n | 'tex3_f16x2'\r\n | 'tex3_f16x4'\r\n | 'tex3_f32'\r\n | 'tex3_f32x2'\r\n | 'tex3_f32x3'\r\n | 'tex3_f32x4'\r\n | 'tex3_i32'\r\n | 'tex3_i32x2'\r\n | 'tex3_i32x3'\r\n | 'tex3_i32x4'\r\n | 'tex3_u32'\r\n | 'tex3_u32x2'\r\n | 'tex3_u32x3'\r\n | 'tex3_u32x4'\r\n | 'tex4_u8normx2'\r\n | 'tex4_u8normx4'\r\n | 'tex4_i8normx2'\r\n | 'tex4_i8normx4'\r\n | 'tex4_u16x2'\r\n | 'tex4_u16x4'\r\n | 'tex4_i16x2'\r\n | 'tex4_i16x4'\r\n | 'tex4_u16normx2'\r\n | 'tex4_u16normx4'\r\n | 'tex4_i16normx2'\r\n | 'tex4_i16normx4'\r\n | 'tex4_f16x2'\r\n | 'tex4_f16x4'\r\n | 'tex4_f32'\r\n | 'tex4_f32x2'\r\n | 'tex4_f32x3'\r\n | 'tex4_f32x4'\r\n | 'tex4_i32'\r\n | 'tex4_i32x2'\r\n | 'tex4_i32x3'\r\n | 'tex4_i32x4'\r\n | 'tex4_u32'\r\n | 'tex4_u32x2'\r\n | 'tex4_u32x3'\r\n | 'tex4_u32x4'\r\n | 'tex5_u8normx2'\r\n | 'tex5_u8normx4'\r\n | 'tex5_i8normx2'\r\n | 'tex5_i8normx4'\r\n | 'tex5_u16x2'\r\n | 'tex5_u16x4'\r\n | 'tex5_i16x2'\r\n | 'tex5_i16x4'\r\n | 'tex5_u16normx2'\r\n | 'tex5_u16normx4'\r\n | 'tex5_i16normx2'\r\n | 'tex5_i16normx4'\r\n | 'tex5_f16x2'\r\n | 'tex5_f16x4'\r\n | 'tex5_f32'\r\n | 'tex5_f32x2'\r\n | 'tex5_f32x3'\r\n | 'tex5_f32x4'\r\n | 'tex5_i32'\r\n | 'tex5_i32x2'\r\n | 'tex5_i32x3'\r\n | 'tex5_i32x4'\r\n | 'tex5_u32'\r\n | 'tex5_u32x2'\r\n | 'tex5_u32x3'\r\n | 'tex5_u32x4'\r\n | 'tex6_u8normx2'\r\n | 'tex6_u8normx4'\r\n | 'tex6_i8normx2'\r\n | 'tex6_i8normx4'\r\n | 'tex6_u16x2'\r\n | 'tex6_u16x4'\r\n | 'tex6_i16x2'\r\n | 'tex6_i16x4'\r\n | 'tex6_u16normx2'\r\n | 'tex6_u16normx4'\r\n | 'tex6_i16normx2'\r\n | 'tex6_i16normx4'\r\n | 'tex6_f16x2'\r\n | 'tex6_f16x4'\r\n | 'tex6_f32'\r\n | 'tex6_f32x2'\r\n | 'tex6_f32x3'\r\n | 'tex6_f32x4'\r\n | 'tex6_i32'\r\n | 'tex6_i32x2'\r\n | 'tex6_i32x3'\r\n | 'tex6_i32x4'\r\n | 'tex6_u32'\r\n | 'tex6_u32x2'\r\n | 'tex6_u32x3'\r\n | 'tex6_u32x4'\r\n | 'tex7_u8normx2'\r\n | 'tex7_u8normx4'\r\n | 'tex7_i8normx2'\r\n | 'tex7_i8normx4'\r\n | 'tex7_u16x2'\r\n | 'tex7_u16x4'\r\n | 'tex7_i16x2'\r\n | 'tex7_i16x4'\r\n | 'tex7_u16normx2'\r\n | 'tex7_u16normx4'\r\n | 'tex7_i16normx2'\r\n | 'tex7_i16normx4'\r\n | 'tex7_f16x2'\r\n | 'tex7_f16x4'\r\n | 'tex7_f32'\r\n | 'tex7_f32x2'\r\n | 'tex7_f32x3'\r\n | 'tex7_f32x4'\r\n | 'tex7_i32'\r\n | 'tex7_i32x2'\r\n | 'tex7_i32x3'\r\n | 'tex7_i32x4'\r\n | 'tex7_u32'\r\n | 'tex7_u32x2'\r\n | 'tex7_u32x3'\r\n | 'tex7_u32x4'\r\n | 'blendweights_f16x1'\r\n | 'blendweights_f32x1'\r\n | 'blendweights_f16x2'\r\n | 'blendweights_f32x2'\r\n | 'blendweights_f16x3'\r\n | 'blendweights_f32x3'\r\n | 'blendweights_f16x4'\r\n | 'blendweights_f32x4'\r\n | 'blendindices_f16x1'\r\n | 'blendindices_u16x1'\r\n | 'blendindices_f32x1'\r\n | 'blendindices_u32x1'\r\n | 'blendindices_f16x2'\r\n | 'blendindices_u16x2'\r\n | 'blendindices_f32x2'\r\n | 'blendindices_u32x2'\r\n | 'blendindices_f16x3'\r\n | 'blendindices_u16x3'\r\n | 'blendindices_f32x3'\r\n | 'blendindices_u32x3'\r\n | 'blendindices_f16x4'\r\n | 'blendindices_u16x4'\r\n | 'blendindices_f32x4'\r\n | 'blendindices_u32x4';\r\n\r\nconst vertexAttribFormatMap = {\r\n position_u8normx2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n position_u8normx4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n position_i8normx2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n position_i8normx4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n position_u16x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n position_u16x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n position_i16x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n position_i16x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n position_u16normx2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n position_u16normx4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n position_i16normx2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n position_i16normx4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n position_f16x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n position_f16x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n position_f32: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F32, 4, 'f32', 1],\r\n position_f32x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n position_f32x3: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n position_f32x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n position_i32: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I32, 4, 'i32', 1],\r\n position_i32x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n position_i32x3: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n position_i32x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n position_u32: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U32, 4, 'u32', 1],\r\n position_u32x2: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n position_u32x3: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n position_u32x4: [VERTEX_ATTRIB_POSITION, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n normal_f16x4: [VERTEX_ATTRIB_NORMAL, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n normal_f32x3: [VERTEX_ATTRIB_NORMAL, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n normal_f32x4: [VERTEX_ATTRIB_NORMAL, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n diffuse_u8normx4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n diffuse_u16x4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n diffuse_u16normx4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n diffuse_f16x4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n diffuse_f32x3: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n diffuse_f32x4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n diffuse_u32x3: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n diffuse_u32x4: [VERTEX_ATTRIB_DIFFUSE, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tangent_f16x4: [VERTEX_ATTRIB_TANGENT, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tangent_f32x3: [VERTEX_ATTRIB_TANGENT, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tangent_f32x4: [VERTEX_ATTRIB_TANGENT, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex0_u8normx2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex0_u8normx4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex0_i8normx2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex0_i8normx4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex0_u16x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex0_u16x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex0_i16x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex0_i16x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex0_u16normx2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex0_u16normx4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex0_i16normx2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex0_i16normx4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex0_f16x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex0_f16x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex0_f32: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex0_f32x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex0_f32x3: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex0_f32x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex0_i32: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex0_i32x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex0_i32x3: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex0_i32x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex0_u32: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex0_u32x2: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex0_u32x3: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex0_u32x4: [VERTEX_ATTRIB_TEXCOORD0, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex1_u8normx2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex1_u8normx4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex1_i8normx2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex1_i8normx4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex1_u16x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex1_u16x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex1_i16x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex1_i16x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex1_u16normx2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex1_u16normx4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex1_i16normx2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex1_i16normx4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex1_f16x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex1_f16x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex1_f32: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex1_f32x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex1_f32x3: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex1_f32x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex1_i32: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex1_i32x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex1_i32x3: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex1_i32x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex1_u32: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex1_u32x2: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex1_u32x3: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex1_u32x4: [VERTEX_ATTRIB_TEXCOORD1, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex2_u8normx2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex2_u8normx4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex2_i8normx2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex2_i8normx4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex2_u16x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex2_u16x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex2_i16x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex2_i16x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex2_u16normx2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex2_u16normx4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex2_i16normx2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex2_i16normx4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex2_f16x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex2_f16x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex2_f32: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex2_f32x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex2_f32x3: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex2_f32x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex2_i32: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex2_i32x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex2_i32x3: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex2_i32x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex2_u32: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex2_u32x2: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex2_u32x3: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex2_u32x4: [VERTEX_ATTRIB_TEXCOORD2, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex3_u8normx2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex3_u8normx4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex3_i8normx2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex3_i8normx4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex3_u16x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex3_u16x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex3_i16x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex3_i16x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex3_u16normx2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex3_u16normx4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex3_i16normx2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex3_i16normx4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex3_f16x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex3_f16x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex3_f32: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex3_f32x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex3_f32x3: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex3_f32x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex3_i32: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex3_i32x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex3_i32x3: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex3_i32x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex3_u32: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex3_u32x2: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex3_u32x3: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex3_u32x4: [VERTEX_ATTRIB_TEXCOORD3, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex4_u8normx2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex4_u8normx4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex4_i8normx2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex4_i8normx4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex4_u16x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex4_u16x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex4_i16x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex4_i16x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex4_u16normx2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex4_u16normx4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex4_i16normx2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex4_i16normx4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex4_f16x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex4_f16x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex4_f32: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex4_f32x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex4_f32x3: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex4_f32x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex4_i32: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex4_i32x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex4_i32x3: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex4_i32x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex4_u32: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex4_u32x2: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex4_u32x3: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex4_u32x4: [VERTEX_ATTRIB_TEXCOORD4, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex5_u8normx2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex5_u8normx4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex5_i8normx2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex5_i8normx4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex5_u16x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex5_u16x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex5_i16x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex5_i16x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex5_u16normx2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex5_u16normx4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex5_i16normx2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex5_i16normx4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex5_f16x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex5_f16x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex5_f32: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex5_f32x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex5_f32x3: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex5_f32x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex5_i32: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex5_i32x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex5_i32x3: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex5_i32x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex5_u32: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex5_u32x2: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex5_u32x3: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex5_u32x4: [VERTEX_ATTRIB_TEXCOORD5, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex6_u8normx2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex6_u8normx4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex6_i8normx2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex6_i8normx4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex6_u16x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex6_u16x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex6_i16x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex6_i16x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex6_u16normx2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex6_u16normx4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex6_i16normx2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex6_i16normx4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex6_f16x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex6_f16x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex6_f32: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex6_f32x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex6_f32x3: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex6_f32x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex6_i32: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex6_i32x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex6_i32x3: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex6_i32x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex6_u32: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex6_u32x2: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex6_u32x3: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex6_u32x4: [VERTEX_ATTRIB_TEXCOORD6, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n tex7_u8normx2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U8VEC2_NORM, 2, 'u8norm', 2],\r\n tex7_u8normx4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U8VEC4_NORM, 4, 'u8norm', 4],\r\n tex7_i8normx2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I8VEC2_NORM, 2, 'i8norm', 2],\r\n tex7_i8normx4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I8VEC4_NORM, 4, 'i8norm', 4],\r\n tex7_u16x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n tex7_u16x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n tex7_i16x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I16VEC2, 4, 'i16', 2],\r\n tex7_i16x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I16VEC4, 8, 'i16', 4],\r\n tex7_u16normx2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U16VEC2_NORM, 4, 'u16norm', 2],\r\n tex7_u16normx4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U16VEC4_NORM, 8, 'u16norm', 4],\r\n tex7_i16normx2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I16VEC2_NORM, 4, 'i16norm', 2],\r\n tex7_i16normx4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I16VEC4_NORM, 8, 'i16norm', 4],\r\n tex7_f16x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n tex7_f16x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n tex7_f32: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F32, 4, 'f32', 1],\r\n tex7_f32x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n tex7_f32x3: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n tex7_f32x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n tex7_i32: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I32, 4, 'i32', 1],\r\n tex7_i32x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I32VEC2, 8, 'i32', 2],\r\n tex7_i32x3: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I32VEC3, 12, 'i32', 3],\r\n tex7_i32x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.I32VEC4, 16, 'i32', 4],\r\n tex7_u32: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U32, 4, 'u32', 1],\r\n tex7_u32x2: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n tex7_u32x3: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n tex7_u32x4: [VERTEX_ATTRIB_TEXCOORD7, PBPrimitiveType.U32VEC4, 16, 'u32', 4],\r\n blendweights_f16x1: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F16, 2, 'f16', 1],\r\n blendweights_f32x1: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F32, 4, 'f32', 1],\r\n blendweights_f16x2: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n blendweights_f32x2: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n blendweights_f16x3: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F16VEC3, 6, 'f16', 3],\r\n blendweights_f32x3: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n blendweights_f16x4: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n blendweights_f32x4: [VERTEX_ATTRIB_BLEND_WEIGHT, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n blendindices_u16x1: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U16, 2, 'u16', 1],\r\n blendindices_f16x1: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F16, 2, 'f16', 1],\r\n blendindices_f32x1: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F32, 4, 'f32', 1],\r\n blendindices_u32x1: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U32, 4, 'u32', 1],\r\n blendindices_u16x2: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U16VEC2, 4, 'u16', 2],\r\n blendindices_f16x2: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F16VEC2, 4, 'f16', 2],\r\n blendindices_f32x2: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F32VEC2, 8, 'f32', 2],\r\n blendindices_u32x2: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U32VEC2, 8, 'u32', 2],\r\n blendindices_u16x3: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U16VEC3, 6, 'u16', 3],\r\n blendindices_f16x3: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F16VEC3, 6, 'f16', 3],\r\n blendindices_f32x3: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F32VEC3, 12, 'f32', 3],\r\n blendindices_u32x3: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U32VEC3, 12, 'u32', 3],\r\n blendindices_u16x4: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U16VEC4, 8, 'u16', 4],\r\n blendindices_f16x4: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F16VEC4, 8, 'f16', 4],\r\n blendindices_f32x4: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.F32VEC4, 16, 'f32', 4],\r\n blendindices_u32x4: [VERTEX_ATTRIB_BLEND_INDICES, PBPrimitiveType.U32VEC4, 16, 'u32', 4]\r\n} as const;\r\n\r\n/**\r\n * The semantic type of vertex\r\n * @public\r\n */\r\nexport type VertexSemantic =\r\n | 'position'\r\n | 'normal'\r\n | 'diffuse'\r\n | 'tangent'\r\n | 'blendIndices'\r\n | 'blendWeights'\r\n | 'texCoord0'\r\n | 'texCoord1'\r\n | 'texCoord2'\r\n | 'texCoord3'\r\n | 'texCoord4'\r\n | 'texCoord5'\r\n | 'texCoord6'\r\n | 'texCoord7';\r\n\r\nconst vertexAttribNameMap = {\r\n position: VERTEX_ATTRIB_POSITION,\r\n normal: VERTEX_ATTRIB_NORMAL,\r\n diffuse: VERTEX_ATTRIB_DIFFUSE,\r\n tangent: VERTEX_ATTRIB_TANGENT,\r\n blendIndices: VERTEX_ATTRIB_BLEND_INDICES,\r\n blendWeights: VERTEX_ATTRIB_BLEND_WEIGHT,\r\n texCoord0: VERTEX_ATTRIB_TEXCOORD0,\r\n texCoord1: VERTEX_ATTRIB_TEXCOORD1,\r\n texCoord2: VERTEX_ATTRIB_TEXCOORD2,\r\n texCoord3: VERTEX_ATTRIB_TEXCOORD3,\r\n texCoord4: VERTEX_ATTRIB_TEXCOORD4,\r\n texCoord5: VERTEX_ATTRIB_TEXCOORD5,\r\n texCoord6: VERTEX_ATTRIB_TEXCOORD6,\r\n texCoord7: VERTEX_ATTRIB_TEXCOORD7\r\n} as const;\r\n\r\nconst vertexAttribNameRevMap = {\r\n [VERTEX_ATTRIB_POSITION]: 'position',\r\n [VERTEX_ATTRIB_NORMAL]: 'normal',\r\n [VERTEX_ATTRIB_DIFFUSE]: 'diffuse',\r\n [VERTEX_ATTRIB_TANGENT]: 'tangent',\r\n [VERTEX_ATTRIB_BLEND_INDICES]: 'blendIndices',\r\n [VERTEX_ATTRIB_BLEND_WEIGHT]: 'blendWeights',\r\n [VERTEX_ATTRIB_TEXCOORD0]: 'texCoord0',\r\n [VERTEX_ATTRIB_TEXCOORD1]: 'texCoord1',\r\n [VERTEX_ATTRIB_TEXCOORD2]: 'texCoord2',\r\n [VERTEX_ATTRIB_TEXCOORD3]: 'texCoord3',\r\n [VERTEX_ATTRIB_TEXCOORD4]: 'texCoord4',\r\n [VERTEX_ATTRIB_TEXCOORD5]: 'texCoord5',\r\n [VERTEX_ATTRIB_TEXCOORD6]: 'texCoord6',\r\n [VERTEX_ATTRIB_TEXCOORD7]: 'texCoord7'\r\n} as const;\r\n\r\n/**\r\n * Options for creating vertex layout\r\n * @public\r\n */\r\nexport type VertexLayoutOptions = {\r\n /**\r\n * vertex buffers in this vertex layout\r\n */\r\n vertexBuffers: {\r\n buffer: StructuredBuffer;\r\n stepMode?: VertexStepMode;\r\n }[];\r\n /**\r\n * optional index buffer in this vertex layout\r\n */\r\n indexBuffer?: IndexBuffer;\r\n};\r\n\r\n/**\r\n * Supported colorspace types for texture\r\n * @public\r\n */\r\nexport type TextureColorSpace = 'srgb' | 'linear';\r\n\r\n/**\r\n * Buffer usage type\r\n * @public\r\n */\r\nexport type BufferUsage = 'vertex' | 'index' | 'uniform' | 'read' | 'write' | 'pack-pixel' | 'unpack-pixel';\r\n\r\n/**\r\n * Common options for createing texture or buffer\r\n * @public\r\n */\r\nexport interface BaseCreationOptions {\r\n /**\r\n * Whether the object should be dynamic, default is false\r\n */\r\n dynamic?: boolean;\r\n}\r\n/**\r\n * Options for creating texture\r\n * @public\r\n */\r\nexport interface TextureCreationOptions extends BaseCreationOptions {\r\n writable?: boolean;\r\n texture?: BaseTexture;\r\n mipmapping?: boolean;\r\n samplerOptions?: SamplerOptions;\r\n}\r\n/**\r\n * Options for creating gpu buffer\r\n * @public\r\n */\r\nexport interface BufferCreationOptions extends BaseCreationOptions {\r\n /** The buffer usage */\r\n usage?: BufferUsage;\r\n /** true if we are creating a storage buffer */\r\n storage?: boolean;\r\n /** Whether the object content should be managed, default true for vertex buffer of index buffer */\r\n managed?: boolean;\r\n}\r\n\r\n/**\r\n * The gpu resource usage flags\r\n * @public\r\n */\r\nexport enum GPUResourceUsageFlags {\r\n TF_LINEAR_COLOR_SPACE = 1 << 1,\r\n TF_NO_MIPMAP = 1 << 2,\r\n TF_WRITABLE = 1 << 3,\r\n TF_NO_GC = 1 << 4,\r\n BF_VERTEX = 1 << 5,\r\n BF_INDEX = 1 << 6,\r\n BF_READ = 1 << 7,\r\n BF_WRITE = 1 << 8,\r\n BF_UNIFORM = 1 << 9,\r\n BF_STORAGE = 1 << 10,\r\n BF_PACK_PIXEL = 1 << 11,\r\n BF_UNPACK_PIXEL = 1 << 12,\r\n DYNAMIC = 1 << 13,\r\n MANAGED = 1 << 14\r\n}\r\n\r\n/**\r\n * Get vertex attribute index by semantic\r\n * @public\r\n */\r\nexport function getVertexAttribByName(name: VertexSemantic): number {\r\n return vertexAttribNameMap[name];\r\n}\r\n\r\n/**\r\n * Get vertex semantic by attribute index\r\n * @public\r\n */\r\nexport function getVertexAttribName(attrib: number): VertexSemantic {\r\n return vertexAttribNameRevMap[attrib];\r\n}\r\n\r\n/**\r\n * Test whether a vertex buffer matches given semantic\r\n * @param buffer - Vertex buffer\r\n * @param name - Semantic to test\r\n * @returns true if the vertex buffer matches given semantic, otherwise false\r\n *\r\n * @public\r\n */\r\nexport function matchVertexBuffer(buffer: StructuredBuffer, name: VertexSemantic): boolean {\r\n if (!buffer) {\r\n return false;\r\n }\r\n const bufferType = buffer.structure.structMembers[0].type;\r\n if (!bufferType.isArrayType()) {\r\n return false;\r\n }\r\n const vertexType = bufferType.elementType;\r\n if (vertexType.isStructType()) {\r\n for (const attrib of vertexType.structMembers) {\r\n if (attrib.name === name) {\r\n return true;\r\n }\r\n }\r\n } else {\r\n return buffer.structure.structMembers[0].name === name;\r\n }\r\n}\r\n\r\n/**\r\n * Get vertex attribute type of specified vertex format\r\n * @param fmt - The vertex format\r\n * @returns Vertex attribute type, possible values are 'f32', 'f16', 'i32', 'u32', 'i16', 'u16', 'i8norm', 'u8norm', 'i16norm', 'u16norm'\r\n *\r\n * @public\r\n */\r\nexport function getVertexAttributeFormat(fmt: VertexAttribFormat) {\r\n return vertexAttribFormatMap[fmt][3];\r\n}\r\n\r\n/**\r\n * Get vertex attribute index of specified vertex format\r\n * @param fmt - The vertex format\r\n * @returns Vertex attribute index\r\n *\r\n * @public\r\n */\r\nexport function getVertexAttributeIndex(fmt: VertexAttribFormat): number {\r\n return vertexAttribFormatMap[fmt][0];\r\n}\r\n\r\n/**\r\n * Get byte size of specified vertex format\r\n *\r\n * @public\r\n */\r\nexport function getVertexFormatSize(fmt: VertexAttribFormat): number {\r\n return vertexAttribFormatMap[fmt][2];\r\n}\r\n\r\n/**\r\n * Get number of components of specified vertex format\r\n *\r\n * @public\r\n */\r\nexport function getVertexFormatComponentCount(fmt: VertexAttribFormat): number {\r\n return vertexAttribFormatMap[fmt][4];\r\n}\r\n\r\n/**\r\n * Get vertex format by semantic and component type and component count\r\n * @param semantic - The vertex semantic\r\n * @param type - Data type of vertex component\r\n * @param count - The count of vertex components\r\n * @returns Vertex format\r\n *\r\n * @public\r\n */\r\nexport function getVertexAttribFormat(\r\n semantic: VertexSemantic,\r\n type: DataType,\r\n count: number\r\n): VertexAttribFormat {\r\n const loc = getVertexAttribByName(semantic);\r\n for (const k in vertexAttribFormatMap) {\r\n const v = vertexAttribFormatMap[k];\r\n if (v[0] === loc && v[3] === type && v[4] === count) {\r\n return k as VertexAttribFormat;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Get the length of a vertex buffer by specified structure type of the vertex buffer\r\n * @param vertexBufferType - The structure type of the vertex buffer\r\n * @returns The length of the vertex buffer\r\n *\r\n * @public\r\n */\r\nexport function getVertexBufferLength(vertexBufferType: PBStructTypeInfo) {\r\n return (vertexBufferType.structMembers[0].type as PBArrayTypeInfo).dimension;\r\n}\r\n\r\n/**\r\n * Get byte stride of a vertex buffer by specified structure type of the vertex buffer\r\n * @param vertexBufferType - The structure type of the vertex buffer\r\n * @returns The byte stride of the vertex buffer\r\n *\r\n * @public\r\n */\r\nexport function getVertexBufferStride(vertexBufferType: PBStructTypeInfo) {\r\n const vertexType = (vertexBufferType.structMembers[0].type as PBArrayTypeInfo).elementType;\r\n if (vertexType.isStructType()) {\r\n let stride = 0;\r\n for (const member of vertexType.structMembers) {\r\n stride += (member.type as PBPrimitiveTypeInfo).getSize();\r\n }\r\n return stride;\r\n } else {\r\n return (vertexType as PBPrimitiveTypeInfo).getSize();\r\n }\r\n}\r\n\r\n/**\r\n * Get primitive type of a vertex attribute by specified vertex semantic\r\n * @param vertexBufferType - The structure type of the vertex buffer\r\n * @param semantic - The vertex semantic\r\n * @returns - The primitive type of the vertex attribute\r\n *\r\n * @public\r\n */\r\nexport function getVertexBufferAttribTypeBySemantic(\r\n vertexBufferType: PBStructTypeInfo,\r\n semantic: VertexSemantic\r\n): PBPrimitiveTypeInfo {\r\n const k = vertexBufferType.structMembers[0];\r\n const vertexType = (k.type as PBArrayTypeInfo).elementType;\r\n if (vertexType.isStructType()) {\r\n for (const member of vertexType.structMembers) {\r\n if (member.name === semantic) {\r\n return member.type as PBPrimitiveTypeInfo;\r\n }\r\n }\r\n return null;\r\n } else {\r\n return k.name === semantic ? (vertexType as PBPrimitiveTypeInfo) : null;\r\n }\r\n}\r\n\r\n/**\r\n * Get primitive type of a vertex attribute by specified vertex attribute index\r\n * @param vertexBufferType - The structure type of the vertex buffer\r\n * @param semantic - The vertex attribute index\r\n * @returns - The primitive type of the vertex attribute\r\n *\r\n * @public\r\n */\r\nexport function getVertexBufferAttribType(\r\n vertexBufferType: PBStructTypeInfo,\r\n attrib: number\r\n): PBPrimitiveTypeInfo {\r\n const attribName = getVertexAttribName(attrib);\r\n if (!attribName) {\r\n return null;\r\n }\r\n return getVertexBufferAttribTypeBySemantic(vertexBufferType, attribName);\r\n}\r\n\r\n/**\r\n * Get the structure type of a vertex buffer by specified vertex attribute formats and the length of the vertex buffer\r\n * @param length - The length of the vertex buffer\r\n * @param attributes - The vertex attributes\r\n * @returns The structure type of the vertex buffer\r\n *\r\n * @public\r\n */\r\nexport function makeVertexBufferType(length: number, ...attributes: VertexAttribFormat[]): PBStructTypeInfo {\r\n if (attributes.length === 0) {\r\n return null;\r\n }\r\n if (attributes.length === 1) {\r\n const format = vertexAttribFormatMap[attributes[0]];\r\n return new PBStructTypeInfo(null, 'packed', [\r\n {\r\n name: getVertexAttribName(format[0]),\r\n type: new PBArrayTypeInfo(PBPrimitiveTypeInfo.getCachedTypeInfo(format[1]), length)\r\n }\r\n ]);\r\n } else {\r\n const vertexType = new PBStructTypeInfo(\r\n null,\r\n 'packed',\r\n attributes.map((attrib) => ({\r\n name: getVertexAttribName(vertexAttribFormatMap[attrib][0]),\r\n type: PBPrimitiveTypeInfo.getCachedTypeInfo(vertexAttribFormatMap[attrib][1])\r\n }))\r\n );\r\n return new PBStructTypeInfo(null, 'packed', [\r\n {\r\n name: 'value',\r\n type: new PBArrayTypeInfo(vertexType, length)\r\n }\r\n ]);\r\n }\r\n}\r\n\r\n/**\r\n * Vertex step mode.\r\n *\r\n * @public\r\n */\r\nexport type VertexStepMode = 'vertex' | 'instance';\r\n\r\n/**\r\n * Vertex semantic list\r\n *\r\n * @public\r\n */\r\nexport const semanticList: string[] = (function () {\r\n const list: string[] = [];\r\n for (let i = 0; i < MAX_VERTEX_ATTRIBUTES; i++) {\r\n list.push(semanticToAttrib(i));\r\n }\r\n return list;\r\n})();\r\n\r\n/** @internal */\r\nexport function semanticToAttrib(semantic: number): string {\r\n switch (semantic) {\r\n case VERTEX_ATTRIB_POSITION:\r\n return 'a_position';\r\n case VERTEX_ATTRIB_NORMAL:\r\n return 'a_normal';\r\n case VERTEX_ATTRIB_DIFFUSE:\r\n return 'a_diffuse';\r\n case VERTEX_ATTRIB_TANGENT:\r\n return 'a_tangent';\r\n case VERTEX_ATTRIB_TEXCOORD0:\r\n return 'a_texcoord0';\r\n case VERTEX_ATTRIB_TEXCOORD1:\r\n return 'a_texcoord1';\r\n case VERTEX_ATTRIB_TEXCOORD2:\r\n return 'a_texcoord2';\r\n case VERTEX_ATTRIB_TEXCOORD3:\r\n return 'a_texcoord3';\r\n case VERTEX_ATTRIB_TEXCOORD4:\r\n return 'a_texcoord4';\r\n case VERTEX_ATTRIB_TEXCOORD5:\r\n return 'a_texcoord5';\r\n case VERTEX_ATTRIB_TEXCOORD6:\r\n return 'a_texcoord6';\r\n case VERTEX_ATTRIB_TEXCOORD7:\r\n return 'a_texcoord7';\r\n case VERTEX_ATTRIB_BLEND_INDICES:\r\n return 'a_indices';\r\n case VERTEX_ATTRIB_BLEND_WEIGHT:\r\n return 'a_weight';\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * A data structure that holds the texture data of a mipmap level\r\n * @public\r\n */\r\nexport interface TextureMipmapLevelData {\r\n /** The texture data */\r\n data: TypedArray;\r\n /** Width of the mipmap level */\r\n width: number;\r\n /** Height of the mipmap level */\r\n height: number;\r\n}\r\n\r\n/**\r\n * A data structure that holds the texture data of all mipmap levels\r\n * @public\r\n */\r\nexport interface TextureMipmapData {\r\n /** Texture width of mipmap level 0 */\r\n width: number;\r\n /** Texture height of mipmap level 0 */\r\n height: number;\r\n /** Texture depth of mipmap level 0 */\r\n depth: number;\r\n /** true if it holds texture data for cube texture */\r\n isCubemap: boolean;\r\n /** true if it holds texture data for 3d texture */\r\n isVolume: boolean;\r\n /** true if it holds texture array */\r\n isArray: boolean;\r\n /** true if the texture data are in compressed format */\r\n isCompressed: boolean;\r\n /** The array size if it holds texture data for array texture */\r\n arraySize: number;\r\n /** How many mipmap levels in the texture data */\r\n mipLevels: number;\r\n /** The texture format */\r\n format: TextureFormat;\r\n /** The mipmap level datas */\r\n mipDatas: TextureMipmapLevelData[][];\r\n}\r\n\r\n/**\r\n * Frame buffer texture attachment information\r\n * @public\r\n */\r\nexport interface FrameBufferTextureAttachment {\r\n /** Texture for this attachment */\r\n texture?: BaseTexture;\r\n /** The attached face index for cube texture */\r\n face?: number;\r\n /** The layer index for array texture */\r\n layer?: number;\r\n /** Which mipmap level is currently attached */\r\n level?: number;\r\n /** Whether automatically generate mipmaps for color attachments */\r\n generateMipmaps?: boolean;\r\n}\r\n\r\n/**\r\n * The frame buffer creation options\r\n * @public\r\n */\r\nexport interface FrameBufferOptions {\r\n /** Sample count of the frame buffer */\r\n sampleCount?: number;\r\n /** Whether to ignore the depth stencil attachment when resolving multisample frame buffer */\r\n ignoreDepthStencil?: boolean;\r\n}\r\n\r\n/**\r\n * The uniform buffer layout\r\n * @public\r\n */\r\nexport interface UniformBufferLayout {\r\n /** Byte size of the uniform buffer */\r\n byteSize: number;\r\n /** Entries for the uniform buffer */\r\n entries: UniformLayout[];\r\n}\r\n\r\n/**\r\n * Layout of a uniform in a uniform buffer\r\n * @public\r\n */\r\nexport interface UniformLayout {\r\n /** Name of the uniform */\r\n name: string;\r\n /** Byte offset of the uniform buffer */\r\n offset: number;\r\n /** Byte size of the uniform */\r\n byteSize: number;\r\n /** The array length if the uniform is array type */\r\n arraySize: number;\r\n /** The primitive type of the uniform */\r\n type: PBPrimitiveType;\r\n /** Layout of the members if the uniform is struct type */\r\n subLayout: UniformBufferLayout;\r\n}\r\n\r\n/**\r\n * Binding layout of a uniform buffer or storage buffer\r\n * @public\r\n */\r\nexport interface BufferBindingLayout {\r\n /** The bind type */\r\n type?: 'uniform' | 'storage' | 'read-only-storage';\r\n /** Whether the buffer should be accessed by a dynamic offset */\r\n hasDynamicOffset: boolean;\r\n /** layout for the buffer */\r\n uniformLayout: UniformBufferLayout;\r\n /** minimum binding size of the buffer */\r\n minBindingSize?: number;\r\n /** dynamic offset index */\r\n dynamicOffsetIndex: number;\r\n}\r\n\r\n/**\r\n * Binding layout of a sampler\r\n * @public\r\n */\r\nexport interface SamplerBindingLayout {\r\n /** The bind type */\r\n type: 'filtering' | 'non-filtering' | 'comparison';\r\n}\r\n\r\n/**\r\n * Binding layout of a texture for sampling\r\n * @public\r\n */\r\nexport interface TextureBindingLayout {\r\n /** Sample type of the texture */\r\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\r\n /** View dimension for the texture */\r\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\r\n /** Whether the textur is a multisampled texture */\r\n multisampled: boolean;\r\n /** name of the default sampler uniform when using WebGPU device */\r\n autoBindSampler: string;\r\n /** name of the default comparison sampler uniform when using WebGPU device */\r\n autoBindSamplerComparison: string;\r\n}\r\n\r\n/**\r\n * Binding layout of a storage texture\r\n * @public\r\n */\r\nexport interface StorageTextureBindingLayout {\r\n /** Access mode */\r\n access: 'write-only';\r\n /** The texture format */\r\n format: TextureFormat;\r\n /** View dimension */\r\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\r\n}\r\n\r\n/**\r\n * Binding layout of an external texture\r\n * @public\r\n */\r\nexport interface ExternalTextureBindingLayout {\r\n /** name of the default sampler uniform when using WebGPU device */\r\n autoBindSampler: string;\r\n}\r\n\r\n/**\r\n * Information of bind group entries\r\n * @public\r\n */\r\nexport interface BindGroupLayoutEntry {\r\n /** The binding location */\r\n binding: number;\r\n /** Name of this binding resource */\r\n name: string;\r\n /** Visibility mask */\r\n visibility: number;\r\n /** Type of the binding resource */\r\n type: PBTypeInfo;\r\n /** Binding layout if the resource is a buffer */\r\n buffer?: BufferBindingLayout;\r\n /** Binding layout if the resource is a sampler */\r\n sampler?: SamplerBindingLayout;\r\n /** Binding layout if the resource is a texture for sampling */\r\n texture?: TextureBindingLayout;\r\n /** Binding layout if the resource is a storage texture */\r\n storageTexture?: StorageTextureBindingLayout;\r\n /** Binding layout if the resource is an external texture */\r\n externalTexture?: ExternalTextureBindingLayout;\r\n}\r\n\r\n/**\r\n * Defines how the resources bound in a {@link BindGroup}\r\n * @public\r\n */\r\nexport interface BindGroupLayout {\r\n /** Label of the layout */\r\n label?: string;\r\n /** The name map */\r\n nameMap?: Record<string, string>;\r\n /** A list of {@link BindGroupLayoutEntry} */\r\n entries: BindGroupLayoutEntry[];\r\n}\r\n\r\n/**\r\n * Binding point information for a uniform\r\n * @public\r\n */\r\nexport interface BindPointInfo {\r\n group: number;\r\n binding: number;\r\n type: PBTypeInfo;\r\n}\r\n\r\n/**\r\n * Sampler creation options\r\n * @public\r\n */\r\nexport interface SamplerOptions {\r\n addressU?: TextureAddressMode;\r\n addressV?: TextureAddressMode;\r\n addressW?: TextureAddressMode;\r\n magFilter?: TextureFilterMode;\r\n minFilter?: TextureFilterMode;\r\n mipFilter?: TextureFilterMode;\r\n lodMin?: number;\r\n lodMax?: number;\r\n compare?: CompareFunc;\r\n maxAnisotropy?: number;\r\n}\r\n\r\n/**\r\n * Base class for a GPU object\r\n * @public\r\n */\r\nexport interface GPUObject<T = unknown> extends IDisposable {\r\n /** The object was created by which device */\r\n readonly device: AbstractDevice;\r\n /** The internal GPU object */\r\n readonly object: T;\r\n /** unique id */\r\n readonly uid: number;\r\n readonly cid: number;\r\n readonly disposed: boolean;\r\n name: string;\r\n restoreHandler: (tex: GPUObject) => void;\r\n isVertexLayout(): this is VertexLayout;\r\n isFramebuffer(): this is FrameBuffer;\r\n isSampler(): this is TextureSampler;\r\n isTexture(): this is BaseTexture;\r\n isTexture2D(): this is Texture2D;\r\n isTexture2DArray(): this is Texture2DArray;\r\n isTexture3D(): this is Texture3D;\r\n isTextureCube(): this is TextureCube;\r\n isTextureVideo(): this is TextureVideo;\r\n isProgram(): this is GPUProgram;\r\n isBuffer(): this is GPUDataBuffer;\r\n isBindGroup(): this is BindGroup;\r\n dispose(): void;\r\n reload(): void;\r\n destroy(): void;\r\n restore(): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for texture sampler\r\n * @public\r\n */\r\nexport interface TextureSampler<T = unknown> extends GPUObject<T> {\r\n readonly addressModeU: TextureAddressMode;\r\n readonly addressModeV: TextureAddressMode;\r\n readonly addressModeW: TextureAddressMode;\r\n readonly magFilter: TextureFilterMode;\r\n readonly minFilter: TextureFilterMode;\r\n readonly mipFilter: TextureFilterMode;\r\n readonly lodMin: number;\r\n readonly lodMax: number;\r\n readonly compare: CompareFunc;\r\n readonly maxAnisotropy: number;\r\n}\r\n\r\n/**\r\n * Abstract interface for texture\r\n * @public\r\n */\r\nexport interface BaseTexture<T = unknown> extends GPUObject<T> {\r\n readonly target: TextureType;\r\n readonly width: number;\r\n readonly height: number;\r\n readonly depth: number;\r\n readonly format: TextureFormat;\r\n readonly mipLevelCount: number;\r\n readonly memCost: number;\r\n samplerOptions: SamplerOptions;\r\n init(): void;\r\n generateMipmaps(): void;\r\n isSRGBFormat(): boolean;\r\n isFloatFormat(): boolean;\r\n isIntegerFormat(): boolean;\r\n isSignedFormat(): boolean;\r\n isCompressedFormat(): boolean;\r\n isFilterable(): boolean;\r\n isDepth(): boolean;\r\n getDefaultSampler(comparison: boolean): TextureSampler;\r\n readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for 2D texture\r\n * @public\r\n */\r\nexport interface Texture2D<T = unknown> extends BaseTexture<T> {\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number): void;\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ): void;\r\n loadFromElement(element: TextureImageElement, sRGB: boolean, creationFlags?: number): void;\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for 2D array texture\r\n * @public\r\n */\r\nexport interface Texture2DArray<T = unknown> extends BaseTexture<T> {\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ): void;\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n layerIndex: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ): void;\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for 3D texture\r\n * @public\r\n */\r\nexport interface Texture3D<T = unknown> extends BaseTexture<T> {\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ): void;\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for cube texture\r\n * @public\r\n */\r\nexport interface TextureCube<T = unknown> extends BaseTexture<T> {\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n width: number,\r\n height: number,\r\n face: CubeFace\r\n ): void;\r\n updateFromElement(\r\n data: TextureImageElement,\r\n xOffset: number,\r\n yOffset: number,\r\n face: number,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n ): void;\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for video texture\r\n * @public\r\n */\r\nexport interface TextureVideo<T = unknown> extends BaseTexture<T> {\r\n readonly source: HTMLVideoElement;\r\n updateVideoFrame(): boolean;\r\n}\r\n\r\n/**\r\n * Abstract interface for GPU buffer\r\n * @public\r\n */\r\nexport interface GPUDataBuffer<T = unknown> extends GPUObject<T> {\r\n readonly byteLength: number;\r\n readonly usage: number;\r\n bufferSubData(dstByteOffset: number, data: TypedArray, srcOffset?: number, srcLength?: number): void;\r\n getBufferSubData(\r\n dstBuffer?: Uint8Array<ArrayBuffer>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ): Promise<Uint8Array<ArrayBuffer>>;\r\n}\r\n\r\n/**\r\n * Abstract interface for index buffer\r\n * @public\r\n */\r\nexport interface IndexBuffer<T = unknown> extends GPUDataBuffer<T> {\r\n readonly indexType: PBPrimitiveTypeInfo;\r\n readonly length: number;\r\n}\r\n\r\n/**\r\n * Abstract interface for structured buffer\r\n * @public\r\n */\r\nexport interface StructuredBuffer<T = unknown> extends GPUDataBuffer<T> {\r\n structure: PBStructTypeInfo;\r\n set(name: string, value: StructuredValue);\r\n}\r\n\r\n/**\r\n * Abstract interface for vertex layout\r\n * @public\r\n */\r\nexport interface VertexLayout<T = unknown> extends GPUObject<T> {\r\n readonly vertexBuffers: {\r\n [semantic: number]: { buffer: StructuredBuffer; offset: number };\r\n };\r\n readonly indexBuffer: IndexBuffer;\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number): void;\r\n getVertexBuffer(semantic: VertexSemantic): StructuredBuffer;\r\n getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo;\r\n getIndexBuffer(): IndexBuffer;\r\n bind(): void;\r\n draw(primitiveType: PrimitiveType, first: number, count: number): void;\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number);\r\n}\r\n\r\n/**\r\n * Abstract interface for frame buffer\r\n * @public\r\n */\r\nexport interface FrameBuffer<T = unknown> extends GPUObject<T> {\r\n getWidth(): number;\r\n getHeight(): number;\r\n getSampleCount(): number;\r\n getHash(): string;\r\n setColorAttachmentCubeFace(index: number, face: CubeFace): void;\r\n getColorAttachmentCubeFace(index: number): CubeFace;\r\n setColorAttachmentMipLevel(index: number, level: number): void;\r\n getColorAttachmentMipLevel(index: number): number;\r\n setColorAttachmentLayer(index: number, layer: number): void;\r\n getColorAttachmentLayer(index: number): number;\r\n setColorAttachmentGenerateMipmaps(index: number, generateMipmaps: boolean): void;\r\n getColorAttachmentGenerateMipmaps(index: number): boolean;\r\n setDepthAttachmentCubeFace(face: CubeFace): void;\r\n getDepthAttachmentCubeFace(): CubeFace;\r\n setDepthAttachmentLayer(layer: number): void;\r\n getDepthAttachmentLayer(): number;\r\n getColorAttachments(): BaseTexture[];\r\n getDepthAttachment(): BaseTexture;\r\n getColorAttachment<T extends BaseTexture = BaseTexture>(index: number): T;\r\n bind(): boolean;\r\n unbind(): void;\r\n}\r\n\r\n/**\r\n * Abstract interface for GPU program\r\n * @public\r\n */\r\nexport interface GPUProgram<T = unknown> extends GPUObject<T> {\r\n readonly bindGroupLayouts: BindGroupLayout[];\r\n readonly type: 'render' | 'compute';\r\n getShaderSource(kind: ShaderKind): string;\r\n getCompileError(): string;\r\n getBindingInfo(name: string): BindPointInfo;\r\n createUniformBuffer(uniform: string): StructuredBuffer;\r\n use(): void;\r\n}\r\n\r\n/**\r\n * Type of values that can be set to a structured buffer\r\n * @public\r\n */\r\nexport type StructuredValue = number | TypedArray | VectorBase | { [name: string]: StructuredValue };\r\n\r\n/**\r\n * Abstract interface for bind group\r\n * @public\r\n */\r\nexport interface BindGroup extends GPUObject<unknown> {\r\n getLayout(): BindGroupLayout;\r\n getDynamicOffsets(): number[];\r\n getGPUId(): string;\r\n getBuffer(name: string, nocreate?: boolean): GPUDataBuffer;\r\n getTexture(name: string): BaseTexture;\r\n setBuffer(\r\n name: string,\r\n buffer: GPUDataBuffer,\r\n offset?: number,\r\n bindOffset?: number,\r\n bindSize?: number\r\n ): void;\r\n setValue(name: string, value: StructuredValue);\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number);\r\n setTexture(name: string, texture: BaseTexture, sampler?: TextureSampler);\r\n setTextureView(\r\n name: string,\r\n value: BaseTexture,\r\n level?: number,\r\n face?: number,\r\n mipCount?: number,\r\n sampler?: TextureSampler\r\n );\r\n setSampler(name: string, sampler: TextureSampler);\r\n}\r\n\r\n/**\r\n * Render bundle\r\n * @public\r\n */\r\nexport type RenderBundle = unknown;\r\n\r\n/**\r\n * Creates the default name for the type of given gpu object\r\n * @param obj - The gpu object\r\n * @returns The default name\r\n * @public\r\n */\r\nexport function genDefaultName(obj: GPUObject) {\r\n if (obj.isTexture2D()) {\r\n return 'texture_2d';\r\n } else if (obj.isTexture2DArray()) {\r\n return 'texture_2darray';\r\n } else if (obj.isTexture3D()) {\r\n return 'texture_3d';\r\n } else if (obj.isTextureCube()) {\r\n return 'texture_cube';\r\n } else if (obj.isTextureVideo()) {\r\n return 'texture_video';\r\n } else if (obj.isBuffer()) {\r\n return 'buffer';\r\n } else if (obj.isFramebuffer()) {\r\n return 'framebuffer';\r\n } else if (obj.isProgram()) {\r\n return 'program';\r\n } else if (obj.isSampler()) {\r\n return 'sampler';\r\n } else if (obj.isVertexLayout()) {\r\n return 'vbo';\r\n } else {\r\n return 'unknown';\r\n }\r\n}\r\n"],"names":["MAX_VERTEX_ATTRIBUTES","MAX_BINDING_GROUPS","MAX_TEXCOORD_INDEX_COUNT","VERTEX_ATTRIB_POSITION","VERTEX_ATTRIB_NORMAL","VERTEX_ATTRIB_DIFFUSE","VERTEX_ATTRIB_TANGENT","VERTEX_ATTRIB_TEXCOORD0","VERTEX_ATTRIB_TEXCOORD1","VERTEX_ATTRIB_TEXCOORD2","VERTEX_ATTRIB_TEXCOORD3","VERTEX_ATTRIB_TEXCOORD4","VERTEX_ATTRIB_TEXCOORD5","VERTEX_ATTRIB_TEXCOORD6","VERTEX_ATTRIB_TEXCOORD7","VERTEX_ATTRIB_BLEND_WEIGHT","VERTEX_ATTRIB_BLEND_INDICES","vertexAttribFormatMap","position_u8normx2","PBPrimitiveType","U8VEC2_NORM","position_u8normx4","U8VEC4_NORM","position_i8normx2","I8VEC2_NORM","position_i8normx4","I8VEC4_NORM","position_u16x2","U16VEC2","position_u16x4","U16VEC4","position_i16x2","I16VEC2","position_i16x4","I16VEC4","position_u16normx2","U16VEC2_NORM","position_u16normx4","U16VEC4_NORM","position_i16normx2","I16VEC2_NORM","position_i16normx4","I16VEC4_NORM","position_f16x2","F16VEC2","position_f16x4","F16VEC4","position_f32","F32","position_f32x2","F32VEC2","position_f32x3","F32VEC3","position_f32x4","F32VEC4","position_i32","I32","position_i32x2","I32VEC2","position_i32x3","I32VEC3","position_i32x4","I32VEC4","position_u32","U32","position_u32x2","U32VEC2","position_u32x3","U32VEC3","position_u32x4","U32VEC4","normal_f16x4","normal_f32x3","normal_f32x4","diffuse_u8normx4","diffuse_u16x4","diffuse_u16normx4","diffuse_f16x4","diffuse_f32x3","diffuse_f32x4","diffuse_u32x3","diffuse_u32x4","tangent_f16x4","tangent_f32x3","tangent_f32x4","tex0_u8normx2","tex0_u8normx4","tex0_i8normx2","tex0_i8normx4","tex0_u16x2","tex0_u16x4","tex0_i16x2","tex0_i16x4","tex0_u16normx2","tex0_u16normx4","tex0_i16normx2","tex0_i16normx4","tex0_f16x2","tex0_f16x4","tex0_f32","tex0_f32x2","tex0_f32x3","tex0_f32x4","tex0_i32","tex0_i32x2","tex0_i32x3","tex0_i32x4","tex0_u32","tex0_u32x2","tex0_u32x3","tex0_u32x4","tex1_u8normx2","tex1_u8normx4","tex1_i8normx2","tex1_i8normx4","tex1_u16x2","tex1_u16x4","tex1_i16x2","tex1_i16x4","tex1_u16normx2","tex1_u16normx4","tex1_i16normx2","tex1_i16normx4","tex1_f16x2","tex1_f16x4","tex1_f32","tex1_f32x2","tex1_f32x3","tex1_f32x4","tex1_i32","tex1_i32x2","tex1_i32x3","tex1_i32x4","tex1_u32","tex1_u32x2","tex1_u32x3","tex1_u32x4","tex2_u8normx2","tex2_u8normx4","tex2_i8normx2","tex2_i8normx4","tex2_u16x2","tex2_u16x4","tex2_i16x2","tex2_i16x4","tex2_u16normx2","tex2_u16normx4","tex2_i16normx2","tex2_i16normx4","tex2_f16x2","tex2_f16x4","tex2_f32","tex2_f32x2","tex2_f32x3","tex2_f32x4","tex2_i32","tex2_i32x2","tex2_i32x3","tex2_i32x4","tex2_u32","tex2_u32x2","tex2_u32x3","tex2_u32x4","tex3_u8normx2","tex3_u8normx4","tex3_i8normx2","tex3_i8normx4","tex3_u16x2","tex3_u16x4","tex3_i16x2","tex3_i16x4","tex3_u16normx2","tex3_u16normx4","tex3_i16normx2","tex3_i16normx4","tex3_f16x2","tex3_f16x4","tex3_f32","tex3_f32x2","tex3_f32x3","tex3_f32x4","tex3_i32","tex3_i32x2","tex3_i32x3","tex3_i32x4","tex3_u32","tex3_u32x2","tex3_u32x3","tex3_u32x4","tex4_u8normx2","tex4_u8normx4","tex4_i8normx2","tex4_i8normx4","tex4_u16x2","tex4_u16x4","tex4_i16x2","tex4_i16x4","tex4_u16normx2","tex4_u16normx4","tex4_i16normx2","tex4_i16normx4","tex4_f16x2","tex4_f16x4","tex4_f32","tex4_f32x2","tex4_f32x3","tex4_f32x4","tex4_i32","tex4_i32x2","tex4_i32x3","tex4_i32x4","tex4_u32","tex4_u32x2","tex4_u32x3","tex4_u32x4","tex5_u8normx2","tex5_u8normx4","tex5_i8normx2","tex5_i8normx4","tex5_u16x2","tex5_u16x4","tex5_i16x2","tex5_i16x4","tex5_u16normx2","tex5_u16normx4","tex5_i16normx2","tex5_i16normx4","tex5_f16x2","tex5_f16x4","tex5_f32","tex5_f32x2","tex5_f32x3","tex5_f32x4","tex5_i32","tex5_i32x2","tex5_i32x3","tex5_i32x4","tex5_u32","tex5_u32x2","tex5_u32x3","tex5_u32x4","tex6_u8normx2","tex6_u8normx4","tex6_i8normx2","tex6_i8normx4","tex6_u16x2","tex6_u16x4","tex6_i16x2","tex6_i16x4","tex6_u16normx2","tex6_u16normx4","tex6_i16normx2","tex6_i16normx4","tex6_f16x2","tex6_f16x4","tex6_f32","tex6_f32x2","tex6_f32x3","tex6_f32x4","tex6_i32","tex6_i32x2","tex6_i32x3","tex6_i32x4","tex6_u32","tex6_u32x2","tex6_u32x3","tex6_u32x4","tex7_u8normx2","tex7_u8normx4","tex7_i8normx2","tex7_i8normx4","tex7_u16x2","tex7_u16x4","tex7_i16x2","tex7_i16x4","tex7_u16normx2","tex7_u16normx4","tex7_i16normx2","tex7_i16normx4","tex7_f16x2","tex7_f16x4","tex7_f32","tex7_f32x2","tex7_f32x3","tex7_f32x4","tex7_i32","tex7_i32x2","tex7_i32x3","tex7_i32x4","tex7_u32","tex7_u32x2","tex7_u32x3","tex7_u32x4","blendweights_f16x1","F16","blendweights_f32x1","blendweights_f16x2","blendweights_f32x2","blendweights_f16x3","F16VEC3","blendweights_f32x3","blendweights_f16x4","blendweights_f32x4","blendindices_u16x1","U16","blendindices_f16x1","blendindices_f32x1","blendindices_u32x1","blendindices_u16x2","blendindices_f16x2","blendindices_f32x2","blendindices_u32x2","blendindices_u16x3","U16VEC3","blendindices_f16x3","blendindices_f32x3","blendindices_u32x3","blendindices_u16x4","blendindices_f16x4","blendindices_f32x4","blendindices_u32x4","vertexAttribNameMap","position","normal","diffuse","tangent","blendIndices","blendWeights","texCoord0","texCoord1","texCoord2","texCoord3","texCoord4","texCoord5","texCoord6","texCoord7","vertexAttribNameRevMap","GPUResourceUsageFlags","getVertexAttribByName","name","getVertexAttribName","attrib","matchVertexBuffer","buffer","bufferType","structure","structMembers","type","isArrayType","vertexType","elementType","isStructType","getVertexAttributeFormat","fmt","getVertexAttributeIndex","getVertexFormatSize","getVertexFormatComponentCount","getVertexAttribFormat","semantic","count","loc","k","v","getVertexBufferLength","vertexBufferType","dimension","getVertexBufferStride","stride","member","getSize","getVertexBufferAttribTypeBySemantic","getVertexBufferAttribType","attribName","makeVertexBufferType","length","attributes","format","PBStructTypeInfo","PBArrayTypeInfo","PBPrimitiveTypeInfo","getCachedTypeInfo","map","semanticList","list","i","push","semanticToAttrib","genDefaultName","obj","isTexture2D","isTexture2DArray","isTexture3D","isTextureCube","isTextureVideo","isBuffer","isFramebuffer","isProgram","isSampler","isVertexLayout"],"mappings":";;AAqBA,eACaA,MAAAA,qBAAAA,GAAwB;AACrC,eACaC,MAAAA,kBAAAA,GAAqB;AAClC,eACaC,MAAAA,wBAAAA,GAA2B;AACxC,eACaC,MAAAA,sBAAAA,GAAyB;AACtC,eACaC,MAAAA,oBAAAA,GAAuB;AACpC,eACaC,MAAAA,qBAAAA,GAAwB;AACrC,eACaC,MAAAA,qBAAAA,GAAwB;AACrC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,uBAAAA,GAA0B;AACvC,eACaC,MAAAA,0BAAAA,GAA6B;AAC1C,eACaC,MAAAA,2BAAAA,GAA8B;AAwR3C,MAAMC,qBAAwB,GAAA;IAC5BC,iBAAmB,EAAA;AAACf,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACxFC,iBAAmB,EAAA;AAAClB,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACxFC,iBAAmB,EAAA;AAACpB,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACxFC,iBAAmB,EAAA;AAACtB,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACxFC,cAAgB,EAAA;AAACxB,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAC1B,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAC5B,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAC9B,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,kBAAoB,EAAA;AAAChC,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IAC3FC,kBAAoB,EAAA;AAAClC,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IAC3FC,kBAAoB,EAAA;AAACpC,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IAC3FC,kBAAoB,EAAA;AAACtC,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IAC3FC,cAAgB,EAAA;AAACxC,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAC1C,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,YAAc,EAAA;AAAC5C,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxEC,cAAgB,EAAA;AAAC9C,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAChD,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,cAAgB,EAAA;AAAClD,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,YAAc,EAAA;AAACpD,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxEC,cAAgB,EAAA;AAACtD,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAACxD,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,cAAgB,EAAA;AAAC1D,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,YAAc,EAAA;AAAC5D,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxEC,cAAgB,EAAA;AAAC9D,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC9EC,cAAgB,EAAA;AAAChE,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,cAAgB,EAAA;AAAClE,QAAAA,sBAAAA;AAAwBgB,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC/EC,YAAc,EAAA;AAACnE,QAAAA,oBAAAA;AAAsBe,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC1E0B,YAAc,EAAA;AAACpE,QAAAA,oBAAAA;AAAsBe,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqB,YAAc,EAAA;AAACrE,QAAAA,oBAAAA;AAAsBe,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EoB,gBAAkB,EAAA;AAACrE,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACtFqD,aAAe,EAAA;AAACtE,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E8C,iBAAmB,EAAA;AAACvE,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACzFuC,aAAe,EAAA;AAACxE,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EgC,aAAe,EAAA;AAACzE,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7E2B,aAAe,EAAA;AAAC1E,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7E0B,aAAe,EAAA;AAAC3E,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7Ea,aAAe,EAAA;AAAC5E,QAAAA,qBAAAA;AAAuBc,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7EY,aAAe,EAAA;AAAC5E,QAAAA,qBAAAA;AAAuBa,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EqC,aAAe,EAAA;AAAC7E,QAAAA,qBAAAA;AAAuBa,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7EgC,aAAe,EAAA;AAAC9E,QAAAA,qBAAAA;AAAuBa,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC7E+B,aAAe,EAAA;AAAC9E,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFkE,aAAe,EAAA;AAAC/E,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFiE,aAAe,EAAA;AAAChF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFgE,aAAe,EAAA;AAACjF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF+D,UAAY,EAAA;AAAClF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E8D,UAAY,EAAA;AAACnF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6D,UAAY,EAAA;AAACpF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E4D,UAAY,EAAA;AAACrF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2D,cAAgB,EAAA;AAACtF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF0D,cAAgB,EAAA;AAACvF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFyD,cAAgB,EAAA;AAACxF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFwD,cAAgB,EAAA;AAACzF,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFuD,UAAY,EAAA;AAAC1F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EsD,UAAY,EAAA;AAAC3F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqD,QAAU,EAAA;AAAC5F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEoD,UAAY,EAAA;AAAC7F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmD,UAAY,EAAA;AAAC9F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EkD,UAAY,EAAA;AAAC/F,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EiD,QAAU,EAAA;AAAChG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEgD,UAAY,EAAA;AAACjG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+C,UAAY,EAAA;AAAClG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E8C,UAAY,EAAA;AAACnG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E6C,QAAU,EAAA;AAACpG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE4C,UAAY,EAAA;AAACrG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2C,UAAY,EAAA;AAACtG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E0C,UAAY,EAAA;AAACvG,QAAAA,uBAAAA;AAAyBY,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EyC,aAAe,EAAA;AAACvG,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF4F,aAAe,EAAA;AAACxG,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF2F,aAAe,EAAA;AAACzG,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF0F,aAAe,EAAA;AAAC1G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFyF,UAAY,EAAA;AAAC3G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EwF,UAAY,EAAA;AAAC5G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuF,UAAY,EAAA;AAAC7G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EsF,UAAY,EAAA;AAAC9G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqF,cAAgB,EAAA;AAAC/G,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFoF,cAAgB,EAAA;AAAChH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFmF,cAAgB,EAAA;AAACjH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFkF,cAAgB,EAAA;AAAClH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFiF,UAAY,EAAA;AAACnH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EgF,UAAY,EAAA;AAACpH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+E,QAAU,EAAA;AAACrH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE8E,UAAY,EAAA;AAACtH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6E,UAAY,EAAA;AAACvH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E4E,UAAY,EAAA;AAACxH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E2E,QAAU,EAAA;AAACzH,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE0E,UAAY,EAAA;AAAC1H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyE,UAAY,EAAA;AAAC3H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EwE,UAAY,EAAA;AAAC5H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EuE,QAAU,EAAA;AAAC7H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEsE,UAAY,EAAA;AAAC9H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqE,UAAY,EAAA;AAAC/H,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EoE,UAAY,EAAA;AAAChI,QAAAA,uBAAAA;AAAyBW,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EmE,aAAe,EAAA;AAAChI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFsH,aAAe,EAAA;AAACjI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFqH,aAAe,EAAA;AAAClI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFoH,aAAe,EAAA;AAACnI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFmH,UAAY,EAAA;AAACpI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EkH,UAAY,EAAA;AAACrI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiH,UAAY,EAAA;AAACtI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EgH,UAAY,EAAA;AAACvI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+G,cAAgB,EAAA;AAACxI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF8G,cAAgB,EAAA;AAACzI,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF6G,cAAgB,EAAA;AAAC1I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF4G,cAAgB,EAAA;AAAC3I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF2G,UAAY,EAAA;AAAC5I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E0G,UAAY,EAAA;AAAC7I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyG,QAAU,EAAA;AAAC9I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEwG,UAAY,EAAA;AAAC/I,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuG,UAAY,EAAA;AAAChJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EsG,UAAY,EAAA;AAACjJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EqG,QAAU,EAAA;AAAClJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEoG,UAAY,EAAA;AAACnJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmG,UAAY,EAAA;AAACpJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EkG,UAAY,EAAA;AAACrJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EiG,QAAU,EAAA;AAACtJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEgG,UAAY,EAAA;AAACvJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+F,UAAY,EAAA;AAACxJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E8F,UAAY,EAAA;AAACzJ,QAAAA,uBAAAA;AAAyBU,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E6F,aAAe,EAAA;AAACzJ,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFgJ,aAAe,EAAA;AAAC1J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF+I,aAAe,EAAA;AAAC3J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF8I,aAAe,EAAA;AAAC5J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF6I,UAAY,EAAA;AAAC7J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E4I,UAAY,EAAA;AAAC9J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2I,UAAY,EAAA;AAAC/J,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E0I,UAAY,EAAA;AAAChK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyI,cAAgB,EAAA;AAACjK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFwI,cAAgB,EAAA;AAAClK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFuI,cAAgB,EAAA;AAACnK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFsI,cAAgB,EAAA;AAACpK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFqI,UAAY,EAAA;AAACrK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EoI,UAAY,EAAA;AAACtK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmI,QAAU,EAAA;AAACvK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEkI,UAAY,EAAA;AAACxK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiI,UAAY,EAAA;AAACzK,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EgI,UAAY,EAAA;AAAC1K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E+H,QAAU,EAAA;AAAC3K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE8H,UAAY,EAAA;AAAC5K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6H,UAAY,EAAA;AAAC7K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E4H,UAAY,EAAA;AAAC9K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E2H,QAAU,EAAA;AAAC/K,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE0H,UAAY,EAAA;AAAChL,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyH,UAAY,EAAA;AAACjL,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EwH,UAAY,EAAA;AAAClL,QAAAA,uBAAAA;AAAyBS,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EuH,aAAe,EAAA;AAAClL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF0K,aAAe,EAAA;AAACnL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFyK,aAAe,EAAA;AAACpL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFwK,aAAe,EAAA;AAACrL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFuK,UAAY,EAAA;AAACtL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EsK,UAAY,EAAA;AAACvL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqK,UAAY,EAAA;AAACxL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EoK,UAAY,EAAA;AAACzL,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmK,cAAgB,EAAA;AAAC1L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFkK,cAAgB,EAAA;AAAC3L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFiK,cAAgB,EAAA;AAAC5L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFgK,cAAgB,EAAA;AAAC7L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF+J,UAAY,EAAA;AAAC9L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E8J,UAAY,EAAA;AAAC/L,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6J,QAAU,EAAA;AAAChM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE4J,UAAY,EAAA;AAACjM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2J,UAAY,EAAA;AAAClM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E0J,UAAY,EAAA;AAACnM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EyJ,QAAU,EAAA;AAACpM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEwJ,UAAY,EAAA;AAACrM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuJ,UAAY,EAAA;AAACtM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EsJ,UAAY,EAAA;AAACvM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EqJ,QAAU,EAAA;AAACxM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEoJ,UAAY,EAAA;AAACzM,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmJ,UAAY,EAAA;AAAC1M,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EkJ,UAAY,EAAA;AAAC3M,QAAAA,uBAAAA;AAAyBQ,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EiJ,aAAe,EAAA;AAAC3M,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFoM,aAAe,EAAA;AAAC5M,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFmM,aAAe,EAAA;AAAC7M,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFkM,aAAe,EAAA;AAAC9M,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFiM,UAAY,EAAA;AAAC/M,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EgM,UAAY,EAAA;AAAChN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+L,UAAY,EAAA;AAACjN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E8L,UAAY,EAAA;AAAClN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6L,cAAgB,EAAA;AAACnN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF4L,cAAgB,EAAA;AAACpN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF2L,cAAgB,EAAA;AAACrN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF0L,cAAgB,EAAA;AAACtN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFyL,UAAY,EAAA;AAACvN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EwL,UAAY,EAAA;AAACxN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuL,QAAU,EAAA;AAACzN,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEsL,UAAY,EAAA;AAAC1N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqL,UAAY,EAAA;AAAC3N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EoL,UAAY,EAAA;AAAC5N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EmL,QAAU,EAAA;AAAC7N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEkL,UAAY,EAAA;AAAC9N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiL,UAAY,EAAA;AAAC/N,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EgL,UAAY,EAAA;AAAChO,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E+K,QAAU,EAAA;AAACjO,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE8K,UAAY,EAAA;AAAClO,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E6K,UAAY,EAAA;AAACnO,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E4K,UAAY,EAAA;AAACpO,QAAAA,uBAAAA;AAAyBO,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E2K,aAAe,EAAA;AAACpO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF8N,aAAe,EAAA;AAACrO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF6N,aAAe,EAAA;AAACtO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF4N,aAAe,EAAA;AAACvO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrF2N,UAAY,EAAA;AAACxO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E0N,UAAY,EAAA;AAACzO,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyN,UAAY,EAAA;AAAC1O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EwN,UAAY,EAAA;AAAC3O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuN,cAAgB,EAAA;AAAC5O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFsN,cAAgB,EAAA;AAAC7O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFqN,cAAgB,EAAA;AAAC9O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFoN,cAAgB,EAAA;AAAC/O,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFmN,UAAY,EAAA;AAAChP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EkN,UAAY,EAAA;AAACjP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiN,QAAU,EAAA;AAAClP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEgN,UAAY,EAAA;AAACnP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E+M,UAAY,EAAA;AAACpP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E8M,UAAY,EAAA;AAACrP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E6M,QAAU,EAAA;AAACtP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE4M,UAAY,EAAA;AAACvP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2M,UAAY,EAAA;AAACxP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E0M,UAAY,EAAA;AAACzP,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EyM,QAAU,EAAA;AAAC1P,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEwM,UAAY,EAAA;AAAC3P,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EuM,UAAY,EAAA;AAAC5P,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EsM,UAAY,EAAA;AAAC7P,QAAAA,uBAAAA;AAAyBM,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EqM,aAAe,EAAA;AAAC7P,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBC,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFwP,aAAe,EAAA;AAAC9P,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBG,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFuP,aAAe,EAAA;AAAC/P,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBK,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFsP,aAAe,EAAA;AAAChQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBO,WAAW;AAAE,QAAA,CAAA;AAAG,QAAA,QAAA;AAAU,QAAA;AAAE,KAAA;IACrFqP,UAAY,EAAA;AAACjQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EoP,UAAY,EAAA;AAAClQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EmP,UAAY,EAAA;AAACnQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBa,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EkP,UAAY,EAAA;AAACpQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBe,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiP,cAAgB,EAAA;AAACrQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBiB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxFgP,cAAgB,EAAA;AAACtQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBmB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF+O,cAAgB,EAAA;AAACvQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBqB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF8O,cAAgB,EAAA;AAACxQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBuB,YAAY;AAAE,QAAA,CAAA;AAAG,QAAA,SAAA;AAAW,QAAA;AAAE,KAAA;IACxF6O,UAAY,EAAA;AAACzQ,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E4O,UAAY,EAAA;AAAC1Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3E2O,QAAU,EAAA;AAAC3Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrE0O,UAAY,EAAA;AAAC5Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EyO,UAAY,EAAA;AAAC7Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EwO,UAAY,EAAA;AAAC9Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EuO,QAAU,EAAA;AAAC/Q,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBqC,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEsO,UAAY,EAAA;AAAChR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBuC,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EqO,UAAY,EAAA;AAACjR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgByC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EoO,UAAY,EAAA;AAAClR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB2C,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EmO,QAAU,EAAA;AAACnR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACrEkO,UAAY,EAAA;AAACpR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC3EiO,UAAY,EAAA;AAACrR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5EgO,UAAY,EAAA;AAACtR,QAAAA,uBAAAA;AAAyBK,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAC5E+N,kBAAoB,EAAA;AAACtR,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgBmR,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAClFC,kBAAoB,EAAA;AAACxR,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IAClFwP,kBAAoB,EAAA;AAACzR,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACtF6P,kBAAoB,EAAA;AAAC1R,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACtFwP,kBAAoB,EAAA;AAAC3R,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgBwR,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACtFC,kBAAoB,EAAA;AAAC7R,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFyP,kBAAoB,EAAA;AAAC9R,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACtFgQ,kBAAoB,EAAA;AAAC/R,QAAAA,0BAAAA;AAA4BI,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFyP,kBAAoB,EAAA;AAAC/R,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB6R,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACnFC,kBAAoB,EAAA;AAACjS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBmR,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACnFY,kBAAoB,EAAA;AAAClS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB6B,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACnFmQ,kBAAoB,EAAA;AAACnS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB6C,GAAG;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACnFoP,kBAAoB,EAAA;AAACpS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFyR,kBAAoB,EAAA;AAACrS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgByB,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvF0Q,kBAAoB,EAAA;AAACtS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB+B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFqQ,kBAAoB,EAAA;AAACvS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB+C,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFsP,kBAAoB,EAAA;AAACxS,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBsS,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFC,kBAAoB,EAAA;AAAC1S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBwR,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFgB,kBAAoB,EAAA;AAAC3S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBiC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxFwQ,kBAAoB,EAAA;AAAC5S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBiD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxFyP,kBAAoB,EAAA;AAAC7S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBW,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFgS,kBAAoB,EAAA;AAAC9S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgB2B,OAAO;AAAE,QAAA,CAAA;AAAG,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACvFiR,kBAAoB,EAAA;AAAC/S,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBmC,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE,KAAA;IACxF0Q,kBAAoB,EAAA;AAAChT,QAAAA,2BAAAA;AAA6BG,QAAAA,eAAAA,CAAgBmD,OAAO;AAAE,QAAA,EAAA;AAAI,QAAA,KAAA;AAAO,QAAA;AAAE;AAC1F,CAAA;AAsBA,MAAM2P,mBAAsB,GAAA;IAC1BC,QAAU/T,EAAAA,sBAAAA;IACVgU,MAAQ/T,EAAAA,oBAAAA;IACRgU,OAAS/T,EAAAA,qBAAAA;IACTgU,OAAS/T,EAAAA,qBAAAA;IACTgU,YAActT,EAAAA,2BAAAA;IACduT,YAAcxT,EAAAA,0BAAAA;IACdyT,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA,uBAAAA;IACXkU,SAAWjU,EAAAA;AACb,CAAA;AAEA,MAAMkU,sBAAyB,GAAA;AAC7B,IAAA,CAAC7U,yBAAyB,UAAA;AAC1B,IAAA,CAACC,uBAAuB,QAAA;AACxB,IAAA,CAACC,wBAAwB,SAAA;AACzB,IAAA,CAACC,wBAAwB,SAAA;AACzB,IAAA,CAACU,8BAA8B,cAAA;AAC/B,IAAA,CAACD,6BAA6B,cAAA;AAC9B,IAAA,CAACR,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B,WAAA;AAC3B,IAAA,CAACC,0BAA0B;AAC7B,CAAA;AAiEA;;;IAIO,IAAKmU,qBAAAA,iBAAAA,SAAAA,qBAAAA,EAAAA;;;;;;;;;;;;;;;AAAAA,IAAAA,OAAAA,qBAAAA;AAeX,CAAA,CAAA,EAAA;AAED;;;IAIO,SAASC,qBAAAA,CAAsBC,IAAoB,EAAA;IACxD,OAAOlB,mBAAmB,CAACkB,IAAK,CAAA;AAClC;AAEA;;;IAIO,SAASC,mBAAAA,CAAoBC,MAAc,EAAA;IAChD,OAAOL,sBAAsB,CAACK,MAAO,CAAA;AACvC;AAEA;;;;;;;AAOC,IACM,SAASC,iBAAkBC,CAAAA,MAAwB,EAAEJ,IAAoB,EAAA;AAC9E,IAAA,IAAI,CAACI,MAAQ,EAAA;QACX,OAAO,KAAA;AACT;IACA,MAAMC,UAAAA,GAAaD,OAAOE,SAAS,CAACC,aAAa,CAAC,CAAA,CAAE,CAACC,IAAI;IACzD,IAAI,CAACH,UAAWI,CAAAA,WAAW,EAAI,EAAA;QAC7B,OAAO,KAAA;AACT;IACA,MAAMC,UAAAA,GAAaL,WAAWM,WAAW;IACzC,IAAID,UAAAA,CAAWE,YAAY,EAAI,EAAA;AAC7B,QAAA,KAAK,MAAMV,MAAAA,IAAUQ,UAAWH,CAAAA,aAAa,CAAE;YAC7C,IAAIL,MAAAA,CAAOF,IAAI,KAAKA,IAAM,EAAA;gBACxB,OAAO,IAAA;AACT;AACF;KACK,MAAA;QACL,OAAOI,MAAAA,CAAOE,SAAS,CAACC,aAAa,CAAC,CAAE,CAAA,CAACP,IAAI,KAAKA,IAAAA;AACpD;AACF;AAEA;;;;;;IAOO,SAASa,wBAAAA,CAAyBC,GAAuB,EAAA;AAC9D,IAAA,OAAOhV,qBAAqB,CAACgV,GAAI,CAAA,CAAC,CAAE,CAAA;AACtC;AAEA;;;;;;IAOO,SAASC,uBAAAA,CAAwBD,GAAuB,EAAA;AAC7D,IAAA,OAAOhV,qBAAqB,CAACgV,GAAI,CAAA,CAAC,CAAE,CAAA;AACtC;AAEA;;;;IAKO,SAASE,mBAAAA,CAAoBF,GAAuB,EAAA;AACzD,IAAA,OAAOhV,qBAAqB,CAACgV,GAAI,CAAA,CAAC,CAAE,CAAA;AACtC;AAEA;;;;IAKO,SAASG,6BAAAA,CAA8BH,GAAuB,EAAA;AACnE,IAAA,OAAOhV,qBAAqB,CAACgV,GAAI,CAAA,CAAC,CAAE,CAAA;AACtC;AAEA;;;;;;;;AAQC,IACM,SAASI,qBAAAA,CACdC,QAAwB,EACxBX,IAAc,EACdY,KAAa,EAAA;AAEb,IAAA,MAAMC,MAAMtB,qBAAsBoB,CAAAA,QAAAA,CAAAA;IAClC,IAAK,MAAMG,KAAKxV,qBAAuB,CAAA;QACrC,MAAMyV,CAAAA,GAAIzV,qBAAqB,CAACwV,CAAE,CAAA;AAClC,QAAA,IAAIC,CAAC,CAAC,CAAE,CAAA,KAAKF,OAAOE,CAAC,CAAC,CAAE,CAAA,KAAKf,IAAQe,IAAAA,CAAC,CAAC,CAAA,CAAE,KAAKH,KAAO,EAAA;YACnD,OAAOE,CAAAA;AACT;AACF;IACA,OAAO,IAAA;AACT;AAEA;;;;;;IAOO,SAASE,qBAAAA,CAAsBC,gBAAkC,EAAA;IACtE,OAAQA,iBAAiBlB,aAAa,CAAC,EAAE,CAACC,IAAI,CAAqBkB,SAAS;AAC9E;AAEA;;;;;;IAOO,SAASC,qBAAAA,CAAsBF,gBAAkC,EAAA;IACtE,MAAMf,UAAAA,GAAa,gBAAkBH,CAAAA,aAAa,CAAC,CAAE,CAAA,CAACC,IAAI,CAAqBG,WAAW;IAC1F,IAAID,UAAAA,CAAWE,YAAY,EAAI,EAAA;AAC7B,QAAA,IAAIgB,MAAS,GAAA,CAAA;AACb,QAAA,KAAK,MAAMC,MAAAA,IAAUnB,UAAWH,CAAAA,aAAa,CAAE;AAC7CqB,YAAAA,MAAAA,IAAU,MAACC,CAAOrB,IAAI,CAAyBsB,OAAO,EAAA;AACxD;QACA,OAAOF,MAAAA;KACF,MAAA;QACL,OAAQlB,WAAmCoB,OAAO,EAAA;AACpD;AACF;AAEA;;;;;;;AAOC,IACM,SAASC,mCACdN,CAAAA,gBAAkC,EAClCN,QAAwB,EAAA;AAExB,IAAA,MAAMG,CAAIG,GAAAA,gBAAAA,CAAiBlB,aAAa,CAAC,CAAE,CAAA;AAC3C,IAAA,MAAMG,UAAa,GAACY,CAAEd,CAAAA,IAAI,CAAqBG,WAAW;IAC1D,IAAID,UAAAA,CAAWE,YAAY,EAAI,EAAA;AAC7B,QAAA,KAAK,MAAMiB,MAAAA,IAAUnB,UAAWH,CAAAA,aAAa,CAAE;YAC7C,IAAIsB,MAAAA,CAAO7B,IAAI,KAAKmB,QAAU,EAAA;AAC5B,gBAAA,OAAOU,OAAOrB,IAAI;AACpB;AACF;QACA,OAAO,IAAA;KACF,MAAA;AACL,QAAA,OAAOc,CAAEtB,CAAAA,IAAI,KAAKmB,QAAAA,GAAYT,UAAqC,GAAA,IAAA;AACrE;AACF;AAEA;;;;;;;AAOC,IACM,SAASsB,yBACdP,CAAAA,gBAAkC,EAClCvB,MAAc,EAAA;AAEd,IAAA,MAAM+B,aAAahC,mBAAoBC,CAAAA,MAAAA,CAAAA;AACvC,IAAA,IAAI,CAAC+B,UAAY,EAAA;QACf,OAAO,IAAA;AACT;AACA,IAAA,OAAOF,oCAAoCN,gBAAkBQ,EAAAA,UAAAA,CAAAA;AAC/D;AAEA;;;;;;;AAOC,IACM,SAASC,oBAAAA,CAAqBC,MAAc,EAAE,GAAGC,UAAgC,EAAA;IACtF,IAAIA,UAAAA,CAAWD,MAAM,KAAK,CAAG,EAAA;QAC3B,OAAO,IAAA;AACT;IACA,IAAIC,UAAAA,CAAWD,MAAM,KAAK,CAAG,EAAA;AAC3B,QAAA,MAAME,SAASvW,qBAAqB,CAACsW,UAAU,CAAC,EAAE,CAAC;QACnD,OAAO,IAAIE,gBAAiB,CAAA,IAAA,EAAM,QAAU,EAAA;AAC1C,YAAA;gBACEtC,IAAMC,EAAAA,mBAAAA,CAAoBoC,MAAM,CAAC,CAAE,CAAA,CAAA;gBACnC7B,IAAM,EAAA,IAAI+B,gBAAgBC,mBAAoBC,CAAAA,iBAAiB,CAACJ,MAAM,CAAC,EAAE,CAAGF,EAAAA,MAAAA;AAC9E;AACD,SAAA,CAAA;KACI,MAAA;QACL,MAAMzB,UAAAA,GAAa,IAAI4B,gBAAAA,CACrB,IACA,EAAA,QAAA,EACAF,WAAWM,GAAG,CAAC,CAACxC,MAAAA,IAAY;AAC1BF,gBAAAA,IAAAA,EAAMC,mBAAoBnU,CAAAA,qBAAqB,CAACoU,MAAAA,CAAO,CAAC,CAAE,CAAA,CAAA;AAC1DM,gBAAAA,IAAAA,EAAMgC,oBAAoBC,iBAAiB,CAAC3W,qBAAqB,CAACoU,MAAAA,CAAO,CAAC,CAAE,CAAA;aAC9E,CAAA,CAAA,CAAA;QAEF,OAAO,IAAIoC,gBAAiB,CAAA,IAAA,EAAM,QAAU,EAAA;AAC1C,YAAA;gBACEtC,IAAM,EAAA,OAAA;gBACNQ,IAAM,EAAA,IAAI+B,gBAAgB7B,UAAYyB,EAAAA,MAAAA;AACxC;AACD,SAAA,CAAA;AACH;AACF;AASA;;;;IAKaQ,MAAAA,YAAAA,GAAyB,WAAC;AACrC,IAAA,MAAMC,OAAiB,EAAE;AACzB,IAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIhY,uBAAuBgY,CAAK,EAAA,CAAA;QAC9CD,IAAKE,CAAAA,IAAI,CAACC,gBAAiBF,CAAAA,CAAAA,CAAAA,CAAAA;AAC7B;IACA,OAAOD,IAAAA;AACT,CAAK;AAEL,iBACO,SAASG,gBAAAA,CAAiB5B,QAAgB,EAAA;IAC/C,OAAQA,QAAAA;QACN,KAAKnW,sBAAAA;YACH,OAAO,YAAA;QACT,KAAKC,oBAAAA;YACH,OAAO,UAAA;QACT,KAAKC,qBAAAA;YACH,OAAO,WAAA;QACT,KAAKC,qBAAAA;YACH,OAAO,WAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKC,uBAAAA;YACH,OAAO,aAAA;QACT,KAAKE,2BAAAA;YACH,OAAO,WAAA;QACT,KAAKD,0BAAAA;YACH,OAAO,UAAA;AACT,QAAA;YACE,OAAO,IAAA;AACX;AACF;AA+iBA;;;;;IAMO,SAASoX,cAAAA,CAAeC,GAAc,EAAA;IAC3C,IAAIA,GAAAA,CAAIC,WAAW,EAAI,EAAA;QACrB,OAAO,YAAA;KACF,MAAA,IAAID,GAAIE,CAAAA,gBAAgB,EAAI,EAAA;QACjC,OAAO,iBAAA;KACF,MAAA,IAAIF,GAAIG,CAAAA,WAAW,EAAI,EAAA;QAC5B,OAAO,YAAA;KACF,MAAA,IAAIH,GAAII,CAAAA,aAAa,EAAI,EAAA;QAC9B,OAAO,cAAA;KACF,MAAA,IAAIJ,GAAIK,CAAAA,cAAc,EAAI,EAAA;QAC/B,OAAO,eAAA;KACF,MAAA,IAAIL,GAAIM,CAAAA,QAAQ,EAAI,EAAA;QACzB,OAAO,QAAA;KACF,MAAA,IAAIN,GAAIO,CAAAA,aAAa,EAAI,EAAA;QAC9B,OAAO,aAAA;KACF,MAAA,IAAIP,GAAIQ,CAAAA,SAAS,EAAI,EAAA;QAC1B,OAAO,SAAA;KACF,MAAA,IAAIR,GAAIS,CAAAA,SAAS,EAAI,EAAA;QAC1B,OAAO,SAAA;KACF,MAAA,IAAIT,GAAIU,CAAAA,cAAc,EAAI,EAAA;QAC/B,OAAO,KAAA;KACF,MAAA;QACL,OAAO,SAAA;AACT;AACF;;;;"}
|
package/dist/helpers/drawtext.js
CHANGED
|
@@ -174,6 +174,7 @@ const MAX_GLYPH_COUNT = 1024;
|
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
176
|
});
|
|
177
|
+
this.textProgram.name = '@DrawText';
|
|
177
178
|
this.textBindGroup = device.createBindGroup(this.textProgram.bindGroupLayouts[0]);
|
|
178
179
|
this.textRenderStates = device.createRenderStateSet();
|
|
179
180
|
this.textRenderStates.useBlendingState().enable(true).setBlendFuncRGB('one', 'inv-src-alpha').setBlendFuncAlpha('zero', 'one');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawtext.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"drawtext.js","sources":["../../src/helpers/drawtext.ts"],"sourcesContent":["import { Matrix4x4, parseColor, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { Font } from './font';\r\nimport { GlyphManager } from './glyphmanager';\r\nimport type { RenderStateSet } from '../render_states';\r\nimport type { AbstractDevice } from '../base_types';\r\nimport type { BindGroup, GPUProgram, StructuredBuffer, VertexLayout } from '../gpuobject';\r\n\r\nconst MAX_GLYPH_COUNT = 1024;\r\n\r\n/**\r\n * Helper class to draw some text onto the screen\r\n * @public\r\n */\r\nexport class DrawText {\r\n /** @internal */\r\n private static readonly GLYPH_COUNT = MAX_GLYPH_COUNT;\r\n /** @internal */\r\n private static glyphManager: GlyphManager = null;\r\n /** @internal */\r\n private static prepared = false;\r\n /** @internal */\r\n private static textVertexBuffer: StructuredBuffer = null;\r\n /** @internal */\r\n private static textVertexLayout: VertexLayout = null;\r\n /** @internal */\r\n private static textProgram: GPUProgram = null;\r\n /** @internal */\r\n private static textBindGroup: BindGroup = null;\r\n /** @internal */\r\n private static textRenderStates: RenderStateSet = null;\r\n /** @internal */\r\n private static textOffset = 0;\r\n /** @internal */\r\n private static readonly textMatrix = new Matrix4x4();\r\n /** @internal */\r\n private static font: Font = null;\r\n /** @internal */\r\n private static vertexCache: Float32Array<ArrayBuffer> = null;\r\n /** @internal */\r\n private static readonly colorValue: Vector4 = new Vector4();\r\n /** @internal */\r\n private static calculateTextMatrix(device: AbstractDevice, matrix: Matrix4x4): void {\r\n const viewport = device.getViewport();\r\n const projectionMatrix = Matrix4x4.ortho(0, viewport.width, 0, viewport.height, 1, 100);\r\n const flipMatrix = Matrix4x4.translation(new Vector3(0, viewport.height, 0)).scaleRight(\r\n new Vector3(1, -1, 1)\r\n );\r\n Matrix4x4.multiply(projectionMatrix, flipMatrix, matrix);\r\n }\r\n /**\r\n * Set the font that will be used to draw strings\r\n * @param device - The render device\r\n * @param name - The font name\r\n */\r\n static setFont(device: AbstractDevice, name: string): void {\r\n this.font = Font.fetchFont(name, device.getScale()) || Font.fetchFont('12px arial', device.getScale());\r\n }\r\n /**\r\n * Draw text onto the screen\r\n * @param device - The render device\r\n * @param text - The text to be drawn\r\n * @param color - The text color\r\n * @param x - X coordinate of the text\r\n * @param y - Y coordinate of the text\r\n */\r\n static drawText(device: AbstractDevice, text: string, color: string, x: number, y: number): void {\r\n if (text.length > 0) {\r\n device.pushDeviceStates();\r\n this.prepareDrawText(device);\r\n this.calculateTextMatrix(device, this.textMatrix);\r\n const colorValue = parseColor(color);\r\n this.colorValue.x = colorValue.r;\r\n this.colorValue.y = colorValue.g;\r\n this.colorValue.z = colorValue.b;\r\n this.colorValue.w = colorValue.a;\r\n this.textBindGroup.setValue('flip', device.type === 'webgpu' && device.getFramebuffer() ? 1 : 0);\r\n this.textBindGroup.setValue('srgbOut', device.getFramebuffer() ? 0 : 1);\r\n this.textBindGroup.setValue('textMatrix', this.textMatrix);\r\n this.textBindGroup.setValue('textColor', this.colorValue);\r\n device.setProgram(this.textProgram);\r\n device.setVertexLayout(this.textVertexLayout);\r\n device.setRenderStates(this.textRenderStates);\r\n device.setBindGroup(0, this.textBindGroup);\r\n let drawn = 0;\r\n const total = text.length;\r\n while (drawn < total) {\r\n const count = Math.min(total - drawn, this.GLYPH_COUNT - this.textOffset);\r\n if (count > 0) {\r\n x = this.drawTextNoOverflow(device, text, drawn, count, x, y);\r\n drawn += count;\r\n this.textOffset += count;\r\n }\r\n if (this.GLYPH_COUNT === this.textOffset) {\r\n this.textOffset = 0;\r\n device.flush();\r\n }\r\n }\r\n device.popDeviceStates();\r\n }\r\n }\r\n /** @internal */\r\n private static drawTextNoOverflow(\r\n device: AbstractDevice,\r\n text: string,\r\n start: number,\r\n count: number,\r\n x: number,\r\n y: number\r\n ): number {\r\n let drawn = 0;\r\n let atlasIndex = -1;\r\n let i = 0;\r\n for (; i < count; i++) {\r\n const glyph =\r\n this.glyphManager.getGlyphInfo(text[i + start], this.font) ||\r\n this.glyphManager.getGlyphInfo('?', this.font);\r\n if (atlasIndex >= 0 && glyph.atlasIndex !== atlasIndex) {\r\n this.textVertexBuffer.bufferSubData(\r\n (this.textOffset + drawn) * 16 * 4,\r\n this.vertexCache,\r\n (this.textOffset + drawn) * 16,\r\n (i - drawn) * 16\r\n );\r\n this.textBindGroup.setTexture('tex', this.glyphManager.getAtlasTexture(atlasIndex));\r\n device.draw('triangle-list', (this.textOffset + drawn) * 6, (i - drawn) * 6);\r\n drawn = i;\r\n }\r\n atlasIndex = glyph.atlasIndex;\r\n const base = (this.textOffset + i) * 16;\r\n this.vertexCache[base + 0] = x;\r\n this.vertexCache[base + 1] = y;\r\n this.vertexCache[base + 2] = glyph.uMin;\r\n this.vertexCache[base + 3] = glyph.vMin;\r\n this.vertexCache[base + 4] = x + glyph.width;\r\n this.vertexCache[base + 5] = y;\r\n this.vertexCache[base + 6] = glyph.uMax;\r\n this.vertexCache[base + 7] = glyph.vMin;\r\n this.vertexCache[base + 8] = x + glyph.width;\r\n this.vertexCache[base + 9] = y + glyph.height;\r\n this.vertexCache[base + 10] = glyph.uMax;\r\n this.vertexCache[base + 11] = glyph.vMax;\r\n this.vertexCache[base + 12] = x;\r\n this.vertexCache[base + 13] = y + glyph.height;\r\n this.vertexCache[base + 14] = glyph.uMin;\r\n this.vertexCache[base + 15] = glyph.vMax;\r\n x += glyph.width;\r\n }\r\n this.textVertexBuffer.bufferSubData(\r\n (this.textOffset + drawn) * 16 * 4,\r\n this.vertexCache,\r\n (this.textOffset + drawn) * 16,\r\n (i - drawn) * 16\r\n );\r\n this.textBindGroup.setTexture('tex', this.glyphManager.getAtlasTexture(atlasIndex));\r\n device.draw('triangle-list', (this.textOffset + drawn) * 6, (i - drawn) * 6);\r\n return x;\r\n }\r\n /** @internal */\r\n private static prepareDrawText(device: AbstractDevice): void {\r\n if (!this.prepared) {\r\n this.prepared = true;\r\n this.font = this.font || Font.fetchFont('16px arial', device.getScale());\r\n this.glyphManager = new GlyphManager(device, 1024, 1024, 1);\r\n this.vertexCache = new Float32Array(this.GLYPH_COUNT * 16);\r\n this.textVertexBuffer = device.createInterleavedVertexBuffer(\r\n ['position_f32x2', 'tex0_f32x2'],\r\n this.vertexCache,\r\n {\r\n dynamic: true\r\n }\r\n );\r\n const indices = new Uint16Array(this.GLYPH_COUNT * 6);\r\n for (let i = 0; i < this.GLYPH_COUNT; i++) {\r\n const base = i * 4;\r\n indices[i * 6 + 0] = base + 0;\r\n indices[i * 6 + 1] = base + 1;\r\n indices[i * 6 + 2] = base + 2;\r\n indices[i * 6 + 3] = base + 0;\r\n indices[i * 6 + 4] = base + 2;\r\n indices[i * 6 + 5] = base + 3;\r\n }\r\n const textIndexBuffer = device.createIndexBuffer(indices);\r\n this.textVertexLayout = device.createVertexLayout({\r\n vertexBuffers: [{ buffer: this.textVertexBuffer }],\r\n indexBuffer: textIndexBuffer\r\n });\r\n this.textOffset = 0;\r\n this.textProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$inputs.uv = pb.vec2().attrib('texCoord0');\r\n this.$outputs.uv = pb.vec2();\r\n this.flip = pb.int(0).uniform(0);\r\n this.textMatrix = pb.mat4().uniform(0);\r\n pb.main(function () {\r\n this.$builtins.position = pb.mul(this.textMatrix, pb.vec4(this.$inputs.pos, -50, 1));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n this.$outputs.uv = this.$inputs.uv;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.textColor = pb.vec4().uniform(0);\r\n this.tex = pb.tex2D().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n pb.main(function () {\r\n this.alpha = pb.mul(pb.textureSample(this.tex, this.$inputs.uv).a, this.textColor.a);\r\n this.$if(pb.notEqual(this.srgbOut, 0), function () {\r\n this.$outputs.color = pb.vec4(\r\n pb.mul(pb.pow(this.textColor.rgb, pb.vec3(1 / 2.2)), this.alpha),\r\n this.alpha\r\n );\r\n }).$else(function () {\r\n this.$outputs.color = pb.vec4(pb.mul(this.textColor.rgb, this.alpha), this.alpha);\r\n });\r\n });\r\n }\r\n });\r\n this.textProgram.name = '@DrawText';\r\n this.textBindGroup = device.createBindGroup(this.textProgram.bindGroupLayouts[0]);\r\n this.textRenderStates = device.createRenderStateSet();\r\n this.textRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'inv-src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this.textRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this.textRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n }\r\n}\r\n"],"names":["MAX_GLYPH_COUNT","DrawText","GLYPH_COUNT","glyphManager","prepared","textVertexBuffer","textVertexLayout","textProgram","textBindGroup","textRenderStates","textOffset","textMatrix","Matrix4x4","font","vertexCache","colorValue","Vector4","calculateTextMatrix","device","matrix","viewport","getViewport","projectionMatrix","ortho","width","height","flipMatrix","translation","Vector3","scaleRight","multiply","setFont","name","Font","fetchFont","getScale","drawText","text","color","x","y","length","pushDeviceStates","prepareDrawText","parseColor","r","g","z","b","w","a","setValue","type","getFramebuffer","setProgram","setVertexLayout","setRenderStates","setBindGroup","drawn","total","count","Math","min","drawTextNoOverflow","flush","popDeviceStates","start","atlasIndex","i","glyph","getGlyphInfo","bufferSubData","setTexture","getAtlasTexture","draw","base","uMin","vMin","uMax","vMax","GlyphManager","Float32Array","createInterleavedVertexBuffer","dynamic","indices","Uint16Array","textIndexBuffer","createIndexBuffer","createVertexLayout","vertexBuffers","buffer","indexBuffer","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","uv","$outputs","flip","int","uniform","mat4","main","$builtins","position","mul","vec4","$if","notEqual","neg","fragment","textColor","tex","tex2D","srgbOut","alpha","textureSample","pow","rgb","vec3","$else","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","enable","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode"],"mappings":"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"}
|
package/dist/helpers/font.js
CHANGED
package/dist/helpers/font.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"font.js","sources":["../../src/helpers/font.ts"],"sourcesContent":["/** @internal */\r\nexport class FontCanvas {\r\n private static _canvas: HTMLCanvasElement = null;\r\n private static _context: CanvasRenderingContext2D = null;\r\n static get canvas(): HTMLCanvasElement {\r\n this._realize();\r\n return this._canvas;\r\n }\r\n static get context(): CanvasRenderingContext2D {\r\n this._realize();\r\n return this._context;\r\n }\r\n static get font(): string {\r\n return this.context.font;\r\n }\r\n static set font(font: string) {\r\n this.context.font = font;\r\n }\r\n private static _realize(): void {\r\n if (!this._canvas) {\r\n this._canvas = document.createElement('canvas');\r\n this._canvas.width = 512;\r\n this._canvas.height = 512;\r\n this._canvas.style.left = '-10000px';\r\n this._canvas.style.position = 'absolute';\r\n //document.body.appendChild(this._canvas);\r\n this._context = this._canvas.getContext('2d', {\r\n willReadFrequently: true\r\n });\r\n this._context.textBaseline = 'top';\r\n this._context.textAlign = 'left';\r\n this._context.fillStyle = 'transparent';\r\n this._context.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n this._context.fillStyle = '#ffffff';\r\n this._context.imageSmoothingEnabled = true;\r\n this._context.imageSmoothingQuality = 'high';\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The font class\r\n * @public\r\n */\r\nexport class Font {\r\n /** @internal */\r\n private static fontCache: {\r\n [name: string]: {\r\n [scale: number]: Font;\r\n };\r\n } = {};\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _nameScaled: string;\r\n /** @internal */\r\n private readonly _scale: number;\r\n /** @internal */\r\n private _size: number;\r\n /** @internal */\r\n private _family: string;\r\n /** @internal */\r\n private _top: number;\r\n /** @internal */\r\n private _bottom: number;\r\n /** @internal */\r\n private _topScaled: number;\r\n /** @internal */\r\n private _bottomScaled: number;\r\n /** @internal */\r\n private readonly _div: HTMLDivElement;\r\n /**\r\n * Creates a instance of font class from font name and the scale value\r\n * @param name - The font name\r\n * @param scale - The scale value\r\n */\r\n constructor(name: string, scale: number) {\r\n this._top = 0;\r\n this._bottom = 0;\r\n this._size = 0;\r\n this._topScaled = 0;\r\n this._bottomScaled = 0;\r\n this._family = '';\r\n this._scale = scale;\r\n this._name = name;\r\n this._nameScaled = null;\r\n this._div = document.createElement('div');\r\n if (this._name) {\r\n this._normalizeFont();\r\n }\r\n }\r\n /**\r\n * Fetch a font from cache\r\n * @param name - The font name\r\n * @param scale - The scale value\r\n * @returns The font object\r\n */\r\n static fetchFont(name: string, scale: number): Font {\r\n let fontlist = this.fontCache[name];\r\n if (!fontlist) {\r\n fontlist = {};\r\n this.fontCache[name] = fontlist;\r\n }\r\n let font = fontlist[scale];\r\n if (!font) {\r\n font = new Font(name, scale);\r\n fontlist[scale] = font;\r\n }\r\n return font;\r\n }\r\n /** Gets the font name */\r\n get fontName(): string {\r\n return this._name;\r\n }\r\n set fontName(name: string) {\r\n this._name = name;\r\n this._normalizeFont();\r\n }\r\n /** Gets the scaled font name */\r\n get fontNameScaled(): string {\r\n return this._nameScaled;\r\n }\r\n /** Gets the font size */\r\n get size(): number {\r\n return this._size;\r\n }\r\n /** Gets the font family */\r\n get family(): string {\r\n return this._family;\r\n }\r\n /** Gets top position of the font */\r\n get top(): number {\r\n return this._top;\r\n }\r\n /** Gets the bottom position of the font */\r\n get bottom(): number {\r\n return this._bottom;\r\n }\r\n /** Gets the scaled top position of the font */\r\n get topScaled(): number {\r\n return this._topScaled;\r\n }\r\n /** Gets the scaled bottom position of the font */\r\n get bottomScaled(): number {\r\n return this._bottomScaled;\r\n }\r\n /** Gets the maximum height of the font */\r\n get maxHeight(): number {\r\n return this._bottom - this._top + 1;\r\n }\r\n /** Gets the scaled maximum height of the font */\r\n get maxHeightScaled(): number {\r\n return this._bottomScaled - this._topScaled + 1;\r\n }\r\n /** Tests if two fonts are the same */\r\n equalTo(other: Font): boolean {\r\n return this._size === other._size && this._family === other._family;\r\n }\r\n /** @internal */\r\n private _measureFontHeight(fontName: string): {\r\n size: number;\r\n family: string;\r\n top: number;\r\n bottom: number;\r\n } {\r\n const oldFont = FontCanvas.context.font;\r\n const oldTextBaseline = FontCanvas.context.textBaseline;\r\n const oldFillStyle = FontCanvas.context.fillStyle;\r\n\r\n FontCanvas.context.font = fontName;\r\n this._div.style.font = FontCanvas.context.font;\r\n const fontSize = this._div.style.fontSize;\r\n const size = parseInt(fontSize.substring(0, fontSize.length - 2));\r\n const family = this._div.style.fontFamily;\r\n\r\n const testString = 'bdfghijklpq国美|_~';\r\n const metric = FontCanvas.context.measureText(testString);\r\n let top: number, bottom: number;\r\n top = 0;\r\n bottom = size - 1;\r\n const extra = 10;\r\n const halfExtra = extra >> 1;\r\n const maxWidth = Math.ceil(metric.width) + extra;\r\n const maxHeight = size + extra;\r\n FontCanvas.context.clearRect(0, 0, maxWidth, maxHeight);\r\n FontCanvas.context.textBaseline = 'top';\r\n FontCanvas.context.fillStyle = '#ffffff';\r\n FontCanvas.context.fillText(testString, halfExtra, halfExtra);\r\n const bitmap = FontCanvas.context.getImageData(0, 0, maxWidth, maxHeight);\r\n const pixels = bitmap.data;\r\n for (let i = 0; i < maxWidth * maxHeight; i++) {\r\n if (pixels[i * 4 + 3] > 0) {\r\n top = Math.floor(i / maxWidth);\r\n break;\r\n }\r\n }\r\n for (let i = maxWidth * maxHeight - 1; i >= 0; i--) {\r\n if (pixels[i * 4 + 3] > 0) {\r\n bottom = Math.floor(i / maxWidth);\r\n break;\r\n }\r\n }\r\n top -= halfExtra;\r\n bottom -= halfExtra;\r\n FontCanvas.context.font = oldFont;\r\n FontCanvas.context.textBaseline = oldTextBaseline;\r\n FontCanvas.context.fillStyle = oldFillStyle;\r\n\r\n return { size, family, top, bottom };\r\n }\r\n /** @internal */\r\n private _normalizeFont(): void {\r\n const info = this._measureFontHeight(this._name);\r\n this._nameScaled = `${Math.round(info.size * this._scale)}px ${info.family}`;\r\n const infoScaled = this._measureFontHeight(this._nameScaled);\r\n this._size = info.size;\r\n this._family = info.family;\r\n this._top = info.top;\r\n this._bottom = info.bottom;\r\n this._topScaled = infoScaled.top;\r\n this._bottomScaled = infoScaled.bottom;\r\n }\r\n}\r\n"],"names":["FontCanvas","_canvas","_context","canvas","_realize","context","font","document","createElement","width","height","style","left","position","getContext","willReadFrequently","textBaseline","textAlign","fillStyle","fillRect","imageSmoothingEnabled","imageSmoothingQuality","Font","fontCache","name","scale","_top","_bottom","_size","_topScaled","_bottomScaled","_family","_scale","_name","_nameScaled","_div","_normalizeFont","fetchFont","fontlist","fontName","fontNameScaled","size","family","top","bottom","topScaled","bottomScaled","maxHeight","maxHeightScaled","equalTo","other","_measureFontHeight","oldFont","oldTextBaseline","oldFillStyle","fontSize","parseInt","substring","length","fontFamily","testString","metric","measureText","extra","halfExtra","maxWidth","Math","ceil","clearRect","fillText","bitmap","getImageData","pixels","data","i","floor","info","round","infoScaled"],"mappings":"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"}
|
|
@@ -68,13 +68,6 @@ import { TextureAtlasManager } from './textureatlas.js';
|
|
|
68
68
|
}
|
|
69
69
|
return i - start;
|
|
70
70
|
}
|
|
71
|
-
/** @internal */ _hash(char, font) {
|
|
72
|
-
return `${font.family}@${font.size}&${char}`;
|
|
73
|
-
}
|
|
74
|
-
/** @internal */ _cacheGlyph(char, font) {
|
|
75
|
-
const bitmap = this._getGlyphBitmap(char, font);
|
|
76
|
-
return this.pushBitmap(this._hash(char, font), bitmap);
|
|
77
|
-
}
|
|
78
71
|
/**
|
|
79
72
|
* Measuring width of a character
|
|
80
73
|
* @param char - The character to be measured
|
|
@@ -115,6 +108,13 @@ import { TextureAtlasManager } from './textureatlas.js';
|
|
|
115
108
|
FontCanvas.context.fillText(char, 0, -font.topScaled);
|
|
116
109
|
return FontCanvas.context.getImageData(0, 0, w, h);
|
|
117
110
|
}
|
|
111
|
+
/** @internal */ _hash(char, font) {
|
|
112
|
+
return `${font.family}@${font.size}&${char}`;
|
|
113
|
+
}
|
|
114
|
+
/** @internal */ _cacheGlyph(char, font) {
|
|
115
|
+
const bitmap = this._getGlyphBitmap(char, font);
|
|
116
|
+
return this.pushBitmap(this._hash(char, font), bitmap);
|
|
117
|
+
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
export { GlyphManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glyphmanager.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glyphmanager.js","sources":["../../src/helpers/glyphmanager.ts"],"sourcesContent":["import type { Font } from './font';\r\nimport { FontCanvas } from './font';\r\nimport type { AtlasInfo } from './textureatlas';\r\nimport { TextureAtlasManager } from './textureatlas';\r\nimport type { AbstractDevice } from '../base_types';\r\n\r\n/**\r\n * Manager of texture glyphs\r\n * @public\r\n */\r\nexport class GlyphManager extends TextureAtlasManager {\r\n /**\r\n * Creates a new glyph manager instance\r\n * @param device - The render device\r\n * @param binWidth - Width of an atlas bin\r\n * @param binHeight - Height of an atlas bin\r\n * @param border - Border width of an atlas\r\n */\r\n constructor(device: AbstractDevice, binWidth: number, binHeight: number, border: number) {\r\n super(device, binWidth, binHeight, border, true);\r\n this.atlasTextureRestoreHandler = async () => {\r\n if (!this.isEmpty()) {\r\n this.clear();\r\n }\r\n };\r\n }\r\n /**\r\n * Gets the atlas information for given character\r\n * @param char - The character\r\n * @param font - Font of the character\r\n * @returns Atlas information for the glyph\r\n */\r\n getGlyphInfo(char: string, font: Font): AtlasInfo {\r\n if (!char || !font) {\r\n return null;\r\n }\r\n let glyphInfo = this.getAtlasInfo(this._hash(char, font));\r\n if (!glyphInfo) {\r\n glyphInfo = this._cacheGlyph(char, font);\r\n glyphInfo.width = Math.round(glyphInfo.width * (font.maxHeight / font.maxHeightScaled));\r\n glyphInfo.height = font.maxHeight;\r\n }\r\n return glyphInfo;\r\n }\r\n /**\r\n * Measuring the width of a string\r\n * @param str - The string to be measured\r\n * @param charMargin - margin size between characters\r\n * @param font - Font of the string\r\n * @returns Width of the string\r\n */\r\n measureStringWidth(str: string, charMargin: number, font: Font): number {\r\n let w = 0;\r\n for (const ch of str) {\r\n w += charMargin + this.getCharWidth(ch, font);\r\n }\r\n return w;\r\n }\r\n /**\r\n * Clips a string so that it's width is not larger than the given value\r\n * @param str - The string to be clipped\r\n * @param width - The desired maximum width\r\n * @param charMargin - Margin size between characters\r\n * @param start - Start index of the string to be clipped\r\n * @param font - Font of the string\r\n * @returns\r\n */\r\n clipStringToWidth(str: string, width: number, charMargin: number, start: number, font: Font): number {\r\n let sum = 0;\r\n let i = start;\r\n for (; i < str.length; i++) {\r\n sum += charMargin + this.getCharWidth(str[i], font);\r\n if (sum > width) {\r\n break;\r\n }\r\n }\r\n return i - start;\r\n }\r\n /**\r\n * Measuring width of a character\r\n * @param char - The character to be measured\r\n * @param font - Font of the character\r\n * @returns Width of the character\r\n */\r\n getCharWidth(char: string, font: Font): number {\r\n if (!font) {\r\n return 0;\r\n }\r\n FontCanvas.font = font.fontNameScaled;\r\n const metric = FontCanvas.context.measureText(char);\r\n let w = metric.width;\r\n if (w === 0) {\r\n return 0;\r\n }\r\n if (typeof metric.actualBoundingBoxRight === 'number') {\r\n w = Math.floor(Math.max(w, metric.actualBoundingBoxRight) + 0.8);\r\n }\r\n w = Math.round(w * (font.maxHeight / font.maxHeightScaled));\r\n return w;\r\n }\r\n /** @internal */\r\n private _getGlyphBitmap(\r\n char: string,\r\n font: Font\r\n ): ImageData | { x: number; y: number; w: number; h: number } {\r\n if (!font) {\r\n return null;\r\n }\r\n FontCanvas.font = font.fontNameScaled;\r\n const metric = FontCanvas.context.measureText(char);\r\n let w = metric.width;\r\n if (w === 0) {\r\n return null;\r\n }\r\n if (typeof metric.actualBoundingBoxRight === 'number') {\r\n w = Math.floor(Math.max(w, metric.actualBoundingBoxRight) + 0.8);\r\n }\r\n const h = font.maxHeightScaled;\r\n FontCanvas.context.fillStyle = '#fff';\r\n FontCanvas.context.clearRect(0, 0, w + 2, h);\r\n FontCanvas.context.fillText(char, 0, -font.topScaled);\r\n return FontCanvas.context.getImageData(0, 0, w, h);\r\n }\r\n /** @internal */\r\n private _hash(char: string, font: Font): string {\r\n return `${font.family}@${font.size}&${char}`;\r\n }\r\n /** @internal */\r\n private _cacheGlyph(char: string, font: Font): AtlasInfo {\r\n const bitmap = this._getGlyphBitmap(char, font) as ImageData;\r\n return this.pushBitmap(this._hash(char, font), bitmap);\r\n }\r\n}\r\n"],"names":["GlyphManager","TextureAtlasManager","device","binWidth","binHeight","border","atlasTextureRestoreHandler","isEmpty","clear","getGlyphInfo","char","font","glyphInfo","getAtlasInfo","_hash","_cacheGlyph","width","Math","round","maxHeight","maxHeightScaled","height","measureStringWidth","str","charMargin","w","ch","getCharWidth","clipStringToWidth","start","sum","i","length","FontCanvas","fontNameScaled","metric","context","measureText","actualBoundingBoxRight","floor","max","_getGlyphBitmap","h","fillStyle","clearRect","fillText","topScaled","getImageData","family","size","bitmap","pushBitmap"],"mappings":"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"}
|
|
@@ -128,14 +128,12 @@ import { RectsPacker } from '@zephyr3d/base';
|
|
|
128
128
|
}
|
|
129
129
|
/** @internal */ _createAtlasTexture() {
|
|
130
130
|
const tex = this._device.createTexture2D('rgba8unorm', this._binWidth, this._binHeight, {
|
|
131
|
-
|
|
132
|
-
mipFilter: 'none'
|
|
133
|
-
}
|
|
131
|
+
mipmapping: false
|
|
134
132
|
});
|
|
135
133
|
tex.update(new Uint8Array(tex.width * tex.height * 4), 0, 0, tex.width, tex.height);
|
|
136
|
-
tex.restoreHandler =
|
|
134
|
+
tex.restoreHandler = ()=>{
|
|
137
135
|
tex.update(new Uint8Array(tex.width * tex.height * 4), 0, 0, tex.width, tex.height);
|
|
138
|
-
this._atlasRestoreHandler
|
|
136
|
+
this._atlasRestoreHandler?.(tex);
|
|
139
137
|
};
|
|
140
138
|
return tex;
|
|
141
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textureatlas.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"textureatlas.js","sources":["../../src/helpers/textureatlas.ts"],"sourcesContent":["import { RectsPacker } from '@zephyr3d/base';\r\nimport type { AbstractDevice } from '../base_types';\r\nimport type { BaseTexture, Texture2D } from '../gpuobject';\r\n\r\n/**\r\n * Information of a texture atlas\r\n * @public\r\n */\r\nexport interface AtlasInfo {\r\n atlasIndex: number;\r\n width: number;\r\n height: number;\r\n uMin: number;\r\n vMin: number;\r\n uMax: number;\r\n vMax: number;\r\n}\r\n\r\n/**\r\n * Texture atlas manager\r\n * @public\r\n */\r\nexport class TextureAtlasManager {\r\n /** @internal */\r\n protected static readonly ATLAS_WIDTH = 1024;\r\n /** @internal */\r\n protected static readonly ATLAS_HEIGHT = 1024;\r\n /** @internal */\r\n protected _packer: RectsPacker;\r\n /** @internal */\r\n protected _device: AbstractDevice;\r\n /** @internal */\r\n protected _binWidth: number;\r\n /** @internal */\r\n protected _binHeight: number;\r\n /** @internal */\r\n protected _rectBorderWidth: number;\r\n /** @internal */\r\n protected _linearSpace: boolean;\r\n /** @internal */\r\n protected _atlasList: Texture2D[];\r\n /** @internal */\r\n protected _atlasInfoMap: Record<string, AtlasInfo>;\r\n /** @internal */\r\n protected _atlasRestoreHandler: (tex: BaseTexture) => void;\r\n /**\r\n * Creates a new texture atlas manager instance\r\n * @param device - The render device\r\n * @param binWidth - Width of an atlas bin\r\n * @param binHeight - Height of an atlas bin\r\n * @param rectBorderWidth - Border width of an atlas\r\n * @param linearSpace - true if the texture space is linear\r\n */\r\n constructor(\r\n device: AbstractDevice,\r\n binWidth: number,\r\n binHeight: number,\r\n rectBorderWidth: number,\r\n linearSpace?: boolean\r\n ) {\r\n this._device = device;\r\n this._binWidth = binWidth;\r\n this._binHeight = binHeight;\r\n this._rectBorderWidth = rectBorderWidth;\r\n this._linearSpace = !!linearSpace;\r\n this._packer = new RectsPacker(this._binWidth, this._binHeight);\r\n this._atlasList = [];\r\n this._atlasInfoMap = {};\r\n this._atlasRestoreHandler = null;\r\n }\r\n /**\r\n * The texture restore handler callback function\r\n * This callback function will be called whenever the device has been restored\r\n */\r\n get atlasTextureRestoreHandler(): (tex: BaseTexture) => void {\r\n return this._atlasRestoreHandler;\r\n }\r\n set atlasTextureRestoreHandler(f: (tex: BaseTexture) => void) {\r\n this._atlasRestoreHandler = f;\r\n }\r\n /**\r\n * Gets the atlas texture of a given index\r\n * @param index - Index of the atlas bin\r\n * @returns Atlas texture for given index\r\n */\r\n getAtlasTexture(index: number): Texture2D {\r\n return this._atlasList[index];\r\n }\r\n /**\r\n * Gets the information about specified atlas\r\n * @param key - Key of the atlas\r\n * @returns Information of the atlas\r\n */\r\n getAtlasInfo(key: string): AtlasInfo {\r\n return this._atlasInfoMap[key] || null;\r\n }\r\n /**\r\n * Check if no atlas has been created\r\n * @returns true if no atlas has been created\r\n */\r\n isEmpty(): boolean {\r\n return this._atlasList.length === 0;\r\n }\r\n /**\r\n * Removes all created atlases\r\n */\r\n clear(): void {\r\n this._packer.clear();\r\n for (const tex of this._atlasList) {\r\n tex.dispose();\r\n }\r\n this._atlasList = [];\r\n this._atlasInfoMap = {};\r\n }\r\n /**\r\n * Inserts a rectangle of a canvas to the atlas texture\r\n * @param key - Key of the atlas\r\n * @param ctx - The canvas context\r\n * @param x - x offset of the rectangle\r\n * @param y - y offset of the rectangle\r\n * @param w - width of the rectangle\r\n * @param h - height of the rectangle\r\n * @returns The atals info or null if insert failed\r\n */\r\n pushCanvas(\r\n key: string,\r\n ctx: CanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number\r\n ): AtlasInfo {\r\n const rc = this._packer.insert(w + 2 * this._rectBorderWidth, h + 2 * this._rectBorderWidth);\r\n if (rc) {\r\n const atlasX = rc.x + this._rectBorderWidth;\r\n const atlasY = rc.y + this._rectBorderWidth;\r\n this._updateAtlasTextureCanvas(rc.binIndex, ctx, atlasX, atlasY, w, h, x, y);\r\n const info: AtlasInfo = {\r\n atlasIndex: rc.binIndex,\r\n uMin: atlasX / this._binWidth,\r\n vMin: atlasY / this._binHeight,\r\n uMax: (atlasX + w) / this._binWidth,\r\n vMax: (atlasY + h) / this._binHeight,\r\n width: w,\r\n height: h\r\n };\r\n this._atlasInfoMap[key] = info;\r\n return info;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Inserts a bitmap to the atlas texture\r\n * @param key - Key of the atlas\r\n * @param bitmap - The bitmap object\r\n * @returns The atals info or null if insert failed\r\n */\r\n pushBitmap(key: string, bitmap: ImageData | ImageBitmap): AtlasInfo {\r\n const rc = this._packer.insert(\r\n bitmap.width + 2 * this._rectBorderWidth,\r\n bitmap.height + 2 * this._rectBorderWidth\r\n );\r\n if (rc) {\r\n const atlasX = rc.x + this._rectBorderWidth;\r\n const atlasY = rc.y + this._rectBorderWidth;\r\n this._updateAtlasTexture(rc.binIndex, bitmap, atlasX, atlasY);\r\n const info: AtlasInfo = {\r\n atlasIndex: rc.binIndex,\r\n uMin: atlasX / this._binWidth,\r\n vMin: atlasY / this._binHeight,\r\n uMax: (atlasX + bitmap.width) / this._binWidth,\r\n vMax: (atlasY + bitmap.height) / this._binHeight,\r\n width: bitmap.width,\r\n height: bitmap.height\r\n };\r\n this._atlasInfoMap[key] = info;\r\n return info;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n protected _createAtlasTexture(): Texture2D {\r\n const tex = this._device.createTexture2D('rgba8unorm', this._binWidth, this._binHeight, {\r\n mipmapping: false\r\n });\r\n tex.update(new Uint8Array(tex.width * tex.height * 4), 0, 0, tex.width, tex.height);\r\n tex.restoreHandler = () => {\r\n tex.update(new Uint8Array(tex.width * tex.height * 4), 0, 0, tex.width, tex.height);\r\n this._atlasRestoreHandler?.(tex);\r\n };\r\n return tex;\r\n }\r\n /** @internal */\r\n private _updateAtlasTextureCanvas(\r\n atlasIndex: number,\r\n ctx: CanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n xOffset: number,\r\n yOffset: number\r\n ): void {\r\n let textureAtlas: Texture2D = null;\r\n if (atlasIndex === this._atlasList.length) {\r\n textureAtlas = this._createAtlasTexture();\r\n this._atlasList.push(textureAtlas);\r\n } else {\r\n textureAtlas = this._atlasList[atlasIndex];\r\n }\r\n textureAtlas.updateFromElement(ctx.canvas, x, y, xOffset, yOffset, w, h);\r\n }\r\n /** @internal */\r\n private _updateAtlasTexture(\r\n atlasIndex: number,\r\n bitmap: ImageData | ImageBitmap,\r\n x: number,\r\n y: number\r\n ): void {\r\n let textureAtlas: Texture2D = null;\r\n if (atlasIndex === this._atlasList.length) {\r\n textureAtlas = this._createAtlasTexture();\r\n this._atlasList.push(textureAtlas);\r\n } else {\r\n textureAtlas = this._atlasList[atlasIndex];\r\n }\r\n if (bitmap instanceof ImageBitmap) {\r\n textureAtlas.updateFromElement(bitmap, x, y, 0, 0, bitmap.width, bitmap.height);\r\n } else {\r\n const originValues = new Uint8Array(bitmap.data.buffer);\r\n textureAtlas.update(originValues, x, y, bitmap.width, bitmap.height);\r\n }\r\n }\r\n}\r\n"],"names":["TextureAtlasManager","ATLAS_WIDTH","ATLAS_HEIGHT","device","binWidth","binHeight","rectBorderWidth","linearSpace","_device","_binWidth","_binHeight","_rectBorderWidth","_linearSpace","_packer","RectsPacker","_atlasList","_atlasInfoMap","_atlasRestoreHandler","atlasTextureRestoreHandler","f","getAtlasTexture","index","getAtlasInfo","key","isEmpty","length","clear","tex","dispose","pushCanvas","ctx","x","y","w","h","rc","insert","atlasX","atlasY","_updateAtlasTextureCanvas","binIndex","info","atlasIndex","uMin","vMin","uMax","vMax","width","height","pushBitmap","bitmap","_updateAtlasTexture","createTexture2D","mipmapping","update","Uint8Array","restoreHandler","xOffset","yOffset","textureAtlas","_createAtlasTexture","push","updateFromElement","canvas","ImageBitmap","originValues","data","buffer"],"mappings":"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"}
|