@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.
- package/dist/base_types.js +19 -79
- package/dist/base_types.js.map +1 -1
- package/dist/builder/ast.js +142 -162
- package/dist/builder/ast.js.map +1 -1
- package/dist/builder/base.js +29 -27
- package/dist/builder/base.js.map +1 -1
- package/dist/builder/builtinfunc.js +61 -7
- package/dist/builder/builtinfunc.js.map +1 -1
- package/dist/builder/constructors.js +3 -1
- package/dist/builder/constructors.js.map +1 -1
- package/dist/builder/errors.js +11 -11
- 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 +62 -58
- package/dist/builder/programbuilder.js.map +1 -1
- package/dist/builder/reflection.js +1 -1
- package/dist/builder/reflection.js.map +1 -1
- package/dist/builder/types.js +76 -75
- package/dist/builder/types.js.map +1 -1
- package/dist/device.js +220 -80
- package/dist/device.js.map +1 -1
- package/dist/gpuobject.js +84 -25
- package/dist/gpuobject.js.map +1 -1
- package/dist/helpers/drawtext.js +30 -25
- 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 +33 -15
- package/dist/helpers/glyphmanager.js.map +1 -1
- package/dist/helpers/textureatlas.js +10 -8
- package/dist/helpers/textureatlas.js.map +1 -1
- package/dist/index.d.ts +465 -394
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/pool.js +69 -31
- package/dist/pool.js.map +1 -1
- package/dist/timer.js +3 -2
- package/dist/timer.js.map +1 -1
- package/dist/uniformdata.js +3 -3
- package/dist/uniformdata.js.map +1 -1
- package/dist/vertexdata.js +29 -3
- package/dist/vertexdata.js.map +1 -1
- package/package.json +80 -65
package/dist/gpuobject.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo, PBPrimitiveType } from './builder/types.js';
|
|
2
2
|
|
|
3
|
-
/** @
|
|
4
|
-
/** @
|
|
5
|
-
/** @
|
|
6
|
-
/** @
|
|
7
|
-
/** @
|
|
8
|
-
/** @
|
|
9
|
-
/** @
|
|
10
|
-
/** @
|
|
11
|
-
/** @
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
14
|
-
/** @
|
|
15
|
-
/** @
|
|
16
|
-
/** @
|
|
17
|
-
/** @
|
|
18
|
-
/** @
|
|
19
|
-
/** @
|
|
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
|
-
|
|
1959
|
-
|
|
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["
|
|
1971
|
-
GPUResourceUsageFlags[GPUResourceUsageFlags["
|
|
1972
|
-
|
|
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
|
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, 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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"}
|
package/dist/helpers/drawtext.js
CHANGED
|
@@ -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
|
|
25
|
-
const
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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,
|
|
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('
|
|
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');
|