@luma.gl/core 9.2.0-alpha.1 → 9.2.0-alpha.5
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 +19 -5
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +53 -3
- 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 +430 -274
- package/dist/dist.min.js +5 -4
- package/dist/index.cjs +426 -273
- 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 +3 -3
- package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
- package/dist/portable/uniform-buffer-layout.js +8 -9
- package/dist/portable/uniform-buffer-layout.js.map +1 -1
- package/dist/portable/uniform-store.d.ts +2 -1
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +1 -1
- package/dist/portable/uniform-store.js.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 +66 -8
- 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 +13 -12
- package/src/portable/uniform-store.ts +6 -2
- 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
|
@@ -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
|
+
};
|
|
@@ -2,7 +2,61 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {NormalizedDataType} from '
|
|
5
|
+
import {NormalizedDataType} from '../data-types/data-types';
|
|
6
|
+
|
|
7
|
+
/** Information about the structure of a texture format */
|
|
8
|
+
export type TextureFormatInfo = {
|
|
9
|
+
/** The format that is described */
|
|
10
|
+
format: TextureFormat;
|
|
11
|
+
/** Color or depth stencil attachment formats */
|
|
12
|
+
attachment?: 'color' | 'depth' | 'stencil' | 'depth-stencil';
|
|
13
|
+
/** String describing which channels this texture has */
|
|
14
|
+
channels: 'r' | 'rg' | 'rgb' | 'rgba' | 'bgra';
|
|
15
|
+
/** Number of components (corresponds to channels string) */
|
|
16
|
+
components: 1 | 2 | 3 | 4;
|
|
17
|
+
/** What is the data type of each component */
|
|
18
|
+
dataType?: NormalizedDataType;
|
|
19
|
+
/** Number of bytes per pixel */
|
|
20
|
+
bytesPerPixel: number;
|
|
21
|
+
/** Number of bits per channel (may be unreliable for packed formats) */
|
|
22
|
+
bitsPerChannel: [number, number, number, number];
|
|
23
|
+
/** If this is a packed data type */
|
|
24
|
+
packed?: boolean;
|
|
25
|
+
/** SRGB texture format? */
|
|
26
|
+
srgb?: boolean;
|
|
27
|
+
/** WebGL specific texture format? */
|
|
28
|
+
webgl?: boolean;
|
|
29
|
+
/** Is this an integer or floating point format? */
|
|
30
|
+
integer: boolean;
|
|
31
|
+
/** Is this a signed or unsigned format? */
|
|
32
|
+
signed: boolean;
|
|
33
|
+
/** Is this a normalized integer format? */
|
|
34
|
+
normalized: boolean;
|
|
35
|
+
/** Is this a compressed texture format */
|
|
36
|
+
compressed?: boolean;
|
|
37
|
+
/** Compressed formats only: Block size for ASTC formats (texture width must be a multiple of this value) */
|
|
38
|
+
blockWidth?: number;
|
|
39
|
+
/** Compressed formats only: Block size for ASTC formats (texture height must be a multiple of this value) */
|
|
40
|
+
blockHeight?: number;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Texture format capabilities.
|
|
45
|
+
* @note Not directly usable. Can contain TextureFeature strings that need to be checked against a specific device.
|
|
46
|
+
*/
|
|
47
|
+
export type TextureFormatCapabilities = {
|
|
48
|
+
format: TextureFormat;
|
|
49
|
+
/** Can the format be created */
|
|
50
|
+
create: TextureFeature | boolean;
|
|
51
|
+
/** If a feature string, the specified device feature determines if format is renderable. */
|
|
52
|
+
render: TextureFeature | boolean;
|
|
53
|
+
/** If a feature string, the specified device feature determines if format is filterable. */
|
|
54
|
+
filter: TextureFeature | boolean;
|
|
55
|
+
/** If a feature string, the specified device feature determines if format is blendable. */
|
|
56
|
+
blend: TextureFeature | boolean;
|
|
57
|
+
/** If a feature string, the specified device feature determines if format is storeable. */
|
|
58
|
+
store: TextureFeature | boolean;
|
|
59
|
+
};
|
|
6
60
|
|
|
7
61
|
/**
|
|
8
62
|
* These represent the main compressed texture formats
|
|
@@ -18,11 +72,40 @@ export type TextureCompression =
|
|
|
18
72
|
| 'astc'
|
|
19
73
|
| 'rgtc';
|
|
20
74
|
|
|
75
|
+
// TEXTURE FEATURES (optionally supported by the device)
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Texture feature checks
|
|
79
|
+
* @note these must be a subset of DeviceFeatures.
|
|
80
|
+
*/
|
|
81
|
+
export type TextureFeature =
|
|
82
|
+
| 'texture-compression-bc'
|
|
83
|
+
| 'texture-compression-astc'
|
|
84
|
+
| 'texture-compression-etc2'
|
|
85
|
+
| 'texture-compression-etc1-webgl'
|
|
86
|
+
| 'texture-compression-pvrtc-webgl'
|
|
87
|
+
| 'texture-compression-atc-webgl'
|
|
88
|
+
| 'float32-renderable-webgl'
|
|
89
|
+
| 'float16-renderable-webgl'
|
|
90
|
+
| 'rgb9e5ufloat-renderable-webgl'
|
|
91
|
+
| 'snorm8-renderable-webgl'
|
|
92
|
+
| 'norm16-renderable-webgl'
|
|
93
|
+
| 'snorm16-renderable-webgl'
|
|
94
|
+
| 'float32-filterable'
|
|
95
|
+
| 'float16-filterable-webgl';
|
|
96
|
+
|
|
97
|
+
/** Chrome-specific extensions. Expected to eventually become standard features. */
|
|
98
|
+
export type ChromeExperimentalTextureFeature =
|
|
99
|
+
| 'chromium-experimental-unorm16-texture-formats' // 'r16unorm', 'rg16unorm', 'rgba16unorm'
|
|
100
|
+
| 'chromium-experimental-snorm16-texture-formats'; // 'r16snorm', 'rg16snorm', 'rgba16snorm'
|
|
101
|
+
|
|
102
|
+
// TEXTURE FORMATS
|
|
103
|
+
|
|
21
104
|
/** Texture formats */
|
|
22
|
-
export type TextureFormat =
|
|
105
|
+
export type TextureFormat = TextureFormatColor | TextureFormatDepthStencil;
|
|
23
106
|
|
|
24
107
|
/** Depth and stencil texture formats */
|
|
25
|
-
export type
|
|
108
|
+
export type TextureFormatDepthStencil =
|
|
26
109
|
| 'stencil8'
|
|
27
110
|
| 'depth16unorm'
|
|
28
111
|
| 'depth24plus'
|
|
@@ -32,61 +115,72 @@ export type DepthStencilTextureFormat =
|
|
|
32
115
|
| 'depth32float-stencil8';
|
|
33
116
|
|
|
34
117
|
/** Texture formats for color attachments */
|
|
35
|
-
export type
|
|
36
|
-
| WebGPUColorTextureFormat
|
|
37
|
-
| WebGL2ColorTextureFormat
|
|
38
|
-
| CompressedTextureFormat;
|
|
118
|
+
export type TextureFormatColor = TextureFormatColorUncompressed | TextureFormatCompressed;
|
|
39
119
|
|
|
40
|
-
export type
|
|
41
|
-
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
120
|
+
export type TextureFormatColorUncompressed =
|
|
121
|
+
| TextureFormatUnorm8
|
|
122
|
+
| TextureFormatSnorm8
|
|
123
|
+
| TextureFormatUint8
|
|
124
|
+
| TextureFormatSint8
|
|
125
|
+
| TextureFormatUnorm16
|
|
126
|
+
| TextureFormatSnorm16
|
|
127
|
+
| TextureFormatUint16
|
|
128
|
+
| TextureFormatSint16
|
|
129
|
+
| TextureFormatFloat16
|
|
130
|
+
| TextureFormatUint32
|
|
131
|
+
| TextureFormatSint32
|
|
132
|
+
| TextureFormatFloat32
|
|
133
|
+
| TextureFormatPacked16
|
|
134
|
+
| TextureFormatPacked32;
|
|
46
135
|
|
|
47
|
-
|
|
48
|
-
| '
|
|
49
|
-
| 'r16sint'
|
|
50
|
-
| 'r16float'
|
|
136
|
+
type TextureFormatUnorm8 =
|
|
137
|
+
| 'r8unorm'
|
|
51
138
|
| 'rg8unorm'
|
|
52
|
-
| '
|
|
53
|
-
| 'rg8uint'
|
|
54
|
-
| 'rg8sint'
|
|
55
|
-
|
|
56
|
-
// 32-bit formats
|
|
57
|
-
| 'r32uint'
|
|
58
|
-
| 'r32sint'
|
|
59
|
-
| 'r32float'
|
|
60
|
-
| 'rg16uint'
|
|
61
|
-
| 'rg16sint'
|
|
62
|
-
| 'rg16float'
|
|
139
|
+
| 'rgb8unorm-webgl'
|
|
63
140
|
| 'rgba8unorm'
|
|
64
141
|
| 'rgba8unorm-srgb'
|
|
65
|
-
| 'rgba8snorm'
|
|
66
|
-
| 'rgba8uint'
|
|
67
|
-
| 'rgba8sint'
|
|
68
142
|
| 'bgra8unorm'
|
|
69
|
-
| 'bgra8unorm-srgb'
|
|
70
|
-
// Packed 32-bit formats
|
|
71
|
-
| 'rgb9e5ufloat'
|
|
72
|
-
| 'rgb10a2unorm'
|
|
73
|
-
| 'rgb10a2uint'
|
|
74
|
-
| 'rg11b10ufloat'
|
|
143
|
+
| 'bgra8unorm-srgb';
|
|
75
144
|
|
|
76
|
-
|
|
77
|
-
| 'rg32uint'
|
|
78
|
-
| 'rg32sint'
|
|
79
|
-
| 'rg32float'
|
|
80
|
-
| 'rgba16uint'
|
|
81
|
-
| 'rgba16sint'
|
|
82
|
-
| 'rgba16float'
|
|
145
|
+
type TextureFormatSnorm8 = 'r8snorm' | 'rg8snorm' | 'rgb8snorm-webgl' | 'rgba8snorm';
|
|
83
146
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
147
|
+
type TextureFormatUint8 = 'r8uint' | 'rg8uint' | 'rgba8uint';
|
|
148
|
+
|
|
149
|
+
type TextureFormatSint8 = 'r8sint' | 'rg8sint' | 'rgba8sint';
|
|
150
|
+
|
|
151
|
+
type TextureFormatUnorm16 = 'r16unorm' | 'rg16unorm' | 'rgb16unorm-webgl' | 'rgba16unorm';
|
|
152
|
+
|
|
153
|
+
type TextureFormatSnorm16 = 'r16snorm' | 'rg16snorm' | 'rgb16snorm-webgl' | 'rgba16snorm';
|
|
154
|
+
|
|
155
|
+
type TextureFormatUint16 = 'r16uint' | 'rg16uint' | 'rgba16uint';
|
|
156
|
+
|
|
157
|
+
type TextureFormatSint16 = 'r16sint' | 'rg16sint' | 'rgba16sint';
|
|
158
|
+
|
|
159
|
+
type TextureFormatFloat16 = 'r16float' | 'rg16float' | 'rgba16float';
|
|
160
|
+
|
|
161
|
+
// 96-bit formats (deprecated!)
|
|
162
|
+
type TextureFormatUint32 = 'r32uint' | 'rg32uint' | 'rgba32uint';
|
|
163
|
+
|
|
164
|
+
type TextureFormatSint32 = 'r32sint' | 'rg32sint' | 'rgba32sint';
|
|
165
|
+
|
|
166
|
+
type TextureFormatFloat32 = 'r32float' | 'rg32float' | 'rgb32float-webgl' | 'rgba32float';
|
|
167
|
+
|
|
168
|
+
type TextureFormatPacked16 = 'rgba4unorm-webgl' | 'rgb565unorm-webgl' | 'rgb5a1unorm-webgl';
|
|
169
|
+
|
|
170
|
+
type TextureFormatPacked32 = 'rgb9e5ufloat' | 'rg11b10ufloat' | 'rgb10a2unorm' | 'rgb10a2uint';
|
|
171
|
+
|
|
172
|
+
export type TextureFormatCompressed =
|
|
173
|
+
| 'bc1-rgb-unorm-webgl'
|
|
174
|
+
| 'bc1-rgb-unorm-srgb-webgl'
|
|
175
|
+
| 'pvrtc-rgb4unorm-webgl'
|
|
176
|
+
| 'pvrtc-rgba4unorm-webgl'
|
|
177
|
+
| 'pvrtc-rbg2unorm-webgl'
|
|
178
|
+
| 'pvrtc-rgba2unorm-webgl'
|
|
179
|
+
| 'etc1-rbg-unorm-webgl'
|
|
180
|
+
| 'atc-rgb-unorm-webgl'
|
|
181
|
+
| 'atc-rgba-unorm-webgl'
|
|
182
|
+
| 'atc-rgbai-unorm-webgl'
|
|
88
183
|
|
|
89
|
-
export type CompressedTextureFormat =
|
|
90
184
|
// BC compressed formats usable if 'texture-compression-bc' is both
|
|
91
185
|
// supported by the device/user agent and enabled in requestDevice.
|
|
92
186
|
| 'bc1-rgba-unorm'
|
|
@@ -149,104 +243,92 @@ export type CompressedTextureFormat =
|
|
|
149
243
|
| 'astc-12x12-unorm'
|
|
150
244
|
| 'astc-12x12-unorm-srgb';
|
|
151
245
|
|
|
152
|
-
|
|
153
|
-
export type WebGL2ColorTextureFormat =
|
|
154
|
-
| 'r16unorm-webgl'
|
|
155
|
-
| 'r16snorm-webgl'
|
|
156
|
-
| 'rgba4unorm-webgl'
|
|
157
|
-
| 'rgb565unorm-webgl'
|
|
158
|
-
| 'rgb5a1unorm-webgl'
|
|
159
|
-
| 'rgb8unorm-webgl'
|
|
160
|
-
| 'rgb8snorm-webgl'
|
|
161
|
-
| 'rg16unorm-webgl'
|
|
162
|
-
| 'rg16snorm-webgl'
|
|
163
|
-
| 'rgb10a2uint'
|
|
164
|
-
| 'rgb16unorm-webgl'
|
|
165
|
-
| 'rgb16snorm-webgl'
|
|
166
|
-
| 'rgba16unorm-webgl'
|
|
167
|
-
| 'rgba16snorm-webgl'
|
|
168
|
-
| 'rgb32float-webgl'
|
|
169
|
-
| 'bc1-rgb-unorm-webgl'
|
|
170
|
-
| 'bc1-rgb-unorm-srgb-webgl'
|
|
171
|
-
| 'pvrtc-rgb4unorm-webgl'
|
|
172
|
-
| 'pvrtc-rgba4unorm-webgl'
|
|
173
|
-
| 'pvrtc-rbg2unorm-webgl'
|
|
174
|
-
| 'pvrtc-rgba2unorm-webgl'
|
|
175
|
-
| 'etc1-rbg-unorm-webgl'
|
|
176
|
-
| 'atc-rgb-unorm-webgl'
|
|
177
|
-
| 'atc-rgba-unorm-webgl'
|
|
178
|
-
| 'atc-rgbai-unorm-webgl';
|
|
246
|
+
// Texture format helper types
|
|
179
247
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
248
|
+
export type TextureFormatDataType<T extends TextureFormat> = T extends TextureFormatUint8
|
|
249
|
+
? 'uint8'
|
|
250
|
+
: T extends TextureFormatSint8
|
|
251
|
+
? 'sint8'
|
|
252
|
+
: T extends TextureFormatUnorm8
|
|
253
|
+
? 'unorm8'
|
|
254
|
+
: T extends TextureFormatSnorm8
|
|
255
|
+
? 'snorm8'
|
|
256
|
+
: T extends TextureFormatUint16
|
|
257
|
+
? 'uint16'
|
|
258
|
+
: T extends TextureFormatSint16
|
|
259
|
+
? 'sint16'
|
|
260
|
+
: T extends TextureFormatUnorm16
|
|
261
|
+
? 'unorm16'
|
|
262
|
+
: T extends TextureFormatSnorm16
|
|
263
|
+
? 'snorm16'
|
|
264
|
+
: T extends TextureFormatUint32
|
|
265
|
+
? 'uint32'
|
|
266
|
+
: T extends TextureFormatSint32
|
|
267
|
+
? 'sint32'
|
|
268
|
+
: T extends TextureFormatFloat16
|
|
269
|
+
? 'float16'
|
|
270
|
+
: T extends TextureFormatFloat32
|
|
271
|
+
? 'float32'
|
|
272
|
+
: T extends TextureFormatDepthStencil
|
|
273
|
+
? 'uint32'
|
|
274
|
+
: T extends TextureFormatCompressed
|
|
275
|
+
? 'uint8'
|
|
276
|
+
: T extends TextureFormatPacked16
|
|
277
|
+
? 'uint16'
|
|
278
|
+
: T extends TextureFormatPacked32
|
|
279
|
+
? 'uint32'
|
|
280
|
+
: never;
|
|
199
281
|
|
|
200
|
-
|
|
201
|
-
export type
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
/** SRGB texture format? */
|
|
219
|
-
srgb?: boolean;
|
|
220
|
-
/** WebGL specific texture format? */
|
|
221
|
-
webgl?: boolean;
|
|
222
|
-
/** Is this an integer or floating point format? */
|
|
223
|
-
integer: boolean;
|
|
224
|
-
/** Is this a signed or unsigned format? */
|
|
225
|
-
signed: boolean;
|
|
226
|
-
/** Is this a normalized integer format? */
|
|
227
|
-
normalized: boolean;
|
|
228
|
-
/** Is this a compressed texture format */
|
|
229
|
-
compressed?: boolean;
|
|
230
|
-
/** Compressed formats only: Block size for ASTC formats (texture width must be a multiple of this value) */
|
|
231
|
-
blockWidth?: number;
|
|
232
|
-
/** Compressed formats only: Block size for ASTC formats (texture height must be a multiple of this value) */
|
|
233
|
-
blockHeight?: number;
|
|
234
|
-
};
|
|
282
|
+
/*
|
|
283
|
+
export type TextureFormatColorWebGPU =
|
|
284
|
+
// 8-bit formats
|
|
285
|
+
| 'r8unorm'
|
|
286
|
+
| 'r8snorm'
|
|
287
|
+
| 'r8uint'
|
|
288
|
+
| 'r8sint'
|
|
289
|
+
| 'rg8unorm'
|
|
290
|
+
| 'rg8snorm'
|
|
291
|
+
| 'rg8uint'
|
|
292
|
+
| 'rg8sint'
|
|
293
|
+
| 'rgba8unorm'
|
|
294
|
+
| 'rgba8unorm-srgb'
|
|
295
|
+
| 'rgba8snorm'
|
|
296
|
+
| 'rgba8uint'
|
|
297
|
+
| 'rgba8sint'
|
|
298
|
+
| 'bgra8unorm'
|
|
299
|
+
| 'bgra8unorm-srgb'
|
|
235
300
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
301
|
+
// 16-bit formats
|
|
302
|
+
| 'r16unorm' // feature: 'chromium-experimental-snorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16unorm', 'rg16unorm', 'rgba16unorm',
|
|
303
|
+
| 'r16snorm' // feature: 'chromium-experimental-unorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16snorm', 'rg16snorm', 'rgba16snorm'.
|
|
304
|
+
| 'r16uint'
|
|
305
|
+
| 'r16sint'
|
|
306
|
+
| 'r16float'
|
|
307
|
+
| 'rg16unorm' // feature: 'chromium-experimental-snorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16unorm', 'rg16unorm', 'rgba16unorm',
|
|
308
|
+
| 'rg16snorm' // feature: 'chromium-experimental-unorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16snorm', 'rg16snorm', 'rgba16snorm'.
|
|
309
|
+
| 'rgba16unorm' // feature: 'chromium-experimental-snorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16unorm', 'rg16unorm', 'rgba16unorm',
|
|
310
|
+
| 'rgba16snorm' // feature: 'chromium-experimental-unorm16-texture-formats' chrome://flags/#enable-unsafe-webgpu 'r16snorm', 'rg16snorm', 'rgba16snorm'.
|
|
311
|
+
| 'rg16uint'
|
|
312
|
+
| 'rgba16uint'
|
|
313
|
+
| 'rg16sint'
|
|
314
|
+
| 'rgba16sint'
|
|
315
|
+
| 'rg16float'
|
|
316
|
+
| 'rgba16float'
|
|
317
|
+
|
|
318
|
+
// 32-bit formats
|
|
319
|
+
| 'r32uint'
|
|
320
|
+
| 'rg32uint'
|
|
321
|
+
| 'rgba32uint'
|
|
322
|
+
| 'r32sint'
|
|
323
|
+
| 'rg32sint'
|
|
324
|
+
| 'rgba32sint'
|
|
325
|
+
| 'r32float'
|
|
326
|
+
| 'rg32float'
|
|
327
|
+
| 'rgba32float'
|
|
328
|
+
|
|
329
|
+
// Packed 32-bit formats
|
|
330
|
+
| 'rgb9e5ufloat'
|
|
331
|
+
| 'rgb10a2unorm'
|
|
332
|
+
| 'rgb10a2uint'
|
|
333
|
+
| 'rg11b10ufloat';
|
|
334
|
+
*/
|
|
@@ -3,13 +3,9 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {TypedArray} from '../../types';
|
|
6
|
-
import type {NormalizedDataType, PrimitiveDataType, SignedDataType} from '../data-types';
|
|
7
|
-
import type {VertexFormat, VertexFormatInfo} from '
|
|
8
|
-
import {
|
|
9
|
-
getDataTypeInfo,
|
|
10
|
-
getDataTypeFromTypedArray,
|
|
11
|
-
makeNormalizedDataType
|
|
12
|
-
} from './decode-data-types';
|
|
6
|
+
import type {NormalizedDataType, PrimitiveDataType, SignedDataType} from '../data-types/data-types';
|
|
7
|
+
import type {VertexFormat, VertexFormatInfo} from './vertex-formats';
|
|
8
|
+
import {getDataTypeInfo, getDataType, getNormalizedDataType} from '../data-types/decode-data-types';
|
|
13
9
|
|
|
14
10
|
/**
|
|
15
11
|
* Decodes a vertex format, returning type, components, byte length and flags (integer, signed, normalized)
|
|
@@ -48,14 +44,14 @@ export function makeVertexFormat(
|
|
|
48
44
|
normalized?: boolean
|
|
49
45
|
): VertexFormat {
|
|
50
46
|
const dataType: NormalizedDataType = normalized
|
|
51
|
-
?
|
|
47
|
+
? getNormalizedDataType(signedDataType)
|
|
52
48
|
: signedDataType;
|
|
53
49
|
|
|
54
50
|
switch (dataType) {
|
|
55
51
|
// TODO - Special cases for WebGL (not supported on WebGPU), overrides the check below
|
|
56
52
|
case 'unorm8':
|
|
57
53
|
if (components === 1) {
|
|
58
|
-
return 'unorm8
|
|
54
|
+
return 'unorm8';
|
|
59
55
|
}
|
|
60
56
|
if (components === 3) {
|
|
61
57
|
return 'unorm8x3-webgl';
|
|
@@ -94,7 +90,7 @@ export function getVertexFormatFromAttribute(
|
|
|
94
90
|
}
|
|
95
91
|
|
|
96
92
|
const components = size as 1 | 2 | 3 | 4;
|
|
97
|
-
const signedDataType =
|
|
93
|
+
const signedDataType = getDataType(typedArray);
|
|
98
94
|
return makeVertexFormat(signedDataType, components, normalized);
|
|
99
95
|
}
|
|
100
96
|
|