@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.6

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 (288) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +297 -155
  3. package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
  4. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.js +73 -67
  6. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/shader-formats.js +53 -46
  8. package/dist/adapter/converters/texture-formats.d.ts +13 -19
  9. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  10. package/dist/adapter/converters/texture-formats.js +474 -879
  11. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/vertex-formats.js +53 -61
  13. package/dist/adapter/device-helpers/device-features.d.ts +2 -5
  14. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  15. package/dist/adapter/device-helpers/device-features.js +56 -87
  16. package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
  17. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/device-limits.js +88 -83
  19. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  20. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  21. package/dist/adapter/device-helpers/get-device-info.js +79 -63
  22. package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -0
  23. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  24. package/dist/adapter/device-helpers/webgl-device-features.js +86 -0
  25. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  26. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  27. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  28. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  29. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  30. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  31. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
  32. package/dist/adapter/helpers/decode-webgl-types.js +88 -76
  33. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  34. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  35. package/dist/adapter/helpers/get-shader-layout.js +261 -225
  36. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  37. package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
  38. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  39. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  40. package/dist/adapter/helpers/set-uniform.js +68 -82
  41. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  42. package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
  43. package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
  44. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  45. package/dist/adapter/objects/constants-to-keys.js +19 -12
  46. package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
  47. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  48. package/dist/adapter/objects/webgl-renderbuffer.js +86 -77
  49. package/dist/adapter/objects/webgl-resource.d.ts +3 -25
  50. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  51. package/dist/adapter/objects/webgl-resource.js +102 -146
  52. package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
  53. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  54. package/dist/adapter/resources/webgl-buffer.js +161 -119
  55. package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
  56. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-command-buffer.js +266 -168
  58. package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
  59. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-command-encoder.js +33 -39
  61. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  62. package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -10
  63. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  64. package/dist/adapter/resources/webgl-framebuffer.js +167 -137
  65. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  66. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  67. package/dist/adapter/resources/webgl-query-set.js +136 -0
  68. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
  69. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  70. package/dist/adapter/resources/webgl-render-pass.js +124 -90
  71. package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
  72. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  73. package/dist/adapter/resources/webgl-render-pipeline.js +356 -221
  74. package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
  75. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  76. package/dist/adapter/resources/webgl-sampler.js +43 -33
  77. package/dist/adapter/resources/webgl-shader.d.ts +12 -2
  78. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-shader.js +114 -47
  80. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  81. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  82. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  83. package/dist/adapter/resources/webgl-texture.d.ts +6 -9
  84. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  85. package/dist/adapter/resources/webgl-texture.js +615 -695
  86. package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
  87. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
  89. package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
  90. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-vertex-array.js +229 -157
  92. package/dist/adapter/webgl-canvas-context.d.ts +2 -2
  93. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  94. package/dist/adapter/webgl-canvas-context.js +58 -36
  95. package/dist/adapter/webgl-device.d.ts +34 -40
  96. package/dist/adapter/webgl-device.d.ts.map +1 -1
  97. package/dist/adapter/webgl-device.js +418 -363
  98. package/dist/classic/accessor.d.ts.map +1 -1
  99. package/dist/classic/accessor.js +132 -101
  100. package/dist/classic/clear.d.ts +2 -2
  101. package/dist/classic/clear.d.ts.map +1 -1
  102. package/dist/classic/clear.js +73 -72
  103. package/dist/classic/copy-and-blit.d.ts +1 -1
  104. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  105. package/dist/classic/copy-and-blit.js +175 -175
  106. package/dist/classic/format-utils.d.ts +2 -2
  107. package/dist/classic/format-utils.d.ts.map +1 -1
  108. package/dist/classic/format-utils.js +39 -32
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -81
  111. package/dist/context/context/context-data.d.ts +14 -0
  112. package/dist/context/context/context-data.d.ts.map +1 -0
  113. package/dist/context/context/context-data.js +33 -0
  114. package/dist/context/context/create-browser-context.d.ts +1 -6
  115. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  116. package/dist/context/context/create-browser-context.js +62 -49
  117. package/dist/context/debug/spector.d.ts.map +1 -1
  118. package/dist/context/debug/spector.js +55 -50
  119. package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
  120. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  121. package/dist/context/debug/webgl-developer-tools.js +104 -77
  122. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  123. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  124. package/dist/context/helpers/create-browser-context.js +67 -0
  125. package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
  126. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  127. package/dist/context/helpers/webgl-context-data.js +21 -0
  128. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  129. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  130. package/dist/context/helpers/webgl-extensions.js +10 -0
  131. package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
  132. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  133. package/dist/context/parameters/unified-parameter-api.js +94 -44
  134. package/dist/context/parameters/webgl-parameter-tables.d.ts +120 -99
  135. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  136. package/dist/context/parameters/webgl-parameter-tables.js +469 -404
  137. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  138. package/dist/context/state-tracker/deep-array-equal.js +19 -14
  139. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  140. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  141. package/dist/context/state-tracker/track-context-state.js +188 -123
  142. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  143. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  144. package/dist/context/state-tracker/with-parameters.js +43 -26
  145. package/dist/dist.dev.js +3135 -4142
  146. package/dist/index.cjs +1766 -2717
  147. package/dist/index.cjs.map +7 -0
  148. package/dist/index.d.ts +25 -28
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +16 -5
  151. package/dist/types.d.ts.map +1 -1
  152. package/dist/types.js +3 -1
  153. package/dist.min.js +9 -42
  154. package/package.json +11 -15
  155. package/src/adapter/converters/device-parameters.ts +105 -17
  156. package/src/adapter/converters/sampler-parameters.ts +12 -20
  157. package/src/adapter/converters/shader-formats.ts +47 -22
  158. package/src/adapter/converters/texture-formats.ts +138 -185
  159. package/src/adapter/converters/vertex-formats.ts +3 -3
  160. package/src/adapter/device-helpers/webgl-device-features.ts +101 -0
  161. package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
  162. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  163. package/src/adapter/helpers/decode-webgl-types.ts +13 -7
  164. package/src/adapter/helpers/get-shader-layout.ts +21 -31
  165. package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
  166. package/src/adapter/helpers/set-uniform.ts +3 -4
  167. package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
  168. package/src/adapter/objects/constants-to-keys.ts +3 -2
  169. package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
  170. package/src/adapter/objects/webgl-resource.ts +7 -140
  171. package/src/adapter/resources/webgl-buffer.ts +10 -14
  172. package/src/adapter/resources/webgl-command-buffer.ts +24 -34
  173. package/src/adapter/resources/webgl-command-encoder.ts +14 -11
  174. package/src/adapter/resources/webgl-external-texture.ts +5 -5
  175. package/src/adapter/resources/webgl-framebuffer.ts +38 -34
  176. package/src/adapter/resources/webgl-query-set.ts +171 -0
  177. package/src/adapter/resources/webgl-render-pass.ts +24 -15
  178. package/src/adapter/resources/webgl-render-pipeline.ts +138 -70
  179. package/src/adapter/resources/webgl-sampler.ts +7 -10
  180. package/src/adapter/resources/webgl-shader.ts +65 -11
  181. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  182. package/src/adapter/resources/webgl-texture.ts +38 -105
  183. package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
  184. package/src/adapter/resources/webgl-vertex-array.ts +20 -21
  185. package/src/adapter/webgl-canvas-context.ts +7 -11
  186. package/src/adapter/webgl-device.ts +106 -151
  187. package/src/classic/accessor.ts +5 -4
  188. package/src/classic/clear.ts +25 -20
  189. package/src/classic/copy-and-blit.ts +12 -6
  190. package/src/classic/format-utils.ts +2 -1
  191. package/src/classic/typed-array-utils.ts +3 -7
  192. package/src/context/debug/spector.ts +9 -6
  193. package/src/context/debug/webgl-developer-tools.ts +31 -20
  194. package/src/context/{context → helpers}/create-browser-context.ts +9 -33
  195. package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
  196. package/src/context/helpers/webgl-extensions.ts +17 -0
  197. package/src/context/parameters/unified-parameter-api.ts +5 -4
  198. package/src/context/parameters/webgl-parameter-tables.ts +118 -90
  199. package/src/context/state-tracker/deep-array-equal.ts +2 -1
  200. package/src/context/state-tracker/track-context-state.ts +29 -23
  201. package/src/context/state-tracker/with-parameters.ts +7 -2
  202. package/src/index.ts +4 -18
  203. package/src/types.ts +2 -1
  204. package/dist/adapter/converters/device-parameters.js.map +0 -1
  205. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  206. package/dist/adapter/converters/shader-formats.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  210. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  211. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  212. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  213. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  214. package/dist/adapter/device-helpers/is-old-ie.js +0 -9
  215. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  216. package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
  217. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  218. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  219. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  220. package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
  221. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  222. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  223. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  224. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  225. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  226. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  227. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  228. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  229. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  230. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  231. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  232. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  233. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  234. package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
  235. package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
  236. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  237. package/dist/adapter/webgl-device.js.map +0 -1
  238. package/dist/classic/accessor.js.map +0 -1
  239. package/dist/classic/clear.js.map +0 -1
  240. package/dist/classic/copy-and-blit.js.map +0 -1
  241. package/dist/classic/format-utils.js.map +0 -1
  242. package/dist/classic/typed-array-utils.js.map +0 -1
  243. package/dist/context/context/create-browser-context.js.map +0 -1
  244. package/dist/context/context/create-headless-context.d.ts +0 -9
  245. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  246. package/dist/context/context/create-headless-context.js +0 -42
  247. package/dist/context/context/create-headless-context.js.map +0 -1
  248. package/dist/context/context/webgl-checks.d.ts +0 -13
  249. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  250. package/dist/context/context/webgl-checks.js +0 -31
  251. package/dist/context/context/webgl-checks.js.map +0 -1
  252. package/dist/context/debug/spector.js.map +0 -1
  253. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  254. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  255. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  256. package/dist/context/polyfill/context-data.d.ts.map +0 -1
  257. package/dist/context/polyfill/context-data.js +0 -12
  258. package/dist/context/polyfill/context-data.js.map +0 -1
  259. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  260. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  261. package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
  262. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  263. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  264. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  265. package/dist/context/polyfill/polyfill-context.js +0 -87
  266. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  267. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  268. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  269. package/dist/context/polyfill/polyfill-table.js +0 -137
  270. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  271. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  272. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  273. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
  274. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  275. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  276. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  277. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  278. package/dist/index.js.map +0 -1
  279. package/dist/types.js.map +0 -1
  280. package/src/adapter/device-helpers/device-features.ts +0 -161
  281. package/src/adapter/device-helpers/device-limits.ts +0 -155
  282. package/src/adapter/device-helpers/is-old-ie.ts +0 -14
  283. package/src/context/context/create-headless-context.ts +0 -51
  284. package/src/context/context/webgl-checks.ts +0 -51
  285. package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
  286. package/src/context/polyfill/polyfill-context.ts +0 -104
  287. package/src/context/polyfill/polyfill-table.ts +0 -167
  288. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
