@luma.gl/core 9.0.0-alpha.9 → 9.0.0-beta.2

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 (306) hide show
  1. package/LICENSE +3 -1
  2. package/README.md +4 -4
  3. package/dist/adapter/attribute-utils/get-attribute-from-layouts.d.ts +52 -0
  4. package/dist/adapter/attribute-utils/get-attribute-from-layouts.d.ts.map +1 -0
  5. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js +130 -0
  6. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js.map +1 -0
  7. package/dist/adapter/canvas-context.d.ts +109 -0
  8. package/dist/adapter/canvas-context.d.ts.map +1 -0
  9. package/dist/adapter/canvas-context.js +254 -0
  10. package/dist/adapter/canvas-context.js.map +1 -0
  11. package/dist/adapter/device.d.ts +219 -0
  12. package/dist/adapter/device.d.ts.map +1 -0
  13. package/dist/adapter/device.js +99 -0
  14. package/dist/adapter/device.js.map +1 -0
  15. package/dist/adapter/resources/buffer.d.ts +56 -0
  16. package/dist/adapter/resources/buffer.d.ts.map +1 -0
  17. package/dist/adapter/resources/buffer.js +62 -0
  18. package/dist/adapter/resources/buffer.js.map +1 -0
  19. package/dist/adapter/resources/command-buffer.d.ts +12 -0
  20. package/dist/adapter/resources/command-buffer.d.ts.map +1 -0
  21. package/dist/adapter/resources/command-buffer.js +15 -0
  22. package/dist/adapter/resources/command-buffer.js.map +1 -0
  23. package/dist/adapter/resources/command-encoder.d.ts +113 -0
  24. package/dist/adapter/resources/command-encoder.d.ts.map +1 -0
  25. package/dist/adapter/resources/command-encoder.js +19 -0
  26. package/dist/adapter/resources/command-encoder.js.map +1 -0
  27. package/dist/adapter/resources/compute-pass.d.ts +31 -0
  28. package/dist/adapter/resources/compute-pass.d.ts.map +1 -0
  29. package/dist/adapter/resources/compute-pass.js +15 -0
  30. package/dist/adapter/resources/compute-pass.js.map +1 -0
  31. package/dist/adapter/resources/compute-pipeline.d.ts +24 -0
  32. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -0
  33. package/dist/adapter/resources/compute-pipeline.js +20 -0
  34. package/dist/adapter/resources/compute-pipeline.js.map +1 -0
  35. package/dist/adapter/resources/external-texture.d.ts +12 -0
  36. package/dist/adapter/resources/external-texture.d.ts.map +1 -0
  37. package/dist/adapter/resources/external-texture.js +17 -0
  38. package/dist/adapter/resources/external-texture.js.map +1 -0
  39. package/dist/adapter/resources/framebuffer.d.ts +50 -0
  40. package/dist/adapter/resources/framebuffer.d.ts.map +1 -0
  41. package/dist/adapter/resources/framebuffer.js +102 -0
  42. package/dist/adapter/resources/framebuffer.js.map +1 -0
  43. package/dist/adapter/resources/render-pass.d.ts +51 -0
  44. package/dist/adapter/resources/render-pass.d.ts.map +1 -0
  45. package/dist/adapter/resources/render-pass.js +23 -0
  46. package/dist/adapter/resources/render-pass.js.map +1 -0
  47. package/dist/adapter/resources/render-pipeline.d.ts +89 -0
  48. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -0
  49. package/dist/adapter/resources/render-pipeline.js +36 -0
  50. package/dist/adapter/resources/render-pipeline.js.map +1 -0
  51. package/dist/adapter/resources/resource.d.ts +73 -0
  52. package/dist/adapter/resources/resource.d.ts.map +1 -0
  53. package/dist/adapter/resources/resource.js +101 -0
  54. package/dist/adapter/resources/resource.js.map +1 -0
  55. package/dist/adapter/resources/sampler.d.ts +42 -0
  56. package/dist/adapter/resources/sampler.d.ts.map +1 -0
  57. package/dist/adapter/resources/sampler.js +26 -0
  58. package/dist/adapter/resources/sampler.js.map +1 -0
  59. package/dist/adapter/resources/shader.d.ts +45 -0
  60. package/dist/adapter/resources/shader.d.ts.map +1 -0
  61. package/dist/adapter/resources/shader.js +90 -0
  62. package/dist/adapter/resources/shader.js.map +1 -0
  63. package/dist/adapter/resources/texture.d.ts +90 -0
  64. package/dist/adapter/resources/texture.d.ts.map +1 -0
  65. package/dist/adapter/resources/texture.js +45 -0
  66. package/dist/adapter/resources/texture.js.map +1 -0
  67. package/dist/adapter/resources/transform-feedback.d.ts +30 -0
  68. package/dist/adapter/resources/transform-feedback.d.ts.map +1 -0
  69. package/dist/adapter/resources/transform-feedback.js +17 -0
  70. package/dist/adapter/resources/transform-feedback.js.map +1 -0
  71. package/dist/adapter/resources/vertex-array.d.ts +40 -0
  72. package/dist/adapter/resources/vertex-array.d.ts.map +1 -0
  73. package/dist/adapter/resources/vertex-array.js +24 -0
  74. package/dist/adapter/resources/vertex-array.js.map +1 -0
  75. package/dist/adapter/type-utils/decode-attribute-type.d.ts +20 -0
  76. package/dist/adapter/type-utils/decode-attribute-type.d.ts.map +1 -0
  77. package/dist/adapter/type-utils/decode-attribute-type.js +60 -0
  78. package/dist/adapter/type-utils/decode-attribute-type.js.map +1 -0
  79. package/dist/adapter/type-utils/decode-data-type.d.ts +16 -0
  80. package/dist/adapter/type-utils/decode-data-type.d.ts.map +1 -0
  81. package/dist/adapter/type-utils/decode-data-type.js +43 -0
  82. package/dist/adapter/type-utils/decode-data-type.js.map +1 -0
  83. package/dist/adapter/type-utils/decode-shader-types.d.ts +9 -0
  84. package/dist/adapter/type-utils/decode-shader-types.d.ts.map +1 -0
  85. package/dist/adapter/type-utils/decode-shader-types.js +103 -0
  86. package/dist/adapter/type-utils/decode-shader-types.js.map +1 -0
  87. package/dist/adapter/type-utils/decode-texture-format.d.ts +19 -0
  88. package/dist/adapter/type-utils/decode-texture-format.d.ts.map +1 -0
  89. package/dist/adapter/type-utils/decode-texture-format.js +101 -0
  90. package/dist/adapter/type-utils/decode-texture-format.js.map +1 -0
  91. package/dist/adapter/type-utils/decode-vertex-format.d.ts +22 -0
  92. package/dist/adapter/type-utils/decode-vertex-format.d.ts.map +1 -0
  93. package/dist/adapter/type-utils/decode-vertex-format.js +25 -0
  94. package/dist/adapter/type-utils/decode-vertex-format.js.map +1 -0
  95. package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts +10 -0
  96. package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts.map +1 -0
  97. package/dist/adapter/type-utils/vertex-format-from-attribute.js +76 -0
  98. package/dist/adapter/type-utils/vertex-format-from-attribute.js.map +1 -0
  99. package/dist/adapter/type-utils/wgsl-utils.d.ts +4 -0
  100. package/dist/adapter/type-utils/wgsl-utils.d.ts.map +1 -0
  101. package/dist/adapter/type-utils/wgsl-utils.js +15 -0
  102. package/dist/adapter/type-utils/wgsl-utils.js.map +1 -0
  103. package/dist/adapter/types/accessor.d.ts +23 -0
  104. package/dist/adapter/types/accessor.d.ts.map +1 -0
  105. package/dist/adapter/types/accessor.js +2 -0
  106. package/dist/adapter/types/accessor.js.map +1 -0
  107. package/dist/adapter/types/buffer-layout.d.ts +59 -0
  108. package/dist/adapter/types/buffer-layout.d.ts.map +1 -0
  109. package/dist/adapter/types/buffer-layout.js +2 -0
  110. package/dist/adapter/types/buffer-layout.js.map +1 -0
  111. package/dist/adapter/types/parameters.d.ts +97 -0
  112. package/dist/adapter/types/parameters.d.ts.map +1 -0
  113. package/dist/adapter/types/parameters.js +28 -0
  114. package/dist/adapter/types/parameters.js.map +1 -0
  115. package/dist/adapter/types/shader-layout.d.ts +145 -0
  116. package/dist/adapter/types/shader-layout.d.ts.map +1 -0
  117. package/dist/adapter/types/shader-layout.js +2 -0
  118. package/dist/adapter/types/shader-layout.js.map +1 -0
  119. package/dist/adapter/types/shader-types.d.ts +21 -0
  120. package/dist/adapter/types/shader-types.d.ts.map +1 -0
  121. package/dist/adapter/types/shader-types.js +2 -0
  122. package/dist/adapter/types/shader-types.js.map +1 -0
  123. package/dist/adapter/types/texture-formats.d.ts +12 -0
  124. package/dist/adapter/types/texture-formats.d.ts.map +1 -0
  125. package/dist/adapter/types/texture-formats.js +2 -0
  126. package/dist/adapter/types/texture-formats.js.map +1 -0
  127. package/dist/adapter/types/types.d.ts +90 -0
  128. package/dist/adapter/types/types.d.ts.map +1 -0
  129. package/dist/adapter/types/types.js +2 -0
  130. package/dist/adapter/types/types.js.map +1 -0
  131. package/dist/adapter/types/vertex-formats.d.ts +14 -0
  132. package/dist/adapter/types/vertex-formats.d.ts.map +1 -0
  133. package/dist/adapter/types/vertex-formats.js +2 -0
  134. package/dist/adapter/types/vertex-formats.js.map +1 -0
  135. package/dist/dist.dev.js +2976 -0
  136. package/dist/index.cjs +2445 -0
  137. package/dist/index.d.ts +81 -128
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +45 -18
  140. package/dist/index.js.map +1 -1
  141. package/dist/init.d.ts +5 -0
  142. package/dist/init.d.ts.map +1 -0
  143. package/dist/init.js +24 -0
  144. package/dist/init.js.map +1 -0
  145. package/dist/lib/compiler-log/compiler-message.d.ts +8 -0
  146. package/dist/lib/compiler-log/compiler-message.d.ts.map +1 -0
  147. package/dist/lib/compiler-log/compiler-message.js +2 -0
  148. package/dist/lib/compiler-log/compiler-message.js.map +1 -0
  149. package/dist/lib/compiler-log/format-compiler-log.d.ts +8 -0
  150. package/dist/lib/compiler-log/format-compiler-log.d.ts.map +1 -0
  151. package/dist/lib/compiler-log/format-compiler-log.js +64 -0
  152. package/dist/lib/compiler-log/format-compiler-log.js.map +1 -0
  153. package/dist/lib/compiler-log/get-shader-info.d.ts +9 -0
  154. package/dist/lib/compiler-log/get-shader-info.d.ts.map +1 -0
  155. package/dist/lib/compiler-log/get-shader-info.js +25 -0
  156. package/dist/lib/compiler-log/get-shader-info.js.map +1 -0
  157. package/dist/lib/luma.d.ts +22 -0
  158. package/dist/lib/luma.d.ts.map +1 -0
  159. package/dist/lib/luma.js +63 -0
  160. package/dist/lib/luma.js.map +1 -0
  161. package/dist/lib/uniforms/uniform-block.d.ts +29 -0
  162. package/dist/lib/uniforms/uniform-block.d.ts.map +1 -0
  163. package/dist/lib/uniforms/uniform-block.js +48 -0
  164. package/dist/lib/uniforms/uniform-block.js.map +1 -0
  165. package/dist/lib/uniforms/uniform-buffer-layout.d.ts +27 -0
  166. package/dist/lib/uniforms/uniform-buffer-layout.d.ts.map +1 -0
  167. package/dist/lib/uniforms/uniform-buffer-layout.js +76 -0
  168. package/dist/lib/uniforms/uniform-buffer-layout.js.map +1 -0
  169. package/dist/lib/uniforms/uniform-store.d.ts +62 -0
  170. package/dist/lib/uniforms/uniform-store.d.ts.map +1 -0
  171. package/dist/lib/uniforms/uniform-store.js +89 -0
  172. package/dist/lib/uniforms/uniform-store.js.map +1 -0
  173. package/dist/lib/uniforms/uniform.d.ts +10 -0
  174. package/dist/lib/uniforms/uniform.d.ts.map +1 -0
  175. package/dist/lib/uniforms/uniform.js +20 -0
  176. package/dist/lib/uniforms/uniform.js.map +1 -0
  177. package/dist/types.d.ts +19 -0
  178. package/dist/types.d.ts.map +1 -0
  179. package/dist/types.js +3 -0
  180. package/dist/types.js.map +1 -0
  181. package/dist/utils/array-equal.d.ts +5 -0
  182. package/dist/utils/array-equal.d.ts.map +1 -0
  183. package/dist/utils/array-equal.js +28 -0
  184. package/dist/utils/array-equal.js.map +1 -0
  185. package/dist/utils/array-utils-flat.d.ts +10 -0
  186. package/dist/utils/array-utils-flat.d.ts.map +1 -0
  187. package/dist/utils/array-utils-flat.js +36 -0
  188. package/dist/utils/array-utils-flat.js.map +1 -0
  189. package/dist/utils/assert.d.ts +2 -0
  190. package/dist/utils/assert.d.ts.map +1 -0
  191. package/dist/utils/assert.js +6 -0
  192. package/dist/utils/assert.js.map +1 -0
  193. package/dist/utils/cast.d.ts +3 -0
  194. package/dist/utils/cast.d.ts.map +1 -0
  195. package/dist/utils/cast.js +4 -0
  196. package/dist/utils/cast.js.map +1 -0
  197. package/dist/utils/check-props.d.ts +7 -0
  198. package/dist/utils/check-props.d.ts.map +1 -0
  199. package/dist/utils/check-props.js +32 -0
  200. package/dist/utils/check-props.js.map +1 -0
  201. package/dist/utils/deep-equal.d.ts +9 -0
  202. package/dist/utils/deep-equal.d.ts.map +1 -0
  203. package/dist/utils/deep-equal.js +40 -0
  204. package/dist/utils/deep-equal.js.map +1 -0
  205. package/dist/utils/format-value.d.ts +7 -0
  206. package/dist/utils/format-value.d.ts.map +1 -0
  207. package/dist/utils/format-value.js +42 -0
  208. package/dist/utils/format-value.js.map +1 -0
  209. package/dist/utils/is-array.d.ts +16 -0
  210. package/dist/utils/is-array.d.ts.map +1 -0
  211. package/dist/utils/is-array.js +10 -0
  212. package/dist/utils/is-array.js.map +1 -0
  213. package/dist/utils/load-file.d.ts +35 -0
  214. package/dist/utils/load-file.d.ts.map +1 -0
  215. package/dist/utils/load-file.js +48 -0
  216. package/dist/utils/load-file.js.map +1 -0
  217. package/dist/utils/log.d.ts +4 -0
  218. package/dist/utils/log.d.ts.map +1 -0
  219. package/dist/utils/log.js +5 -0
  220. package/dist/utils/log.js.map +1 -0
  221. package/dist/utils/random.d.ts +5 -0
  222. package/dist/utils/random.d.ts.map +1 -0
  223. package/dist/utils/random.js +14 -0
  224. package/dist/utils/random.js.map +1 -0
  225. package/dist/utils/request-animation-frame.d.ts +3 -0
  226. package/dist/utils/request-animation-frame.d.ts.map +1 -0
  227. package/dist/utils/request-animation-frame.js +7 -0
  228. package/dist/utils/request-animation-frame.js.map +1 -0
  229. package/dist/utils/stats-manager.d.ts +12 -0
  230. package/dist/utils/stats-manager.d.ts.map +1 -0
  231. package/dist/utils/stats-manager.js +19 -0
  232. package/dist/utils/stats-manager.js.map +1 -0
  233. package/dist/utils/stub-methods.d.ts +2 -0
  234. package/dist/utils/stub-methods.d.ts.map +1 -0
  235. package/dist/utils/stub-methods.js +16 -0
  236. package/dist/utils/stub-methods.js.map +1 -0
  237. package/dist/utils/utils.d.ts +15 -0
  238. package/dist/utils/utils.d.ts.map +1 -0
  239. package/dist/utils/utils.js +19 -0
  240. package/dist/utils/utils.js.map +1 -0
  241. package/dist.min.js +33 -0
  242. package/package.json +17 -12
  243. package/src/adapter/attribute-utils/get-attribute-from-layouts.ts +259 -0
  244. package/src/adapter/canvas-context.ts +433 -0
  245. package/src/adapter/device.ts +435 -0
  246. package/src/adapter/resources/buffer.ts +106 -0
  247. package/src/adapter/resources/command-buffer.ts +38 -0
  248. package/src/adapter/resources/command-encoder.ts +172 -0
  249. package/src/adapter/resources/compute-pass.ts +52 -0
  250. package/src/adapter/resources/compute-pipeline.ts +39 -0
  251. package/src/adapter/resources/external-texture.ts +20 -0
  252. package/src/adapter/resources/framebuffer.ts +230 -0
  253. package/src/adapter/resources/render-pass.ts +117 -0
  254. package/src/adapter/resources/render-pipeline.ts +133 -0
  255. package/src/adapter/resources/resource.ts +176 -0
  256. package/src/adapter/resources/sampler.ts +69 -0
  257. package/src/adapter/resources/shader.ts +143 -0
  258. package/src/adapter/resources/texture.ts +140 -0
  259. package/src/adapter/resources/transform-feedback.ts +45 -0
  260. package/src/adapter/resources/vertex-array.ts +65 -0
  261. package/src/adapter/type-utils/decode-attribute-type.ts +82 -0
  262. package/src/adapter/type-utils/decode-data-type.ts +62 -0
  263. package/src/adapter/type-utils/decode-shader-types.ts +48 -0
  264. package/src/adapter/type-utils/decode-texture-format.ts +190 -0
  265. package/src/adapter/type-utils/decode-vertex-format.ts +49 -0
  266. package/src/adapter/type-utils/vertex-format-from-attribute.ts +103 -0
  267. package/src/adapter/type-utils/wgsl-utils.ts +18 -0
  268. package/src/adapter/types/accessor.ts +34 -0
  269. package/src/adapter/types/buffer-layout.ts +62 -0
  270. package/src/adapter/types/parameters.ts +250 -0
  271. package/src/adapter/types/shader-layout.ts +193 -0
  272. package/src/adapter/types/shader-types.ts +77 -0
  273. package/src/adapter/types/texture-formats.ts +168 -0
  274. package/src/adapter/types/types.ts +109 -0
  275. package/src/adapter/types/vertex-formats.ts +91 -0
  276. package/src/index.ts +160 -92
  277. package/src/init.ts +47 -0
  278. package/src/lib/compiler-log/compiler-message.ts +10 -0
  279. package/src/lib/compiler-log/format-compiler-log.ts +113 -0
  280. package/src/lib/compiler-log/get-shader-info.ts +41 -0
  281. package/src/lib/luma.ts +84 -0
  282. package/src/lib/uniforms/uniform-block.ts +80 -0
  283. package/src/lib/uniforms/uniform-buffer-layout.ts +109 -0
  284. package/src/lib/uniforms/uniform-store.ts +173 -0
  285. package/src/lib/uniforms/uniform.ts +25 -0
  286. package/src/types.ts +33 -0
  287. package/src/utils/array-equal.ts +33 -0
  288. package/src/utils/array-utils-flat.ts +43 -0
  289. package/src/utils/assert.ts +7 -0
  290. package/src/utils/cast.ts +4 -0
  291. package/src/utils/check-props.ts +74 -0
  292. package/src/utils/deep-equal.ts +47 -0
  293. package/src/utils/format-value.ts +40 -0
  294. package/src/utils/is-array.ts +24 -0
  295. package/src/utils/load-file.ts +89 -0
  296. package/src/utils/log.ts +4 -0
  297. package/src/utils/random.ts +17 -0
  298. package/src/utils/request-animation-frame.ts +15 -0
  299. package/src/utils/stats-manager.ts +23 -0
  300. package/src/utils/stub-methods.ts +20 -0
  301. package/src/utils/utils.ts +36 -0
  302. package/dist/bundle.d.ts +0 -2
  303. package/dist/bundle.d.ts.map +0 -1
  304. package/dist/bundle.js +0 -5
  305. package/dist/bundle.js.map +0 -1
  306. package/src/bundle.ts +0 -4
