@luma.gl/core 9.2.6 → 9.3.0-alpha.10
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 +191 -10
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.js +1 -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 +2686 -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 +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 +2422 -554
- 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 +2 -1
- 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 +109 -37
- 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 +10 -9
- 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 +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/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 +308 -24
- 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 +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 +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 +2 -1
- 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 +166 -45
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +10 -9
- 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 +131 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +183 -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
|
@@ -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;
|
|
@@ -77,7 +77,7 @@ export function readPixel(
|
|
|
77
77
|
|
|
78
78
|
// Extract each of the four channels.
|
|
79
79
|
for (let i = 0; i < 4; i++) {
|
|
80
|
-
const bits = bitsPerChannel[i];
|
|
80
|
+
const bits = bitsPerChannel[i] ?? 0;
|
|
81
81
|
// If a channel's bit width is zero or negative, consider it not present.
|
|
82
82
|
if (bits <= 0) {
|
|
83
83
|
channels.push(0);
|
|
@@ -88,7 +88,7 @@ export function readPixel(
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
return [channels[0], channels[1], channels[2], channels[3]];
|
|
91
|
+
return [channels[0] ?? 0, channels[1] ?? 0, channels[2] ?? 0, channels[3] ?? 0];
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
@@ -130,10 +130,10 @@ export function writePixel(
|
|
|
130
130
|
): void {
|
|
131
131
|
let currentBitOffset = bitOffset;
|
|
132
132
|
for (let channel = 0; channel < 4; channel++) {
|
|
133
|
-
const bits = bitsPerChannel[channel];
|
|
133
|
+
const bits = bitsPerChannel[channel] ?? 0;
|
|
134
134
|
// Clamp the channel value to the maximum allowed by the bit width.
|
|
135
135
|
const maxValue = (1 << bits) - 1;
|
|
136
|
-
const channelValue = pixel[channel] & maxValue;
|
|
136
|
+
const channelValue = (pixel[channel] ?? 0) & maxValue;
|
|
137
137
|
writeBitsToDataView(dataView, currentBitOffset, bits, channelValue);
|
|
138
138
|
currentBitOffset += bits;
|
|
139
139
|
}
|
|
@@ -3,83 +3,149 @@
|
|
|
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,
|
|
10
10
|
TextureFormatInfo,
|
|
11
11
|
TextureFormatCapabilities,
|
|
12
|
-
TextureFormatColor
|
|
12
|
+
TextureFormatColor,
|
|
13
|
+
TextureMemoryLayout,
|
|
14
|
+
TextureFormatDepthStencil
|
|
13
15
|
} from './texture-formats';
|
|
14
16
|
import {getTextureFormatDefinition} from './texture-format-table';
|
|
15
17
|
|
|
18
|
+
const RGB_FORMAT_REGEX = /^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/;
|
|
19
|
+
const COLOR_FORMAT_PREFIXES = ['rgb', 'rgba', 'bgra'];
|
|
20
|
+
const DEPTH_FORMAT_PREFIXES = ['depth', 'stencil'];
|
|
16
21
|
// prettier-ignore
|
|
17
22
|
const COMPRESSED_TEXTURE_FORMAT_PREFIXES = [
|
|
18
23
|
'bc1', 'bc2', 'bc3', 'bc4', 'bc5', 'bc6', 'bc7', 'etc1', 'etc2', 'eac', 'atc', 'astc', 'pvrtc'
|
|
19
24
|
];
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
// HELPERS - MEMORY LAYOUT
|
|
27
|
+
|
|
28
|
+
/** Options to calculate a texture layout */
|
|
29
|
+
export type TextureMemoryLayoutOptions = {
|
|
30
|
+
/** Number of bytes per pixel */
|
|
31
|
+
format: TextureFormat;
|
|
32
|
+
/** Width of the texture in pixels */
|
|
33
|
+
width: number;
|
|
34
|
+
/** Height of the texture in pixels */
|
|
35
|
+
height: number;
|
|
36
|
+
/** Number of images in the texture */
|
|
37
|
+
depth: number;
|
|
38
|
+
/** Alignment of each row */
|
|
39
|
+
byteAlignment: number;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/** Class that helps applications work with texture formats */
|
|
23
43
|
export class TextureFormatDecoder {
|
|
24
|
-
/** Returns information about a texture format, e.g. attatchment type, components, byte length and flags (integer, signed, normalized) */
|
|
25
|
-
getInfo(format: TextureFormat): TextureFormatInfo {
|
|
26
|
-
return getTextureFormatInfo(format);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
44
|
/** Checks if a texture format is color */
|
|
30
45
|
isColor(format: TextureFormat): format is TextureFormatColor {
|
|
31
|
-
return
|
|
46
|
+
return COLOR_FORMAT_PREFIXES.some(prefix => format.startsWith(prefix));
|
|
32
47
|
}
|
|
33
48
|
|
|
34
49
|
/** Checks if a texture format is depth or stencil */
|
|
35
|
-
isDepthStencil(format: TextureFormat):
|
|
36
|
-
return
|
|
50
|
+
isDepthStencil(format: TextureFormat): format is TextureFormatDepthStencil {
|
|
51
|
+
return DEPTH_FORMAT_PREFIXES.some(prefix => format.startsWith(prefix));
|
|
37
52
|
}
|
|
38
53
|
|
|
39
54
|
/** Checks if a texture format is compressed */
|
|
40
55
|
isCompressed(format: TextureFormat): format is TextureFormatCompressed {
|
|
41
|
-
return COMPRESSED_TEXTURE_FORMAT_PREFIXES.some(prefix =>
|
|
56
|
+
return COMPRESSED_TEXTURE_FORMAT_PREFIXES.some(prefix => format.startsWith(prefix));
|
|
42
57
|
}
|
|
43
58
|
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
getCapabilities(format: TextureFormat): TextureFormatCapabilities {
|
|
49
|
-
const info = getTextureFormatDefinition(format);
|
|
50
|
-
|
|
51
|
-
const formatCapabilities: Required<TextureFormatCapabilities> = {
|
|
52
|
-
format,
|
|
53
|
-
create: info.f ?? true,
|
|
54
|
-
render: info.render ?? true,
|
|
55
|
-
filter: info.filter ?? true,
|
|
56
|
-
blend: info.blend ?? true,
|
|
57
|
-
store: info.store ?? true
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
const formatInfo = getTextureFormatInfo(format);
|
|
61
|
-
const isDepthStencil = format.startsWith('depth') || format.startsWith('stencil');
|
|
62
|
-
const isSigned = formatInfo?.signed;
|
|
63
|
-
const isInteger = formatInfo?.integer;
|
|
64
|
-
const isWebGLSpecific = formatInfo?.webgl;
|
|
59
|
+
/** Returns information about a texture format, e.g. attachment type, components, byte length and flags (integer, signed, normalized) */
|
|
60
|
+
getInfo(format: TextureFormat): TextureFormatInfo {
|
|
61
|
+
return getTextureFormatInfo(format);
|
|
62
|
+
}
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
/** "static" capabilities of a texture format. @note Needs to be adjusted against current device */
|
|
65
|
+
getCapabilities(format: TextureFormat): TextureFormatCapabilities {
|
|
66
|
+
return getTextureFormatCapabilities(format);
|
|
67
|
+
}
|
|
70
68
|
|
|
71
|
-
|
|
69
|
+
/** Computes the memory layout for a texture, in particular including row byte alignment */
|
|
70
|
+
computeMemoryLayout(opts: TextureMemoryLayoutOptions): TextureMemoryLayout {
|
|
71
|
+
return computeTextureMemoryLayout(opts);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
/** Decoder for luma.gl texture types */
|
|
75
76
|
export const textureFormatDecoder = new TextureFormatDecoder();
|
|
76
77
|
|
|
77
|
-
// HELPERS
|
|
78
|
+
// HELPERS - MEMORY LAYOUT
|
|
79
|
+
|
|
80
|
+
/** Get the memory layout of a texture */
|
|
81
|
+
function computeTextureMemoryLayout({
|
|
82
|
+
format,
|
|
83
|
+
width,
|
|
84
|
+
height,
|
|
85
|
+
depth,
|
|
86
|
+
byteAlignment
|
|
87
|
+
}: TextureMemoryLayoutOptions): TextureMemoryLayout {
|
|
88
|
+
const formatInfo = textureFormatDecoder.getInfo(format);
|
|
89
|
+
const {
|
|
90
|
+
bytesPerPixel,
|
|
91
|
+
bytesPerBlock = bytesPerPixel,
|
|
92
|
+
blockWidth = 1,
|
|
93
|
+
blockHeight = 1,
|
|
94
|
+
compressed = false
|
|
95
|
+
} = formatInfo;
|
|
96
|
+
const blockColumns = compressed ? Math.ceil(width / blockWidth) : width;
|
|
97
|
+
const blockRows = compressed ? Math.ceil(height / blockHeight) : height;
|
|
98
|
+
// byteAlignment comes from the backend/call site. WebGPU buffer copies use 256, queue.writeTexture uses 1.
|
|
99
|
+
const unpaddedBytesPerRow = blockColumns * bytesPerBlock;
|
|
100
|
+
const bytesPerRow = Math.ceil(unpaddedBytesPerRow / byteAlignment) * byteAlignment;
|
|
101
|
+
const rowsPerImage = blockRows;
|
|
102
|
+
const byteLength = bytesPerRow * rowsPerImage * depth;
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
bytesPerPixel,
|
|
106
|
+
bytesPerRow,
|
|
107
|
+
rowsPerImage,
|
|
108
|
+
depthOrArrayLayers: depth,
|
|
109
|
+
bytesPerImage: bytesPerRow * rowsPerImage,
|
|
110
|
+
byteLength
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// HELPERS - CAPABILITIES
|
|
115
|
+
|
|
116
|
+
function getTextureFormatCapabilities(format: TextureFormat): TextureFormatCapabilities {
|
|
117
|
+
const info = getTextureFormatDefinition(format);
|
|
118
|
+
|
|
119
|
+
const formatCapabilities: Required<TextureFormatCapabilities> = {
|
|
120
|
+
format,
|
|
121
|
+
create: info.f ?? true,
|
|
122
|
+
render: info.render ?? true,
|
|
123
|
+
filter: info.filter ?? true,
|
|
124
|
+
blend: info.blend ?? true,
|
|
125
|
+
store: info.store ?? true
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const formatInfo = getTextureFormatInfo(format);
|
|
129
|
+
const isDepthStencil = format.startsWith('depth') || format.startsWith('stencil');
|
|
130
|
+
const isSigned = formatInfo?.signed;
|
|
131
|
+
const isInteger = formatInfo?.integer;
|
|
132
|
+
const isWebGLSpecific = formatInfo?.webgl;
|
|
133
|
+
const isCompressed = Boolean(formatInfo?.compressed);
|
|
134
|
+
|
|
135
|
+
// Only uncompressed color formats can be used as color-renderable attachments.
|
|
136
|
+
formatCapabilities.render &&= !isDepthStencil && !isCompressed;
|
|
137
|
+
// signed and integer formats are not filterable
|
|
138
|
+
formatCapabilities.filter &&= !isDepthStencil && !isSigned && !isInteger && !isWebGLSpecific;
|
|
139
|
+
|
|
140
|
+
return formatCapabilities;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// HELPER - FORMAT INFO
|
|
78
144
|
|
|
79
145
|
/**
|
|
80
146
|
* Decodes a texture format, returning e.g. attatchment type, components, byte length and flags (integer, signed, normalized)
|
|
81
147
|
*/
|
|
82
|
-
function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
148
|
+
export function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
83
149
|
let formatInfo: TextureFormatInfo = getTextureFormatInfoUsingTable(format);
|
|
84
150
|
|
|
85
151
|
if (textureFormatDecoder.isCompressed(format)) {
|
|
@@ -88,6 +154,7 @@ function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
|
88
154
|
formatInfo.bytesPerPixel = 1;
|
|
89
155
|
formatInfo.srgb = false;
|
|
90
156
|
formatInfo.compressed = true;
|
|
157
|
+
formatInfo.bytesPerBlock = getCompressedTextureBlockByteLength(format);
|
|
91
158
|
|
|
92
159
|
const blockSize = getCompressedTextureBlockSize(format);
|
|
93
160
|
if (blockSize) {
|
|
@@ -97,13 +164,13 @@ function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
|
97
164
|
}
|
|
98
165
|
|
|
99
166
|
// Fill in missing information that can be derived from the format string
|
|
100
|
-
const matches = RGB_FORMAT_REGEX.exec(format as string);
|
|
167
|
+
const matches = !formatInfo.packed ? RGB_FORMAT_REGEX.exec(format as string) : null;
|
|
101
168
|
if (matches) {
|
|
102
169
|
const [, channels, length, type, srgb, suffix] = matches;
|
|
103
170
|
const dataType = `${type}${length}` as NormalizedDataType;
|
|
104
|
-
const decodedType = getDataTypeInfo(dataType);
|
|
171
|
+
const decodedType = dataTypeDecoder.getDataTypeInfo(dataType);
|
|
105
172
|
const bits = decodedType.byteLength * 8;
|
|
106
|
-
const components = channels
|
|
173
|
+
const components = (channels?.length ?? 1) as 1 | 2 | 3 | 4;
|
|
107
174
|
const bitsPerChannel: [number, number, number, number] = [
|
|
108
175
|
bits,
|
|
109
176
|
components >= 2 ? bits : 0,
|
|
@@ -121,7 +188,7 @@ function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
|
121
188
|
signed: decodedType.signed,
|
|
122
189
|
normalized: decodedType.normalized,
|
|
123
190
|
bitsPerChannel,
|
|
124
|
-
bytesPerPixel: decodedType.byteLength *
|
|
191
|
+
bytesPerPixel: decodedType.byteLength * components,
|
|
125
192
|
packed: formatInfo.packed,
|
|
126
193
|
srgb: formatInfo.srgb
|
|
127
194
|
};
|
|
@@ -190,9 +257,63 @@ function getCompressedTextureBlockSize(
|
|
|
190
257
|
const [, blockWidth, blockHeight] = matches;
|
|
191
258
|
return {blockWidth: Number(blockWidth), blockHeight: Number(blockHeight)};
|
|
192
259
|
}
|
|
260
|
+
|
|
261
|
+
if (
|
|
262
|
+
format.startsWith('bc') ||
|
|
263
|
+
format.startsWith('etc1') ||
|
|
264
|
+
format.startsWith('etc2') ||
|
|
265
|
+
format.startsWith('eac') ||
|
|
266
|
+
format.startsWith('atc')
|
|
267
|
+
) {
|
|
268
|
+
return {blockWidth: 4, blockHeight: 4};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (format.startsWith('pvrtc-rgb4') || format.startsWith('pvrtc-rgba4')) {
|
|
272
|
+
return {blockWidth: 4, blockHeight: 4};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (format.startsWith('pvrtc-rgb2') || format.startsWith('pvrtc-rgba2')) {
|
|
276
|
+
return {blockWidth: 8, blockHeight: 4};
|
|
277
|
+
}
|
|
278
|
+
|
|
193
279
|
return null;
|
|
194
280
|
}
|
|
195
281
|
|
|
282
|
+
function getCompressedTextureBlockByteLength(format: TextureFormatCompressed): number {
|
|
283
|
+
if (
|
|
284
|
+
format.startsWith('bc1') ||
|
|
285
|
+
format.startsWith('bc4') ||
|
|
286
|
+
format.startsWith('etc1') ||
|
|
287
|
+
format.startsWith('etc2-rgb8') ||
|
|
288
|
+
format.startsWith('etc2-rgb8a1') ||
|
|
289
|
+
format.startsWith('eac-r11') ||
|
|
290
|
+
format === 'atc-rgb-unorm-webgl'
|
|
291
|
+
) {
|
|
292
|
+
return 8;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (
|
|
296
|
+
format.startsWith('bc2') ||
|
|
297
|
+
format.startsWith('bc3') ||
|
|
298
|
+
format.startsWith('bc5') ||
|
|
299
|
+
format.startsWith('bc6h') ||
|
|
300
|
+
format.startsWith('bc7') ||
|
|
301
|
+
format.startsWith('etc2-rgba8') ||
|
|
302
|
+
format.startsWith('eac-rg11') ||
|
|
303
|
+
format.startsWith('astc') ||
|
|
304
|
+
format === 'atc-rgba-unorm-webgl' ||
|
|
305
|
+
format === 'atc-rgbai-unorm-webgl'
|
|
306
|
+
) {
|
|
307
|
+
return 16;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (format.startsWith('pvrtc')) {
|
|
311
|
+
return 8;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return 16;
|
|
315
|
+
}
|
|
316
|
+
|
|
196
317
|
/*
|
|
197
318
|
'r8unorm': {s: "float"}, // ✓ ✓ ✓ },
|
|
198
319
|
'r8snorm': {s: "float"}, // ✓ },
|
|
@@ -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
|
|
|
@@ -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': {},
|
|
@@ -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
|