@zephyr3d/device 0.2.4 → 0.2.6

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.
Files changed (44) hide show
  1. package/dist/base_types.js +19 -79
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +142 -162
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +29 -27
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +61 -7
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +3 -1
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +11 -11
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +10 -0
  14. package/dist/builder/misc.js.map +1 -0
  15. package/dist/builder/programbuilder.js +62 -58
  16. package/dist/builder/programbuilder.js.map +1 -1
  17. package/dist/builder/reflection.js +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +76 -75
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +220 -80
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +84 -25
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +30 -25
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js +1 -0
  28. package/dist/helpers/font.js.map +1 -1
  29. package/dist/helpers/glyphmanager.js +33 -15
  30. package/dist/helpers/glyphmanager.js.map +1 -1
  31. package/dist/helpers/textureatlas.js +10 -8
  32. package/dist/helpers/textureatlas.js.map +1 -1
  33. package/dist/index.d.ts +465 -394
  34. package/dist/index.js +6 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/pool.js +69 -31
  37. package/dist/pool.js.map +1 -1
  38. package/dist/timer.js +3 -2
  39. package/dist/timer.js.map +1 -1
  40. package/dist/uniformdata.js +3 -3
  41. package/dist/uniformdata.js.map +1 -1
  42. package/dist/vertexdata.js +29 -3
  43. package/dist/vertexdata.js.map +1 -1
  44. package/package.json +80 -65
package/dist/gpuobject.js CHANGED
@@ -1,22 +1,22 @@
1
- import { PBPrimitiveType, PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo } from './builder/types.js';
1
+ import { PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo, PBPrimitiveType } from './builder/types.js';
2
2
 
