@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,34 @@
1
+ // luma.gl, MIT license
2
+ import type {Buffer} from '../resources/buffer';
3
+ // import type {VertexFormat} from './data-formats';
4
+
5
+ // ACCESSORS
6
+
7
+ /**
8
+ * Attribute descriptor object
9
+ * @deprecated Use ShaderLayout
10
+ */
11
+ export interface AccessorObject {
12
+ buffer?: Buffer;
13
+ // format: VertexFormat;
14
+ offset?: number;
15
+ // can now be described with single WebGPU-style `format` string
16
+
17
+ //
18
+ stride?: number;
19
+
20
+ /** @deprecated - Use accessor.stepMode */
21
+ divisor?: number;
22
+
23
+ /** @deprecated - Infer from format */
24
+ type?: number;
25
+ /** @deprecated - Infer from format */
26
+ size?: number;
27
+ /** @deprecated - Infer from format */
28
+ normalized?: boolean;
29
+ /** @deprecated - Infer from format */
30
+ integer?: boolean;
31
+
32
+ /** @deprecated */
33
+ index?: number;
34
+ }
@@ -0,0 +1,62 @@
1
+ import type {VertexFormat} from './vertex-formats';
2
+
3
+ /**
4
+ * Provides specific details about the memory layout of the actual buffers
5
+ * that will be provided to a `RenderPipeline`.
6
+ *
7
+ * BufferLayout lets the application describe whether
8
+ * - A single buffer can be used for multiple attributes (using interleaving or offsets),
9
+ * - The data format of the memory being supplied to a specific shader attribute.
10
+ *
11
+ * `BufferLayout` complements the "static" attribute declarations in a ShaderLayout
12
+ * with information about the "dynamic" memory layout of each buffer that will be bound
13
+ * to the render pipeline.
14
+ */
15
+
16
+ /**
17
+ * Specify memory layout for one buffer, describing how it is used by one or more attribute
18
+ * @note Specifies format, stride, offset and step mode
19
+ * @note The buffer can be set using the buffer name:`.setAttributes({[bufferName]: buffer})`.
20
+ * @note Needs to match type/components of the ShaderLayout ('f32', 'i32', 's32')
21
+ *
22
+ * A buffer layout is used to specify "non-standard" buffer layouts (buffers with offsets, interleaved buffers etc)
23
+ *
24
+ * @example
25
+ * ```
26
+ device.createRenderPipeline({
27
+ ...
28
+ shaderLayout,
29
+ bufferLayout: [
30
+ {name: 'positions', stepMode: 'vertex', format: 'float32x3'},
31
+ // interleaved bindings, auto offset
32
+ {name: 'particles', stepMode: 'instance', byteStride: 32, attributes: [
33
+ {name: 'instancePositions', format: 'float32x4', byteOffset: 0},
34
+ {name: 'instanceVelocities', format: 'float32x4', byteOffset: 16}
35
+ ]},
36
+ ]
37
+ ];
38
+ ```
39
+ */
40
+ export type BufferLayout = {
41
+ /** Name of buffer */
42
+ name: string;
43
+ /** Is the attribute is instanced. Default: auto-deduced from shader name. */
44
+ stepMode?: 'vertex' | 'instance';
45
+ /** bytes between successive elements. If omitted, stride is set to reflect a "packed" buffer */
46
+ byteStride?: number;
47
+ /** Option 1: interleaved attributes that read from this buffer */
48
+ attributes?: BufferAttributeLayout[];
49
+ /** Option 2: Single attribute with same name as buffer. */
50
+ format?: VertexFormat;
51
+ };
52
+
53
+ /** Specifies how the GPU should read one specific attribute from a buffer. */
54
+ export type BufferAttributeLayout = {
55
+ /** Name of attribute that maps to a "view" of this buffer */
56
+ attribute: string;
57
+ /** Data format of the memory in the buffer that is mapped to this attribute */
58
+ format: VertexFormat;
59
+ /** Sum up any the "global" offset (or 0) and the offset each stride (for interleaved data). */
60
+ byteOffset: number;
61
+ };
62
+
@@ -0,0 +1,250 @@
1
+ import {DepthStencilTextureFormat} from './texture-formats';
2
+
3
+ export type CompareFunction =
4
+ 'never' |
5
+ 'less' |
6
+ 'equal' |
7
+ 'less-equal' |
8
+ 'greater' |
9
+ 'not-equal' |
10
+ 'greater-equal' |
11
+ 'always';
12
+
13
+ // Primitive state
14
+
15
+ export type PrimitiveTopology =
16
+ 'point-list' |
17
+ 'line-list' |
18
+ 'line-strip' |
19
+ /** @deprecated */
20
+ 'line-loop-webgl' |
21
+ 'triangle-list' |
22
+ 'triangle-strip' |
23
+ /** @deprecated */
24
+ 'triangle-fan-webgl';
25
+
26
+ export type IndexFormat = 'uint16' | 'uint32';
27
+
28
+ export type CullMode = 'none' | 'front' | 'back';
29
+ export type FrontFace = 'ccw' | 'cw';
30
+
31
+ // Rasterization Parameters
32
+
33
+ type _RenderParameters = {
34
+ /** Defines which polygon orientation will be culled, if any. Only applies to triangle topologies/ */
35
+ cullMode?: CullMode;
36
+ /** Defines which polygons are considered front-facing. Only applies to triangle topologies. Default to "ccw" */
37
+ frontFace?: FrontFace;
38
+ /** TBD */
39
+ depthClamp?: boolean;
40
+ /** Constant depth bias (polygon offset) added to each fragment. */
41
+ depthBias?: number;
42
+ /** Depth bias (polygon offset) that scales with the fragment’s slope. */
43
+ depthBiasSlopeScale?: number;
44
+ /** Maximum depth bias of a fragment. */
45
+ depthBiasClamp?: number;
46
+ }
47
+
48
+ export type RasterizationParameters = _RenderParameters & {
49
+ /** The type of primitive to be constructed from the vertex inputs. Defaults to "triangle-list". */
50
+ topology?: PrimitiveTopology;
51
+ /** For pipelines with strip topologies ("line-strip" or "triangle-strip"), this determines the index buffer format and primitive restart value ("uint16"/0xFFFF or "uint32"/0xFFFFFFFF). It is not allowed on pipelines with non-strip topologies. */
52
+ stripIndexFormat?: IndexFormat; // WebGPU only
53
+ }
54
+
55
+ // Depth Stencil Parameters
56
+
57
+ /** Types of operations that can be performed on stencil buffers when various tests pass */
58
+ export type StencilOperation =
59
+ 'keep' |
60
+ 'zero' |
61
+ 'replace' |
62
+ 'invert' |
63
+ 'increment-clamp' |
64
+ 'decrement-clamp' |
65
+ 'increment-wrap' |
66
+ 'decrement-wrap';
67
+
68
+ export type DepthStencilParameters = {
69
+ /** Whether this GPURenderPipeline can modify depthStencilAttachment depth values. */
70
+ depthWriteEnabled?: boolean;
71
+ /** The comparison operation used to test fragment depths against existing depthStencilAttachment depth values. */
72
+ depthCompare?: CompareFunction;
73
+ /** The format of depthStencilAttachment this GPURenderPipeline will be compatible with. */
74
+ depthFormat?: DepthStencilTextureFormat;
75
+
76
+ /** Bitmask controlling which depthStencilAttachment stencil value bits are read when performing stencil comparison tests. */
77
+ stencilReadMask?: number;
78
+ /** Bitmask controlling which depthStencilAttachment stencil value bits are written to when performing stencil operations. */
79
+ stencilWriteMask?: number;
80
+
81
+ /** The CompareFunction used when testing fragments against depthStencilAttachment stencil values. */
82
+ stencilCompare?: CompareFunction;
83
+ /** The StencilOperation performed if the fragment stencil comparison test described by compare fails. */
84
+ stencilPassOperation?: StencilOperation;
85
+ /** The GPUStencilOperation performed if the fragment depth comparison described by depthCompare fails. */
86
+ stencilFailOperation?: StencilOperation;
87
+ /** The GPUStencilOperation performed if the fragment stencil comparison test described by compare passes. */
88
+ stencilDepthFailOperation?: StencilOperation;
89
+ }
90
+
91
+ // Color Parameters
92
+
93
+ /** BlendFactor defines how either a source or destination blend factors is calculated */
94
+ export type BlendFactor =
95
+ 'zero' |
96
+ 'one' |
97
+ 'src-color' |
98
+ 'one-minus-src-color' |
99
+ 'src-alpha' |
100
+ 'one-minus-src-alpha' |
101
+ 'dst-color' |
102
+ 'one-minus-dst-color' |
103
+ 'dst-alpha' |
104
+ 'one-minus-dst-alpha' |
105
+ 'src-alpha-saturated' |
106
+ 'blend-color' |
107
+ 'one-minus-blend-color';
108
+
109
+ /** BlendOperation defines the algorithm used to combine source and destination blend factors: */
110
+ export type BlendOperation =
111
+ 'add' |
112
+ 'subtract' |
113
+ 'reverse-subtract' |
114
+ 'min' |
115
+ 'max';
116
+
117
+ /*
118
+ export const ColorWrite = {
119
+ RED: 0x1,
120
+ GREEN: 0x2,
121
+ BLUE: 0x4,
122
+ ALPHA: 0x8,
123
+ ALL: 0xF
124
+ };
125
+
126
+ blend: {
127
+ color: {operation, srcFactor, dstFactor}
128
+ alpha: {operation, srcFactor, dstFactor}
129
+ }
130
+ colorWriteMask
131
+
132
+ rgba
133
+ rgb
134
+ rga
135
+ rba
136
+ gba
137
+ rg
138
+ rb
139
+ ra
140
+ gb
141
+ ga
142
+ ba
143
+ r
144
+ g
145
+ b
146
+ a
147
+ none
148
+ */
149
+
150
+ /* Color parameters are set on the RenderPipeline */
151
+ export type ColorParameters = {
152
+ /** Defines the operation used to calculate the values written to the target attachment components. */
153
+ blendColorOperation?: BlendOperation;
154
+ /** Defines the operation to be performed on values from the fragment shader. */
155
+ blendColorSrcFactor?: BlendFactor;
156
+ /** Defines the operation to be performed on values from the target attachment. */
157
+ blendColorDstFactor?: BlendFactor;
158
+
159
+ /** Defines the operation used to calculate the values written to the target attachment components. */
160
+ blendAlphaOperation?: BlendOperation;
161
+ /** Defines the operation to be performed on values from the fragment shader. */
162
+ blendAlphaSrcFactor?: BlendFactor;
163
+ /** Defines the operation to be performed on values from the target attachment. */
164
+ blendAlphaDstFactor?: BlendFactor;
165
+
166
+ /** Bitmask controlling which channels are are written to when drawing to this color target. defaulting to 0xF */
167
+ colorMask?: number;
168
+ }
169
+
170
+ /** Multisample */
171
+ export type MultisampleParameters = {
172
+ /** Number of samples per pixel. RenderPipeline will be compatible only with attachment textures with matching sampleCounts. */
173
+ sampleCount?: number; // = 1;
174
+ /** Mask determining which samples are written to. defaulting to 0xFFFFFFFF */
175
+ sampleMask?: number;
176
+ /** When true indicates that a fragment’s alpha channel should be used to generate a sample coverage mask. */
177
+ sampleAlphaToCoverageEnabled?: boolean; // = false;
178
+ };
179
+
180
+ /** These parameters are set on the render pass and are thus easy to change frequently */
181
+ export type RenderPassParameters = {
182
+ /** Linear map from normalized device coordinates to viewport coordinates [x, y, width, height, minDepth, maxDepth] */
183
+ viewport?: number[];
184
+ /** Sets scissor rectangle used during rasterization. Discards fragments outside viewport coords [x, y, width, height]. */
185
+ scissorRect?: number[]; // ;
186
+ /** Sets constant blend color and alpha values used with "constant" and "one-minus-constant" blend factors. */
187
+ blendConstant?: number[]; // GPUColor
188
+ /** Stencil operation "replace" sets the value to stencilReference */
189
+ stencilReference?: number; // GPUStencilValue
190
+ };
191
+
192
+ export type RenderPipelineParameters =
193
+ RasterizationParameters &
194
+ DepthStencilParameters &
195
+ ColorParameters &
196
+ MultisampleParameters;
197
+
198
+ export type Parameters =
199
+ _RenderParameters &
200
+ DepthStencilParameters &
201
+ ColorParameters &
202
+ MultisampleParameters;
203
+
204
+ // export const DEFAULT_PARAMETERS: Parameters;
205
+
206
+ export const DEFAULT_PARAMETERS: Required<Parameters> = {
207
+
208
+ // Rasterization Parameters
209
+
210
+ cullMode: 'none',
211
+ frontFace: 'ccw',
212
+
213
+ // Depth Parameters
214
+
215
+ depthWriteEnabled: false,
216
+ depthCompare: 'always',
217
+ depthFormat: 'depth24plus',
218
+
219
+ depthClamp: false,
220
+ depthBias: 0,
221
+ depthBiasSlopeScale: 0,
222
+ depthBiasClamp: 0,
223
+
224
+ // Stencil parameters
225
+
226
+ stencilReadMask: 0xFFFFFFFF,
227
+ stencilWriteMask: 0xFFFFFFFF,
228
+
229
+ stencilCompare: 'always',
230
+ stencilPassOperation: 'keep',
231
+ stencilFailOperation: 'keep',
232
+ stencilDepthFailOperation: 'keep',
233
+
234
+ // Multisample parameters
235
+ sampleCount: 0,
236
+ sampleMask: 0xFFFFFFFF,
237
+ sampleAlphaToCoverageEnabled: false,
238
+
239
+ // Color and blend parameters
240
+
241
+ blendColorOperation: 'add',
242
+ blendColorSrcFactor: 'one',
243
+ blendColorDstFactor: 'zero',
244
+
245
+ blendAlphaOperation: 'add',
246
+ blendAlphaSrcFactor: 'one',
247
+ blendAlphaDstFactor: 'zero',
248
+
249
+ colorMask: 0xF
250
+ };
@@ -0,0 +1,193 @@
1
+ // luma.gl, MIT license
2
+ import type {TextureFormat} from '../types/texture-formats';
3
+ import type {ShaderUniformType, ShaderAttributeType} from './shader-types';
4
+ import {AccessorObject} from '../types/accessor';
5
+ import type {Buffer} from '../resources/buffer';
6
+ import type {Sampler} from '../resources/sampler';
7
+ import type {Texture} from '../resources/texture';
8
+
9
+ /**
10
+ * Describes all shader binding points for a `RenderPipeline` or `ComputePipeline`
11
+ * A ShaderLayout describes the static structure of a shader pipeline.
12
+ * It also allows the numeric locations in the shader to accessed with the same variable names
13
+ * used in the shader.
14
+ * @note A ShaderLayout needs to be complemented by a BufferLayout that describes
15
+ * the actual memory layout of the buffers that will be used with the pipeline.
16
+ *
17
+ * @example
18
+ * ```
19
+ device.createRenderPipeline({
20
+ shaderLayout: [
21
+ attributes: [
22
+ {name: 'instancePositions', location: 0, format: 'vec3<f32>', stepMode: 'instance'},
23
+ {name: 'instanceVelocities', location: 1, format: 'vec3<f32>', stepMode: 'instance'},
24
+ {name: 'vertexPositions', location: 2, format: 'vec3<f32>', stepMode: 'vertex'}
25
+ ],
26
+ bindings: [...]
27
+ ]
28
+ })
29
+ * ```
30
+ */
31
+ export type ShaderLayout = {
32
+ /** All attributes, their locations, and basic type information. Also an auto-deduced step mode */
33
+ attributes: AttributeDeclaration[];
34
+ /** All bidning points (textures, samplers, uniform buffers) with their locations and type */
35
+ bindings: BindingDeclaration[];
36
+ /** WebGL only (WebGPU use bindings and uniform buffers) */
37
+ uniforms?: any[];
38
+ /** WebGL2 only (WebGPU use compute shaders) */
39
+ varyings?: VaryingBinding[];
40
+ };
41
+
42
+ /**
43
+ * Declares one for attributes
44
+ */
45
+ export type AttributeDeclaration = {
46
+ /** The name of this attribute in the shader */
47
+ name: string;
48
+ /** The index into the GPU's vertex array buffer bank (usually between 0-15) */
49
+ location: number;
50
+ /** WebGPU-style shader type. The declared format of the attribute in the shader code. Buffer's vertex format needs to map to this. */
51
+ type: ShaderAttributeType;
52
+ /** Inferred from attribute name. @note Technically not part of static structure of shader */
53
+ stepMode?: 'vertex' | 'instance';
54
+ };
55
+
56
+ // BINDING LAYOUTS
57
+
58
+ /*
59
+ type Binding = {
60
+ binding: number;
61
+ visibility: number;
62
+
63
+ buffer?: {
64
+ type?: 'uniform' | 'storage' | 'read-only-storage';
65
+ hasDynamicOffset?: false;
66
+ minBindingSize?: number;
67
+ };
68
+
69
+ // type = sampler
70
+ samplerType?: 'filtering' | 'non-filtering' | 'comparison';
71
+
72
+ // type = texture
73
+ viewDimension?: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
74
+ sampleType?: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';
75
+ multisampled?: boolean;
76
+
77
+ // type = storage
78
+ viewDimension?: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
79
+ access: 'read-only' | 'write-only';
80
+ format: string;
81
+ };
82
+ */
83
+
84
+ /** ShaderLayout for bindings */
85
+ export type BindingDeclaration =
86
+ | UniformBufferBindingLayout
87
+ | BufferBindingLayout
88
+ | TextureBindingLayout
89
+ | SamplerBindingLayout
90
+ | StorageTextureBindingLayout;
91
+
92
+ export type UniformBufferBindingLayout = {
93
+ type: 'uniform';
94
+ name: string;
95
+ location: number;
96
+ visibility?: number;
97
+ hasDynamicOffset?: boolean;
98
+ minBindingSize?: number;
99
+ uniforms?: UniformInfo[];
100
+ };
101
+
102
+ export type UniformInfo = {
103
+ name: string;
104
+ format: ShaderUniformType;
105
+ type?: string;
106
+ arrayLength: number;
107
+ byteOffset: number;
108
+ byteStride: number;
109
+ };
110
+
111
+ export type BufferBindingLayout = {
112
+ type: 'uniform' | 'storage' | 'read-only-storage';
113
+ name: string;
114
+ location: number;
115
+ visibility?: number;
116
+ hasDynamicOffset?: boolean;
117
+ minBindingSize?: number;
118
+ };
119
+
120
+ type TextureBindingLayout = {
121
+ type: 'texture';
122
+ name: string;
123
+ location: number;
124
+ visibility?: number;
125
+ viewDimension?: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d'; // default: '2d'
126
+ sampleType?: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'; // default: 'float'
127
+ multisampled?: boolean;
128
+ };
129
+
130
+ type SamplerBindingLayout = {
131
+ type: 'sampler';
132
+ name: string;
133
+ location: number;
134
+ visibility?: number;
135
+ samplerType?: 'filtering' | 'non-filtering' | 'comparison'; // default: filtering
136
+ };
137
+
138
+ type StorageTextureBindingLayout = {
139
+ type: 'storage';
140
+ name: string;
141
+ location: number;
142
+ visibility?: number;
143
+ access?: 'write-only';
144
+ format: TextureFormat;
145
+ viewDimension?: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
146
+ };
147
+
148
+ // BINDINGS
149
+
150
+ /** Binding value */
151
+ export type Binding = Texture | Sampler | Buffer | {buffer: Buffer; offset?: number; size?: number};
152
+
153
+ // SHADER LAYOUTS
154
+
155
+ /**
156
+ * Describes a varying binding for a program
157
+ * @deprecated Varyings are WebGL-only
158
+ */
159
+ export type VaryingBinding = {
160
+ location: number;
161
+ name: string;
162
+ accessor: AccessorObject;
163
+ };
164
+
165
+ // Uniform bindings
166
+
167
+ /** Describes a uniform block binding for a program */
168
+ export type UniformBlockBinding = {
169
+ location: number;
170
+ name: string;
171
+ byteLength: number;
172
+ vertex: boolean;
173
+ fragment: boolean;
174
+ uniformCount: number;
175
+ uniformIndices?: number[];
176
+ uniforms: UniformInfo[];
177
+ };
178
+
179
+ /** Describes a uniform (sampler etc) binding for a program */
180
+ export type UniformBinding = {
181
+ location: number;
182
+ name: string;
183
+ size: number;
184
+ type: number;
185
+ isArray: boolean;
186
+ };
187
+
188
+ /** @deprecated */
189
+ export type AttributeBinding = {
190
+ name: string;
191
+ location: number;
192
+ accessor: AccessorObject;
193
+ };
@@ -0,0 +1,77 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ /**
5
+ * Primitive data types understood by shaders
6
+ * @note These types describe the type used in shader calculations, but for attribute inputs these can be populated from a different in-memory type.
7
+ * @note bindings (like textures, samplers, and uniform buffers) are considered "bindings", not types
8
+ * @note `f16` requires the `f16` extension
9
+ */
10
+ export type ShaderDataType = 'u32' | 'i32' | 'f32' | 'f16';
11
+
12
+ /**
13
+ * Describes the type of an attribute as defined in the shader source code.
14
+ * @note Buffers with various `VertexFormat`s can be supplied for each type, and the GPU will convert them at runtime,
15
+ * but there are limitations, see documentation for details.
16
+ */
17
+ export type ShaderAttributeType =
18
+ | 'f32'
19
+ | 'vec2<f32>'
20
+ | 'vec3<f32>'
21
+ | 'vec4<f32>'
22
+ | 'i32'
23
+ | 'vec2<i32>'
24
+ | 'vec3<i32>'
25
+ | 'vec4<i32>'
26
+ | 'u32'
27
+ | 'vec2<u32>'
28
+ | 'vec3<u32>'
29
+ | 'vec4<u32>'
30
+ // requires `f16` extension
31
+ | 'f16'
32
+ | 'vec2<f16>'
33
+ | 'vec3<f16>'
34
+ | 'vec4<f16>';
35
+
36
+ /**
37
+ * Describes the type of a uniform as described in the shader source code.
38
+ * Uniforms can be of a wider range of types than attributes.
39
+ */
40
+ export type ShaderUniformType =
41
+ | 'f32'
42
+ | 'i32'
43
+ | 'u32'
44
+ | 'vec2<f32>'
45
+ | 'vec3<f32>'
46
+ | 'vec4<f32>'
47
+ | 'vec2<i32>'
48
+ | 'vec3<i32>'
49
+ | 'vec4<i32>'
50
+ | 'vec2<u32>'
51
+ | 'vec3<u32>'
52
+ | 'vec4<u32>'
53
+ | 'mat2x2<f32>'
54
+ | 'mat2x3<f32>'
55
+ | 'mat2x4<f32>'
56
+ | 'mat3x2<f32>'
57
+ | 'mat3x3<f32>'
58
+ | 'mat3x4<f32>'
59
+ | 'mat4x2<f32>'
60
+ | 'mat4x3<f32>'
61
+ | 'mat4x4<f32>';
62
+
63
+ /** Shorthand type aliases recognized by WGSL */
64
+ export type ShaderTypeAlias =
65
+ | 'vec2i'
66
+ | 'vec3i'
67
+ | 'vec4i'
68
+ | 'vec2u'
69
+ | 'vec3u'
70
+ | 'vec4u'
71
+ | 'vec2f'
72
+ | 'vec3f'
73
+ | 'vec4f'
74
+ // Requires the f16 extension.
75
+ | 'vec2h'
76
+ | 'vec3h'
77
+ | 'vec4h';