@luma.gl/core 9.2.6 → 9.3.0-alpha.11

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