@@ -0,0 +1,172 @@
1
+ // luma.gl, MIT license
2
+ import {Device} from '../device';
3
+ import {Resource, ResourceProps} from './resource';
4
+ import {Buffer} from './buffer';
5
+ import {Texture} from './texture';
6
+
7
+ export type WriteBufferOptions = {
8
+ buffer: Buffer,
9
+ bufferOffset?: number,
10
+ data: BufferSource,
11
+ dataOffset?: number,
12
+ size?: number
13
+ };
14
+
15
+ export type WriteTextureOptions = {
16
+ destination: Texture;
17
+ mipLevel?: number; // = 0;
18
+ origin?: [number, number, number] | number[];
19
+ aspect?: 'all' | 'stencil-only' | 'depth-only';
20
+ data: BufferSource;
21
+ // dataLayout;
22
+ offset: number;
23
+ bytesPerRow: number;
24
+ rowsPerImage: number;
25
+ size: [number, number, number] | number[];
26
+ }
27
+
28
+ export type CopyBufferToBufferOptions = {
29
+ source: Buffer;
30
+ sourceOffset?: number;
31
+ destination: Buffer;
32
+ destinationOffset?: number;
33
+ size: number;
34
+ };
35
+
36
+ export type CopyBufferToTextureOptions = {
37
+ source: Buffer;
38
+ byteOffset?: number;
39
+ destination: Texture;
40
+ mipLevel?: number // = 0;
41
+ origin?: [number, number, number] | number[];
42
+ aspect?: 'all' | 'stencil-only' | 'depth-only';
43
+ bytesPerRow: number;
44
+ rowsPerImage: number;
45
+ size: [number, number, number] | number[];
46
+ };
47
+
48
+ export type CopyTextureToBufferOptions = {
49
+ /** Texture to copy to/from. */
50
+ source: Texture;
51
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
52
+ mipLevel?: number;
53
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from.
54
+ * Together with `copySize`, defines the full copy sub-region.
55
+ */
56
+ /** Defines which aspects of the texture to copy to/from. */
57
+ aspect?: 'all' | 'stencil-only' | 'depth-only';
58
+
59
+ /** Width to copy */
60
+ width?: number;
61
+ height?: number;
62
+ depthOrArrayLayers?: number;
63
+ origin?: number[];
64
+
65
+ /** Destination buffer */
66
+ destination: Buffer;
67
+ /** Offset, in bytes, from the beginning of the buffer to the start of the image data (default 0) */
68
+ byteOffset?: number;
69
+ /**
70
+ * The stride, in bytes, between the beginning of each block row and the subsequent block row.
71
+ * Required if there are multiple block rows (i.e. the copy height or depth is more than one block).
72
+ */
73
+ bytesPerRow?: number;
74
+ /**
75
+ * Number of block rows per single image of the texture.
76
+ * rowsPerImage × bytesPerRow is the stride, in bytes, between the beginning of each image of data and the subsequent image.
77
+ * Required if there are multiple images (i.e. the copy depth is more than one).
78
+ */
79
+ rowsPerImage?: number;
80
+ };
81
+
82
+ export type CopyTextureToTextureOptions = {
83
+ /** Texture to copy to/from. */
84
+ source: Texture;
85
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
86
+ mipLevel?: number;
87
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy from. */
88
+ /** Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from. */
89
+ aspect?: 'all' | 'stencil-only' | 'depth-only';
90
+
91
+ /** Texture to copy to/from. */
92
+ destination: Texture;
93
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
94
+ destinationMipLevel?: number;
95
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to. */
96
+ destinationOrigin?: number[];
97
+ /** Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from. */
98
+ destinationAspect?: 'all' | 'stencil-only' | 'depth-only';
99
+
100
+ origin?: number[];
101
+ /** Width to copy */
102
+ width?: number;
103
+ height?: number;
104
+ depthOrArrayLayers?: number;
105
+ };
106
+
107
+ // interface Queue {
108
+ // submit(commandBuffers);
109
+
110
+ // // onSubmittedWorkDone(): Promise<undefined>;
111
+
112
+ // writeBuffer(options: WriteBufferOptions): void;
113
+ // writeTexture(options: WriteTextureOptions): void;
114
+
115
+ // // copyExternalImageToTexture(
116
+ // // GPUImageCopyExternalImage source,
117
+ // // GPUImageCopyTextureTagged destination,
118
+ // // GPUExtent3D copySize
119
+ // // ): void;
120
+ // }
121
+
122
+ export type CommandEncoderProps = ResourceProps & {
123
+ measureExecutionTime?: boolean;
124
+ };
125
+
126
+ /**
127
+ * Encodes commands to queue that can be executed later
128
+ */
129
+ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
130
+ static override defaultProps: Required<CommandEncoderProps> = {
131
+ ...Resource.defaultProps,
132
+ measureExecutionTime: undefined
133
+ };
134
+
135
+ override get [Symbol.toStringTag](): string {
136
+ return 'CommandEncoder';
137
+ }
138
+
139
+ constructor(device: Device, props: CommandEncoderProps) {
140
+ super(device, props, CommandEncoder.defaultProps);
141
+ }
142
+
143
+ abstract finish(): void; // TODO - return the CommandBuffer?
144
+
145
+ // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
146
+ // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
147
+ // finish(options?: {id?: string}): GPUCommandBuffer;
148
+
149
+ abstract copyBufferToBuffer(options: CopyBufferToBufferOptions): void;
150
+
151
+ abstract copyBufferToTexture(options: CopyBufferToTextureOptions): void;
152
+
153
+ abstract copyTextureToBuffer(options: CopyTextureToBufferOptions): void;
154
+
155
+ abstract copyTextureToTexture(options: CopyTextureToTextureOptions): void;
156
+
157
+ pushDebugGroup(groupLabel: string): void {}
158
+
159
+ popDebugGroup() {}
160
+
161
+ insertDebugMarker(markerLabel: string): void {}
162
+
163
+ // writeTimestamp(querySet: Query, queryIndex: number): void;
164
+
165
+ // resolveQuerySet(options: {
166
+ // querySet: GPUQuerySet,
167
+ // firstQuery: number,
168
+ // queryCount: number,
169
+ // destination: Buffer,
170
+ // destinationOffset?: number;
171
+ // }): void;
172
+ }
@@ -0,0 +1,52 @@
1
+ import {Resource, ResourceProps} from './resource';
2
+ import {ComputePipeline} from './compute-pipeline';
3
+ import {Buffer} from './buffer';
4
+ import type {Device} from '../device';
5
+
6
+ export type ComputePassProps = ResourceProps & {};
7
+
8
+ export abstract class ComputePass extends Resource<ComputePassProps> {
9
+ static override defaultProps: Required<ComputePassProps> = {
10
+ ...Resource.defaultProps
11
+ }
12
+
13
+ override get [Symbol.toStringTag](): string {
14
+ return 'ComputePass';
15
+ }
16
+
17
+ constructor(device: Device, props: ComputePassProps) {
18
+ super(device, props, Resource.defaultProps);
19
+ }
20
+
21
+ abstract override destroy(): void;
22
+
23
+ abstract end(): void;
24
+
25
+ abstract setPipeline(pipeline: ComputePipeline): void;
26
+
27
+ /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */
28
+ // abstract setBindings(bindings: Binding[]): void;
29
+
30
+ /**
31
+ * Dispatch work to be performed with the current ComputePipeline.
32
+ * @param x X dimension of the grid of workgroups to dispatch.
33
+ * @param y Y dimension of the grid of workgroups to dispatch.
34
+ * @param z Z dimension of the grid of workgroups to dispatch.
35
+ */
36
+ abstract dispatch(x: number, y?: number, z?: number): void;
37
+
38
+ /**
39
+ * Dispatch work to be performed with the current ComputePipeline.
40
+ * @param indirectBuffer buffer must be a tightly packed block of three 32-bit unsigned integer values (12 bytes total), given in the same order as the arguments for dispatch()
41
+ * @param indirectOffset
42
+ */
43
+ abstract dispatchIndirect(indirectBuffer: Buffer, indirectOffset?: number): void;
44
+
45
+ abstract pushDebugGroup(groupLabel: string): void;
46
+ abstract popDebugGroup(): void;
47
+ abstract insertDebugMarker(markerLabel: string): void;
48
+
49
+ // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
50
+ // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;
51
+ // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;
52
+ }
@@ -0,0 +1,39 @@
1
+ //
2
+ import {Resource, ResourceProps} from './resource';
3
+ import {BindingDeclaration} from '../types/shader-layout';
4
+ import type {Device} from '../device';
5
+ import type {Shader} from './shader';
6
+
7
+ /**
8
+ * Properties for a compute pipeline
9
+ */
10
+ export type ComputePipelineProps = ResourceProps & {
11
+ handle?: unknown;
12
+ cs: Shader;
13
+ csEntryPoint?: string;
14
+ csConstants?: Record<string, number>; // WGSL only
15
+ shaderLayout?: BindingDeclaration[];
16
+ };
17
+
18
+ /**
19
+ * A compiled and linked shader program for compute
20
+ */
21
+ export abstract class ComputePipeline extends Resource<ComputePipelineProps> {
22
+ static override defaultProps: Required<ComputePipelineProps> = {
23
+ ...Resource.defaultProps,
24
+ cs: undefined,
25
+ csEntryPoint: undefined,
26
+ csConstants: {},
27
+ shaderLayout: []
28
+ };
29
+
30
+ override get [Symbol.toStringTag](): string {
31
+ return 'ComputePipeline';
32
+ }
33
+
34
+ hash: string = '';
35
+
36
+ constructor(device: Device, props: ComputePipelineProps) {
37
+ super(device, props, ComputePipeline.defaultProps);
38
+ }
39
+ }
@@ -0,0 +1,20 @@
1
+ import type {Device} from '../device';
2
+ import {Resource, ResourceProps} from './resource';
3
+
4
+ export type ExternalTextureProps = ResourceProps & {
5
+ source: HTMLVideoElement | null;
6
+ colorSpace?: 'srgb';
7
+ }
8
+ export abstract class ExternalTexture extends Resource<ExternalTextureProps> {
9
+ static override defaultProps: Required<ExternalTextureProps> = {
10
+ ...Resource.defaultProps,
11
+ source: null,
12
+ colorSpace: 'srgb'
13
+ };
14
+
15
+ override get [Symbol.toStringTag](): string { return 'ExternalTexture'; }
16
+
17
+ constructor(device: Device, props: ExternalTextureProps) {
18
+ super(device, props, ExternalTexture.defaultProps);
19
+ }
20
+ }
@@ -0,0 +1,230 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import type {ColorTextureFormat, DepthStencilTextureFormat, TextureFormat} from '../types/texture-formats';
5
+ import type {Device} from '../device';
6
+ import {Resource, ResourceProps} from './resource';
7
+ import {Texture} from './texture';
8
+ import {log} from '../../utils/log';
9
+
10
+ export type FramebufferProps = ResourceProps & {
11
+ width?: number;
12
+ height?: number;
13
+ colorAttachments?: (Texture | ColorTextureFormat)[];
14
+ depthStencilAttachment?: (Texture | DepthStencilTextureFormat) | null;
15
+ };
16
+
17
+ /**
18
+ * Create new textures with correct size for all attachments.
19
+ * @note resize() destroys existing textures (if size has changed).
20
+ */
21
+ export abstract class Framebuffer extends Resource<FramebufferProps> {
22
+ static override defaultProps: Required<FramebufferProps> = {
23
+ ...Resource.defaultProps,
24
+ width: 1,
25
+ height: 1,
26
+ colorAttachments: [], // ['rgba8unorm-unsized'],
27
+ depthStencilAttachment: null // 'depth24plus-stencil8'
28
+ };
29
+
30
+ override get [Symbol.toStringTag](): string {
31
+ return 'Framebuffer';
32
+ }
33
+
34
+ /** Width of all attachments in this framebuffer */
35
+ width: number;
36
+ /** Height of all attachments in this framebuffer */
37
+ height: number;
38
+ /** Color attachments */
39
+ colorAttachments: Texture[] = [];
40
+ /** Depth-stencil attachment, if provided */
41
+ depthStencilAttachment: Texture | null = null;
42
+
43
+ constructor(device: Device, props: FramebufferProps = {}) {
44
+ super(device, props, Framebuffer.defaultProps);
45
+ this.width = this.props.width;
46
+ this.height = this.props.height;
47
+
48
+ // NOTE: call from subclass constructor as we cannot call overridden methods here (subclass not yet constructed)
49
+ // this.autoCreateAttachmentTextures();
50
+ }
51
+
52
+ /**
53
+ * Resizes all attachments
54
+ * @note resize() destroys existing textures (if size has changed).
55
+ */
56
+ resize(size: {width: number; height: number;}): void;
57
+ resize(size: [width: number, height: number]): void;
58
+ resize(): void;
59
+ resize(size?: {width: number; height: number} | [width: number, height: number]): void {
60
+ let updateSize: boolean = !size;
61
+ if (size) {
62
+ const [width, height] = Array.isArray(size) ? size : [size.width, size.height];
63
+ updateSize = updateSize || height !== this.height || width !== this.width;
64
+ this.width = width;
65
+ this.height = height;
66
+ }
67
+ if (updateSize) {
68
+ log.log(2, `Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)();
69
+ this.resizeAttachments(this.width, this.height);
70
+ }
71
+ }
72
+
73
+ // /** Returns fully populated attachment object. */
74
+ // protected normalizeColorAttachment(
75
+ // attachment: Texture | ColorTextureFormat
76
+ // ): Required<ColorAttachment> {
77
+
78
+ // const COLOR_ATTACHMENT_DEFAULTS: Required<ColorAttachment> = {
79
+ // texture: undefined!,
80
+ // format: undefined!,
81
+ // clearValue: [0.0, 0.0, 0.0, 0.0],
82
+ // loadOp: 'clear',
83
+ // storeOp: 'store'
84
+ // };
85
+
86
+ // if (attachment instanceof Texture) {
87
+ // return {...COLOR_ATTACHMENT_DEFAULTS, texture: attachment};
88
+ // }
89
+ // if (typeof attachment === 'string') {
90
+ // return {...COLOR_ATTACHMENT_DEFAULTS, format: attachment};
91
+ // }
92
+ // return {...COLOR_ATTACHMENT_DEFAULTS, ...attachment};
93
+ // }
94
+
95
+ // /** Wraps texture inside fully populated attachment object. */
96
+ // protected normalizeDepthStencilAttachment(
97
+ // attachment: DepthStencilAttachment | Texture | DepthStencilTextureFormat
98
+ // ): Required<DepthStencilAttachment> {
99
+ // const DEPTH_STENCIL_ATTACHMENT_DEFAULTS: Required<DepthStencilAttachment> = {
100
+ // texture: undefined!,
101
+ // format: undefined!,
102
+
103
+ // depthClearValue: 1.0,
104
+ // depthLoadOp: 'clear',
105
+ // depthStoreOp: 'store',
106
+ // depthReadOnly: false,
107
+
108
+ // stencilClearValue: 0,
109
+ // stencilLoadOp: 'clear',
110
+ // stencilStoreOp: 'store',
111
+ // stencilReadOnly: false
112
+ // };
113
+
114
+ // if (typeof attachment === 'string') {
115
+ // return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, format: attachment};
116
+ // }
117
+ // // @ts-expect-error attachment instanceof Texture doesn't cover Renderbuffer
118
+ // if (attachment.handle || attachment instanceof Texture) {
119
+ // return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, texture: attachment as Texture};
120
+ // }
121
+ // return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, ...attachment};
122
+ // }
123
+
124
+ /** Auto creates any textures */
125
+ protected autoCreateAttachmentTextures(){
126
+ this.colorAttachments = this.props.colorAttachments.map(attachment => {
127
+ if (typeof attachment === 'string') {
128
+ const texture = this.createColorTexture(attachment);
129
+ this.attachResource(texture);
130
+ return texture;
131
+ }
132
+ return attachment;
133
+ });
134
+
135
+ if (this.props.depthStencilAttachment) {
136
+ if (typeof this.props.depthStencilAttachment === 'string') {
137
+ const texture = this.createDepthStencilTexture(this.props.depthStencilAttachment);
138
+ this.attachResource(texture);
139
+ this.depthStencilAttachment = texture;
140
+ } else {
141
+ this.depthStencilAttachment = this.props.depthStencilAttachment;
142
+ }
143
+ }
144
+ }
145
+
146
+ /** Create a color texture */
147
+ protected createColorTexture(format: TextureFormat): Texture {
148
+ return this.device.createTexture({
149
+ id: 'color-attachment',
150
+ usage: Texture.RENDER_ATTACHMENT,
151
+ format,
152
+ width: this.width,
153
+ height: this.height,
154
+ });
155
+ }
156
+
157
+ /** Create depth stencil texture */
158
+ protected createDepthStencilTexture(format: TextureFormat): Texture {
159
+ return this.device.createTexture({
160
+ id: 'depth-stencil-attachment',
161
+ usage: Texture.RENDER_ATTACHMENT,
162
+ format,
163
+ width: this.width,
164
+ height: this.height
165
+ });
166
+ }
167
+
168
+ /**
169
+ * Default implementation of resize
170
+ * Creates new textures with correct size for all attachments.
171
+ * and destroys existing textures if owned
172
+ */
173
+ protected resizeAttachments(width: number, height: number): void {
174
+ for (let i = 0; i < this.colorAttachments.length; ++i) {
175
+ if (this.colorAttachments[i]) {
176
+ const resizedTexture = this.device._createTexture({
177
+ ...this.colorAttachments[i].props,
178
+ width,
179
+ height
180
+ });
181
+ this.destroyAttachedResource(this.colorAttachments[i]);
182
+ this.colorAttachments[i] = resizedTexture;
183
+ this.attachResource(resizedTexture);
184
+ }
185
+ }
186
+
187
+ if (this.depthStencilAttachment) {
188
+ const resizedTexture = this.device._createTexture({
189
+ ...this.depthStencilAttachment.props,
190
+ width,
191
+ height
192
+ });
193
+ this.destroyAttachedResource(this.depthStencilAttachment);
194
+ this.depthStencilAttachment = resizedTexture;
195
+ this.attachResource(resizedTexture);
196
+ }
197
+ }
198
+
199
+ /** Create a color attachment for WebGL *
200
+ protected override createColorTexture(colorAttachment: Required<ColorAttachment>): Required<ColorAttachment> {
201
+ return this.device._createTexture({
202
+ id: `${this.id}-color`,
203
+ data: null, // reserves texture memory, but texels are undefined
204
+ format,
205
+ // type: GL.UNSIGNED_BYTE,
206
+ width: this.width,
207
+ height: this.height,
208
+ // Note: Mipmapping can be disabled by texture resource when we resize the texture
209
+ // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant
210
+ // behavior we always disable mipmaps.
211
+ mipmaps: false,
212
+ // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.
213
+ // Use LINEAR so subpixel algos like fxaa work.
214
+ // Set WRAP modes that support NPOT textures too.
215
+ sampler: {
216
+ minFilter: 'linear',
217
+ magFilter: 'linear',
218
+ addressModeU: 'clamp-to-edge',
219
+ addressModeV: 'clamp-to-edge'
220
+ }
221
+ // parameters: {
222
+ // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,
223
+ // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,
224
+ // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,
225
+ // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE
226
+ // }
227
+ });
228
+ }
229
+ */
230
+ }
@@ -0,0 +1,117 @@
1
+ // luma.gl, MIT license
2
+ import type {Device} from '../device'
3
+ import type { RenderPassParameters } from '../types/parameters';
4
+ // import {Binding} from '../types/shader-layout';
5
+ import {Resource, ResourceProps} from './resource';
6
+ // import {Buffer} from './buffer';
7
+ // import {RenderPipeline} from './render-pipeline';
8
+ // import {CommandEncoder} from './command-encoder';
9
+ import {Framebuffer} from './framebuffer';
10
+ import {NumberArray} from '../..';
11
+
12
+ /**
13
+ * Properties for a RenderPass instance is a required parameter to all draw calls.
14
+ */
15
+ export type RenderPassProps = ResourceProps & {
16
+ /** Framebuffer specifies which textures to render into. Default gets framebuffer from canvas context. */
17
+ framebuffer?: Framebuffer | null;
18
+ /** Control viewport, scissor rect, blend constant and stencil ref */
19
+ parameters?: RenderPassParameters;
20
+ /** Clear value for color attachment, or `load` to preserve the previous value */
21
+ clearColor?: NumberArray | false;
22
+ /** Clear value for depth attachment, or `load` to preserve the previous value */
23
+ clearDepth?: number | false;
24
+ /** Clear value for stencil attachment, or `load` to preserve the previous value */
25
+ clearStencil?: number | false;
26
+ /** Indicates that the depth component is read only. */
27
+ depthReadOnly?: boolean;
28
+ /** Indicates that the stencil component is read only. */
29
+ stencilReadOnly?: boolean;
30
+ /** Whether to disable / discard the output of the rasterizer */
31
+ discard?: boolean;
32
+ };
33
+
34
+ /**
35
+ * A RenderPass instance is a required parameter to all draw calls.
36
+ *
37
+ * It holds a combination of
38
+ * - render targets (specified via a framebuffer)
39
+ * - clear colors, read/write, discard information for the framebuffer attachments
40
+ * - a couple of mutable parameters ()
41
+ */
42
+ export abstract class RenderPass extends Resource<RenderPassProps> {
43
+
44
+ /** Default properties for RenderPass */
45
+ static override defaultProps: Required<RenderPassProps> = {
46
+ ...Resource.defaultProps,
47
+ framebuffer: null,
48
+ parameters: undefined,
49
+ clearColor: [0, 0, 0, 0],
50
+ clearDepth: 1,
51
+ clearStencil: 0,
52
+ depthReadOnly: false,
53
+ stencilReadOnly: false,
54
+ discard: false
55
+ };
56
+
57
+ override get [Symbol.toStringTag](): string {
58
+ return 'RenderPass';
59
+ }
60
+
61
+ constructor(device: Device, props: RenderPassProps) {
62
+ super(device, props, RenderPass.defaultProps);
63
+ }
64
+
65
+ /** Call when rendering is done in this pass. */
66
+ abstract end(): void;
67
+
68
+ /**
69
+ * A small set of parameters can be changed between every draw call
70
+ * (viewport, scissorRect, blendColor, stencilReference)
71
+ */
72
+ abstract setParameters(parameters: RenderPassParameters): void;
73
+
74
+ abstract pushDebugGroup(groupLabel: string): void;
75
+ abstract popDebugGroup(): void;
76
+ abstract insertDebugMarker(markerLabel: string): void;
77
+
78
+ // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
79
+
80
+ // beginOcclusionQuery(queryIndex: number): void;
81
+ // endOcclusionQuery(): void;
82
+
83
+ // executeBundles(bundles: Iterable<GPURenderBundle>): void;
84
+
85
+ // In WebGPU the following methods are on the renderpass.
86
+ // luma.gl keeps them on the pipeline for now
87
+
88
+ /*
89
+ setPipeline(pipeline: RenderPipeline): void {}
90
+
91
+ setIndexBuffer(
92
+ buffer: Buffer,
93
+ indexFormat: 'uint16' | 'uint32',
94
+ offset?: number,
95
+ size?: number
96
+ ): void {}
97
+
98
+ abstract setVertexBuffer(slot: number, buffer: Buffer, offset: number): void;
99
+
100
+ abstract setBindings(bindings: Record<string, Binding>): void;
101
+
102
+ abstract setParameters(parameters: RenderPassParameters);
103
+
104
+ draw(options: {
105
+ vertexCount?: number; // Either vertexCount or indexCount must be provided
106
+ indexCount?: number; // Activates indexed drawing (call setIndexBuffer())
107
+ instanceCount?: number; //
108
+ firstVertex?: number;
109
+ firstIndex?: number; // requires device.features.has('indirect-first-instance')?
110
+ firstInstance?: number;
111
+ baseVertex?: number;
112
+ }): void {}
113
+
114
+ drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
115
+ drawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
116
+ */
117
+ }