@@ -1,192 +1,192 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
1
4
  import { assert, Texture, Framebuffer } from '@luma.gl/core';
5
+ import { GL } from '@luma.gl/constants';
2
6
  import { getGLTypeFromTypedArray, getTypedArrayFromGLType } from "./typed-array-utils.js";
3
7
  import { glFormatToComponents, glTypeToBytes } from "./format-utils.js";
8
+ /**
9
+ * Copies data from a type or a Texture object into ArrayBuffer object.
10
+ * App can provide targetPixelArray or have it auto allocated by this method
11
+ * newly allocated by this method unless provided by app.
12
+ * @deprecated Use CommandEncoder.copyTextureToBuffer and Buffer.read
13
+ * @note Slow requires roundtrip to GPU
14
+ *
15
+ * @param source
16
+ * @param options
17
+ * @returns pixel array,
18
+ */
4
19
  export function readPixelsToArray(source, options) {
5
- var _framebuffer$colorAtt;
6
- const {
7
- sourceX = 0,
8
- sourceY = 0,
9
- sourceFormat = 6408,
10
- sourceAttachment = 36064
11
- } = options || {};
12
- let {
13
- target = null,
14
- sourceWidth,
15
- sourceHeight,
16
- sourceType
17
- } = options || {};
18
- const {
19
- framebuffer,
20
- deleteFramebuffer
21
- } = getFramebuffer(source);
22
- assert(framebuffer);
23
- const {
24
- gl,
25
- handle
26
- } = framebuffer;
27
- sourceWidth = sourceWidth || framebuffer.width;
28
- sourceHeight = sourceHeight || framebuffer.height;
29
- const attachment = sourceAttachment - 36064;
30
- sourceType = sourceType || ((_framebuffer$colorAtt = framebuffer.colorAttachments[attachment]) === null || _framebuffer$colorAtt === void 0 ? void 0 : _framebuffer$colorAtt.type) || 5121;
31
- target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);
32
- sourceType = sourceType || getGLTypeFromTypedArray(target);
33
- const prevHandle = gl.bindFramebuffer(36160, handle);
34
- gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);
35
- gl.bindFramebuffer(36160, prevHandle || null);
36
- if (deleteFramebuffer) {
37
- framebuffer.destroy();
38
- }
39
- return target;
20
+ const { sourceX = 0, sourceY = 0, sourceFormat = GL.RGBA, sourceAttachment = GL.COLOR_ATTACHMENT0 // TODO - support gl.readBuffer
21
+ } = options || {};
22
+ let { target = null,
23
+ // following parameters are auto deduced if not provided
24
+ sourceWidth, sourceHeight, sourceType } = options || {};
25
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
26
+ assert(framebuffer);
27
+ const { gl, handle } = framebuffer;
28
+ sourceWidth = sourceWidth || framebuffer.width;
29
+ sourceHeight = sourceHeight || framebuffer.height;
30
+ // TODO - Set and unset gl.readBuffer
31
+ // if (sourceAttachment === GL.COLOR_ATTACHMENT0 && handle === null) {
32
+ // sourceAttachment = GL.FRONT;
33
+ // }
34
+ const attachment = sourceAttachment - GL.COLOR_ATTACHMENT0;
35
+ // assert(attachments[sourceAttachment]);
36
+ // Deduce the type from color attachment if not provided.
37
+ sourceType =
38
+ sourceType ||
39
+ framebuffer.colorAttachments[attachment]?.texture?.type ||
40
+ GL.UNSIGNED_BYTE;
41
+ // Deduce type and allocated pixelArray if needed
42
+ target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);
43
+ // Pixel array available, if necessary, deduce type from it.
44
+ sourceType = sourceType || getGLTypeFromTypedArray(target);
45
+ const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
46
+ gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);
47
+ // @ts-expect-error
48
+ gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
49
+ if (deleteFramebuffer) {
50
+ framebuffer.destroy();
51
+ }
52
+ return target;
40
53
  }
