@luma.gl/core 9.2.6 → 9.3.0-alpha.11
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-context.d.ts +6 -162
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +5 -419
- package/dist/adapter/canvas-context.js.map +1 -1
- package/dist/adapter/canvas-observer.d.ts +32 -0
- package/dist/adapter/canvas-observer.d.ts.map +1 -0
- package/dist/adapter/canvas-observer.js +90 -0
- package/dist/adapter/canvas-observer.js.map +1 -0
- package/dist/adapter/canvas-surface.d.ts +150 -0
- package/dist/adapter/canvas-surface.d.ts.map +1 -0
- package/dist/adapter/canvas-surface.js +392 -0
- package/dist/adapter/canvas-surface.js.map +1 -0
- package/dist/adapter/device.d.ts +81 -16
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +193 -11
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.d.ts.map +1 -1
- package/dist/adapter/luma.js +2 -1
- package/dist/adapter/luma.js.map +1 -1
- package/dist/adapter/presentation-context.d.ts +11 -0
- package/dist/adapter/presentation-context.d.ts.map +1 -0
- package/dist/adapter/presentation-context.js +12 -0
- package/dist/adapter/presentation-context.js.map +1 -0
- package/dist/adapter/resources/buffer.d.ts +1 -1
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +14 -6
- package/dist/adapter/resources/buffer.js.map +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 +30 -7
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js +68 -2
- 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/fence.d.ts +16 -0
- package/dist/adapter/resources/fence.d.ts.map +1 -0
- package/dist/adapter/resources/fence.js +17 -0
- package/dist/adapter/resources/fence.js.map +1 -0
- package/dist/adapter/resources/framebuffer.d.ts +1 -1
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.js +15 -12
- package/dist/adapter/resources/framebuffer.js.map +1 -1
- package/dist/adapter/resources/query-set.d.ts +17 -1
- package/dist/adapter/resources/query-set.d.ts.map +1 -1
- package/dist/adapter/resources/query-set.js.map +1 -1
- package/dist/adapter/resources/render-pipeline.d.ts +28 -10
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +21 -2
- package/dist/adapter/resources/render-pipeline.js.map +1 -1
- package/dist/adapter/resources/resource.d.ts +13 -0
- package/dist/adapter/resources/resource.d.ts.map +1 -1
- package/dist/adapter/resources/resource.js +243 -14
- package/dist/adapter/resources/resource.js.map +1 -1
- package/dist/adapter/resources/shader.js +27 -25
- package/dist/adapter/resources/shader.js.map +1 -1
- package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
- package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
- package/dist/adapter/resources/shared-render-pipeline.js +25 -0
- package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
- 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 +168 -28
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +284 -25
- 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/format-compiler-log.d.ts.map +1 -1
- package/dist/adapter-utils/format-compiler-log.js +23 -15
- package/dist/adapter-utils/format-compiler-log.js.map +1 -1
- 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 +2734 -644
- package/dist/dist.min.js +10 -9
- 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 +88 -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 +2447 -534
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +30 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -1
- package/dist/portable/shader-block-writer.d.ts +51 -0
- package/dist/portable/shader-block-writer.d.ts.map +1 -0
- package/dist/portable/shader-block-writer.js +185 -0
- package/dist/portable/shader-block-writer.js.map +1 -0
- package/dist/portable/uniform-block.d.ts +1 -1
- package/dist/portable/uniform-block.d.ts.map +1 -1
- package/dist/portable/uniform-store.d.ts +55 -24
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +73 -25
- 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/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.js +4 -3
- package/dist/shadertypes/data-types/decode-data-types.js.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-block-layout.d.ts +72 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
- package/dist/shadertypes/shader-types/shader-block-layout.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} +43 -4
- 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/{textures → texture-types}/pixel-utils.js +4 -4
- package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +110 -38
- 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/{textures → texture-types}/texture-format-table.js +12 -11
- package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
- 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/texture-types/texture-layout.d.ts +5 -0
- package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.js +41 -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 +144 -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/dist/utils/array-equal.d.ts +1 -1
- package/dist/utils/array-equal.d.ts.map +1 -1
- package/dist/utils/array-equal.js +15 -9
- package/dist/utils/array-equal.js.map +1 -1
- package/dist/utils/assert.d.ts +5 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +17 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/stats-manager.d.ts.map +1 -1
- package/dist/utils/stats-manager.js +61 -1
- package/dist/utils/stats-manager.js.map +1 -1
- package/package.json +6 -6
- package/src/adapter/canvas-context.ts +7 -556
- package/src/adapter/canvas-observer.ts +130 -0
- package/src/adapter/canvas-surface.ts +521 -0
- package/src/adapter/device.ts +311 -25
- package/src/adapter/luma.ts +1 -0
- package/src/adapter/presentation-context.ts +16 -0
- package/src/adapter/resources/buffer.ts +13 -5
- package/src/adapter/resources/command-buffer.ts +4 -2
- package/src/adapter/resources/command-encoder.ts +101 -10
- package/src/adapter/resources/compute-pipeline.ts +2 -2
- package/src/adapter/resources/fence.ts +32 -0
- package/src/adapter/resources/framebuffer.ts +16 -13
- package/src/adapter/resources/query-set.ts +17 -1
- package/src/adapter/resources/render-pipeline.ts +52 -16
- package/src/adapter/resources/resource.ts +289 -14
- package/src/adapter/resources/shader.ts +28 -28
- package/src/adapter/resources/shared-render-pipeline.ts +40 -0
- package/src/adapter/resources/texture-view.ts +1 -1
- package/src/adapter/resources/texture.ts +427 -49
- 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/format-compiler-log.ts +23 -15
- package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
- package/src/factories/bind-group-factory.ts +157 -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 +70 -26
- package/src/portable/shader-block-writer.ts +254 -0
- package/src/portable/uniform-block.ts +1 -1
- package/src/portable/uniform-store.ts +98 -40
- package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
- package/src/shadertypes/data-types/data-types.ts +100 -48
- package/src/shadertypes/data-types/decode-data-types.ts +4 -3
- package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
- package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
- package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
- package/src/shadertypes/shader-types/shader-types.ts +207 -0
- package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
- package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +167 -46
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +12 -11
- package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
- package/src/shadertypes/texture-types/texture-layout.ts +60 -0
- package/src/shadertypes/vertex-types/vertex-format-decoder.ts +175 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +196 -0
- package/src/utils/array-equal.ts +21 -9
- package/src/utils/assert.ts +18 -0
- package/src/utils/stats-manager.ts +76 -2
- package/dist/image-utils/image-types.d.ts.map +0 -1
- package/dist/image-utils/image-types.js.map +0 -1
- package/dist/portable/uniform-buffer-layout.d.ts +0 -28
- package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
- package/dist/portable/uniform-buffer-layout.js +0 -96
- package/dist/portable/uniform-buffer-layout.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 -45
- 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 +0 -18
- 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/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/portable/uniform-buffer-layout.ts +0 -118
- package/src/shadertypes/data-types/shader-types.ts +0 -87
- 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}/texture-format-generics.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
- /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
|
@@ -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 =
|
|
@@ -24,6 +24,7 @@ const float32_renderable: TextureFeature = 'float32-renderable-webgl';
|
|
|
24
24
|
const float16_renderable: TextureFeature = 'float16-renderable-webgl';
|
|
25
25
|
const rgb9e5ufloat_renderable: TextureFeature = 'rgb9e5ufloat-renderable-webgl';
|
|
26
26
|
const snorm8_renderable: TextureFeature = 'snorm8-renderable-webgl';
|
|
27
|
+
const norm16_webgl: TextureFeature = 'norm16-webgl';
|
|
27
28
|
const norm16_renderable: TextureFeature = 'norm16-renderable-webgl';
|
|
28
29
|
const snorm16_renderable: TextureFeature = 'snorm16-renderable-webgl';
|
|
29
30
|
|
|
@@ -67,7 +68,7 @@ export function getTextureFormatTable(): Readonly<Record<TextureFormat, TextureF
|
|
|
67
68
|
return TEXTURE_FORMAT_TABLE;
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
//
|
|
71
|
+
// biome-ignore format: preserve layout
|
|
71
72
|
const TEXTURE_FORMAT_COLOR_DEPTH_TABLE: Readonly<Record<TextureFormatColorUncompressed | TextureFormatDepthStencil, TextureFormatDefinition>> = {
|
|
72
73
|
// 8-bit formats
|
|
73
74
|
'r8unorm': {},
|
|
@@ -93,15 +94,15 @@ const TEXTURE_FORMAT_COLOR_DEPTH_TABLE: Readonly<Record<TextureFormatColorUncomp
|
|
|
93
94
|
'bgra8unorm-srgb': {},
|
|
94
95
|
|
|
95
96
|
|
|
96
|
-
'r16unorm': {f: norm16_renderable},
|
|
97
|
-
'rg16unorm': {render: norm16_renderable},
|
|
98
|
-
'rgb16unorm-webgl': {f:
|
|
99
|
-
'rgba16unorm': {render: norm16_renderable},
|
|
97
|
+
'r16unorm': {f: norm16_webgl, render: norm16_renderable},
|
|
98
|
+
'rg16unorm': {f: norm16_webgl, render: norm16_renderable},
|
|
99
|
+
'rgb16unorm-webgl': {f: norm16_webgl, render: false}, // rgb not renderable
|
|
100
|
+
'rgba16unorm': {f: norm16_webgl, render: norm16_renderable},
|
|
100
101
|
|
|
101
|
-
'r16snorm': {f: snorm16_renderable},
|
|
102
|
-
'rg16snorm': {render: snorm16_renderable},
|
|
103
|
-
'rgb16snorm-webgl': {f:
|
|
104
|
-
'rgba16snorm': {render: snorm16_renderable},
|
|
102
|
+
'r16snorm': {f: norm16_webgl, render: snorm16_renderable},
|
|
103
|
+
'rg16snorm': {f: norm16_webgl, render: snorm16_renderable},
|
|
104
|
+
'rgb16snorm-webgl': {f: norm16_webgl, render: false}, // rgb not renderable
|
|
105
|
+
'rgba16snorm': {f: norm16_webgl, render: snorm16_renderable},
|
|
105
106
|
|
|
106
107
|
'r16uint': {},
|
|
107
108
|
'rg16uint': {},
|
|
@@ -152,7 +153,7 @@ const TEXTURE_FORMAT_COLOR_DEPTH_TABLE: Readonly<Record<TextureFormatColorUncomp
|
|
|
152
153
|
'depth32float-stencil8': {attachment: 'depth-stencil', bitsPerChannel: [32, 8, 0, 0], packed: true},
|
|
153
154
|
};
|
|
154
155
|
|
|
155
|
-
//
|
|
156
|
+
// biome-ignore format: preserve layout
|
|
156
157
|
const TEXTURE_FORMAT_COMPRESSED_TABLE: Readonly<Record<TextureFormatCompressed, TextureFormatDefinition>> = {
|
|
157
158
|
|
|
158
159
|
// BC compressed formats: check device.features.has("texture-compression-bc");
|
|
@@ -225,7 +226,7 @@ const TEXTURE_FORMAT_COMPRESSED_TABLE: Readonly<Record<TextureFormatCompressed,
|
|
|
225
226
|
|
|
226
227
|
'pvrtc-rgb4unorm-webgl': {f: texture_compression_pvrtc_webgl},
|
|
227
228
|
'pvrtc-rgba4unorm-webgl': {f: texture_compression_pvrtc_webgl},
|
|
228
|
-
'pvrtc-
|
|
229
|
+
'pvrtc-rgb2unorm-webgl': {f: texture_compression_pvrtc_webgl},
|
|
229
230
|
'pvrtc-rgba2unorm-webgl': {f: texture_compression_pvrtc_webgl},
|
|
230
231
|
|
|
231
232
|
// WEBGL_compressed_texture_etc1
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import type {
|
|
6
|
+
NormalizedDataType,
|
|
7
|
+
TypedArrayConstructorT,
|
|
8
|
+
NormalizedTypedArrayConstructorT
|
|
9
|
+
} from '../data-types/data-types';
|
|
6
10
|
|
|
7
11
|
/** Information about the structure of a texture format */
|
|
8
12
|
export type TextureFormatInfo = {
|
|
@@ -18,6 +22,8 @@ export type TextureFormatInfo = {
|
|
|
18
22
|
dataType?: NormalizedDataType;
|
|
19
23
|
/** Number of bytes per pixel */
|
|
20
24
|
bytesPerPixel: number;
|
|
25
|
+
/** Compressed formats only: Number of bytes per block */
|
|
26
|
+
bytesPerBlock?: number;
|
|
21
27
|
/** Number of bits per channel (may be unreliable for packed formats) */
|
|
22
28
|
bitsPerChannel: [number, number, number, number];
|
|
23
29
|
/** If this is a packed data type */
|
|
@@ -58,6 +64,33 @@ export type TextureFormatCapabilities = {
|
|
|
58
64
|
store: TextureFeature | boolean;
|
|
59
65
|
};
|
|
60
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Memory layout for reading/writing data to a texture's memory.
|
|
69
|
+
*
|
|
70
|
+
* @note Due to alignment, GPU texture data is typically not contiguous.
|
|
71
|
+
*
|
|
72
|
+
* @note GPU texure data must be accessed according to this layout.
|
|
73
|
+
* - On CPU, only the range of rows that are actually read or written need to be allocated.
|
|
74
|
+
* - However, space for the full, padded/aligned rows must be allocated in the buffer,
|
|
75
|
+
* even if just a partial horizontal range `{x, width}` is actually read or written.
|
|
76
|
+
*
|
|
77
|
+
* @note byteLength = bytesPerRow * rowsPerImage * depthOrArrayLayers.
|
|
78
|
+
*/
|
|
79
|
+
export type TextureMemoryLayout = {
|
|
80
|
+
/** Total length in bytes */
|
|
81
|
+
byteLength: number;
|
|
82
|
+
/** Number of images */
|
|
83
|
+
depthOrArrayLayers: number;
|
|
84
|
+
/** Stride between successive images (Use when depthOrArrayLayers > 1) */
|
|
85
|
+
bytesPerImage: number;
|
|
86
|
+
/** Number of rows per image */
|
|
87
|
+
rowsPerImage: number;
|
|
88
|
+
/** Number of bytes per row (padded) */
|
|
89
|
+
bytesPerRow: number;
|
|
90
|
+
/** Number of bytes per pixel */
|
|
91
|
+
bytesPerPixel: number;
|
|
92
|
+
};
|
|
93
|
+
|
|
61
94
|
/**
|
|
62
95
|
* These represent the main compressed texture formats
|
|
63
96
|
* Each format typically has a number of more specific subformats
|
|
@@ -89,6 +122,7 @@ export type TextureFeature =
|
|
|
89
122
|
| 'float16-renderable-webgl'
|
|
90
123
|
| 'rgb9e5ufloat-renderable-webgl'
|
|
91
124
|
| 'snorm8-renderable-webgl'
|
|
125
|
+
| 'norm16-webgl'
|
|
92
126
|
| 'norm16-renderable-webgl'
|
|
93
127
|
| 'snorm16-renderable-webgl'
|
|
94
128
|
| 'float32-filterable'
|
|
@@ -133,7 +167,7 @@ export type TextureFormatColorUncompressed =
|
|
|
133
167
|
| TextureFormatPacked16
|
|
134
168
|
| TextureFormatPacked32;
|
|
135
169
|
|
|
136
|
-
type TextureFormatUnorm8 =
|
|
170
|
+
export type TextureFormatUnorm8 =
|
|
137
171
|
| 'r8unorm'
|
|
138
172
|
| 'rg8unorm'
|
|
139
173
|
| 'rgb8unorm-webgl'
|
|
@@ -142,39 +176,42 @@ type TextureFormatUnorm8 =
|
|
|
142
176
|
| 'bgra8unorm'
|
|
143
177
|
| 'bgra8unorm-srgb';
|
|
144
178
|
|
|
145
|
-
type TextureFormatSnorm8 = 'r8snorm' | 'rg8snorm' | 'rgb8snorm-webgl' | 'rgba8snorm';
|
|
179
|
+
export type TextureFormatSnorm8 = 'r8snorm' | 'rg8snorm' | 'rgb8snorm-webgl' | 'rgba8snorm';
|
|
146
180
|
|
|
147
|
-
type TextureFormatUint8 = 'r8uint' | 'rg8uint' | 'rgba8uint';
|
|
181
|
+
export type TextureFormatUint8 = 'r8uint' | 'rg8uint' | 'rgba8uint';
|
|
148
182
|
|
|
149
|
-
type TextureFormatSint8 = 'r8sint' | 'rg8sint' | 'rgba8sint';
|
|
183
|
+
export type TextureFormatSint8 = 'r8sint' | 'rg8sint' | 'rgba8sint';
|
|
150
184
|
|
|
151
|
-
type TextureFormatUnorm16 = 'r16unorm' | 'rg16unorm' | 'rgb16unorm-webgl' | 'rgba16unorm';
|
|
185
|
+
export type TextureFormatUnorm16 = 'r16unorm' | 'rg16unorm' | 'rgb16unorm-webgl' | 'rgba16unorm';
|
|
152
186
|
|
|
153
|
-
type TextureFormatSnorm16 = 'r16snorm' | 'rg16snorm' | 'rgb16snorm-webgl' | 'rgba16snorm';
|
|
187
|
+
export type TextureFormatSnorm16 = 'r16snorm' | 'rg16snorm' | 'rgb16snorm-webgl' | 'rgba16snorm';
|
|
154
188
|
|
|
155
|
-
type TextureFormatUint16 = 'r16uint' | 'rg16uint' | 'rgba16uint';
|
|
189
|
+
export type TextureFormatUint16 = 'r16uint' | 'rg16uint' | 'rgba16uint';
|
|
156
190
|
|
|
157
|
-
type TextureFormatSint16 = 'r16sint' | 'rg16sint' | 'rgba16sint';
|
|
191
|
+
export type TextureFormatSint16 = 'r16sint' | 'rg16sint' | 'rgba16sint';
|
|
158
192
|
|
|
159
|
-
type TextureFormatFloat16 = 'r16float' | 'rg16float' | 'rgba16float';
|
|
193
|
+
export type TextureFormatFloat16 = 'r16float' | 'rg16float' | 'rgba16float';
|
|
160
194
|
|
|
161
195
|
// 96-bit formats (deprecated!)
|
|
162
|
-
type TextureFormatUint32 = 'r32uint' | 'rg32uint' | 'rgba32uint';
|
|
196
|
+
export type TextureFormatUint32 = 'r32uint' | 'rg32uint' | 'rgba32uint';
|
|
163
197
|
|
|
164
|
-
type TextureFormatSint32 = 'r32sint' | 'rg32sint' | 'rgba32sint';
|
|
198
|
+
export type TextureFormatSint32 = 'r32sint' | 'rg32sint' | 'rgba32sint';
|
|
165
199
|
|
|
166
|
-
type TextureFormatFloat32 = 'r32float' | 'rg32float' | 'rgb32float-webgl' | 'rgba32float';
|
|
200
|
+
export type TextureFormatFloat32 = 'r32float' | 'rg32float' | 'rgb32float-webgl' | 'rgba32float';
|
|
167
201
|
|
|
168
|
-
type TextureFormatPacked16 = 'rgba4unorm-webgl' | 'rgb565unorm-webgl' | 'rgb5a1unorm-webgl';
|
|
169
|
-
|
|
170
|
-
type TextureFormatPacked32 = 'rgb9e5ufloat' | 'rg11b10ufloat' | 'rgb10a2unorm' | 'rgb10a2uint';
|
|
202
|
+
export type TextureFormatPacked16 = 'rgba4unorm-webgl' | 'rgb565unorm-webgl' | 'rgb5a1unorm-webgl';
|
|
171
203
|
|
|
204
|
+
export type TextureFormatPacked32 =
|
|
205
|
+
| 'rgb9e5ufloat'
|
|
206
|
+
| 'rg11b10ufloat'
|
|
207
|
+
| 'rgb10a2unorm'
|
|
208
|
+
| 'rgb10a2uint';
|
|
172
209
|
export type TextureFormatCompressed =
|
|
173
210
|
| 'bc1-rgb-unorm-webgl'
|
|
174
211
|
| 'bc1-rgb-unorm-srgb-webgl'
|
|
175
212
|
| 'pvrtc-rgb4unorm-webgl'
|
|
176
213
|
| 'pvrtc-rgba4unorm-webgl'
|
|
177
|
-
| 'pvrtc-
|
|
214
|
+
| 'pvrtc-rgb2unorm-webgl'
|
|
178
215
|
| 'pvrtc-rgba2unorm-webgl'
|
|
179
216
|
| 'etc1-rbg-unorm-webgl'
|
|
180
217
|
| 'atc-rgb-unorm-webgl'
|
|
@@ -243,8 +280,18 @@ export type TextureFormatCompressed =
|
|
|
243
280
|
| 'astc-12x12-unorm'
|
|
244
281
|
| 'astc-12x12-unorm-srgb';
|
|
245
282
|
|
|
283
|
+
export type CompressedTextureFormat = TextureFormatCompressed;
|
|
284
|
+
|
|
246
285
|
// Texture format helper types
|
|
247
286
|
|
|
287
|
+
export type TextureFormatTypedArray<T extends TextureFormat> = DataTypeArray<
|
|
288
|
+
TextureFormatDataType<T>
|
|
289
|
+
>;
|
|
290
|
+
|
|
291
|
+
export type TextureFormatNormalizedTypedArray<T extends TextureFormat> = NormalizedDataTypeArray<
|
|
292
|
+
TextureFormatDataType<T>
|
|
293
|
+
>;
|
|
294
|
+
|
|
248
295
|
export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFormatUint8
|
|
249
296
|
? 'uint8'
|
|
250
297
|
: T extends TextureFormatSint8
|
|
@@ -279,6 +326,15 @@ export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFo
|
|
|
279
326
|
? 'uint32'
|
|
280
327
|
: never;
|
|
281
328
|
|
|
329
|
+
export type TextureFormatDataTypeT<T extends TextureFormat> = TextureFormatDataType<T>;
|
|
330
|
+
|
|
331
|
+
type DataTypeArray<T extends NormalizedDataType> = InstanceType<TypedArrayConstructorT<T>>;
|
|
332
|
+
type NormalizedDataTypeArray<T extends NormalizedDataType> = InstanceType<
|
|
333
|
+
NormalizedTypedArrayConstructorT<T>
|
|
334
|
+
>;
|
|
335
|
+
|
|
336
|
+
// HELPER TYPES
|
|
337
|
+
|
|
282
338
|
/*
|
|
283
339
|
export type TextureFormatColorWebGPU =
|
|
284
340
|
// 8-bit formats
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {TypedArray} from '@math.gl/types';
|
|
6
|
+
import {type TextureFormat, type TextureMemoryLayout} from './texture-formats';
|
|
7
|
+
import {textureFormatDecoder} from './texture-format-decoder';
|
|
8
|
+
|
|
9
|
+
export function getTextureImageView<T extends TextureFormat>(
|
|
10
|
+
arrayBuffer: ArrayBuffer,
|
|
11
|
+
memoryLayout: TextureMemoryLayout,
|
|
12
|
+
format: T,
|
|
13
|
+
image = 0
|
|
14
|
+
) {
|
|
15
|
+
const formatInfo = textureFormatDecoder.getInfo(format);
|
|
16
|
+
const bytesPerComponent = formatInfo.bytesPerPixel / formatInfo.components;
|
|
17
|
+
const {bytesPerImage} = memoryLayout;
|
|
18
|
+
const offset = bytesPerImage * image;
|
|
19
|
+
const totalPixels = memoryLayout.bytesPerImage / bytesPerComponent;
|
|
20
|
+
|
|
21
|
+
switch (format) {
|
|
22
|
+
case 'rgba8unorm':
|
|
23
|
+
case 'bgra8unorm':
|
|
24
|
+
case 'rgba8uint':
|
|
25
|
+
return new Uint8Array(arrayBuffer, offset, totalPixels);
|
|
26
|
+
case 'r8unorm':
|
|
27
|
+
return new Uint8Array(arrayBuffer, offset, totalPixels);
|
|
28
|
+
case 'r16uint':
|
|
29
|
+
case 'rgba16uint':
|
|
30
|
+
return new Uint16Array(arrayBuffer, offset, totalPixels);
|
|
31
|
+
case 'r32uint':
|
|
32
|
+
case 'rgba32uint':
|
|
33
|
+
return new Uint32Array(arrayBuffer, offset, totalPixels);
|
|
34
|
+
case 'r32float':
|
|
35
|
+
return new Float32Array(arrayBuffer, offset, totalPixels);
|
|
36
|
+
case 'rgba16float':
|
|
37
|
+
return new Uint16Array(arrayBuffer, offset, totalPixels); // 4 channels
|
|
38
|
+
case 'rgba32float':
|
|
39
|
+
return new Float32Array(arrayBuffer, offset, totalPixels);
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function setTextureImageData<T extends TextureFormat>(
|
|
46
|
+
arrayBuffer: ArrayBuffer,
|
|
47
|
+
memoryLayout: TextureMemoryLayout,
|
|
48
|
+
format: T,
|
|
49
|
+
data: TypedArray,
|
|
50
|
+
image = 0
|
|
51
|
+
): void {
|
|
52
|
+
const offset = 0; // memoryLayout.bytesPerImage * image;
|
|
53
|
+
|
|
54
|
+
const totalPixels = memoryLayout.bytesPerImage / memoryLayout.bytesPerPixel;
|
|
55
|
+
const subArray = data.subarray(0, totalPixels);
|
|
56
|
+
|
|
57
|
+
const typedArray = getTextureImageView(arrayBuffer, memoryLayout, format, image);
|
|
58
|
+
|
|
59
|
+
typedArray.set(subArray, offset);
|
|
60
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {TypedArray} from '../../types';
|
|
6
|
+
import type {NormalizedDataType, PrimitiveDataType, SignedDataType} from '../data-types/data-types';
|
|
7
|
+
import type {VertexFormat, VertexFormatInfo} from './vertex-formats';
|
|
8
|
+
import {dataTypeDecoder} from '../data-types/data-type-decoder';
|
|
9
|
+
|
|
10
|
+
export class VertexFormatDecoder {
|
|
11
|
+
/**
|
|
12
|
+
* Decodes a vertex format, returning type, components, byte length and flags (integer, signed, normalized)
|
|
13
|
+
*/
|
|
14
|
+
getVertexFormatInfo<T extends VertexFormat = VertexFormat>(format: T): VertexFormatInfo<T> {
|
|
15
|
+
// Strip the -webgl ending if present
|
|
16
|
+
let webglOnly: boolean | undefined;
|
|
17
|
+
if (format.endsWith('-webgl')) {
|
|
18
|
+
format.replace('-webgl', '');
|
|
19
|
+
webglOnly = true;
|
|
20
|
+
}
|
|
21
|
+
// split components from type
|
|
22
|
+
const [type_, count] = format.split('x');
|
|
23
|
+
const type = type_ as NormalizedDataType;
|
|
24
|
+
const components = (count ? parseInt(count) : 1) as 1 | 2 | 3 | 4;
|
|
25
|
+
// decode the type
|
|
26
|
+
const decodedType = dataTypeDecoder.getDataTypeInfo(type);
|
|
27
|
+
const result: VertexFormatInfo = {
|
|
28
|
+
type,
|
|
29
|
+
components,
|
|
30
|
+
byteLength: decodedType.byteLength * components,
|
|
31
|
+
integer: decodedType.integer,
|
|
32
|
+
signed: decodedType.signed,
|
|
33
|
+
normalized: decodedType.normalized
|
|
34
|
+
};
|
|
35
|
+
if (webglOnly) {
|
|
36
|
+
result.webglOnly = true;
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Build a vertex format from a signed data type and a component */
|
|
42
|
+
makeVertexFormat(
|
|
43
|
+
signedDataType: SignedDataType,
|
|
44
|
+
components: 1 | 2 | 3 | 4,
|
|
45
|
+
normalized?: boolean
|
|
46
|
+
): VertexFormat {
|
|
47
|
+
const dataType: NormalizedDataType = normalized
|
|
48
|
+
? dataTypeDecoder.getNormalizedDataType(signedDataType)
|
|
49
|
+
: signedDataType;
|
|
50
|
+
|
|
51
|
+
switch (dataType) {
|
|
52
|
+
// Special cases for WebGL-only x3 formats that WebGPU does not support.
|
|
53
|
+
case 'unorm8':
|
|
54
|
+
if (components === 1) {
|
|
55
|
+
return 'unorm8';
|
|
56
|
+
}
|
|
57
|
+
if (components === 3) {
|
|
58
|
+
return 'unorm8x3-webgl';
|
|
59
|
+
}
|
|
60
|
+
return `${dataType}x${components}`;
|
|
61
|
+
|
|
62
|
+
case 'snorm8':
|
|
63
|
+
if (components === 1) {
|
|
64
|
+
return 'snorm8';
|
|
65
|
+
}
|
|
66
|
+
if (components === 3) {
|
|
67
|
+
return 'snorm8x3-webgl';
|
|
68
|
+
}
|
|
69
|
+
return `${dataType}x${components}`;
|
|
70
|
+
|
|
71
|
+
case 'uint8':
|
|
72
|
+
case 'sint8':
|
|
73
|
+
// WebGPU 8 bit formats must be aligned to 16 bit boundaries.
|
|
74
|
+
if (components === 1 || components === 3) {
|
|
75
|
+
throw new Error(`size: ${components}`);
|
|
76
|
+
}
|
|
77
|
+
return `${dataType}x${components}`;
|
|
78
|
+
|
|
79
|
+
case 'uint16':
|
|
80
|
+
if (components === 1) {
|
|
81
|
+
return 'uint16';
|
|
82
|
+
}
|
|
83
|
+
if (components === 3) {
|
|
84
|
+
return 'uint16x3-webgl';
|
|
85
|
+
}
|
|
86
|
+
return `${dataType}x${components}`;
|
|
87
|
+
|
|
88
|
+
case 'sint16':
|
|
89
|
+
if (components === 1) {
|
|
90
|
+
return 'sint16';
|
|
91
|
+
}
|
|
92
|
+
if (components === 3) {
|
|
93
|
+
return 'sint16x3-webgl';
|
|
94
|
+
}
|
|
95
|
+
return `${dataType}x${components}`;
|
|
96
|
+
|
|
97
|
+
case 'unorm16':
|
|
98
|
+
if (components === 1) {
|
|
99
|
+
return 'unorm16';
|
|
100
|
+
}
|
|
101
|
+
if (components === 3) {
|
|
102
|
+
return 'unorm16x3-webgl';
|
|
103
|
+
}
|
|
104
|
+
return `${dataType}x${components}`;
|
|
105
|
+
|
|
106
|
+
case 'snorm16':
|
|
107
|
+
if (components === 1) {
|
|
108
|
+
return 'snorm16';
|
|
109
|
+
}
|
|
110
|
+
if (components === 3) {
|
|
111
|
+
return 'snorm16x3-webgl';
|
|
112
|
+
}
|
|
113
|
+
return `${dataType}x${components}`;
|
|
114
|
+
|
|
115
|
+
case 'float16':
|
|
116
|
+
// WebGPU 16 bit formats must be aligned to 32 bit boundaries
|
|
117
|
+
if (components === 1 || components === 3) {
|
|
118
|
+
throw new Error(`size: ${components}`);
|
|
119
|
+
}
|
|
120
|
+
return `${dataType}x${components}`;
|
|
121
|
+
|
|
122
|
+
default:
|
|
123
|
+
return components === 1 ? dataType : `${dataType}x${components}`;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Get the vertex format for an attribute with TypedArray and size */
|
|
128
|
+
getVertexFormatFromAttribute(
|
|
129
|
+
typedArray: TypedArray,
|
|
130
|
+
size: number,
|
|
131
|
+
normalized?: boolean
|
|
132
|
+
): VertexFormat {
|
|
133
|
+
if (!size || size > 4) {
|
|
134
|
+
throw new Error(`size ${size}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const components = size as 1 | 2 | 3 | 4;
|
|
138
|
+
const signedDataType = dataTypeDecoder.getDataType(typedArray);
|
|
139
|
+
return this.makeVertexFormat(signedDataType, components, normalized);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Return a "default" vertex format for a certain shader data type
|
|
144
|
+
* The simplest vertex format that matches the shader attribute's data type
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
getCompatibleVertexFormat(opts: {
|
|
148
|
+
primitiveType: PrimitiveDataType;
|
|
149
|
+
components: 1 | 2 | 3 | 4;
|
|
150
|
+
}): VertexFormat {
|
|
151
|
+
let vertexType: NormalizedDataType;
|
|
152
|
+
switch (opts.primitiveType) {
|
|
153
|
+
case 'f32':
|
|
154
|
+
vertexType = 'float32';
|
|
155
|
+
break;
|
|
156
|
+
case 'i32':
|
|
157
|
+
vertexType = 'sint32';
|
|
158
|
+
break;
|
|
159
|
+
case 'u32':
|
|
160
|
+
vertexType = 'uint32';
|
|
161
|
+
break;
|
|
162
|
+
case 'f16':
|
|
163
|
+
return opts.components <= 2 ? 'float16x2' : 'float16x4';
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// TODO logic does not work for float16
|
|
167
|
+
if (opts.components === 1) {
|
|
168
|
+
return vertexType;
|
|
169
|
+
}
|
|
170
|
+
return `${vertexType}x${opts.components}`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Decoder for luma.gl vertex types */
|
|
175
|
+
export const vertexFormatDecoder = new VertexFormatDecoder();
|