@luma.gl/core 9.3.0-alpha.6 → 9.3.0-alpha.9
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/adapter/canvas-surface.d.ts +1 -1
- package/dist/adapter/canvas-surface.d.ts.map +1 -1
- package/dist/adapter/device.d.ts +13 -3
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +73 -6
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.js +1 -1
- package/dist/adapter/resources/command-buffer.d.ts +3 -1
- package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/command-buffer.js +3 -1
- package/dist/adapter/resources/command-buffer.js.map +1 -1
- package/dist/adapter/resources/command-encoder.d.ts +3 -1
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js +3 -1
- package/dist/adapter/resources/command-encoder.js.map +1 -1
- package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
- package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.d.ts +1 -1
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.d.ts +10 -4
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +2 -1
- package/dist/adapter/resources/render-pipeline.js.map +1 -1
- package/dist/adapter/resources/texture-view.d.ts +1 -1
- package/dist/adapter/resources/texture-view.d.ts.map +1 -1
- package/dist/adapter/resources/texture.d.ts +5 -4
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +4 -3
- package/dist/adapter/resources/texture.js.map +1 -1
- package/dist/adapter/types/attachments.d.ts +1 -1
- package/dist/adapter/types/attachments.d.ts.map +1 -1
- package/dist/adapter/types/buffer-layout.d.ts +1 -1
- package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
- package/dist/adapter/types/parameters.d.ts +3 -1
- package/dist/adapter/types/parameters.d.ts.map +1 -1
- package/dist/adapter/types/parameters.js +1 -0
- package/dist/adapter/types/parameters.js.map +1 -1
- package/dist/adapter/types/shader-layout.d.ts +10 -6
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter/types/uniforms.d.ts +6 -0
- package/dist/adapter/types/uniforms.d.ts.map +1 -1
- package/dist/adapter-utils/bind-groups.d.ts +9 -0
- package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
- package/dist/adapter-utils/bind-groups.js +41 -0
- package/dist/adapter-utils/bind-groups.js.map +1 -0
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
- package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
- package/dist/dist.dev.js +983 -223
- package/dist/dist.min.js +5 -5
- package/dist/factories/bind-group-factory.d.ts +20 -0
- package/dist/factories/bind-group-factory.d.ts.map +1 -0
- package/dist/factories/bind-group-factory.js +79 -0
- package/dist/factories/bind-group-factory.js.map +1 -0
- package/dist/factories/core-module-state.d.ts +7 -0
- package/dist/factories/core-module-state.d.ts.map +1 -0
- package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
- package/dist/factories/core-module-state.js.map +1 -0
- package/dist/factories/pipeline-factory.d.ts +54 -0
- package/dist/factories/pipeline-factory.d.ts.map +1 -0
- package/dist/factories/pipeline-factory.js +270 -0
- package/dist/factories/pipeline-factory.js.map +1 -0
- package/dist/factories/shader-factory.d.ts +20 -0
- package/dist/factories/shader-factory.d.ts.map +1 -0
- package/dist/factories/shader-factory.js +84 -0
- package/dist/factories/shader-factory.js.map +1 -0
- package/dist/index.cjs +942 -221
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +22 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -9
- package/dist/index.js.map +1 -1
- package/dist/portable/uniform-block.d.ts +1 -1
- package/dist/portable/uniform-block.d.ts.map +1 -1
- package/dist/portable/uniform-buffer-layout.d.ts +20 -15
- package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
- package/dist/portable/uniform-buffer-layout.js +188 -43
- package/dist/portable/uniform-buffer-layout.js.map +1 -1
- package/dist/portable/uniform-store.d.ts +5 -6
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +6 -3
- package/dist/portable/uniform-store.js.map +1 -1
- package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
- package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
- package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
- package/dist/shadertypes/data-types/data-types.d.ts +31 -12
- package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
- package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
- package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
- package/dist/shadertypes/image-types/image-types.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +32 -2
- package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.js +30 -0
- package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
- package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.d.ts +1 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +4 -3
- package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +5 -1
- package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
- package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-layout.d.ts +1 -1
- package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js +106 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
- package/package.json +2 -2
- package/src/adapter/canvas-surface.ts +1 -1
- package/src/adapter/device.ts +115 -10
- package/src/adapter/resources/command-buffer.ts +3 -1
- package/src/adapter/resources/command-encoder.ts +3 -1
- package/src/adapter/resources/compute-pipeline.ts +2 -2
- package/src/adapter/resources/framebuffer.ts +1 -1
- package/src/adapter/resources/render-pipeline.ts +12 -5
- package/src/adapter/resources/texture-view.ts +1 -1
- package/src/adapter/resources/texture.ts +6 -5
- package/src/adapter/types/attachments.ts +1 -1
- package/src/adapter/types/buffer-layout.ts +1 -1
- package/src/adapter/types/parameters.ts +4 -1
- package/src/adapter/types/shader-layout.ts +15 -9
- package/src/adapter/types/uniforms.ts +12 -0
- package/src/adapter-utils/bind-groups.ts +71 -0
- package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
- package/src/factories/bind-group-factory.ts +139 -0
- package/src/factories/core-module-state.ts +11 -0
- package/src/factories/pipeline-factory.ts +328 -0
- package/src/factories/shader-factory.ts +103 -0
- package/src/index.ts +47 -26
- package/src/portable/uniform-block.ts +1 -1
- package/src/portable/uniform-buffer-layout.ts +269 -62
- package/src/portable/uniform-store.ts +14 -11
- package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
- package/src/shadertypes/data-types/data-types.ts +100 -48
- package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
- package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +76 -11
- package/src/shadertypes/shader-types/shader-types.ts +207 -0
- package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +4 -3
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-formats.ts +14 -2
- package/src/shadertypes/vertex-types/vertex-format-decoder.ts +131 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +183 -0
- package/dist/image-utils/image-types.d.ts.map +0 -1
- package/dist/image-utils/image-types.js.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
- package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
- package/dist/shadertypes/data-types/shader-types.d.ts +0 -43
- package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/shader-types.js.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
- package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
- package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-formats.js.map +0 -1
- package/dist/shadertypes/textures/texture-layout.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-layout.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
- package/src/shadertypes/data-types/shader-types.ts +0 -94
- package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
- package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
- /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
- /package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-layout.js +0 -0
- /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
- /package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +0 -0
- /package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +0 -0
- /package/src/shadertypes/{textures → texture-types}/texture-layout.ts +0 -0
|
@@ -13,7 +13,7 @@ export type PrimitiveDataType = 'u32' | 'i32' | 'f32' | 'f16';
|
|
|
13
13
|
* Signed data types describe signed and unsigned integers as well as floats of varying sizes
|
|
14
14
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
15
15
|
*/
|
|
16
|
-
export type
|
|
16
|
+
export type DataType =
|
|
17
17
|
| 'uint8'
|
|
18
18
|
| 'sint8'
|
|
19
19
|
| 'uint16'
|
|
@@ -23,6 +23,8 @@ export type SignedDataType =
|
|
|
23
23
|
| 'float16'
|
|
24
24
|
| 'float32';
|
|
25
25
|
|
|
26
|
+
export type SignedDataType = DataType;
|
|
27
|
+
|
|
26
28
|
/**
|
|
27
29
|
* Normalized data types describe signed and unsigned integers as well as floats of varying sizes together with normalization behavior
|
|
28
30
|
* @note These formats describe physical memory layouts in vertex and pixel formats, they are not used inside shaders
|
|
@@ -32,65 +34,115 @@ export type SignedDataType =
|
|
|
32
34
|
export type NormalizedDataType = SignedDataType | 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16';
|
|
33
35
|
|
|
34
36
|
/** Returns information about a signed or normalized DataType */
|
|
35
|
-
export type DataTypeInfo = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
export type DataTypeInfo<T extends NormalizedDataType = NormalizedDataType> = {
|
|
38
|
+
/** The corresponding data type without normalization */
|
|
39
|
+
signedType: SignedDataTypeT<T>;
|
|
40
|
+
/** The primitive data type (what the shader sees) */
|
|
41
|
+
primitiveType: PrimitiveDataTypeT<T>;
|
|
42
|
+
/** @type number - Length in bytes of the data type */
|
|
43
|
+
byteLength: DataTypeByteLengthT<T>;
|
|
44
|
+
/** @type boolean - indicating whether the data type is normalized */
|
|
45
|
+
normalized: DataTypeIsNormalizedT<T>;
|
|
46
|
+
/** @type boolean - indicating whether the data type is integer */
|
|
47
|
+
integer: DataTypeIsIntegerT<T>;
|
|
48
|
+
/** @type boolean - indicating whether the data type is signed */
|
|
49
|
+
signed: DataTypeIsSignedT<T>;
|
|
42
50
|
};
|
|
43
51
|
|
|
44
|
-
/**
|
|
45
|
-
export type
|
|
46
|
-
?
|
|
47
|
-
: T extends '
|
|
48
|
-
?
|
|
49
|
-
: T extends 'unorm8'
|
|
50
|
-
?
|
|
51
|
-
: T extends '
|
|
52
|
-
?
|
|
53
|
-
: T extends '
|
|
54
|
-
?
|
|
55
|
-
:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
/** @type the primitive data type seen by the shader */
|
|
53
|
+
export type PrimitiveDataTypeT<T extends NormalizedDataType> = T extends 'float32'
|
|
54
|
+
? 'f32'
|
|
55
|
+
: T extends 'float16'
|
|
56
|
+
? 'f16'
|
|
57
|
+
: T extends 'unorm8' | 'snorm8' | 'unorm16' | 'snorm16'
|
|
58
|
+
? 'f32'
|
|
59
|
+
: T extends 'uint8' | 'uint16' | 'uint32'
|
|
60
|
+
? 'u32'
|
|
61
|
+
: T extends 'sint8' | 'sint16' | 'sint32'
|
|
62
|
+
? 'i32'
|
|
63
|
+
: never;
|
|
64
|
+
|
|
65
|
+
/** @type The signed data type representing a normalized data type */
|
|
66
|
+
export type SignedDataTypeT<T extends NormalizedDataType> = T extends 'unorm8'
|
|
67
|
+
? 'uint8'
|
|
68
|
+
: T extends 'snorm8'
|
|
69
|
+
? 'sint8'
|
|
70
|
+
: T extends 'unorm16'
|
|
71
|
+
? 'uint16'
|
|
72
|
+
: T extends 'snorm16'
|
|
73
|
+
? 'sint16'
|
|
74
|
+
: T extends NormalizedDataType
|
|
75
|
+
? T
|
|
76
|
+
: never;
|
|
77
|
+
|
|
78
|
+
/** @type a number type that is is the length in bytes of the data type */
|
|
79
|
+
export type DataTypeByteLengthT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
80
|
+
| 'uint8'
|
|
81
|
+
| 'sint8'
|
|
82
|
+
| 'unorm8'
|
|
83
|
+
| 'snorm8'
|
|
84
|
+
? 1
|
|
85
|
+
: T extends 'uint16' | 'sint16' | 'unorm16' | 'snorm16' | 'float16'
|
|
86
|
+
? 2
|
|
87
|
+
: T extends 'uint32' | 'sint32' | 'float32'
|
|
88
|
+
? 4
|
|
89
|
+
: never;
|
|
90
|
+
|
|
91
|
+
/** @type a boolean type that is true if the data format is signed */
|
|
92
|
+
export type DataTypeIsSignedT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
93
|
+
| 'sint8'
|
|
94
|
+
| 'sint16'
|
|
95
|
+
| 'sint32'
|
|
96
|
+
? true
|
|
97
|
+
: false;
|
|
70
98
|
|
|
71
|
-
/**
|
|
72
|
-
export type
|
|
73
|
-
?
|
|
99
|
+
/** @type a boolean type that is true if the data format is a normalized format */
|
|
100
|
+
export type DataTypeIsNormalizedT<T extends NormalizedDataType = NormalizedDataType> =
|
|
101
|
+
T extends SignedDataType ? false : true;
|
|
102
|
+
|
|
103
|
+
/** @type a boolean type that is true if the data format is an integer format */
|
|
104
|
+
export type DataTypeIsIntegerT<T extends NormalizedDataType = NormalizedDataType> = T extends
|
|
105
|
+
| 'uint8'
|
|
106
|
+
| 'sint8'
|
|
107
|
+
| 'uint16'
|
|
108
|
+
| 'sint16'
|
|
109
|
+
| 'uint32'
|
|
110
|
+
| 'sint32'
|
|
111
|
+
? true
|
|
112
|
+
: false;
|
|
113
|
+
|
|
114
|
+
/** @type A typed array constructor type appropriate to hold the actual values of a data type (i.e. integers for normalized data types) */
|
|
115
|
+
export type TypedArrayConstructorT<T extends NormalizedDataType> = T extends 'uint8'
|
|
116
|
+
? Uint8ArrayConstructor
|
|
74
117
|
: T extends 'sint8'
|
|
75
|
-
?
|
|
118
|
+
? Int8ArrayConstructor
|
|
76
119
|
: T extends 'unorm8'
|
|
77
|
-
?
|
|
120
|
+
? Uint8ArrayConstructor
|
|
78
121
|
: T extends 'snorm8'
|
|
79
|
-
?
|
|
122
|
+
? Int8ArrayConstructor
|
|
80
123
|
: T extends 'uint16'
|
|
81
|
-
?
|
|
124
|
+
? Uint16ArrayConstructor
|
|
82
125
|
: T extends 'sint16'
|
|
83
|
-
?
|
|
126
|
+
? Int16ArrayConstructor
|
|
84
127
|
: T extends 'unorm16'
|
|
85
|
-
?
|
|
128
|
+
? Uint16ArrayConstructor
|
|
86
129
|
: T extends 'snorm16'
|
|
87
|
-
?
|
|
130
|
+
? Int16ArrayConstructor
|
|
88
131
|
: T extends 'uint32'
|
|
89
|
-
?
|
|
132
|
+
? Uint32ArrayConstructor
|
|
90
133
|
: T extends 'sint32'
|
|
91
|
-
?
|
|
134
|
+
? Int32ArrayConstructor
|
|
92
135
|
: T extends 'float16'
|
|
93
|
-
?
|
|
136
|
+
? Uint16ArrayConstructor
|
|
94
137
|
: T extends 'float32'
|
|
95
|
-
?
|
|
138
|
+
? Float32ArrayConstructor
|
|
96
139
|
: never;
|
|
140
|
+
|
|
141
|
+
/** @type A typed array constructor appropriate to hold the logical values of a data type (i.e. floats for normalized data types) */
|
|
142
|
+
export type NormalizedTypedArrayConstructorT<T extends NormalizedDataType> = T extends
|
|
143
|
+
| 'unorm8'
|
|
144
|
+
| 'snorm8'
|
|
145
|
+
| 'unorm16'
|
|
146
|
+
| 'snorm16'
|
|
147
|
+
? Float32ArrayConstructor
|
|
148
|
+
: TypedArrayConstructorT<T>;
|
|
@@ -15,13 +15,6 @@ export type ExternalImage =
|
|
|
15
15
|
| HTMLCanvasElement
|
|
16
16
|
| OffscreenCanvas;
|
|
17
17
|
|
|
18
|
-
export type ExternalImageData = {
|
|
19
|
-
data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
|
|
20
|
-
byteOffset?: number;
|
|
21
|
-
bytesPerRow?: number;
|
|
22
|
-
rowsPerImage?: number;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
18
|
/** Check if data is an external image */
|
|
26
19
|
export function isExternalImage(data: unknown): data is ExternalImage {
|
|
27
20
|
return (
|
package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts}
RENAMED
|
@@ -2,20 +2,38 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {PrimitiveDataType} from '
|
|
6
|
-
import
|
|
7
|
-
VariableShaderType,
|
|
8
|
-
AttributeShaderType,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
AttributeShaderTypeAlias
|
|
5
|
+
import {type PrimitiveDataType} from '../data-types/data-types';
|
|
6
|
+
import {
|
|
7
|
+
type VariableShaderType,
|
|
8
|
+
type AttributeShaderType,
|
|
9
|
+
type VariableShaderTypeAlias,
|
|
10
|
+
type AttributeShaderTypeAlias
|
|
12
11
|
} from './shader-types';
|
|
13
12
|
|
|
14
|
-
/**
|
|
15
|
-
export
|
|
13
|
+
/** Information extracted from a VariableShaderType constant */
|
|
14
|
+
export type VariableShaderTypeInfo = {
|
|
16
15
|
type: PrimitiveDataType;
|
|
17
16
|
components: number;
|
|
18
|
-
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Information extracted from a AttributeShaderType constant */
|
|
20
|
+
export type AttributeShaderTypeInfo = {
|
|
21
|
+
/** WGSL-style primitive data type, f32, i32, u32 */
|
|
22
|
+
primitiveType: PrimitiveDataType;
|
|
23
|
+
/** Whether this is a normalized integer (that must be used as float) */
|
|
24
|
+
components: 1 | 2 | 3 | 4;
|
|
25
|
+
/** Length in bytes of the data for one vertex */
|
|
26
|
+
byteLength?: number;
|
|
27
|
+
/** Whether this is for integer or float vert */
|
|
28
|
+
integer: boolean;
|
|
29
|
+
/** Whether this data type is signed */
|
|
30
|
+
signed: boolean;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** Split a uniform type string into type and components */
|
|
34
|
+
export function getVariableShaderTypeInfo(
|
|
35
|
+
format: VariableShaderType | VariableShaderTypeAlias
|
|
36
|
+
): VariableShaderTypeInfo {
|
|
19
37
|
const resolvedFormat = resolveVariableShaderTypeAlias(format);
|
|
20
38
|
const decoded = UNIFORM_FORMATS[resolvedFormat];
|
|
21
39
|
if (!decoded) {
|
|
@@ -47,6 +65,39 @@ export function getAttributeShaderTypeInfo(
|
|
|
47
65
|
};
|
|
48
66
|
}
|
|
49
67
|
|
|
68
|
+
export class ShaderTypeDecoder {
|
|
69
|
+
getVariableShaderTypeInfo(
|
|
70
|
+
format: VariableShaderType | VariableShaderTypeAlias
|
|
71
|
+
): VariableShaderTypeInfo {
|
|
72
|
+
return getVariableShaderTypeInfo(format);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
getAttributeShaderTypeInfo(
|
|
76
|
+
attributeType: AttributeShaderType | AttributeShaderTypeAlias
|
|
77
|
+
): AttributeShaderTypeInfo {
|
|
78
|
+
return getAttributeShaderTypeInfo(attributeType);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
makeShaderAttributeType(
|
|
82
|
+
primitiveType: PrimitiveDataType,
|
|
83
|
+
components: 1 | 2 | 3 | 4
|
|
84
|
+
): AttributeShaderType {
|
|
85
|
+
return makeShaderAttributeType(primitiveType, components);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
resolveAttributeShaderTypeAlias(
|
|
89
|
+
alias: AttributeShaderTypeAlias | AttributeShaderType
|
|
90
|
+
): AttributeShaderType {
|
|
91
|
+
return resolveAttributeShaderTypeAlias(alias);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
resolveVariableShaderTypeAlias(
|
|
95
|
+
alias: VariableShaderTypeAlias | VariableShaderType
|
|
96
|
+
): VariableShaderType {
|
|
97
|
+
return resolveVariableShaderTypeAlias(alias);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
50
101
|
export function makeShaderAttributeType(
|
|
51
102
|
primitiveType: PrimitiveDataType,
|
|
52
103
|
components: 1 | 2 | 3 | 4
|
|
@@ -66,6 +117,9 @@ export function resolveVariableShaderTypeAlias(
|
|
|
66
117
|
return WGSL_VARIABLE_TYPE_ALIAS_MAP[alias as VariableShaderTypeAlias] || alias;
|
|
67
118
|
}
|
|
68
119
|
|
|
120
|
+
/** Decoder for luma.gl shader types */
|
|
121
|
+
export const shaderTypeDecoder = new ShaderTypeDecoder();
|
|
122
|
+
|
|
69
123
|
// TABLES
|
|
70
124
|
|
|
71
125
|
const PRIMITIVE_TYPE_SIZES: Record<PrimitiveDataType, 2 | 4> = {
|
|
@@ -177,7 +231,18 @@ export const WGSL_ATTRIBUTE_TYPE_ALIAS_MAP: Record<AttributeShaderTypeAlias, Att
|
|
|
177
231
|
|
|
178
232
|
/** @todo These tables are quite big, consider parsing alias strings instead */
|
|
179
233
|
export const WGSL_VARIABLE_TYPE_ALIAS_MAP: Record<VariableShaderTypeAlias, VariableShaderType> = {
|
|
180
|
-
|
|
234
|
+
vec2i: 'vec2<i32>',
|
|
235
|
+
vec3i: 'vec3<i32>',
|
|
236
|
+
vec4i: 'vec4<i32>',
|
|
237
|
+
vec2u: 'vec2<u32>',
|
|
238
|
+
vec3u: 'vec3<u32>',
|
|
239
|
+
vec4u: 'vec4<u32>',
|
|
240
|
+
vec2f: 'vec2<f32>',
|
|
241
|
+
vec3f: 'vec3<f32>',
|
|
242
|
+
vec4f: 'vec4<f32>',
|
|
243
|
+
vec2h: 'vec2<f16>',
|
|
244
|
+
vec3h: 'vec3<f16>',
|
|
245
|
+
vec4h: 'vec4<f16>',
|
|
181
246
|
mat2x2f: 'mat2x2<f32>',
|
|
182
247
|
mat2x3f: 'mat2x3<f32>',
|
|
183
248
|
mat2x4f: 'mat2x4<f32>',
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {PrimitiveDataType} from '../data-types/data-types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @type the type of an attribute as defined in the shader source code.
|
|
9
|
+
* @note This is a subset of shader variable types
|
|
10
|
+
* @note Buffers with various `VertexFormat`s can be supplied for each type, GPU will convert them at runtime/
|
|
11
|
+
*/
|
|
12
|
+
export type AttributeShaderType =
|
|
13
|
+
| 'i32'
|
|
14
|
+
| 'u32'
|
|
15
|
+
| 'f32'
|
|
16
|
+
| 'f16'
|
|
17
|
+
| `vec2<${PrimitiveDataType}>`
|
|
18
|
+
| `vec3<${PrimitiveDataType}>`
|
|
19
|
+
| `vec4<${PrimitiveDataType}>`;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @type Describes the type of a variable that can declared in shader source code.
|
|
23
|
+
* @note Uniforms can be declared using these types
|
|
24
|
+
* @note Uniforms can be of a wider range of types than attributes.
|
|
25
|
+
* @note to WebGL users: "bindings" (textures, samplers, and uniform buffers) are considered "bindings", not shader variables/uniforms
|
|
26
|
+
*/
|
|
27
|
+
export type VariableShaderType =
|
|
28
|
+
| 'i32'
|
|
29
|
+
| 'u32'
|
|
30
|
+
| 'f32'
|
|
31
|
+
| 'f16'
|
|
32
|
+
| `vec2<${PrimitiveDataType}>`
|
|
33
|
+
| `vec3<${PrimitiveDataType}>`
|
|
34
|
+
| `vec4<${PrimitiveDataType}>`
|
|
35
|
+
| `mat2x2<${PrimitiveDataType}>`
|
|
36
|
+
| `mat2x3<${PrimitiveDataType}>`
|
|
37
|
+
| `mat2x4<${PrimitiveDataType}>`
|
|
38
|
+
| `mat3x2<${PrimitiveDataType}>`
|
|
39
|
+
| `mat3x3<${PrimitiveDataType}>`
|
|
40
|
+
| `mat3x4<${PrimitiveDataType}>`
|
|
41
|
+
| `mat4x2<${PrimitiveDataType}>`
|
|
42
|
+
| `mat4x3<${PrimitiveDataType}>`
|
|
43
|
+
| `mat4x4<${PrimitiveDataType}>`;
|
|
44
|
+
|
|
45
|
+
/** @type A composite shader type can include structs and arrays, recursively */
|
|
46
|
+
export type CompositeShaderType = VariableShaderType | StructShaderType | ArrayShaderType;
|
|
47
|
+
|
|
48
|
+
/** @type Represents a struct in WGSL */
|
|
49
|
+
export type StructShaderType = {
|
|
50
|
+
[memberName: string]: CompositeShaderType;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/** @type Represents an array in WGSL */
|
|
54
|
+
export type ArrayShaderType = readonly [type: CompositeShaderType, length: number];
|
|
55
|
+
|
|
56
|
+
// Alias types
|
|
57
|
+
|
|
58
|
+
/** @type Shorthand type aliases recognized by WGSL */
|
|
59
|
+
export type AttributeShaderTypeAlias = keyof AttributeShaderTypeAliasMap;
|
|
60
|
+
|
|
61
|
+
/** @note work around for lack of type narrowing in conditional generics */
|
|
62
|
+
// prettier-ignore
|
|
63
|
+
type AttributeShaderTypeAliasMap = {
|
|
64
|
+
vec2f: 'vec2<f32>';
|
|
65
|
+
vec3f: 'vec3<f32>';
|
|
66
|
+
vec4f: 'vec4<f32>';
|
|
67
|
+
vec2i: 'vec2<i32>';
|
|
68
|
+
vec3i: 'vec3<i32>';
|
|
69
|
+
vec4i: 'vec4<i32>';
|
|
70
|
+
vec2u: 'vec2<u32>';
|
|
71
|
+
vec3u: 'vec3<u32>';
|
|
72
|
+
vec4u: 'vec4<u32>';
|
|
73
|
+
vec2h: 'vec2<f16>';
|
|
74
|
+
vec3h: 'vec3<f16>';
|
|
75
|
+
vec4h: 'vec4<f16>';
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/** @type Shorthand type aliases recognized by WGSL */
|
|
79
|
+
export type VariableShaderTypeAlias = keyof VariableShaderTypeAliasMap;
|
|
80
|
+
|
|
81
|
+
/** @note work around for lack of type narrowing in conditional generics */
|
|
82
|
+
// prettier-ignore
|
|
83
|
+
type VariableShaderTypeAliasMap = {
|
|
84
|
+
// Vector aliases
|
|
85
|
+
vec2f: 'vec2<f32>';
|
|
86
|
+
vec3f: 'vec3<f32>';
|
|
87
|
+
vec4f: 'vec4<f32>';
|
|
88
|
+
vec2i: 'vec2<i32>';
|
|
89
|
+
vec3i: 'vec3<i32>';
|
|
90
|
+
vec4i: 'vec4<i32>';
|
|
91
|
+
vec2u: 'vec2<u32>';
|
|
92
|
+
vec3u: 'vec3<u32>';
|
|
93
|
+
vec4u: 'vec4<u32>';
|
|
94
|
+
vec2h: 'vec2<f16>';
|
|
95
|
+
vec3h: 'vec3<f16>';
|
|
96
|
+
vec4h: 'vec4<f16>';
|
|
97
|
+
|
|
98
|
+
// Matrix aliases
|
|
99
|
+
mat2x2f: 'mat2x2<f32>';
|
|
100
|
+
mat2x3f: 'mat2x3<f32>';
|
|
101
|
+
mat2x4f: 'mat2x4<f32>';
|
|
102
|
+
mat3x2f: 'mat3x2<f32>';
|
|
103
|
+
mat3x3f: 'mat3x3<f32>';
|
|
104
|
+
mat3x4f: 'mat3x4<f32>';
|
|
105
|
+
mat4x2f: 'mat4x2<f32>';
|
|
106
|
+
mat4x3f: 'mat4x3<f32>';
|
|
107
|
+
mat4x4f: 'mat4x4<f32>';
|
|
108
|
+
|
|
109
|
+
mat2x2i: 'mat2x2<i32>';
|
|
110
|
+
mat2x3i: 'mat2x3<i32>';
|
|
111
|
+
mat2x4i: 'mat2x4<i32>';
|
|
112
|
+
mat3x2i: 'mat3x2<i32>';
|
|
113
|
+
mat3x3i: 'mat3x3<i32>';
|
|
114
|
+
mat3x4i: 'mat3x4<i32>';
|
|
115
|
+
mat4x2i: 'mat4x2<i32>';
|
|
116
|
+
mat4x3i: 'mat4x3<i32>';
|
|
117
|
+
mat4x4i: 'mat4x4<i32>';
|
|
118
|
+
|
|
119
|
+
mat2x2u: 'mat2x2<u32>';
|
|
120
|
+
mat2x3u: 'mat2x3<u32>';
|
|
121
|
+
mat2x4u: 'mat2x4<u32>';
|
|
122
|
+
mat3x2u: 'mat3x2<u32>';
|
|
123
|
+
mat3x3u: 'mat3x3<u32>';
|
|
124
|
+
mat3x4u: 'mat3x4<u32>';
|
|
125
|
+
mat4x2u: 'mat4x2<u32>';
|
|
126
|
+
mat4x3u: 'mat4x3<u32>';
|
|
127
|
+
mat4x4u: 'mat4x4<u32>';
|
|
128
|
+
|
|
129
|
+
mat2x2h: 'mat2x2<f16>';
|
|
130
|
+
mat2x3h: 'mat2x3<f16>';
|
|
131
|
+
mat2x4h: 'mat2x4<f16>';
|
|
132
|
+
mat3x2h: 'mat3x2<f16>';
|
|
133
|
+
mat3x3h: 'mat3x3<f16>';
|
|
134
|
+
mat3x4h: 'mat3x4<f16>';
|
|
135
|
+
mat4x2h: 'mat4x2<f16>';
|
|
136
|
+
mat4x3h: 'mat4x3<f16>';
|
|
137
|
+
mat4x4h: 'mat4x4<f16>';
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// GENERICS
|
|
141
|
+
|
|
142
|
+
/** @type The unaliased type */
|
|
143
|
+
export type AttributeShaderTypeT<T extends AttributeShaderTypeAlias | AttributeShaderType> =
|
|
144
|
+
T extends AttributeShaderTypeAlias ? AttributeShaderTypeAliasMap[T] : T;
|
|
145
|
+
|
|
146
|
+
/** @type The unaliased type */
|
|
147
|
+
export type VariableShaderTypeT<T extends VariableShaderType | keyof VariableShaderTypeAliasMap> =
|
|
148
|
+
T extends VariableShaderTypeAlias ? VariableShaderTypeAliasMap[T] : T;
|
|
149
|
+
|
|
150
|
+
// HELPER TYPES
|
|
151
|
+
|
|
152
|
+
// prettier-ignore
|
|
153
|
+
type TypeOfAliasSuffix<T extends string> =
|
|
154
|
+
T extends 'f' ? 'f32' :
|
|
155
|
+
T extends 'i' ? 'i32' :
|
|
156
|
+
T extends 'u' ? 'u32' :
|
|
157
|
+
T extends 'h' ? 'f16' :
|
|
158
|
+
never;
|
|
159
|
+
|
|
160
|
+
// prettier-ignore
|
|
161
|
+
export type AttributeShaderTypeAliasT<T extends AttributeShaderTypeAlias> =
|
|
162
|
+
T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` :
|
|
163
|
+
T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` :
|
|
164
|
+
T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` :
|
|
165
|
+
never;
|
|
166
|
+
|
|
167
|
+
// prettier-ignore
|
|
168
|
+
export type VariableShaderTypeAliasT<T extends VariableShaderTypeAlias> =
|
|
169
|
+
T extends `vec2${infer S}` ? `vec2<${TypeOfAliasSuffix<S>}>` :
|
|
170
|
+
T extends `vec3${infer S}` ? `vec3<${TypeOfAliasSuffix<S>}>` :
|
|
171
|
+
T extends `vec4${infer S}` ? `vec4<${TypeOfAliasSuffix<S>}>` :
|
|
172
|
+
T extends `mat2x2${infer S}` ? `mat2x2<${TypeOfAliasSuffix<S>}>` :
|
|
173
|
+
T extends `mat2x3${infer S}` ? `mat2x3<${TypeOfAliasSuffix<S>}>` :
|
|
174
|
+
T extends `mat2x4${infer S}` ? `mat2x4<${TypeOfAliasSuffix<S>}>` :
|
|
175
|
+
T extends `mat3x2${infer S}` ? `mat3x2<${TypeOfAliasSuffix<S>}>` :
|
|
176
|
+
T extends `mat3x3${infer S}` ? `mat3x3<${TypeOfAliasSuffix<S>}>` :
|
|
177
|
+
T extends `mat3x4${infer S}` ? `mat3x4<${TypeOfAliasSuffix<S>}>` :
|
|
178
|
+
T extends `mat4x2${infer S}` ? `mat4x2<${TypeOfAliasSuffix<S>}>` :
|
|
179
|
+
T extends `mat4x3${infer S}` ? `mat4x3<${TypeOfAliasSuffix<S>}>` :
|
|
180
|
+
T extends `mat4x4${infer S}` ? `mat4x4<${TypeOfAliasSuffix<S>}>` :
|
|
181
|
+
never;
|
|
182
|
+
|
|
183
|
+
// : T extends `vec2<${infer S}>`
|
|
184
|
+
// ? `vec2<${S}>`
|
|
185
|
+
// : T extends `vec3<${infer S}>`
|
|
186
|
+
// ? `vec3<${S}>`
|
|
187
|
+
// : T extends `vec4<${infer S}>`
|
|
188
|
+
// ? `vec4<${S}>`
|
|
189
|
+
// : T extends `mat2x2<${infer S}>`
|
|
190
|
+
// ? `mat2x2<${S}>`
|
|
191
|
+
// : T extends `mat2x3<${infer S}>`
|
|
192
|
+
// ? `mat2x3<${S}>`
|
|
193
|
+
// : T extends `mat2x4<${infer S}>`
|
|
194
|
+
// ? `mat2x4<${S}>`
|
|
195
|
+
// : T extends `mat3x2<${infer S}>`
|
|
196
|
+
// ? `mat3x2<${S}>`
|
|
197
|
+
// : T extends `mat3x3<${infer S}>`
|
|
198
|
+
// ? `mat3x3<${S}>`
|
|
199
|
+
// : T extends `mat3x4<${infer S}>`
|
|
200
|
+
// ? `mat3x4<${S}>`
|
|
201
|
+
// : T extends `mat4x2<${infer S}>`
|
|
202
|
+
// ? `mat4x2<${S}>`
|
|
203
|
+
// : T extends `mat4x3<${infer S}>`
|
|
204
|
+
// ? `mat4x3<${S}>`
|
|
205
|
+
// : T extends `mat4x4<${infer S}>`
|
|
206
|
+
// ? `mat4x4<${S}>`
|
|
207
|
+
// : never;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {NormalizedDataType} from '../data-types/data-types';
|
|
6
|
-
import {
|
|
6
|
+
import {dataTypeDecoder} from '../data-types/data-type-decoder';
|
|
7
7
|
import type {
|
|
8
8
|
TextureFormat,
|
|
9
9
|
TextureFormatCompressed,
|
|
@@ -72,6 +72,7 @@ export class TextureFormatDecoder {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
/** Decoder for luma.gl texture types */
|
|
75
76
|
export const textureFormatDecoder = new TextureFormatDecoder();
|
|
76
77
|
|
|
77
78
|
// HELPERS - MEMORY LAYOUT
|
|
@@ -163,11 +164,11 @@ export function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
// Fill in missing information that can be derived from the format string
|
|
166
|
-
const matches = RGB_FORMAT_REGEX.exec(format as string);
|
|
167
|
+
const matches = !formatInfo.packed ? RGB_FORMAT_REGEX.exec(format as string) : null;
|
|
167
168
|
if (matches) {
|
|
168
169
|
const [, channels, length, type, srgb, suffix] = matches;
|
|
169
170
|
const dataType = `${type}${length}` as NormalizedDataType;
|
|
170
|
-
const decodedType = getDataTypeInfo(dataType);
|
|
171
|
+
const decodedType = dataTypeDecoder.getDataTypeInfo(dataType);
|
|
171
172
|
const bits = decodedType.byteLength * 8;
|
|
172
173
|
const components = (channels?.length ?? 1) as 1 | 2 | 3 | 4;
|
|
173
174
|
const bitsPerChannel: [number, number, number, number] = [
|
|
@@ -8,54 +8,8 @@ import {
|
|
|
8
8
|
type TextureFormatCompressed
|
|
9
9
|
} from './texture-formats';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export type TextureFormatTypedArray<T extends TextureFormat> = DataTypeArray<
|
|
14
|
-
TextureFormatDataType<T>
|
|
15
|
-
>;
|
|
16
|
-
|
|
17
|
-
export type TextureFormatNormalizedTypedArray<T extends TextureFormat> = NormalizedDataTypeArray<
|
|
18
|
-
TextureFormatDataType<T>
|
|
19
|
-
>;
|
|
20
|
-
|
|
21
|
-
/** A numeric array of length matching the number of components in the texture format */
|
|
22
|
-
export type TextureFormatPixel<T extends TextureFormat> =
|
|
23
|
-
TextureFormatPackedComponents<T> extends 1
|
|
24
|
-
? [number]
|
|
25
|
-
: TextureFormatPackedComponents<T> extends 2
|
|
26
|
-
? [number, number]
|
|
27
|
-
: TextureFormatPackedComponents<T> extends 3
|
|
28
|
-
? [number, number, number]
|
|
29
|
-
: TextureFormatPackedComponents<T> extends 4
|
|
30
|
-
? [number, number, number, number]
|
|
31
|
-
: never;
|
|
32
|
-
|
|
33
|
-
/** @note packed formats have only one component. Use TextureFormatPackedComponents */
|
|
34
|
-
export type TextureFormatComponents<T extends TextureFormat> = T extends
|
|
35
|
-
| TextureFormatR
|
|
36
|
-
| TextureFormatPackedRGB
|
|
37
|
-
| TextureFormatPackedRGBA
|
|
38
|
-
? 1
|
|
39
|
-
: T extends TextureFormatRG
|
|
40
|
-
? 2
|
|
41
|
-
: T extends TextureFormatRGB
|
|
42
|
-
? 3
|
|
43
|
-
: T extends TextureFormatRGBA
|
|
44
|
-
? 4
|
|
45
|
-
: never;
|
|
46
|
-
|
|
47
|
-
export type TextureFormatPackedComponents<T extends TextureFormat> = T extends TextureFormatR
|
|
48
|
-
? 1
|
|
49
|
-
: T extends TextureFormatRG
|
|
50
|
-
? 2
|
|
51
|
-
: T extends TextureFormatRGB | TextureFormatPackedRGB
|
|
52
|
-
? 3
|
|
53
|
-
: T extends TextureFormatRGBA | TextureFormatPackedRGBA
|
|
54
|
-
? 4
|
|
55
|
-
: never;
|
|
56
|
-
|
|
57
|
-
/** Get the data type for a texture format */
|
|
58
|
-
export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFormatUint8
|
|
11
|
+
/** @type data type for a texture format */
|
|
12
|
+
export type TextureFormatDataTypeT<T extends TextureFormat> = T extends TextureFormatUint8
|
|
59
13
|
? 'uint8'
|
|
60
14
|
: T extends TextureFormatSint8
|
|
61
15
|
? 'sint8'
|
|
@@ -89,6 +43,46 @@ export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFo
|
|
|
89
43
|
? 'uint32'
|
|
90
44
|
: never;
|
|
91
45
|
|
|
46
|
+
/** @type A numeric array of length matching the number of components in the texture format */
|
|
47
|
+
export type TextureFormatPixelT<T extends TextureFormat> =
|
|
48
|
+
TextureFormatPackedComponentsT<T> extends 1
|
|
49
|
+
? [number]
|
|
50
|
+
: TextureFormatPackedComponentsT<T> extends 2
|
|
51
|
+
? [number, number]
|
|
52
|
+
: TextureFormatPackedComponentsT<T> extends 3
|
|
53
|
+
? [number, number, number]
|
|
54
|
+
: TextureFormatPackedComponentsT<T> extends 4
|
|
55
|
+
? [number, number, number, number]
|
|
56
|
+
: never;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @type number - the number of components in a texture format
|
|
60
|
+
* @note packed formats have only one component. Use TextureFormatPackedComponentsT
|
|
61
|
+
*/
|
|
62
|
+
export type TextureFormatComponentsT<T extends TextureFormat> = T extends
|
|
63
|
+
| TextureFormatR
|
|
64
|
+
| TextureFormatPackedRGB
|
|
65
|
+
| TextureFormatPackedRGBA
|
|
66
|
+
? 1
|
|
67
|
+
: T extends TextureFormatRG
|
|
68
|
+
? 2
|
|
69
|
+
: T extends TextureFormatRGB
|
|
70
|
+
? 3
|
|
71
|
+
: T extends TextureFormatRGBA
|
|
72
|
+
? 4
|
|
73
|
+
: never;
|
|
74
|
+
|
|
75
|
+
/** @type number - the number of components in a packed texture format */
|
|
76
|
+
export type TextureFormatPackedComponentsT<T extends TextureFormat> = T extends TextureFormatR
|
|
77
|
+
? 1
|
|
78
|
+
: T extends TextureFormatRG
|
|
79
|
+
? 2
|
|
80
|
+
: T extends TextureFormatRGB | TextureFormatPackedRGB
|
|
81
|
+
? 3
|
|
82
|
+
: T extends TextureFormatRGBA | TextureFormatPackedRGBA
|
|
83
|
+
? 4
|
|
84
|
+
: never;
|
|
85
|
+
|
|
92
86
|
// Component groups
|
|
93
87
|
|
|
94
88
|
type TextureFormatR =
|