@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.
Files changed (165) hide show
  1. package/dist/adapter/canvas-context.d.ts +17 -3
  2. package/dist/adapter/canvas-context.d.ts.map +1 -1
  3. package/dist/adapter/canvas-context.js +48 -2
  4. package/dist/adapter/canvas-context.js.map +1 -1
  5. package/dist/adapter/device.d.ts +56 -11
  6. package/dist/adapter/device.d.ts.map +1 -1
  7. package/dist/adapter/device.js +78 -22
  8. package/dist/adapter/device.js.map +1 -1
  9. package/dist/adapter/luma.js +1 -1
  10. package/dist/adapter/resources/buffer.d.ts +13 -7
  11. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  12. package/dist/adapter/resources/buffer.js +1 -5
  13. package/dist/adapter/resources/buffer.js.map +1 -1
  14. package/dist/adapter/resources/command-encoder.d.ts +0 -1
  15. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  16. package/dist/adapter/resources/command-encoder.js.map +1 -1
  17. package/dist/adapter/resources/framebuffer.d.ts +3 -3
  18. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  19. package/dist/adapter/resources/pipeline-layout.d.ts +13 -0
  20. package/dist/adapter/resources/pipeline-layout.d.ts.map +1 -0
  21. package/dist/adapter/resources/pipeline-layout.js +21 -0
  22. package/dist/adapter/resources/pipeline-layout.js.map +1 -0
  23. package/dist/adapter/resources/render-pipeline.d.ts +4 -4
  24. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  25. package/dist/adapter/resources/resource.d.ts +1 -0
  26. package/dist/adapter/resources/resource.d.ts.map +1 -1
  27. package/dist/adapter/resources/resource.js.map +1 -1
  28. package/dist/adapter/resources/texture-view.d.ts +1 -1
  29. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  30. package/dist/adapter/resources/texture.d.ts +1 -1
  31. package/dist/adapter/resources/texture.d.ts.map +1 -1
  32. package/dist/adapter/resources/vertex-array.js +1 -1
  33. package/dist/adapter/resources/vertex-array.js.map +1 -1
  34. package/dist/adapter/types/attachments.d.ts +3 -3
  35. package/dist/adapter/types/attachments.d.ts.map +1 -1
  36. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  37. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  38. package/dist/adapter/types/parameters.d.ts +2 -2
  39. package/dist/adapter/types/parameters.d.ts.map +1 -1
  40. package/dist/adapter/types/shader-layout.d.ts +5 -6
  41. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  42. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +3 -3
  43. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  44. package/dist/adapter-utils/get-attribute-from-layouts.js +2 -2
  45. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  46. package/dist/dist.dev.js +417 -267
  47. package/dist/dist.min.js +5 -4
  48. package/dist/index.cjs +416 -266
  49. package/dist/index.cjs.map +4 -4
  50. package/dist/index.d.ts +18 -20
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +8 -7
  53. package/dist/index.js.map +1 -1
  54. package/dist/portable/uniform-block.d.ts +1 -1
  55. package/dist/portable/uniform-block.d.ts.map +1 -1
  56. package/dist/portable/uniform-buffer-layout.d.ts +2 -2
  57. package/dist/portable/uniform-buffer-layout.d.ts.map +1 -1
  58. package/dist/portable/uniform-buffer-layout.js +2 -2
  59. package/dist/portable/uniform-buffer-layout.js.map +1 -1
  60. package/dist/portable/uniform-store.d.ts +1 -1
  61. package/dist/portable/uniform-store.d.ts.map +1 -1
  62. package/dist/shadertypes/{data-types.d.ts → data-types/data-types.d.ts} +4 -0
  63. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -0
  64. package/dist/shadertypes/data-types/data-types.js.map +1 -0
  65. package/dist/shadertypes/{utils → data-types}/decode-data-types.d.ts +4 -4
  66. package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -0
  67. package/dist/shadertypes/data-types/decode-data-types.js +74 -0
  68. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -0
  69. package/dist/shadertypes/{utils → data-types}/decode-shader-types.d.ts +2 -2
  70. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +1 -0
  71. package/dist/shadertypes/data-types/decode-shader-types.js.map +1 -0
  72. package/dist/shadertypes/data-types/shader-types.d.ts.map +1 -0
  73. package/dist/shadertypes/data-types/shader-types.js.map +1 -0
  74. package/dist/shadertypes/textures/pixel-utils.d.ts +112 -0
  75. package/dist/shadertypes/textures/pixel-utils.d.ts.map +1 -0
  76. package/dist/shadertypes/textures/pixel-utils.js +193 -0
  77. package/dist/shadertypes/textures/pixel-utils.js.map +1 -0
  78. package/dist/shadertypes/textures/texture-format-decoder.d.ts +18 -0
  79. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +1 -0
  80. package/dist/shadertypes/{utils/decode-texture-format.js → textures/texture-format-decoder.js} +48 -35
  81. package/dist/shadertypes/textures/texture-format-decoder.js.map +1 -0
  82. package/dist/shadertypes/textures/texture-format-generics.d.ts +33 -0
  83. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +1 -0
  84. package/dist/shadertypes/{texture-formats.js → textures/texture-format-generics.js} +1 -1
  85. package/dist/shadertypes/textures/texture-format-generics.js.map +1 -0
  86. package/dist/shadertypes/{utils → textures}/texture-format-table.d.ts +2 -1
  87. package/dist/shadertypes/textures/texture-format-table.d.ts.map +1 -0
  88. package/dist/shadertypes/{utils → textures}/texture-format-table.js +41 -42
  89. package/dist/shadertypes/textures/texture-format-table.js.map +1 -0
  90. package/dist/shadertypes/textures/texture-formats.d.ts +90 -0
  91. package/dist/shadertypes/textures/texture-formats.d.ts.map +1 -0
  92. package/dist/shadertypes/textures/texture-formats.js +58 -0
  93. package/dist/shadertypes/textures/texture-formats.js.map +1 -0
  94. package/dist/shadertypes/{utils → vertex-arrays}/decode-vertex-format.d.ts +2 -2
  95. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +1 -0
  96. package/dist/shadertypes/{utils → vertex-arrays}/decode-vertex-format.js +4 -4
  97. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +1 -0
  98. package/dist/shadertypes/{vertex-formats.d.ts → vertex-arrays/vertex-formats.d.ts} +5 -3
  99. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +1 -0
  100. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +1 -0
  101. package/package.json +2 -2
  102. package/src/adapter/canvas-context.ts +60 -5
  103. package/src/adapter/device.ts +132 -47
  104. package/src/adapter/resources/buffer.ts +30 -14
  105. package/src/adapter/resources/command-encoder.ts +0 -2
  106. package/src/adapter/resources/framebuffer.ts +5 -5
  107. package/src/adapter/resources/pipeline-layout.ts +30 -0
  108. package/src/adapter/resources/render-pipeline.ts +6 -6
  109. package/src/adapter/resources/resource.ts +1 -0
  110. package/src/adapter/resources/texture-view.ts +1 -1
  111. package/src/adapter/resources/texture.ts +1 -1
  112. package/src/adapter/resources/vertex-array.ts +1 -1
  113. package/src/adapter/types/attachments.ts +5 -5
  114. package/src/adapter/types/buffer-layout.ts +1 -1
  115. package/src/adapter/types/parameters.ts +2 -2
  116. package/src/adapter/types/shader-layout.ts +8 -5
  117. package/src/adapter-utils/get-attribute-from-layouts.ts +5 -5
  118. package/src/index.ts +60 -36
  119. package/src/portable/uniform-block.ts +1 -1
  120. package/src/portable/uniform-buffer-layout.ts +4 -4
  121. package/src/portable/uniform-store.ts +1 -1
  122. package/src/shadertypes/data-types/data-types.ts +96 -0
  123. package/src/shadertypes/data-types/decode-data-types.ts +91 -0
  124. package/src/shadertypes/{utils → data-types}/decode-shader-types.ts +2 -2
  125. package/src/shadertypes/textures/pixel-utils.ts +239 -0
  126. package/src/shadertypes/{utils/decode-texture-format.ts → textures/texture-format-decoder.ts} +63 -47
  127. package/src/shadertypes/textures/texture-format-generics.ts +190 -0
  128. package/src/shadertypes/{utils → textures}/texture-format-table.ts +62 -52
  129. package/src/shadertypes/{texture-formats.ts → textures/texture-formats.ts} +229 -147
  130. package/src/shadertypes/{utils → vertex-arrays}/decode-vertex-format.ts +6 -10
  131. package/src/shadertypes/{vertex-formats.ts → vertex-arrays/vertex-formats.ts} +20 -6
  132. package/dist/adapter-utils/buffer-layout-helper.d.ts +0 -11
  133. package/dist/adapter-utils/buffer-layout-helper.d.ts.map +0 -1
  134. package/dist/adapter-utils/buffer-layout-helper.js +0 -33
  135. package/dist/adapter-utils/buffer-layout-helper.js.map +0 -1
  136. package/dist/shadertypes/data-types.d.ts.map +0 -1
  137. package/dist/shadertypes/data-types.js.map +0 -1
  138. package/dist/shadertypes/shader-types.d.ts.map +0 -1
  139. package/dist/shadertypes/shader-types.js.map +0 -1
  140. package/dist/shadertypes/texture-formats.d.ts +0 -74
  141. package/dist/shadertypes/texture-formats.d.ts.map +0 -1
  142. package/dist/shadertypes/texture-formats.js.map +0 -1
  143. package/dist/shadertypes/utils/decode-data-types.d.ts.map +0 -1
  144. package/dist/shadertypes/utils/decode-data-types.js +0 -114
  145. package/dist/shadertypes/utils/decode-data-types.js.map +0 -1
  146. package/dist/shadertypes/utils/decode-shader-types.d.ts.map +0 -1
  147. package/dist/shadertypes/utils/decode-shader-types.js.map +0 -1
  148. package/dist/shadertypes/utils/decode-texture-format.d.ts +0 -15
  149. package/dist/shadertypes/utils/decode-texture-format.d.ts.map +0 -1
  150. package/dist/shadertypes/utils/decode-texture-format.js.map +0 -1
  151. package/dist/shadertypes/utils/decode-vertex-format.d.ts.map +0 -1
  152. package/dist/shadertypes/utils/decode-vertex-format.js.map +0 -1
  153. package/dist/shadertypes/utils/texture-format-table.d.ts.map +0 -1
  154. package/dist/shadertypes/utils/texture-format-table.js.map +0 -1
  155. package/dist/shadertypes/vertex-formats.d.ts.map +0 -1
  156. package/dist/shadertypes/vertex-formats.js.map +0 -1
  157. package/src/adapter-utils/buffer-layout-helper.ts +0 -41
  158. package/src/shadertypes/data-types.ts +0 -42
  159. package/src/shadertypes/utils/decode-data-types.ts +0 -131
  160. /package/dist/shadertypes/{data-types.js → data-types/data-types.js} +0 -0
  161. /package/dist/shadertypes/{utils → data-types}/decode-shader-types.js +0 -0
  162. /package/dist/shadertypes/{shader-types.d.ts → data-types/shader-types.d.ts} +0 -0
  163. /package/dist/shadertypes/{shader-types.js → data-types/shader-types.js} +0 -0
  164. /package/dist/shadertypes/{vertex-formats.js → vertex-arrays/vertex-formats.js} +0 -0
  165. /package/src/shadertypes/{shader-types.ts → data-types/shader-types.ts} +0 -0
@@ -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
- CompressedTextureFormat,
9
+ TextureFormatCompressed,
9
10
  TextureFormatInfo,
10
- TextureFormatCapabilities
11
- } from '../texture-formats';
12
- import {getDataTypeInfo} from './decode-data-types';
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
- * Returns true if a texture format is GPU compressed
24
- */
25
- export function isTextureFormatCompressed(
26
- format: TextureFormat
27
- ): format is CompressedTextureFormat {
28
- return COMPRESSED_TEXTURE_FORMAT_PREFIXES.some(prefix => (format as string).startsWith(prefix));
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
- export function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
82
+ function getTextureFormatInfo(format: TextureFormat): TextureFormatInfo {
35
83
  let formatInfo: TextureFormatInfo = getTextureFormatInfoUsingTable(format);
36
84
 
37
- if (isTextureFormatCompressed(format)) {
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: CompressedTextureFormat
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 {TextureFormat, TextureFeature, TextureFormatInfo} from '../texture-formats';
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 TEXTURE_FORMAT_TABLE: Readonly<Record<TextureFormat, TextureFormatDefinition>> = {
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
- 'rg16unorm-webgl': {render: norm16_renderable},
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
- // 48-bit formats
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
+ };