54
+ /**
55
+ * Copies data from a Framebuffer or a Texture object into a Buffer object.
56
+ * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.
57
+ * @deprecated Use CommandEncoder
58
+ * @param source
59
+ * @param options
60
+ */
41
61
  export function readPixelsToBuffer(source, options) {
42
- const {
43
- target,
44
- sourceX = 0,
45
- sourceY = 0,
46
- sourceFormat = 6408,
47
- targetByteOffset = 0
48
- } = options || {};
49
- let {
50
- sourceWidth,
51
- sourceHeight,
52
- sourceType
53
- } = options || {};
54
- const {
55
- framebuffer,
56
- deleteFramebuffer
57
- } = getFramebuffer(source);
58
- assert(framebuffer);
59
- sourceWidth = sourceWidth || framebuffer.width;
60
- sourceHeight = sourceHeight || framebuffer.height;
61
- const webglFramebuffer = framebuffer;
62
- sourceType = sourceType || 5121;
63
- let webglBufferTarget = target;
64
- if (!webglBufferTarget) {
65
- const components = glFormatToComponents(sourceFormat);
66
- const byteCount = glTypeToBytes(sourceType);
67
- const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;
68
- webglBufferTarget = webglFramebuffer.device.createBuffer({
69
- byteLength
62
+ const { target, sourceX = 0, sourceY = 0, sourceFormat = GL.RGBA, targetByteOffset = 0 } = options || {};
63
+ // following parameters are auto deduced if not provided
64
+ let { sourceWidth, sourceHeight, sourceType } = options || {};
65
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
66
+ assert(framebuffer);
67
+ sourceWidth = sourceWidth || framebuffer.width;
68
+ sourceHeight = sourceHeight || framebuffer.height;
69
+ // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature
70
+ const webglFramebuffer = framebuffer;
71
+ // deduce type if not available.
72
+ sourceType = sourceType || GL.UNSIGNED_BYTE;
73
+ let webglBufferTarget = target;
74
+ if (!webglBufferTarget) {
75
+ // Create new buffer with enough size
76
+ const components = glFormatToComponents(sourceFormat);
77
+ const byteCount = glTypeToBytes(sourceType);
78
+ const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;
79
+ webglBufferTarget = webglFramebuffer.device.createBuffer({ byteLength });
80
+ }
81
+ // TODO(donmccurdy): Do we have tests to confirm this is working?
82
+ const commandEncoder = source.device.createCommandEncoder();
83
+ commandEncoder.copyTextureToBuffer({
84
+ source: source,
85
+ width: sourceWidth,
86
+ height: sourceHeight,
87
+ origin: [sourceX, sourceY],
88
+ destination: webglBufferTarget,
89
+ byteOffset: targetByteOffset
70
90
  });
71
- }
72
- const commandEncoder = source.device.createCommandEncoder();
73
- commandEncoder.copyTextureToBuffer({
74
- source: source,
75
- width: sourceWidth,
76
- height: sourceHeight,
77
- origin: [sourceX, sourceY],
78
- destination: webglBufferTarget,
79
- byteOffset: targetByteOffset
80
- });
81
- commandEncoder.destroy();
82
- if (deleteFramebuffer) {
83
- framebuffer.destroy();
84
- }
85
- return webglBufferTarget;
91
+ commandEncoder.destroy();
92
+ if (deleteFramebuffer) {
93
+ framebuffer.destroy();
94
+ }
95
+ return webglBufferTarget;
86
96
  }
97
+ /**
98
+ * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)
99
+ * @deprecated Use CommandEncoder
100
+ */
101
+ // eslint-disable-next-line complexity, max-statements
87
102
  export function copyToTexture(source, target, options) {
88
- const {
89
- sourceX = 0,
90
- sourceY = 0,
91
- targetMipmaplevel = 0,
92
- targetInternalFormat = 6408
93
- } = options || {};
94
- let {
95
- targetX,
96
- targetY,
97
- targetZ,
98
- width,
99
- height
100
- } = options || {};
101
- const {
102
- framebuffer,
103
- deleteFramebuffer
104
- } = getFramebuffer(source);
105
- assert(framebuffer);
106
- const webglFramebuffer = framebuffer;
107
- const {
108
- device,
109
- handle
110
- } = webglFramebuffer;
111
- const isSubCopy = typeof targetX !== 'undefined' || typeof targetY !== 'undefined' || typeof targetZ !== 'undefined';
112
- targetX = targetX || 0;
113
- targetY = targetY || 0;
114
- targetZ = targetZ || 0;
115
- const prevHandle = device.gl.bindFramebuffer(36160, handle);
116
- assert(target);
117
- let texture = null;
118
- let textureTarget;
119
- if (target instanceof Texture) {
120
- texture = target;
121
- width = Number.isFinite(width) ? width : texture.width;
122
- height = Number.isFinite(height) ? height : texture.height;
123
- texture.bind(0);
124
- textureTarget = texture.target;
125
- } else {
126
- textureTarget = target;
127
- }
128
- if (!isSubCopy) {
129
- device.gl.copyTexImage2D(textureTarget, targetMipmaplevel, targetInternalFormat, sourceX, sourceY, width, height, 0);
130
- } else {
131
- switch (textureTarget) {
132
- case 3553:
133
- case 34067:
134
- device.gl.copyTexSubImage2D(textureTarget, targetMipmaplevel, targetX, targetY, sourceX, sourceY, width, height);
135
- break;
136
- case 35866:
137
- case 32879:
138
- device.assertWebGL2();
139
- device.gl2.copyTexSubImage3D(textureTarget, targetMipmaplevel, targetX, targetY, targetZ, sourceX, sourceY, width, height);
140
- break;
141
- default:
103
+ const { sourceX = 0, sourceY = 0,
104
+ // attachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer
105
+ targetMipmaplevel = 0, targetInternalFormat = GL.RGBA } = options || {};
106
+ let { targetX, targetY, targetZ, width, // defaults to target width
107
+ height // defaults to target height
108
+ } = options || {};
109
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
110
+ assert(framebuffer);
111
+ const webglFramebuffer = framebuffer;
112
+ const { device, handle } = webglFramebuffer;
113
+ const isSubCopy = typeof targetX !== 'undefined' ||
114
+ typeof targetY !== 'undefined' ||
115
+ typeof targetZ !== 'undefined';
116
+ targetX = targetX || 0;
117
+ targetY = targetY || 0;
118
+ targetZ = targetZ || 0;
119
+ const prevHandle = device.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
120
+ // TODO - support gl.readBuffer (WebGL2 only)
121
+ // const prevBuffer = gl.readBuffer(attachment);
122
+ assert(target);
123
+ let texture = null;
124
+ let textureTarget;
125
+ if (target instanceof Texture) {
126
+ texture = target;
127
+ width = Number.isFinite(width) ? width : texture.width;
128
+ height = Number.isFinite(height) ? height : texture.height;
129
+ texture.bind(0);
130
+ textureTarget = texture.target;
131
+ }
132
+ else {
133
+ textureTarget = target;
134
+ }
135
+ if (!isSubCopy) {
136
+ device.gl.copyTexImage2D(textureTarget, targetMipmaplevel, targetInternalFormat, sourceX, sourceY, width, height, 0 /* border must be 0 */);
137
+ }
138
+ else {
139
+ switch (textureTarget) {
140
+ case GL.TEXTURE_2D:
141
+ case GL.TEXTURE_CUBE_MAP:
142
+ device.gl.copyTexSubImage2D(textureTarget, targetMipmaplevel, targetX, targetY, sourceX, sourceY, width, height);
143
+ break;
144
+ case GL.TEXTURE_2D_ARRAY:
145
+ case GL.TEXTURE_3D:
146
+ device.gl.copyTexSubImage3D(textureTarget, targetMipmaplevel, targetX, targetY, targetZ, sourceX, sourceY, width, height);
147
+ break;
148
+ default:
149
+ }
142
150
  }
143
- }
144
- if (texture) {
145
- texture.unbind();
146
- }
147
- device.gl.bindFramebuffer(36160, prevHandle || null);
148
- if (deleteFramebuffer) {
149
- framebuffer.destroy();
150
- }
151
- return texture;
151
+ if (texture) {
152
+ texture.unbind();
153
+ }
154
+ // @ts-expect-error
155
+ device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
156
+ if (deleteFramebuffer) {
157
+ framebuffer.destroy();
158
+ }
159
+ return texture;
152
160
  }
153
161
  function getFramebuffer(source) {
154
- if (!(source instanceof Framebuffer)) {
155
- return {
156
- framebuffer: toFramebuffer(source),
157
- deleteFramebuffer: true
158
- };
159
- }
160
- return {
161
- framebuffer: source,
162
- deleteFramebuffer: false
163
- };
162
+ if (!(source instanceof Framebuffer)) {
163
+ return { framebuffer: toFramebuffer(source), deleteFramebuffer: true };
164
+ }
165
+ return { framebuffer: source, deleteFramebuffer: false };
164
166
  }
167
+ /**
168
+ * Wraps a given texture into a framebuffer object, that can be further used
169
+ * to read data from the texture object.
170
+ */
165
171
  export function toFramebuffer(texture, props) {
166
- const {
167
- device,
168
- width,
169
- height,
170
- id
171
- } = texture;
172
- const framebuffer = device.createFramebuffer({
173
- ...props,
174
- id: `framebuffer-for-${id}`,
175
- width,
176
- height,
177
- colorAttachments: [texture]
178
- });
179
- return framebuffer;
172
+ const { device, width, height, id } = texture;
173
+ const framebuffer = device.createFramebuffer({
174
+ ...props,
175
+ id: `framebuffer-for-${id}`,
176
+ width,
177
+ height,
178
+ colorAttachments: [texture]
179
+ });
180
+ return framebuffer;
180
181
  }
181
182
  function getPixelArray(pixelArray, type, format, width, height) {
182
- if (pixelArray) {
183
- return pixelArray;
184
- }
185
- type = type || 5121;
186
- const ArrayType = getTypedArrayFromGLType(type, {
187
- clamped: false
188
- });
189
- const components = glFormatToComponents(format);
190
- return new ArrayType(width * height * components);
183
+ if (pixelArray) {
184
+ return pixelArray;
185
+ }
186
+ // Allocate pixel array if not already available, using supplied type
187
+ type = type || GL.UNSIGNED_BYTE;
188
+ const ArrayType = getTypedArrayFromGLType(type, { clamped: false });
189
+ const components = glFormatToComponents(format);
190
+ // TODO - check for composite type (components = 1).
191
+ return new ArrayType(width * height * components);
191
192
  }
192
- //# sourceMappingURL=copy-and-blit.js.map
@@ -1,3 +1,3 @@
1
- export declare function glFormatToComponents(format: any): 2 | 0 | 1 | 4 | 3;
2
- export declare function glTypeToBytes(type: any): 2 | 0 | 1 | 4;
1
+ export declare function glFormatToComponents(format: any): 1 | 2 | 3 | 4 | 0;
2
+ export declare function glTypeToBytes(type: any): 1 | 2 | 4 | 0;
3
3
  //# sourceMappingURL=format-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/classic/format-utils.ts"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,CAAC,MAAM,KAAA,qBAoB1C;AAGD,wBAAgB,aAAa,CAAC,IAAI,KAAA,iBAejC"}
1
+ {"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/classic/format-utils.ts"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,CAAC,MAAM,KAAA,qBAoB1C;AAGD,wBAAgB,aAAa,CAAC,IAAI,KAAA,iBAejC"}
@@ -1,37 +1,44 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
1
4
  import { assert } from '@luma.gl/core';
5
+ import { GL } from '@luma.gl/constants';
6
+ // Returns number of components in a specific readPixels WebGL format
2
7
  export function glFormatToComponents(format) {
3
- switch (format) {
4
- case 6406:
5
- case 33326:
6
- case 6403:
7
- return 1;
8
- case 33328:
9
- case 33319:
10
- return 2;
11
- case 6407:
12
- case 34837:
13
- return 3;
14
- case 6408:
15
- case 34836:
16
- return 4;
17
- default:
18
- assert(false);
19
- return 0;
20
- }
8
+ switch (format) {
9
+ case GL.ALPHA:
10
+ case GL.R32F:
11
+ case GL.RED:
12
+ return 1;
13
+ case GL.RG32F:
14
+ case GL.RG:
15
+ return 2;
16
+ case GL.RGB:
17
+ case GL.RGB32F:
18
+ return 3;
19
+ case GL.RGBA:
20
+ case GL.RGBA32F:
21
+ return 4;
22
+ // TODO: Add support for additional WebGL2 formats
23
+ default:
24
+ assert(false);
25
+ return 0;
26
+ }
21
27
  }
28
+ // Return byte count for given readPixels WebGL type
22
29
  export function glTypeToBytes(type) {
23
- switch (type) {
24
- case 5121:
25
- return 1;
26
- case 33635:
27
- case 32819:
28
- case 32820:
29
- return 2;
30
- case 5126:
31
- return 4;
32
- default:
33
- assert(false);
34
- return 0;
35
- }
30
+ switch (type) {
31
+ case GL.UNSIGNED_BYTE:
32
+ return 1;
33
+ case GL.UNSIGNED_SHORT_5_6_5:
34
+ case GL.UNSIGNED_SHORT_4_4_4_4:
35
+ case GL.UNSIGNED_SHORT_5_5_5_1:
36
+ return 2;
37
+ case GL.FLOAT:
38
+ return 4;
39
+ // TODO: Add support for additional WebGL2 types
40
+ default:
41
+ assert(false);
42
+ return 0;
43
+ }
36
44
  }
37
- //# sourceMappingURL=format-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typed-array-utils.d.ts","sourceRoot":"","sources":["../../src/classic/typed-array-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAK,UAAU,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAI/D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,CAuB3E;AAED;;;;;;;GAOG;AAEH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,GAAG,WAAW,EAChC,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,qBAAqB,CAwBvB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,IAAI,CAgBP;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IACF,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAaA"}
1
+ {"version":3,"file":"typed-array-utils.d.ts","sourceRoot":"","sources":["../../src/classic/typed-array-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,qBAAqB,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAK,UAAU,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAI/D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,CAuB3E;AAED;;;;;;;GAOG;AAEH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,GAAG,WAAW,EAChC,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,qBAAqB,CAwBvB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,IAAI,CAgBP;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GAAG;IACvF,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAaA"}