@luma.gl/core 9.2.0-alpha.1 → 9.2.0-alpha.3
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 +17 -3
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +48 -2
- package/dist/adapter/canvas-context.js.map +1 -1
- package/dist/adapter/device.d.ts +56 -11
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +78 -22
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.js +1 -1
- package/dist/adapter/resources/buffer.d.ts +13 -7
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +1 -5
- package/dist/adapter/resources/buffer.js.map +1 -1
- package/dist/adapter/resources/command-encoder.d.ts +0 -1
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js.map +1 -1
- package/dist/adapter/resources/framebuffer.d.ts +3 -3
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/pipeline-layout.d.ts +13 -0
- package/dist/adapter/resources/pipeline-layout.d.ts.map +1 -0
- package/dist/adapter/resources/pipeline-layout.js +21 -0
- package/dist/adapter/resources/pipeline-layout.js.map +1 -0
- package/dist/adapter/resources/render-pipeline.d.ts +4 -4
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/resource.d.ts +1 -0
- package/dist/adapter/resources/resource.d.ts.map +1 -1
- package/dist/adapter/resources/resource.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 +1 -1
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/vertex-array.js +1 -1
- package/dist/adapter/resources/vertex-array.js.map +1 -1
- package/dist/adapter/types/attachments.d.ts +3 -3
- 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 +2 -2
- package/dist/adapter/types/parameters.d.ts.map +1 -1
- package/dist/adapter/types/shader-layout.d.ts +5 -6
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts +3 -3
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.js +2 -2
- package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
- package/dist/dist.dev.js +417 -267
- package/dist/dist.min.js +5 -4
- package/dist/index.cjs +416 -266
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +18 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- 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 +2 -2
- package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
- package/dist/portable/uniform-buffer-layout.js +2 -2
- package/dist/portable/uniform-buffer-layout.js.map +1 -1
- package/dist/portable/uniform-store.d.ts +1 -1
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/shadertypes/{data-types.d.ts → data-types/data-types.d.ts} +4 -0
- package/dist/shadertypes/data-types/data-types.d.ts.map +1 -0
- package/dist/shadertypes/data-types/data-types.js.map +1 -0
- package/dist/shadertypes/{utils → data-types}/decode-data-types.d.ts +4 -4
- package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -0
- package/dist/shadertypes/data-types/decode-data-types.js +74 -0
- package/dist/shadertypes/data-types/decode-data-types.js.map +1 -0
- package/dist/shadertypes/{utils → data-types}/decode-shader-types.d.ts +2 -2
- package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +1 -0
- package/dist/shadertypes/data-types/decode-shader-types.js.map +1 -0
- package/dist/shadertypes/data-types/shader-types.d.ts.map +1 -0
- package/dist/shadertypes/data-types/shader-types.js.map +1 -0
- package/dist/shadertypes/textures/pixel-utils.d.ts +112 -0
- package/dist/shadertypes/textures/pixel-utils.d.ts.map +1 -0
- package/dist/shadertypes/textures/pixel-utils.js +193 -0
- package/dist/shadertypes/textures/pixel-utils.js.map +1 -0
- package/dist/shadertypes/textures/texture-format-decoder.d.ts +18 -0
- package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{utils/decode-texture-format.js → textures/texture-format-decoder.js} +48 -35
- package/dist/shadertypes/textures/texture-format-decoder.js.map +1 -0
- package/dist/shadertypes/textures/texture-format-generics.d.ts +33 -0
- package/dist/shadertypes/textures/texture-format-generics.d.ts.map +1 -0
- package/dist/shadertypes/{texture-formats.js → textures/texture-format-generics.js} +1 -1
- package/dist/shadertypes/textures/texture-format-generics.js.map +1 -0
- package/dist/shadertypes/{utils → textures}/texture-format-table.d.ts +2 -1
- package/dist/shadertypes/textures/texture-format-table.d.ts.map +1 -0
- package/dist/shadertypes/{utils → textures}/texture-format-table.js +41 -42
- package/dist/shadertypes/textures/texture-format-table.js.map +1 -0
- package/dist/shadertypes/textures/texture-formats.d.ts +90 -0
- package/dist/shadertypes/textures/texture-formats.d.ts.map +1 -0
- package/dist/shadertypes/textures/texture-formats.js +58 -0
- package/dist/shadertypes/textures/texture-formats.js.map +1 -0
- package/dist/shadertypes/{utils → vertex-arrays}/decode-vertex-format.d.ts +2 -2
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +1 -0
- package/dist/shadertypes/{utils → vertex-arrays}/decode-vertex-format.js +4 -4
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +1 -0
- package/dist/shadertypes/{vertex-formats.d.ts → vertex-arrays/vertex-formats.d.ts} +5 -3
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +1 -0
- package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +1 -0
- package/package.json +2 -2
- package/src/adapter/canvas-context.ts +60 -5
- package/src/adapter/device.ts +132 -47
- package/src/adapter/resources/buffer.ts +30 -14
- package/src/adapter/resources/command-encoder.ts +0 -2
- package/src/adapter/resources/framebuffer.ts +5 -5
- package/src/adapter/resources/pipeline-layout.ts +30 -0
- package/src/adapter/resources/render-pipeline.ts +6 -6
- package/src/adapter/resources/resource.ts +1 -0
- package/src/adapter/resources/texture-view.ts +1 -1
- package/src/adapter/resources/texture.ts +1 -1
- package/src/adapter/resources/vertex-array.ts +1 -1
- package/src/adapter/types/attachments.ts +5 -5
- package/src/adapter/types/buffer-layout.ts +1 -1
- package/src/adapter/types/parameters.ts +2 -2
- package/src/adapter/types/shader-layout.ts +8 -5
- package/src/adapter-utils/get-attribute-from-layouts.ts +5 -5
- package/src/index.ts +60 -36
- package/src/portable/uniform-block.ts +1 -1
- package/src/portable/uniform-buffer-layout.ts +4 -4
- package/src/portable/uniform-store.ts +1 -1
- package/src/shadertypes/data-types/data-types.ts +96 -0
- package/src/shadertypes/data-types/decode-data-types.ts +91 -0
- package/src/shadertypes/{utils → data-types}/decode-shader-types.ts +2 -2
- package/src/shadertypes/textures/pixel-utils.ts +239 -0
- package/src/shadertypes/{utils/decode-texture-format.ts → textures/texture-format-decoder.ts} +63 -47
- package/src/shadertypes/textures/texture-format-generics.ts +190 -0
- package/src/shadertypes/{utils → textures}/texture-format-table.ts +62 -52
- package/src/shadertypes/{texture-formats.ts → textures/texture-formats.ts} +229 -147
- package/src/shadertypes/{utils → vertex-arrays}/decode-vertex-format.ts +6 -10
- package/src/shadertypes/{vertex-formats.ts → vertex-arrays/vertex-formats.ts} +20 -6
- package/dist/adapter-utils/buffer-layout-helper.d.ts +0 -11
- package/dist/adapter-utils/buffer-layout-helper.d.ts.map +0 -1
- package/dist/adapter-utils/buffer-layout-helper.js +0 -33
- package/dist/adapter-utils/buffer-layout-helper.js.map +0 -1
- package/dist/shadertypes/data-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types.js.map +0 -1
- package/dist/shadertypes/shader-types.d.ts.map +0 -1
- package/dist/shadertypes/shader-types.js.map +0 -1
- package/dist/shadertypes/texture-formats.d.ts +0 -74
- package/dist/shadertypes/texture-formats.d.ts.map +0 -1
- package/dist/shadertypes/texture-formats.js.map +0 -1
- package/dist/shadertypes/utils/decode-data-types.d.ts.map +0 -1
- package/dist/shadertypes/utils/decode-data-types.js +0 -114
- package/dist/shadertypes/utils/decode-data-types.js.map +0 -1
- package/dist/shadertypes/utils/decode-shader-types.d.ts.map +0 -1
- package/dist/shadertypes/utils/decode-shader-types.js.map +0 -1
- package/dist/shadertypes/utils/decode-texture-format.d.ts +0 -15
- package/dist/shadertypes/utils/decode-texture-format.d.ts.map +0 -1
- package/dist/shadertypes/utils/decode-texture-format.js.map +0 -1
- package/dist/shadertypes/utils/decode-vertex-format.d.ts.map +0 -1
- package/dist/shadertypes/utils/decode-vertex-format.js.map +0 -1
- package/dist/shadertypes/utils/texture-format-table.d.ts.map +0 -1
- package/dist/shadertypes/utils/texture-format-table.js.map +0 -1
- package/dist/shadertypes/vertex-formats.d.ts.map +0 -1
- package/dist/shadertypes/vertex-formats.js.map +0 -1
- package/src/adapter-utils/buffer-layout-helper.ts +0 -41
- package/src/shadertypes/data-types.ts +0 -42
- package/src/shadertypes/utils/decode-data-types.ts +0 -131
- /package/dist/shadertypes/{data-types.js → data-types/data-types.js} +0 -0
- /package/dist/shadertypes/{utils → data-types}/decode-shader-types.js +0 -0
- /package/dist/shadertypes/{shader-types.d.ts → data-types/shader-types.d.ts} +0 -0
- /package/dist/shadertypes/{shader-types.js → data-types/shader-types.js} +0 -0
- /package/dist/shadertypes/{vertex-formats.js → vertex-arrays/vertex-formats.js} +0 -0
- /package/src/shadertypes/{shader-types.ts → data-types/shader-types.ts} +0 -0
package/src/shadertypes/{utils/decode-texture-format.ts → textures/texture-format-decoder.ts}
RENAMED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {NormalizedDataType} from '../data-types';
|
|
5
|
+
import type {NormalizedDataType} from '../data-types/data-types';
|
|
6
|
+
import {getDataTypeInfo} from '../data-types/decode-data-types';
|
|
6
7
|
import type {
|
|
7
8
|
TextureFormat,
|
|
8
|
-
|
|
9
|
+
TextureFormatCompressed,
|
|
9
10
|
TextureFormatInfo,
|
|
10
|
-
TextureFormatCapabilities
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
TextureFormatCapabilities,
|
|
12
|
+
TextureFormatColor
|
|
13
|
+
} from './texture-formats';
|
|
13
14
|
import {getTextureFormatDefinition} from './texture-format-table';
|
|
14
15
|
|
|
15
16
|
// prettier-ignore
|
|
@@ -19,22 +20,69 @@ const COMPRESSED_TEXTURE_FORMAT_PREFIXES = [
|
|
|
19
20
|
|
|
20
21
|
const RGB_FORMAT_REGEX = /^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/;
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
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
|
+
/** Checks if a texture format is color */
|
|
30
|
+
isColor(format: TextureFormat): format is TextureFormatColor {
|
|
31
|
+
return format.startsWith('rgba') || format.startsWith('bgra') || format.startsWith('rgb');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Checks if a texture format is depth or stencil */
|
|
35
|
+
isDepthStencil(format: TextureFormat): boolean {
|
|
36
|
+
return format.startsWith('depth') || format.startsWith('stencil');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Checks if a texture format is compressed */
|
|
40
|
+
isCompressed(format: TextureFormat): format is TextureFormatCompressed {
|
|
41
|
+
return COMPRESSED_TEXTURE_FORMAT_PREFIXES.some(prefix => (format as string).startsWith(prefix));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Returns the "static" capabilities of a texture format.
|
|
46
|
+
* @note Needs to be checked against current device
|
|
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;
|
|
65
|
+
|
|
66
|
+
// signed formats are not renderable
|
|
67
|
+
formatCapabilities.render &&= !isSigned;
|
|
68
|
+
// signed and integer formats are not filterable
|
|
69
|
+
formatCapabilities.filter &&= !isDepthStencil && !isSigned && !isInteger && !isWebGLSpecific;
|
|
70
|
+
|
|
71
|
+
return formatCapabilities;
|
|
72
|
+
}
|
|
29
73
|
}
|
|
30
74
|
|
|
75
|
+
export const textureFormatDecoder = new TextureFormatDecoder();
|
|
76
|
+
|
|
77
|
+
// HELPERS
|
|
78
|
+
|
|
31
79
|
/**
|
|
32
80
|
* Decodes a texture format, returning e.g. attatchment type, components, byte length and flags (integer, signed, normalized)
|
|
33
81
|
*/
|
|
34
|
-
|
|
82
|
+
function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
35
83
|
let formatInfo: TextureFormatInfo = getTextureFormatInfoUsingTable(format);
|
|
36
84
|
|
|
37
|
-
if (
|
|
85
|
+
if (textureFormatDecoder.isCompressed(format)) {
|
|
38
86
|
formatInfo.channels = 'rgb';
|
|
39
87
|
formatInfo.components = 3;
|
|
40
88
|
formatInfo.bytesPerPixel = 1;
|
|
@@ -97,38 +145,6 @@ export function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
|
|
|
97
145
|
return formatInfo;
|
|
98
146
|
}
|
|
99
147
|
|
|
100
|
-
/**
|
|
101
|
-
* Returns the "static" capabilities of a texture format.
|
|
102
|
-
* @note Needs to be checked against current device
|
|
103
|
-
*/
|
|
104
|
-
export function getTextureFormatCapabilities(format: TextureFormat): TextureFormatCapabilities {
|
|
105
|
-
const info = getTextureFormatDefinition(format);
|
|
106
|
-
|
|
107
|
-
const formatCapabilities: Required<TextureFormatCapabilities> = {
|
|
108
|
-
format,
|
|
109
|
-
create: info.f ?? true,
|
|
110
|
-
render: info.render ?? true,
|
|
111
|
-
filter: info.filter ?? true,
|
|
112
|
-
blend: info.blend ?? true,
|
|
113
|
-
store: info.store ?? true
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const formatInfo = getTextureFormatInfo(format);
|
|
117
|
-
const isDepthStencil = format.startsWith('depth') || format.startsWith('stencil');
|
|
118
|
-
const isSigned = formatInfo?.signed;
|
|
119
|
-
const isInteger = formatInfo?.integer;
|
|
120
|
-
const isWebGLSpecific = formatInfo?.webgl;
|
|
121
|
-
|
|
122
|
-
// signed formats are not renderable
|
|
123
|
-
formatCapabilities.render &&= !isSigned;
|
|
124
|
-
// signed and integer formats are not filterable
|
|
125
|
-
formatCapabilities.filter &&= !isDepthStencil && !isSigned && !isInteger && !isWebGLSpecific;
|
|
126
|
-
|
|
127
|
-
return formatCapabilities;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// HELPERS
|
|
131
|
-
|
|
132
148
|
/** Decode texture format info from the table */
|
|
133
149
|
function getTextureFormatInfoUsingTable(format: TextureFormat): TextureFormatInfo {
|
|
134
150
|
const info = getTextureFormatDefinition(format);
|
|
@@ -166,7 +182,7 @@ function getTextureFormatInfoUsingTable(format: TextureFormat): TextureFormatInf
|
|
|
166
182
|
|
|
167
183
|
/** Parses ASTC block widths from format string */
|
|
168
184
|
function getCompressedTextureBlockSize(
|
|
169
|
-
format:
|
|
185
|
+
format: TextureFormatCompressed
|
|
170
186
|
): {blockWidth: number; blockHeight: number} | null {
|
|
171
187
|
const REGEX = /.*-(\d+)x(\d+)-.*/;
|
|
172
188
|
const matches = REGEX.exec(format as string);
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
type TextureFormat,
|
|
7
|
+
type TextureFormatDepthStencil,
|
|
8
|
+
type TextureFormatCompressed
|
|
9
|
+
} from './texture-formats';
|
|
10
|
+
|
|
11
|
+
import {type DataTypeArray, NormalizedDataTypeArray} from '../data-types/data-types';
|
|
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
|
|
59
|
+
? 'uint8'
|
|
60
|
+
: T extends TextureFormatSint8
|
|
61
|
+
? 'sint8'
|
|
62
|
+
: T extends TextureFormatUnorm8
|
|
63
|
+
? 'unorm8'
|
|
64
|
+
: T extends TextureFormatSnorm8
|
|
65
|
+
? 'snorm8'
|
|
66
|
+
: T extends TextureFormatUint16
|
|
67
|
+
? 'uint16'
|
|
68
|
+
: T extends TextureFormatSint16
|
|
69
|
+
? 'sint16'
|
|
70
|
+
: T extends TextureFormatUnorm16
|
|
71
|
+
? 'unorm16'
|
|
72
|
+
: T extends TextureFormatSnorm16
|
|
73
|
+
? 'snorm16'
|
|
74
|
+
: T extends TextureFormatUint32
|
|
75
|
+
? 'uint32'
|
|
76
|
+
: T extends TextureFormatSint32
|
|
77
|
+
? 'sint32'
|
|
78
|
+
: T extends TextureFormatFloat16
|
|
79
|
+
? 'float16'
|
|
80
|
+
: T extends TextureFormatFloat32
|
|
81
|
+
? 'float32'
|
|
82
|
+
: T extends TextureFormatDepthStencil
|
|
83
|
+
? 'uint32'
|
|
84
|
+
: T extends TextureFormatCompressed
|
|
85
|
+
? 'uint8'
|
|
86
|
+
: T extends TextureFormatPacked16
|
|
87
|
+
? 'uint16'
|
|
88
|
+
: T extends TextureFormatPacked32
|
|
89
|
+
? 'uint32'
|
|
90
|
+
: never;
|
|
91
|
+
|
|
92
|
+
// Component groups
|
|
93
|
+
|
|
94
|
+
type TextureFormatR =
|
|
95
|
+
| 'r8uint'
|
|
96
|
+
| 'r8sint'
|
|
97
|
+
| 'r8unorm'
|
|
98
|
+
| 'r8snorm'
|
|
99
|
+
| 'r16unorm'
|
|
100
|
+
| 'r16snorm'
|
|
101
|
+
| 'r16uint'
|
|
102
|
+
| 'r16sint'
|
|
103
|
+
| 'r16float'
|
|
104
|
+
| 'r32uint'
|
|
105
|
+
| 'r32sint'
|
|
106
|
+
| 'r32float';
|
|
107
|
+
|
|
108
|
+
type TextureFormatRG =
|
|
109
|
+
| 'rg8unorm'
|
|
110
|
+
| 'rg8snorm'
|
|
111
|
+
| 'rg8uint'
|
|
112
|
+
| 'rg8sint'
|
|
113
|
+
| 'rg16unorm'
|
|
114
|
+
| 'rg16snorm'
|
|
115
|
+
| 'rg16uint'
|
|
116
|
+
| 'rg16sint'
|
|
117
|
+
| 'rg16float'
|
|
118
|
+
| 'rg32uint'
|
|
119
|
+
| 'rg32sint'
|
|
120
|
+
| 'rg32float';
|
|
121
|
+
|
|
122
|
+
type TextureFormatRGB =
|
|
123
|
+
| 'rgb8unorm-webgl'
|
|
124
|
+
| 'rgb8snorm-webgl'
|
|
125
|
+
| 'rgb16unorm-webgl'
|
|
126
|
+
| 'rgb16snorm-webgl'
|
|
127
|
+
| 'rgb32float-webgl';
|
|
128
|
+
|
|
129
|
+
type TextureFormatRGBA =
|
|
130
|
+
| 'rgba8uint'
|
|
131
|
+
| 'rgba8unorm'
|
|
132
|
+
| 'rgba8unorm-srgb'
|
|
133
|
+
| 'rgba8snorm'
|
|
134
|
+
| 'bgra8unorm'
|
|
135
|
+
| 'bgra8unorm-srgb'
|
|
136
|
+
| 'rgba8sint'
|
|
137
|
+
| 'rgba16unorm'
|
|
138
|
+
| 'rgba16snorm'
|
|
139
|
+
| 'rgba16uint'
|
|
140
|
+
| 'rgba16sint'
|
|
141
|
+
| 'rgba16float'
|
|
142
|
+
| 'rgba32uint'
|
|
143
|
+
| 'rgba32sint'
|
|
144
|
+
| 'rgba32float';
|
|
145
|
+
|
|
146
|
+
type TextureFormatPackedRGB = 'rgb565unorm-webgl' | 'rgb9e5ufloat' | 'rg11b10ufloat';
|
|
147
|
+
|
|
148
|
+
type TextureFormatPackedRGBA =
|
|
149
|
+
| 'rgba4unorm-webgl'
|
|
150
|
+
| 'rgb5a1unorm-webgl'
|
|
151
|
+
| 'rgb10a2unorm'
|
|
152
|
+
| 'rgb10a2uint';
|
|
153
|
+
|
|
154
|
+
// Data type groups
|
|
155
|
+
|
|
156
|
+
type TextureFormatUnorm8 =
|
|
157
|
+
| 'r8unorm'
|
|
158
|
+
| 'rg8unorm'
|
|
159
|
+
| 'rgb8unorm-webgl'
|
|
160
|
+
| 'rgba8unorm'
|
|
161
|
+
| 'rgba8unorm-srgb'
|
|
162
|
+
| 'bgra8unorm'
|
|
163
|
+
| 'bgra8unorm-srgb';
|
|
164
|
+
|
|
165
|
+
type TextureFormatSnorm8 = 'r8snorm' | 'rg8snorm' | 'rgb8snorm-webgl' | 'rgba8snorm';
|
|
166
|
+
|
|
167
|
+
type TextureFormatUint8 = 'r8uint' | 'rg8uint' | 'rgba8uint';
|
|
168
|
+
|
|
169
|
+
type TextureFormatSint8 = 'r8sint' | 'rg8sint' | 'rgba8sint';
|
|
170
|
+
|
|
171
|
+
type TextureFormatUnorm16 = 'r16unorm' | 'rg16unorm' | 'rgb16unorm-webgl' | 'rgba16unorm';
|
|
172
|
+
|
|
173
|
+
type TextureFormatSnorm16 = 'r16snorm' | 'rg16snorm' | 'rgb16snorm-webgl' | 'rgba16snorm';
|
|
174
|
+
|
|
175
|
+
type TextureFormatUint16 = 'r16uint' | 'rg16uint' | 'rgba16uint';
|
|
176
|
+
|
|
177
|
+
type TextureFormatSint16 = 'r16sint' | 'rg16sint' | 'rgba16sint';
|
|
178
|
+
|
|
179
|
+
type TextureFormatFloat16 = 'r16float' | 'rg16float' | 'rgba16float';
|
|
180
|
+
|
|
181
|
+
// 96-bit formats (deprecated!)
|
|
182
|
+
type TextureFormatUint32 = 'r32uint' | 'rg32uint' | 'rgba32uint';
|
|
183
|
+
|
|
184
|
+
type TextureFormatSint32 = 'r32sint' | 'rg32sint' | 'rgba32sint';
|
|
185
|
+
|
|
186
|
+
type TextureFormatFloat32 = 'r32float' | 'rg32float' | 'rgb32float-webgl' | 'rgba32float';
|
|
187
|
+
|
|
188
|
+
type TextureFormatPacked16 = 'rgba4unorm-webgl' | 'rgb565unorm-webgl' | 'rgb5a1unorm-webgl';
|
|
189
|
+
|
|
190
|
+
type TextureFormatPacked32 = 'rgb9e5ufloat' | 'rg11b10ufloat' | 'rgb10a2unorm' | 'rgb10a2uint';
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
TextureFormat,
|
|
7
|
+
TextureFormatColorUncompressed,
|
|
8
|
+
TextureFormatDepthStencil,
|
|
9
|
+
TextureFeature,
|
|
10
|
+
TextureFormatInfo,
|
|
11
|
+
TextureFormatCompressed
|
|
12
|
+
} from './texture-formats';
|
|
6
13
|
/* eslint-disable camelcase */
|
|
7
14
|
|
|
8
15
|
// Define local device feature strings to optimize minification
|
|
@@ -61,54 +68,70 @@ export function getTextureFormatTable(): Readonly<Record<TextureFormat, TextureF
|
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
// prettier-ignore
|
|
64
|
-
const
|
|
71
|
+
const TEXTURE_FORMAT_COLOR_DEPTH_TABLE: Readonly<Record<TextureFormatColorUncompressed | TextureFormatDepthStencil, TextureFormatDefinition>> = {
|
|
65
72
|
// 8-bit formats
|
|
66
73
|
'r8unorm': {},
|
|
67
|
-
'r8snorm': {render: snorm8_renderable},
|
|
68
|
-
'r8uint': {},
|
|
69
|
-
'r8sint': {},
|
|
70
|
-
|
|
71
|
-
// 16-bit formats
|
|
72
74
|
'rg8unorm': {},
|
|
73
|
-
'rg8snorm': {render: snorm8_renderable},
|
|
74
|
-
'rg8uint': {},
|
|
75
|
-
'rg8sint': {},
|
|
76
|
-
|
|
77
|
-
'r16uint': {},
|
|
78
|
-
'r16sint': {},
|
|
79
|
-
'r16float': {render: float16_renderable, filter: 'float16-filterable-webgl'},
|
|
80
|
-
'r16unorm-webgl': {f: norm16_renderable},
|
|
81
|
-
'r16snorm-webgl': {f: snorm16_renderable},
|
|
82
|
-
|
|
83
|
-
// Packed 16-bit formats
|
|
84
|
-
'rgba4unorm-webgl': {channels: 'rgba', bitsPerChannel: [4, 4, 4, 4], packed: true},
|
|
85
|
-
'rgb565unorm-webgl': {channels: 'rgb', bitsPerChannel: [5, 6, 5, 0], packed: true},
|
|
86
|
-
'rgb5a1unorm-webgl': {channels: 'rgba', bitsPerChannel: [5, 5, 5, 1], packed: true},
|
|
87
|
-
|
|
88
|
-
// 24-bit formats
|
|
89
75
|
'rgb8unorm-webgl': {},
|
|
90
|
-
'rgb8snorm-webgl': {},
|
|
91
|
-
|
|
92
|
-
// 32-bit formats
|
|
93
76
|
'rgba8unorm': {},
|
|
94
77
|
'rgba8unorm-srgb': {},
|
|
78
|
+
|
|
79
|
+
'r8snorm': {render: snorm8_renderable},
|
|
80
|
+
'rg8snorm': {render: snorm8_renderable},
|
|
81
|
+
'rgb8snorm-webgl': {},
|
|
95
82
|
'rgba8snorm': {render: snorm8_renderable},
|
|
83
|
+
|
|
84
|
+
'r8uint': {},
|
|
85
|
+
'rg8uint': {},
|
|
96
86
|
'rgba8uint': {},
|
|
87
|
+
|
|
88
|
+
'r8sint': {},
|
|
89
|
+
'rg8sint': {},
|
|
97
90
|
'rgba8sint': {},
|
|
98
91
|
|
|
99
|
-
// 32-bit, reverse colors, webgpu only
|
|
100
92
|
'bgra8unorm': {},
|
|
101
93
|
'bgra8unorm-srgb': {},
|
|
102
94
|
|
|
95
|
+
|
|
96
|
+
'r16unorm': {f: norm16_renderable},
|
|
97
|
+
'rg16unorm': {render: norm16_renderable},
|
|
98
|
+
'rgb16unorm-webgl': {f: norm16_renderable}, // rgb not renderable
|
|
99
|
+
'rgba16unorm': {render: norm16_renderable},
|
|
100
|
+
|
|
101
|
+
'r16snorm': {f: snorm16_renderable},
|
|
102
|
+
'rg16snorm': {render: snorm16_renderable},
|
|
103
|
+
'rgb16snorm-webgl': {f: norm16_renderable}, // rgb not renderable
|
|
104
|
+
'rgba16snorm': {render: snorm16_renderable},
|
|
105
|
+
|
|
106
|
+
'r16uint': {},
|
|
103
107
|
'rg16uint': {},
|
|
108
|
+
'rgba16uint': {},
|
|
109
|
+
|
|
110
|
+
'r16sint': {},
|
|
104
111
|
'rg16sint': {},
|
|
112
|
+
'rgba16sint': {},
|
|
113
|
+
|
|
114
|
+
'r16float': {render: float16_renderable, filter: 'float16-filterable-webgl'},
|
|
105
115
|
'rg16float': {render: float16_renderable, filter: float16_filterable},
|
|
106
|
-
'
|
|
107
|
-
'rg16snorm-webgl': {render: snorm16_renderable},
|
|
116
|
+
'rgba16float': {render: float16_renderable, filter: float16_filterable},
|
|
108
117
|
|
|
109
118
|
'r32uint': {},
|
|
119
|
+
'rg32uint': {},
|
|
120
|
+
'rgba32uint': {},
|
|
121
|
+
|
|
110
122
|
'r32sint': {},
|
|
123
|
+
'rg32sint': {},
|
|
124
|
+
'rgba32sint': {},
|
|
125
|
+
|
|
111
126
|
'r32float': {render: float32_renderable, filter: float32_filterable},
|
|
127
|
+
'rg32float': {render: false, filter: float32_filterable},
|
|
128
|
+
'rgb32float-webgl': {render: float32_renderable, filter: float32_filterable},
|
|
129
|
+
'rgba32float': {render: float32_renderable, filter: float32_filterable},
|
|
130
|
+
|
|
131
|
+
// Packed 16-bit formats
|
|
132
|
+
'rgba4unorm-webgl': {channels: 'rgba', bitsPerChannel: [4, 4, 4, 4], packed: true},
|
|
133
|
+
'rgb565unorm-webgl': {channels: 'rgb', bitsPerChannel: [5, 6, 5, 0], packed: true},
|
|
134
|
+
'rgb5a1unorm-webgl': {channels: 'rgba', bitsPerChannel: [5, 5, 5, 1], packed: true},
|
|
112
135
|
|
|
113
136
|
// Packed 32 bit formats
|
|
114
137
|
'rgb9e5ufloat': {channels: 'rgb', packed: true, render: rgb9e5ufloat_renderable}, // , filter: true},
|
|
@@ -116,29 +139,7 @@ const TEXTURE_FORMAT_TABLE: Readonly<Record<TextureFormat, TextureFormatDefiniti
|
|
|
116
139
|
'rgb10a2unorm': {channels: 'rgba', bitsPerChannel: [10, 10, 10, 2], packed: true, p: 1},
|
|
117
140
|
'rgb10a2uint': {channels: 'rgba', bitsPerChannel: [10, 10, 10, 2], packed: true, p: 1},
|
|
118
141
|
|
|
119
|
-
//
|
|
120
|
-
'rgb16unorm-webgl': {f: norm16_renderable}, // rgb not renderable
|
|
121
|
-
'rgb16snorm-webgl': {f: norm16_renderable}, // rgb not renderable
|
|
122
|
-
|
|
123
|
-
// 64-bit formats
|
|
124
|
-
'rg32uint': {},
|
|
125
|
-
'rg32sint': {},
|
|
126
|
-
'rg32float': {render: false, filter: float32_filterable},
|
|
127
|
-
'rgba16uint': {},
|
|
128
|
-
'rgba16sint': {},
|
|
129
|
-
'rgba16float': {render: float16_renderable, filter: float16_filterable},
|
|
130
|
-
'rgba16unorm-webgl': {render: norm16_renderable},
|
|
131
|
-
'rgba16snorm-webgl': {render: snorm16_renderable},
|
|
132
|
-
|
|
133
|
-
// 96-bit formats (deprecated!)
|
|
134
|
-
'rgb32float-webgl': {render: float32_renderable, filter: float32_filterable},
|
|
135
|
-
|
|
136
|
-
// 128-bit formats
|
|
137
|
-
'rgba32uint': {},
|
|
138
|
-
'rgba32sint': {},
|
|
139
|
-
'rgba32float': {render: float32_renderable, filter: float32_filterable},
|
|
140
|
-
|
|
141
|
-
// Depth/stencil
|
|
142
|
+
// Depth/stencil Formats
|
|
142
143
|
|
|
143
144
|
// Depth and stencil formats
|
|
144
145
|
stencil8: {attachment: 'stencil', bitsPerChannel: [8, 0, 0, 0], dataType: 'uint8'},
|
|
@@ -149,6 +150,10 @@ const TEXTURE_FORMAT_TABLE: Readonly<Record<TextureFormat, TextureFormatDefiniti
|
|
|
149
150
|
'depth24plus-stencil8': {attachment: 'depth-stencil', bitsPerChannel: [24, 8, 0, 0], packed: true},
|
|
150
151
|
// "depth32float-stencil8" feature
|
|
151
152
|
'depth32float-stencil8': {attachment: 'depth-stencil', bitsPerChannel: [32, 8, 0, 0], packed: true},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// prettier-ignore
|
|
156
|
+
const TEXTURE_FORMAT_COMPRESSED_TABLE: Readonly<Record<TextureFormatCompressed, TextureFormatDefinition>> = {
|
|
152
157
|
|
|
153
158
|
// BC compressed formats: check device.features.has("texture-compression-bc");
|
|
154
159
|
|
|
@@ -233,3 +238,8 @@ const TEXTURE_FORMAT_TABLE: Readonly<Record<TextureFormat, TextureFormatDefiniti
|
|
|
233
238
|
'atc-rgba-unorm-webgl': {f: texture_compression_atc_webgl},
|
|
234
239
|
'atc-rgbai-unorm-webgl': {f: texture_compression_atc_webgl}
|
|
235
240
|
};
|
|
241
|
+
|
|
242
|
+
export const TEXTURE_FORMAT_TABLE: Readonly<Record<TextureFormat, TextureFormatDefinition>> = {
|
|
243
|
+
...TEXTURE_FORMAT_COLOR_DEPTH_TABLE,
|
|
244
|
+
...TEXTURE_FORMAT_COMPRESSED_TABLE
|
|
245
|
+
};
|