3
- /** @internal */ const MAX_VERTEX_ATTRIBUTES = 16;
4
- /** @internal */ const MAX_BINDING_GROUPS = 4;
5
- /** @internal */ const MAX_TEXCOORD_INDEX_COUNT = 8;
6
- /** @internal */ const VERTEX_ATTRIB_POSITION = 0;
7
- /** @internal */ const VERTEX_ATTRIB_NORMAL = 1;
8
- /** @internal */ const VERTEX_ATTRIB_DIFFUSE = 2;
9
- /** @internal */ const VERTEX_ATTRIB_TANGENT = 3;
10
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD0 = 4;
11
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD1 = 5;
12
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD2 = 6;
13
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD3 = 7;
14
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD4 = 8;
15
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD5 = 9;
16
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD6 = 10;
17
- /** @internal */ const VERTEX_ATTRIB_TEXCOORD7 = 11;
18
- /** @internal */ const VERTEX_ATTRIB_BLEND_WEIGHT = 12;
19
- /** @internal */ const VERTEX_ATTRIB_BLEND_INDICES = 13;
3
+ /** @public */ const MAX_VERTEX_ATTRIBUTES = 16;
4
+ /** @public */ const MAX_BINDING_GROUPS = 4;
5
+ /** @public */ const MAX_TEXCOORD_INDEX_COUNT = 8;
6
+ /** @public */ const VERTEX_ATTRIB_POSITION = 0;
7
+ /** @public */ const VERTEX_ATTRIB_NORMAL = 1;
8
+ /** @public */ const VERTEX_ATTRIB_DIFFUSE = 2;
9
+ /** @public */ const VERTEX_ATTRIB_TANGENT = 3;
10
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD0 = 4;
11
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD1 = 5;
12
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD2 = 6;
13
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD3 = 7;
14
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD4 = 8;
15
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD5 = 9;
16
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD6 = 10;
17
+ /** @public */ const VERTEX_ATTRIB_TEXCOORD7 = 11;
18
+ /** @public */ const VERTEX_ATTRIB_BLEND_WEIGHT = 12;
19
+ /** @public */ const VERTEX_ATTRIB_BLEND_INDICES = 13;
20
20
  const vertexAttribFormatMap = {
21
21
  position_u8normx2: [
22
22
  VERTEX_ATTRIB_POSITION,
@@ -1955,8 +1955,10 @@ const vertexAttribNameRevMap = {
1955
1955
  [VERTEX_ATTRIB_TEXCOORD6]: 'texCoord6',
1956
1956
  [VERTEX_ATTRIB_TEXCOORD7]: 'texCoord7'
1957
1957
  };
1958
- var GPUResourceUsageFlags;
1959
- (function(GPUResourceUsageFlags) {
1958
+ /**
1959
+ * The gpu resource usage flags
1960
+ * @public
1961
+ */ var GPUResourceUsageFlags = /*#__PURE__*/ function(GPUResourceUsageFlags) {
1960
1962
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_LINEAR_COLOR_SPACE"] = 2] = "TF_LINEAR_COLOR_SPACE";
1961
1963
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_NO_MIPMAP"] = 4] = "TF_NO_MIPMAP";
1962
1964
  GPUResourceUsageFlags[GPUResourceUsageFlags["TF_WRITABLE"] = 8] = "TF_WRITABLE";
@@ -1967,14 +1969,17 @@ var GPUResourceUsageFlags;
1967
1969
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_WRITE"] = 256] = "BF_WRITE";
1968
1970
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_UNIFORM"] = 512] = "BF_UNIFORM";
1969
1971
  GPUResourceUsageFlags[GPUResourceUsageFlags["BF_STORAGE"] = 1024] = "BF_STORAGE";
1970
- GPUResourceUsageFlags[GPUResourceUsageFlags["DYNAMIC"] = 2048] = "DYNAMIC";
1971
- GPUResourceUsageFlags[GPUResourceUsageFlags["MANAGED"] = 4096] = "MANAGED";
1972
- })(GPUResourceUsageFlags || (GPUResourceUsageFlags = {}));
1972
+ GPUResourceUsageFlags[GPUResourceUsageFlags["BF_PACK_PIXEL"] = 2048] = "BF_PACK_PIXEL";
1973
+ GPUResourceUsageFlags[GPUResourceUsageFlags["BF_UNPACK_PIXEL"] = 4096] = "BF_UNPACK_PIXEL";
1974
+ GPUResourceUsageFlags[GPUResourceUsageFlags["DYNAMIC"] = 8192] = "DYNAMIC";
1975
+ GPUResourceUsageFlags[GPUResourceUsageFlags["MANAGED"] = 16384] = "MANAGED";
1976
+ return GPUResourceUsageFlags;
1977
+ }({});
1973
1978
  /**
1974
1979
  * Get vertex attribute index by semantic
1975
1980
  * @public
1976
1981
  */ function getVertexAttribByName(name) {
1977
- return vertexAttribNameMap[name];
1982
+ return name ? vertexAttribNameMap[name] : undefined;
1978
1983
  }
1979
1984
  /**
1980
1985
  * Get vertex semantic by attribute index
@@ -1982,14 +1987,61 @@ var GPUResourceUsageFlags;
1982
1987
  */ function getVertexAttribName(attrib) {
1983
1988
  return vertexAttribNameRevMap[attrib];
1984
1989
  }
1990
+ /**
1991
+ * Test whether a vertex buffer matches given semantic
1992
+ * @param buffer - Vertex buffer
1993
+ * @param name - Semantic to test
1994
+ * @returns true if the vertex buffer matches given semantic, otherwise false
1995
+ *
1996
+ * @public
1997
+ */ function matchVertexBuffer(buffer, name) {
1998
+ if (!buffer) {
1999
+ return false;
2000
+ }
2001
+ const bufferType = buffer.structure.structMembers[0].type;
2002
+ if (!bufferType.isArrayType()) {
2003
+ return false;
2004
+ }
2005
+ const vertexType = bufferType.elementType;
2006
+ if (vertexType.isStructType()) {
2007
+ for (const attrib of vertexType.structMembers){
2008
+ if (attrib.name === name) {
2009
+ return true;
2010
+ }
2011
+ }
2012
+ } else {
2013
+ return buffer.structure.structMembers[0].name === name;
2014
+ }
2015
+ return false;
2016
+ }
2017
+ /**
2018
+ * Get vertex attribute type of specified vertex format
2019
+ * @param fmt - The vertex format
2020
+ * @returns Vertex attribute type, possible values are 'f32', 'f16', 'i32', 'u32', 'i16', 'u16', 'i8norm', 'u8norm', 'i16norm', 'u16norm'
2021
+ *
2022
+ * @public
2023
+ */ function getVertexAttributeFormat(fmt) {
2024
+ return vertexAttribFormatMap[fmt][3];
2025
+ }
2026
+ /**
2027
+ * Get vertex attribute index of specified vertex format
2028
+ * @param fmt - The vertex format
2029
+ * @returns Vertex attribute index
2030
+ *
2031
+ * @public
2032
+ */ function getVertexAttributeIndex(fmt) {
2033
+ return vertexAttribFormatMap[fmt][0];
2034
+ }
1985
2035
  /**
1986
2036
  * Get byte size of specified vertex format
2037
+ *
1987
2038
  * @public
1988
2039
  */ function getVertexFormatSize(fmt) {
1989
2040
  return vertexAttribFormatMap[fmt][2];
1990
2041
  }
1991
2042
  /**
1992
2043
  * Get number of components of specified vertex format
2044
+ *
1993
2045
  * @public
1994
2046
  */ function getVertexFormatComponentCount(fmt) {
1995
2047
  return vertexAttribFormatMap[fmt][4];
@@ -2000,6 +2052,7 @@ var GPUResourceUsageFlags;
2000
2052
  * @param type - Data type of vertex component
2001
2053
  * @param count - The count of vertex components
2002
2054
  * @returns Vertex format
2055
+ *
2003
2056
  * @public
2004
2057
  */ function getVertexAttribFormat(semantic, type, count) {
2005
2058
  const loc = getVertexAttribByName(semantic);
@@ -2015,6 +2068,7 @@ var GPUResourceUsageFlags;
2015
2068
  * Get the length of a vertex buffer by specified structure type of the vertex buffer
2016
2069
  * @param vertexBufferType - The structure type of the vertex buffer
2017
2070
  * @returns The length of the vertex buffer
2071
+ *
2018
2072
  * @public
2019
2073
  */ function getVertexBufferLength(vertexBufferType) {
2020
2074
  return vertexBufferType.structMembers[0].type.dimension;
@@ -2023,6 +2077,7 @@ var GPUResourceUsageFlags;
2023
2077
  * Get byte stride of a vertex buffer by specified structure type of the vertex buffer
2024
2078
  * @param vertexBufferType - The structure type of the vertex buffer
2025
2079
  * @returns The byte stride of the vertex buffer
2080
+ *
2026
2081
  * @public
2027
2082
  */ function getVertexBufferStride(vertexBufferType) {
2028
2083
  const vertexType = vertexBufferType.structMembers[0].type.elementType;
@@ -2041,6 +2096,7 @@ var GPUResourceUsageFlags;
2041
2096
  * @param vertexBufferType - The structure type of the vertex buffer
2042
2097
  * @param semantic - The vertex semantic
2043
2098
  * @returns - The primitive type of the vertex attribute
2099
+ *
2044
2100
  * @public
2045
2101
  */ function getVertexBufferAttribTypeBySemantic(vertexBufferType, semantic) {
2046
2102
  const k = vertexBufferType.structMembers[0];
@@ -2061,6 +2117,7 @@ var GPUResourceUsageFlags;
2061
2117
  * @param vertexBufferType - The structure type of the vertex buffer
2062
2118
  * @param semantic - The vertex attribute index
2063
2119
  * @returns - The primitive type of the vertex attribute
2120
+ *
2064
2121
  * @public
2065
2122
  */ function getVertexBufferAttribType(vertexBufferType, attrib) {
2066
2123
  const attribName = getVertexAttribName(attrib);
@@ -2074,6 +2131,7 @@ var GPUResourceUsageFlags;
2074
2131
  * @param length - The length of the vertex buffer
2075
2132
  * @param attributes - The vertex attributes
2076
2133
  * @returns The structure type of the vertex buffer
2134
+ *
2077
2135
  * @public
2078
2136
  */ function makeVertexBufferType(length, ...attributes) {
2079
2137
  if (attributes.length === 0) {
@@ -2102,6 +2160,7 @@ var GPUResourceUsageFlags;
2102
2160
  }
2103
2161
  /**
2104
2162
  * Vertex semantic list
2163
+ *
2105
2164
  * @public
2106
2165
  */ const semanticList = function() {
2107
2166
  const list = [];
@@ -2175,5 +2234,5 @@ var GPUResourceUsageFlags;
2175
2234
  }
2176
2235
  }
2177
2236
 
2178
- export { GPUResourceUsageFlags, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, genDefaultName, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, makeVertexBufferType, semanticList, semanticToAttrib };
2237
+ export { GPUResourceUsageFlags, MAX_BINDING_GROUPS, MAX_TEXCOORD_INDEX_COUNT, MAX_VERTEX_ATTRIBUTES, VERTEX_ATTRIB_BLEND_INDICES, VERTEX_ATTRIB_BLEND_WEIGHT, VERTEX_ATTRIB_DIFFUSE, VERTEX_ATTRIB_NORMAL, VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_TANGENT, VERTEX_ATTRIB_TEXCOORD0, VERTEX_ATTRIB_TEXCOORD1, VERTEX_ATTRIB_TEXCOORD2, VERTEX_ATTRIB_TEXCOORD3, VERTEX_ATTRIB_TEXCOORD4, VERTEX_ATTRIB_TEXCOORD5, VERTEX_ATTRIB_TEXCOORD6, VERTEX_ATTRIB_TEXCOORD7, genDefaultName, getVertexAttribByName, getVertexAttribFormat, getVertexAttribName, getVertexAttributeFormat, getVertexAttributeIndex, getVertexBufferAttribType, getVertexBufferAttribTypeBySemantic, getVertexBufferLength, getVertexBufferStride, getVertexFormatComponentCount, getVertexFormatSize, makeVertexBufferType, matchVertexBuffer, semanticList, semanticToAttrib };
2179
2238
  //# sourceMappingURL=gpuobject.js.map
@@ -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, Nullable, Immutable } 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?: Nullable<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?: Nullable<BaseTexture>;\r\n mipmapping?: boolean;\r\n samplerOptions?: Nullable<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: Nullable<VertexSemantic>) {\r\n return name ? vertexAttribNameMap[name] : undefined;\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) {\r\n return vertexAttribNameRevMap[attrib as keyof typeof vertexAttribNameRevMap] as VertexSemantic;\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) {\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 return false;\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) {\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) {\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) {\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(semantic: VertexSemantic, type: DataType, count: number) {\r\n const loc = getVertexAttribByName(semantic);\r\n for (const k in vertexAttribFormatMap) {\r\n const v = vertexAttribFormatMap[k as keyof typeof vertexAttribFormatMap];\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: Immutable<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: Immutable<PBStructTypeInfo>,\r\n semantic: VertexSemantic\r\n) {\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(vertexBufferType: Immutable<PBStructTypeInfo>, attrib: number) {\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: Immutable<VertexAttribFormat[]>) {\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) {\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: Nullable<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: Nullable<string>;\r\n /** name of the default comparison sampler uniform when using WebGPU device */\r\n autoBindSamplerComparison: Nullable<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: Nullable<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?: Nullable<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: Nullable<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: Nullable<(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: Nullable<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: Nullable<Immutable<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?: Nullable<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: Immutable<PBStructTypeInfo>;\r\n set(name: string, value: StructuredValue): void;\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]: Nullable<{ buffer: StructuredBuffer; offset: number }>;\r\n };\r\n readonly indexBuffer: Nullable<IndexBuffer>;\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number): void;\r\n getVertexBuffer(semantic: VertexSemantic): Nullable<StructuredBuffer>;\r\n getVertexBufferInfo(semantic: VertexSemantic): Nullable<VertexBufferInfo>;\r\n getIndexBuffer(): Nullable<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): void;\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(): Nullable<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: Immutable<BindGroupLayout[]>;\r\n readonly type: 'render' | 'compute';\r\n getShaderSource(kind: ShaderKind): Nullable<string>;\r\n getCompileError(): Nullable<string>;\r\n getBindingInfo(name: string): Nullable<BindPointInfo>;\r\n createUniformBuffer(uniform: string): Nullable<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(): Immutable<BindGroupLayout>;\r\n getDynamicOffsets(): Nullable<Immutable<number[]>>;\r\n getGPUId(): string;\r\n getBuffer(name: string, nocreate?: boolean): Nullable<GPUDataBuffer>;\r\n getTexture(name: string): Nullable<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): void;\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number): void;\r\n setTexture(name: string, texture: BaseTexture, sampler?: Nullable<TextureSampler>): void;\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?: Nullable<TextureSampler>\r\n ): void;\r\n setSampler(name: string, sampler: TextureSampler): void;\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","undefined","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":"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"}
@@ -20,10 +20,12 @@ const MAX_GLYPH_COUNT = 1024;
20
20
  /** @internal */ static font = null;
21
21
  /** @internal */ static vertexCache = null;
22
22
  /** @internal */ static colorValue = new Vector4();
23
- /** @internal */ static calculateTextMatrix(device, matrix) {
24
- const viewport = device.getViewport();
25
- const projectionMatrix = Matrix4x4.ortho(0, viewport.width, 0, viewport.height, 1, 100);
26
- const flipMatrix = Matrix4x4.translation(new Vector3(0, viewport.height, 0)).scaleRight(new Vector3(1, -1, 1));
23
+ /** @internal */ static calculateTextMatrix(device, matrix, viewport) {
24
+ const viewportWidth = viewport ? viewport[2] : device.getViewport().width;
25
+ const viewportHeight = viewport ? viewport[3] : device.getViewport().height;
26
+ matrix.identity();
27
+ const projectionMatrix = Matrix4x4.ortho(0, viewportWidth, 0, viewportHeight, 1, 100);
28
+ const flipMatrix = Matrix4x4.translation(new Vector3(0, viewportHeight, 0)).scaleRight(new Vector3(1, -1, 1));
27
29
  Matrix4x4.multiply(projectionMatrix, flipMatrix, matrix);
28
30
  }
29
31
  /**
@@ -31,7 +33,8 @@ const MAX_GLYPH_COUNT = 1024;
31
33
  * @param device - The render device
32
34
  * @param name - The font name
33
35
  */ static setFont(device, name) {
34
- this.font = Font.fetchFont(name, device.getScale()) || Font.fetchFont('12px arial', device.getScale());
36
+ const scale = device.getScaleY();
37
+ this.font = Font.fetchFont(name, scale) || Font.fetchFont('12px arial', scale);
35
38
  }
36
39
  /**
37
40
  * Draw text onto the screen
@@ -40,11 +43,11 @@ const MAX_GLYPH_COUNT = 1024;
40
43
  * @param color - The text color
41
44
  * @param x - X coordinate of the text
42
45
  * @param y - Y coordinate of the text
43
- */ static drawText(device, text, color, x, y) {
46
+ */ static drawText(device, text, color, x, y, viewport) {
44
47
  if (text.length > 0) {
45
48
  device.pushDeviceStates();
46
49
  this.prepareDrawText(device);
47
- this.calculateTextMatrix(device, this.textMatrix);
50
+ this.calculateTextMatrix(device, this.textMatrix, viewport);
48
51
  const colorValue = parseColor(color);
49
52
  this.colorValue.x = colorValue.r;
50
53
  this.colorValue.y = colorValue.g;
@@ -79,6 +82,7 @@ const MAX_GLYPH_COUNT = 1024;
79
82
  let drawn = 0;
80
83
  let atlasIndex = -1;
81
84
  let i = 0;
85
+ const vertexCache = this.vertexCache;
82
86
  for(; i < count; i++){
83
87
  const glyph = this.glyphManager.getGlyphInfo(text[i + start], this.font) || this.glyphManager.getGlyphInfo('?', this.font);
84
88
  if (atlasIndex >= 0 && glyph.atlasIndex !== atlasIndex) {
@@ -89,25 +93,25 @@ const MAX_GLYPH_COUNT = 1024;
89
93
  }
90
94
  atlasIndex = glyph.atlasIndex;
91
95
  const base = (this.textOffset + i) * 16;
92
- this.vertexCache[base + 0] = x;
93
- this.vertexCache[base + 1] = y;
94
- this.vertexCache[base + 2] = glyph.uMin;
95
- this.vertexCache[base + 3] = glyph.vMin;
96
- this.vertexCache[base + 4] = x + glyph.width;
97
- this.vertexCache[base + 5] = y;
98
- this.vertexCache[base + 6] = glyph.uMax;
99
- this.vertexCache[base + 7] = glyph.vMin;
100
- this.vertexCache[base + 8] = x + glyph.width;
101
- this.vertexCache[base + 9] = y + glyph.height;
102
- this.vertexCache[base + 10] = glyph.uMax;
103
- this.vertexCache[base + 11] = glyph.vMax;
104
- this.vertexCache[base + 12] = x;
105
- this.vertexCache[base + 13] = y + glyph.height;
106
- this.vertexCache[base + 14] = glyph.uMin;
107
- this.vertexCache[base + 15] = glyph.vMax;
96
+ vertexCache[base + 0] = x;
97
+ vertexCache[base + 1] = y;
98
+ vertexCache[base + 2] = glyph.uMin;
99
+ vertexCache[base + 3] = glyph.vMin;
100
+ vertexCache[base + 4] = x + glyph.width;
101
+ vertexCache[base + 5] = y;
102
+ vertexCache[base + 6] = glyph.uMax;
103
+ vertexCache[base + 7] = glyph.vMin;
104
+ vertexCache[base + 8] = x + glyph.width;
105
+ vertexCache[base + 9] = y + glyph.height;
106
+ vertexCache[base + 10] = glyph.uMax;
107
+ vertexCache[base + 11] = glyph.vMax;
108
+ vertexCache[base + 12] = x;
109
+ vertexCache[base + 13] = y + glyph.height;
110
+ vertexCache[base + 14] = glyph.uMin;
111
+ vertexCache[base + 15] = glyph.vMax;
108
112
  x += glyph.width;
109
113
  }
110
- this.textVertexBuffer.bufferSubData((this.textOffset + drawn) * 16 * 4, this.vertexCache, (this.textOffset + drawn) * 16, (i - drawn) * 16);
114
+ this.textVertexBuffer.bufferSubData((this.textOffset + drawn) * 16 * 4, vertexCache, (this.textOffset + drawn) * 16, (i - drawn) * 16);
111
115
  this.textBindGroup.setTexture('tex', this.glyphManager.getAtlasTexture(atlasIndex));
112
116
  device.draw('triangle-list', (this.textOffset + drawn) * 6, (i - drawn) * 6);
113
117
  return x;
@@ -115,7 +119,7 @@ const MAX_GLYPH_COUNT = 1024;
115
119
  /** @internal */ static prepareDrawText(device) {
116
120
  if (!this.prepared) {
117
121
  this.prepared = true;
118
- this.font = this.font || Font.fetchFont('16px arial', device.getScale());
122
+ this.font = this.font || Font.fetchFont('12px arial', device.getScaleY());
119
123
  this.glyphManager = new GlyphManager(device, 1024, 1024, 1);
120
124
  this.vertexCache = new Float32Array(this.GLYPH_COUNT * 16);
121
125
  this.textVertexBuffer = device.createInterleavedVertexBuffer([
@@ -174,6 +178,7 @@ const MAX_GLYPH_COUNT = 1024;
174
178
  });
175
179
  }
176
180
  });
181
+ this.textProgram.name = '@DrawText';
177
182
  this.textBindGroup = device.createBindGroup(this.textProgram.bindGroupLayouts[0]);
178
183
  this.textRenderStates = device.createRenderStateSet();
179
184
  this.textRenderStates.useBlendingState().enable(true).setBlendFuncRGB('one', 'inv-src-alpha').setBlendFuncAlpha('zero', 'one');