@luma.gl/webgl 9.0.0-alpha.8 → 9.0.0-beta.1

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 (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +89 -74
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +4 -10
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +29 -180
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +52 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +306 -343
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +53 -22
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +9 -25
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +54 -58
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +49 -22
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/decode-webgl-types.js +89 -0
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  42. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  43. package/dist/adapter/helpers/get-shader-layout.js +58 -138
  44. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
  48. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  49. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  50. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  51. package/dist/adapter/helpers/set-uniform.js +51 -82
  52. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  53. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  54. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  55. package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
  56. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  57. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  58. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  59. package/dist/adapter/objects/constants-to-keys.js +2 -29
  60. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  62. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  63. package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
  64. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  65. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  66. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-resource.js +26 -83
  68. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  69. package/dist/adapter/resources/webgl-buffer.d.ts +19 -14
  70. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-buffer.js +67 -101
  72. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  74. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-command-buffer.js +175 -48
  76. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  78. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  80. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  81. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  82. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -25
  83. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.js +63 -175
  85. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  86. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  87. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-render-pass.js +98 -12
  89. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pipeline.d.ts +34 -20
  91. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pipeline.js +110 -293
  93. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  94. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  95. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-sampler.js +11 -21
  97. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  98. package/dist/adapter/resources/webgl-shader.d.ts +5 -5
  99. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-shader.js +18 -44
  101. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  102. package/dist/adapter/resources/webgl-texture.d.ts +51 -31
  103. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-texture.js +123 -244
  105. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  106. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  107. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  108. package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
  109. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +167 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +12 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +92 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +205 -158
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +26 -52
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/clear.d.ts +22 -0
  127. package/dist/classic/clear.d.ts.map +1 -0
  128. package/dist/classic/clear.js +88 -0
  129. package/dist/classic/clear.js.map +1 -0
  130. package/dist/classic/copy-and-blit.d.ts +62 -0
  131. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  132. package/dist/classic/copy-and-blit.js +192 -0
  133. package/dist/classic/copy-and-blit.js.map +1 -0
  134. package/dist/classic/format-utils.d.ts +3 -0
  135. package/dist/classic/format-utils.d.ts.map +1 -0
  136. package/dist/classic/format-utils.js +37 -0
  137. package/dist/classic/format-utils.js.map +1 -0
  138. package/dist/classic/typed-array-utils.d.ts +17 -17
  139. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  140. package/dist/classic/typed-array-utils.js +18 -39
  141. package/dist/classic/typed-array-utils.js.map +1 -1
  142. package/dist/context/context/create-browser-context.d.ts +17 -18
  143. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  144. package/dist/context/context/create-browser-context.js +11 -19
  145. package/dist/context/context/create-browser-context.js.map +1 -1
  146. package/dist/context/context/create-headless-context.d.ts +1 -1
  147. package/dist/context/context/create-headless-context.d.ts.map +1 -1
  148. package/dist/context/context/create-headless-context.js +6 -7
  149. package/dist/context/context/create-headless-context.js.map +1 -1
  150. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  151. package/dist/context/context/webgl-checks.js +1 -4
  152. package/dist/context/context/webgl-checks.js.map +1 -1
  153. package/dist/context/debug/spector.d.ts +1 -2
  154. package/dist/context/debug/spector.d.ts.map +1 -1
  155. package/dist/context/debug/spector.js +7 -19
  156. package/dist/context/debug/spector.js.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  158. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.js +18 -41
  160. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.d.ts +5 -5
  162. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.js +9 -17
  164. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  166. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.js +267 -286
  168. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  169. package/dist/context/polyfill/context-data.d.ts +13 -0
  170. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  171. package/dist/context/polyfill/context-data.js +12 -0
  172. package/dist/context/polyfill/context-data.js.map +1 -0
  173. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  174. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  175. package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
  176. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  178. package/dist/context/polyfill/polyfill-context.js +27 -31
  179. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  180. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  181. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-table.js +17 -40
  183. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  187. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +25 -61
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +8 -10
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +9344 -0
  198. package/dist/index.cjs +6556 -0
  199. package/dist/index.d.ts +23 -24
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -27
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +52 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +120 -43
  209. package/src/adapter/converters/sampler-parameters.ts +54 -126
  210. package/src/adapter/converters/shader-formats.ts +44 -0
  211. package/src/adapter/converters/texture-formats.ts +265 -192
  212. package/src/adapter/converters/vertex-formats.ts +71 -10
  213. package/src/adapter/device-helpers/device-features.ts +5 -2
  214. package/src/adapter/device-helpers/device-limits.ts +4 -2
  215. package/src/adapter/device-helpers/get-device-info.ts +72 -18
  216. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  217. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +31 -24
  218. package/src/adapter/helpers/get-shader-layout.ts +87 -131
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
  220. package/src/adapter/helpers/set-uniform.ts +39 -35
  221. package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
  222. package/src/adapter/objects/constants-to-keys.ts +6 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  224. package/src/adapter/objects/webgl-resource.ts +16 -23
  225. package/src/adapter/resources/webgl-buffer.ts +101 -106
  226. package/src/adapter/resources/webgl-command-buffer.ts +327 -25
  227. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  228. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  229. package/src/adapter/resources/webgl-framebuffer.ts +86 -133
  230. package/src/adapter/resources/webgl-render-pass.ts +165 -4
  231. package/src/adapter/resources/webgl-render-pipeline.ts +209 -205
  232. package/src/adapter/resources/webgl-sampler.ts +12 -8
  233. package/src/adapter/resources/webgl-shader.ts +32 -27
  234. package/src/adapter/resources/webgl-texture.ts +117 -91
  235. package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
  236. package/src/adapter/resources/webgl-vertex-array.ts +283 -0
  237. package/src/adapter/webgl-canvas-context.ts +18 -13
  238. package/src/adapter/webgl-device.ts +327 -92
  239. package/src/classic/accessor.ts +8 -5
  240. package/src/classic/clear.ts +113 -0
  241. package/src/classic/copy-and-blit.ts +312 -0
  242. package/src/classic/format-utils.ts +46 -0
  243. package/src/classic/typed-array-utils.ts +19 -27
  244. package/src/context/context/create-browser-context.ts +53 -31
  245. package/src/context/context/create-headless-context.ts +5 -2
  246. package/src/context/context/webgl-checks.ts +3 -1
  247. package/src/context/debug/spector.ts +8 -5
  248. package/src/context/debug/webgl-developer-tools.ts +26 -17
  249. package/src/context/parameters/unified-parameter-api.ts +15 -9
  250. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  251. package/src/context/polyfill/context-data.ts +30 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  253. package/src/context/polyfill/polyfill-context.ts +15 -8
  254. package/src/context/polyfill/polyfill-table.ts +20 -15
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  256. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  257. package/src/context/state-tracker/track-context-state.ts +13 -10
  258. package/src/context/state-tracker/with-parameters.ts +13 -4
  259. package/src/index.ts +65 -39
  260. package/src/types.ts +5 -0
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  262. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  263. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  264. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  265. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  266. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  267. package/dist/adapter/helpers/attribute-utils.js +0 -81
  268. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  270. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  271. package/dist/adapter/helpers/uniforms.js +0 -99
  272. package/dist/adapter/helpers/uniforms.js.map +0 -1
  273. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  274. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  275. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  276. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  277. package/dist/bundle.d.ts +0 -2
  278. package/dist/bundle.d.ts.map +0 -1
  279. package/dist/bundle.js +0 -5
  280. package/dist/bundle.js.map +0 -1
  281. package/dist/classic/buffer.d.ts +0 -95
  282. package/dist/classic/buffer.d.ts.map +0 -1
  283. package/dist/classic/buffer.js +0 -392
  284. package/dist/classic/buffer.js.map +0 -1
  285. package/dist/context/context/context-state.d.ts +0 -18
  286. package/dist/context/context/context-state.d.ts.map +0 -1
  287. package/dist/context/context/context-state.js +0 -26
  288. package/dist/context/context/context-state.js.map +0 -1
  289. package/dist/context/context/device-pixels.d.ts +0 -25
  290. package/dist/context/context/device-pixels.d.ts.map +0 -1
  291. package/dist/context/context/device-pixels.js +0 -103
  292. package/dist/context/context/device-pixels.js.map +0 -1
  293. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  294. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  295. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  296. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  297. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  298. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  299. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  300. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  301. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  302. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  303. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  304. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  305. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  306. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  307. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  308. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  309. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  310. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  311. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  312. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  313. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  314. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  315. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  316. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  317. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  318. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  319. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  320. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  321. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  322. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  323. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  324. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  325. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  326. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  327. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  328. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  329. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  330. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  331. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  332. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  333. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  334. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  335. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  336. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  337. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  338. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  339. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  340. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  341. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  342. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  343. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  344. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  345. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  346. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  347. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  348. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  349. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  350. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  351. package/dist/es5/adapter/webgl-device.js +0 -463
  352. package/dist/es5/adapter/webgl-device.js.map +0 -1
  353. package/dist/es5/bundle.js +0 -7
  354. package/dist/es5/bundle.js.map +0 -1
  355. package/dist/es5/classic/accessor.js +0 -181
  356. package/dist/es5/classic/accessor.js.map +0 -1
  357. package/dist/es5/classic/buffer.js +0 -478
  358. package/dist/es5/classic/buffer.js.map +0 -1
  359. package/dist/es5/classic/typed-array-utils.js +0 -126
  360. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  361. package/dist/es5/context/context/context-state.js +0 -31
  362. package/dist/es5/context/context/context-state.js.map +0 -1
  363. package/dist/es5/context/context/create-browser-context.js +0 -83
  364. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  365. package/dist/es5/context/context/create-headless-context.js +0 -60
  366. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  367. package/dist/es5/context/context/device-pixels.js +0 -121
  368. package/dist/es5/context/context/device-pixels.js.map +0 -1
  369. package/dist/es5/context/context/webgl-checks.js +0 -54
  370. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  371. package/dist/es5/context/debug/spector.js +0 -133
  372. package/dist/es5/context/debug/spector.js.map +0 -1
  373. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  374. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  375. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  376. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  377. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  378. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  379. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  380. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  381. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  382. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  383. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  384. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  385. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  386. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  387. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  388. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  389. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  390. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  391. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  392. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  393. package/dist/es5/index.js +0 -290
  394. package/dist/es5/index.js.map +0 -1
  395. package/dist/es5/init.js +0 -10
  396. package/dist/es5/init.js.map +0 -1
  397. package/dist/es5/types/webgl.js +0 -6
  398. package/dist/es5/types/webgl.js.map +0 -1
  399. package/dist/es5/types.js +0 -2
  400. package/dist/es5/types.js.map +0 -1
  401. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  402. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  403. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  404. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  405. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  406. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  407. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  408. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  409. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  410. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  411. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  412. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  413. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  414. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  415. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  416. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  417. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  418. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  419. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  420. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  421. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  422. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  423. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  424. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  425. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  426. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  427. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  428. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  429. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  430. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  431. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  432. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  433. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  434. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  435. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  436. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  437. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  438. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  439. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  440. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  441. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  442. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  443. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  444. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  445. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  446. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  447. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  448. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  449. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  450. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  451. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  452. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  453. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  454. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  455. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  456. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  457. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  458. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  459. package/dist/esm/adapter/webgl-device.js +0 -337
  460. package/dist/esm/adapter/webgl-device.js.map +0 -1
  461. package/dist/esm/bundle.js +0 -5
  462. package/dist/esm/bundle.js.map +0 -1
  463. package/dist/esm/classic/accessor.js +0 -144
  464. package/dist/esm/classic/accessor.js.map +0 -1
  465. package/dist/esm/classic/buffer.js +0 -392
  466. package/dist/esm/classic/buffer.js.map +0 -1
  467. package/dist/esm/classic/typed-array-utils.js +0 -112
  468. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  469. package/dist/esm/context/context/context-state.js +0 -26
  470. package/dist/esm/context/context/context-state.js.map +0 -1
  471. package/dist/esm/context/context/create-browser-context.js +0 -61
  472. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  473. package/dist/esm/context/context/create-headless-context.js +0 -43
  474. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  475. package/dist/esm/context/context/device-pixels.js +0 -103
  476. package/dist/esm/context/context/device-pixels.js.map +0 -1
  477. package/dist/esm/context/context/webgl-checks.js +0 -34
  478. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  479. package/dist/esm/context/debug/spector.js +0 -76
  480. package/dist/esm/context/debug/spector.js.map +0 -1
  481. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  482. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  483. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  484. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  485. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  487. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  489. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  490. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  491. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  492. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  493. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  495. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  496. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  497. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  498. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  499. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  500. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  501. package/dist/esm/index.js +0 -28
  502. package/dist/esm/index.js.map +0 -1
  503. package/dist/esm/init.js +0 -4
  504. package/dist/esm/init.js.map +0 -1
  505. package/dist/esm/types/webgl.js +0 -2
  506. package/dist/esm/types/webgl.js.map +0 -1
  507. package/dist/esm/types.js +0 -2
  508. package/dist/esm/types.js.map +0 -1
  509. package/dist/init.d.ts +0 -2
  510. package/dist/init.d.ts.map +0 -1
  511. package/dist/init.js +0 -4
  512. package/dist/init.js.map +0 -1
  513. package/dist/types/webgl.d.ts +0 -145
  514. package/dist/types/webgl.d.ts.map +0 -1
  515. package/dist/types/webgl.js +0 -2
  516. package/dist/types/webgl.js.map +0 -1
  517. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  518. package/src/adapter/helpers/attribute-utils.ts +0 -61
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/classic/buffer.ts +0 -474
  522. package/src/context/context/context-state.ts +0 -41
  523. package/src/context/context/device-pixels.ts +0 -158
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -284
@@ -0,0 +1,113 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {Device, Framebuffer, assert} from '@luma.gl/core';
5
+ import {WebGLDevice} from '../adapter/webgl-device';
6
+ import {withGLParameters} from '../context/state-tracker/with-parameters';
7
+
8
+ // Should collapse during minification
9
+ const GL_DEPTH_BUFFER_BIT = 0x00000100;
10
+ const GL_STENCIL_BUFFER_BIT = 0x00000400;
11
+ const GL_COLOR_BUFFER_BIT = 0x00004000;
12
+
13
+ const GL_COLOR = 0x1800;
14
+ const GL_DEPTH = 0x1801;
15
+ const GL_STENCIL = 0x1802;
16
+ const GL_DEPTH_STENCIL = 0x84f9;
17
+
18
+ // Should disappear if asserts are removed
19
+ const ERR_ARGUMENTS = 'clear: bad arguments';
20
+
21
+ /**
22
+ * Optionally clears depth, color and stencil buffers
23
+ * @deprecated Set clear color when creating a RenderPass.
24
+ */
25
+ export function clear(
26
+ gl: Device | WebGLRenderingContext,
27
+ options?: {framebuffer?: Framebuffer; color?: any; depth?: any; stencil?: any}
28
+ ): void {
29
+ const device = WebGLDevice.attach(gl);
30
+ const {framebuffer = null, color = null, depth = null, stencil = null} = options || {};
31
+ const parameters: any = {};
32
+
33
+ if (framebuffer) {
34
+ parameters.framebuffer = framebuffer;
35
+ }
36
+
37
+ let clearFlags = 0;
38
+
39
+ if (color) {
40
+ clearFlags |= GL_COLOR_BUFFER_BIT;
41
+ if (color !== true) {
42
+ parameters.clearColor = color;
43
+ }
44
+ }
45
+
46
+ if (depth) {
47
+ clearFlags |= GL_DEPTH_BUFFER_BIT;
48
+ if (depth !== true) {
49
+ parameters.clearDepth = depth;
50
+ }
51
+ }
52
+
53
+ if (stencil) {
54
+ clearFlags |= GL_STENCIL_BUFFER_BIT;
55
+ if (depth !== true) {
56
+ parameters.clearStencil = depth;
57
+ }
58
+ }
59
+
60
+ assert(clearFlags !== 0, ERR_ARGUMENTS);
61
+
62
+ // Temporarily set any clear "colors" and call clear
63
+ withGLParameters(device.gl, parameters, () => {
64
+ device.gl.clear(clearFlags);
65
+ });
66
+ }
67
+
68
+ /**
69
+ * WebGL2 - clear a specific drawing buffer
70
+ * @deprecated Set clear color when creating a RenderPass
71
+ */
72
+ export function clearBuffer(
73
+ gl: Device | WebGLRenderingContext,
74
+ options?: {framebuffer?: Framebuffer; buffer?: any; drawBuffer?: any; value?: any}
75
+ ) {
76
+ const device = WebGLDevice.attach(gl);
77
+
78
+ const {framebuffer = null, buffer = GL_COLOR, drawBuffer = 0, value = [0, 0, 0, 0]} = options || {};
79
+ withGLParameters(device.gl2, {framebuffer}, () => {
80
+ // Method selection per OpenGL ES 3 docs
81
+ switch (buffer) {
82
+ case GL_COLOR:
83
+ switch (value.constructor) {
84
+ case Int32Array:
85
+ device.gl2.clearBufferiv(buffer, drawBuffer, value);
86
+ break;
87
+ case Uint32Array:
88
+ device.gl2.clearBufferuiv(buffer, drawBuffer, value);
89
+ break;
90
+ case Float32Array:
91
+ default:
92
+ device.gl2.clearBufferfv(buffer, drawBuffer, value);
93
+ }
94
+ break;
95
+
96
+ case GL_DEPTH:
97
+ device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);
98
+ break;
99
+
100
+ case GL_STENCIL:
101
+ device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);
102
+ break;
103
+
104
+ case GL_DEPTH_STENCIL:
105
+ const [depth, stencil] = value;
106
+ device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);
107
+ break;
108
+
109
+ default:
110
+ assert(false, ERR_ARGUMENTS);
111
+ }
112
+ });
113
+ }
@@ -0,0 +1,312 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {assert, Buffer, Texture, Framebuffer, FramebufferProps} from '@luma.gl/core';
5
+ import {GL} from '@luma.gl/constants';
6
+
7
+ import {WEBGLTexture} from '../adapter/resources/webgl-texture';
8
+ import {WEBGLFramebuffer} from '../adapter/resources/webgl-framebuffer';
9
+ import {getGLTypeFromTypedArray, getTypedArrayFromGLType} from './typed-array-utils';
10
+ import {glFormatToComponents, glTypeToBytes} from './format-utils';
11
+ import {WEBGLBuffer} from '../adapter/resources/webgl-buffer';
12
+
13
+ /**
14
+ * Copies data from a type or a Texture object into ArrayBuffer object.
15
+ * App can provide targetPixelArray or have it auto allocated by this method
16
+ * newly allocated by this method unless provided by app.
17
+ * @deprecated Use CommandEncoder.copyTextureToBuffer and Buffer.read
18
+ * @note Slow requires roundtrip to GPU
19
+ *
20
+ * @param source
21
+ * @param options
22
+ * @returns pixel array,
23
+ */
24
+ export function readPixelsToArray(
25
+ source: Framebuffer | Texture,
26
+ options?: {
27
+ sourceX?: number;
28
+ sourceY?: number;
29
+ sourceFormat?: number;
30
+ sourceAttachment?: number;
31
+ target?: Uint8Array | Uint16Array | Float32Array;
32
+ // following parameters are auto deduced if not provided
33
+ sourceWidth?: number;
34
+ sourceHeight?: number;
35
+ sourceType?: number;
36
+ }
37
+ ): Uint8Array | Uint16Array | Float32Array {
38
+ const {
39
+ sourceX = 0,
40
+ sourceY = 0,
41
+ sourceFormat = GL.RGBA,
42
+ sourceAttachment = GL.COLOR_ATTACHMENT0 // TODO - support gl.readBuffer
43
+ } = options || {};
44
+ let {
45
+ target = null,
46
+ // following parameters are auto deduced if not provided
47
+ sourceWidth,
48
+ sourceHeight,
49
+ sourceType
50
+ } = options || {};
51
+
52
+ const {framebuffer, deleteFramebuffer} = getFramebuffer(source);
53
+ assert(framebuffer);
54
+ const {gl, handle} = framebuffer as WEBGLFramebuffer;
55
+ sourceWidth = sourceWidth || framebuffer.width;
56
+ sourceHeight = sourceHeight || framebuffer.height;
57
+
58
+ // TODO - Set and unset gl.readBuffer
59
+ // if (sourceAttachment === GL.COLOR_ATTACHMENT0 && handle === null) {
60
+ // sourceAttachment = GL.FRONT;
61
+ // }
62
+
63
+ const attachment = sourceAttachment - GL.COLOR_ATTACHMENT0;
64
+ // assert(attachments[sourceAttachment]);
65
+
66
+ // Deduce the type from color attachment if not provided.
67
+ sourceType =
68
+ sourceType ||
69
+ (framebuffer.colorAttachments[attachment] as WEBGLTexture)?.type ||
70
+ GL.UNSIGNED_BYTE;
71
+
72
+ // Deduce type and allocated pixelArray if needed
73
+ target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);
74
+
75
+ // Pixel array available, if necessary, deduce type from it.
76
+ sourceType = sourceType || getGLTypeFromTypedArray(target);
77
+
78
+ const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
79
+ gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);
80
+ // @ts-expect-error
81
+ gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
82
+ if (deleteFramebuffer) {
83
+ framebuffer.destroy();
84
+ }
85
+ return target;
86
+ }
87
+
88
+ /**
89
+ * Copies data from a Framebuffer or a Texture object into a Buffer object.
90
+ * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.
91
+ * @deprecated Use CommandEncoder
92
+ * @param source
93
+ * @param options
94
+ */
95
+ export function readPixelsToBuffer(
96
+ source: Framebuffer | Texture,
97
+ options?: {
98
+ sourceX?: number;
99
+ sourceY?: number;
100
+ sourceFormat?: number;
101
+ target?: Buffer; // A new Buffer object is created when not provided.
102
+ targetByteOffset?: number; // byte offset in buffer object
103
+ // following parameters are auto deduced if not provided
104
+ sourceWidth?: number;
105
+ sourceHeight?: number;
106
+ sourceType?: number;
107
+ }
108
+ ): WEBGLBuffer {
109
+ const {target, sourceX = 0, sourceY = 0, sourceFormat = GL.RGBA, targetByteOffset = 0} = options || {};
110
+ // following parameters are auto deduced if not provided
111
+ let {sourceWidth, sourceHeight, sourceType} = options || {};
112
+ const {framebuffer, deleteFramebuffer} = getFramebuffer(source);
113
+ assert(framebuffer);
114
+ sourceWidth = sourceWidth || framebuffer.width;
115
+ sourceHeight = sourceHeight || framebuffer.height;
116
+
117
+ // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature
118
+ const webglFramebuffer = framebuffer as WEBGLFramebuffer;
119
+
120
+ // deduce type if not available.
121
+ sourceType = sourceType || GL.UNSIGNED_BYTE;
122
+
123
+ let webglBufferTarget = target as unknown as WEBGLBuffer | undefined;
124
+ if (!webglBufferTarget) {
125
+ // Create new buffer with enough size
126
+ const components = glFormatToComponents(sourceFormat);
127
+ const byteCount = glTypeToBytes(sourceType);
128
+ const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;
129
+ webglBufferTarget = webglFramebuffer.device.createBuffer({byteLength});
130
+ }
131
+
132
+ // TODO(donmccurdy): Do we have tests to confirm this is working?
133
+ const commandEncoder = source.device.createCommandEncoder();
134
+ commandEncoder.copyTextureToBuffer({
135
+ source: source as Texture,
136
+ width: sourceWidth,
137
+ height: sourceHeight,
138
+ origin: [sourceX, sourceY],
139
+ destination: webglBufferTarget,
140
+ byteOffset: targetByteOffset
141
+ });
142
+ commandEncoder.destroy();
143
+
144
+ if (deleteFramebuffer) {
145
+ framebuffer.destroy();
146
+ }
147
+
148
+ return webglBufferTarget;
149
+ }
150
+
151
+ /**
152
+ * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)
153
+ * @deprecated Use CommandEncoder
154
+ */
155
+ // eslint-disable-next-line complexity, max-statements
156
+ export function copyToTexture(
157
+ source: Framebuffer | Texture,
158
+ target: Texture | GL,
159
+ options?: {
160
+ sourceX?: number;
161
+ sourceY?: number;
162
+
163
+ targetX?: number;
164
+ targetY?: number;
165
+ targetZ?: number;
166
+ targetMipmaplevel?: number;
167
+ targetInternalFormat?: number;
168
+
169
+ width?: number; // defaults to target width
170
+ height?: number; // defaults to target height
171
+ }
172
+ ): Texture {
173
+ const {
174
+ sourceX = 0,
175
+ sourceY = 0,
176
+ // attachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer
177
+ targetMipmaplevel = 0,
178
+ targetInternalFormat = GL.RGBA
179
+ } = options || {};
180
+ let {
181
+ targetX,
182
+ targetY,
183
+ targetZ,
184
+ width, // defaults to target width
185
+ height // defaults to target height
186
+ } = options || {};
187
+
188
+ const {framebuffer, deleteFramebuffer} = getFramebuffer(source);
189
+ assert(framebuffer);
190
+ const webglFramebuffer = framebuffer as WEBGLFramebuffer;
191
+ const {device, handle} = webglFramebuffer;
192
+ const isSubCopy =
193
+ typeof targetX !== 'undefined' ||
194
+ typeof targetY !== 'undefined' ||
195
+ typeof targetZ !== 'undefined';
196
+ targetX = targetX || 0;
197
+ targetY = targetY || 0;
198
+ targetZ = targetZ || 0;
199
+ const prevHandle = device.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
200
+ // TODO - support gl.readBuffer (WebGL2 only)
201
+ // const prevBuffer = gl.readBuffer(attachment);
202
+ assert(target);
203
+ let texture = null;
204
+ let textureTarget: GL;
205
+ if (target instanceof Texture) {
206
+ texture = target;
207
+ width = Number.isFinite(width) ? width : texture.width;
208
+ height = Number.isFinite(height) ? height : texture.height;
209
+ texture.bind(0);
210
+ textureTarget = texture.target;
211
+ } else {
212
+ textureTarget = target;
213
+ }
214
+
215
+ if (!isSubCopy) {
216
+ device.gl.copyTexImage2D(
217
+ textureTarget,
218
+ targetMipmaplevel,
219
+ targetInternalFormat,
220
+ sourceX,
221
+ sourceY,
222
+ width,
223
+ height,
224
+ 0 /* border must be 0 */
225
+ );
226
+ } else {
227
+ switch (textureTarget) {
228
+ case GL.TEXTURE_2D:
229
+ case GL.TEXTURE_CUBE_MAP:
230
+ device.gl.copyTexSubImage2D(
231
+ textureTarget,
232
+ targetMipmaplevel,
233
+ targetX,
234
+ targetY,
235
+ sourceX,
236
+ sourceY,
237
+ width,
238
+ height
239
+ );
240
+ break;
241
+ case GL.TEXTURE_2D_ARRAY:
242
+ case GL.TEXTURE_3D:
243
+ device.assertWebGL2();
244
+ device.gl2.copyTexSubImage3D(
245
+ textureTarget,
246
+ targetMipmaplevel,
247
+ targetX,
248
+ targetY,
249
+ targetZ,
250
+ sourceX,
251
+ sourceY,
252
+ width,
253
+ height
254
+ );
255
+ break;
256
+ default:
257
+ }
258
+ }
259
+ if (texture) {
260
+ texture.unbind();
261
+ }
262
+ // @ts-expect-error
263
+ device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
264
+ if (deleteFramebuffer) {
265
+ framebuffer.destroy();
266
+ }
267
+ return texture;
268
+ }
269
+
270
+ function getFramebuffer(source: Texture | Framebuffer): {
271
+ framebuffer: Framebuffer;
272
+ deleteFramebuffer: boolean;
273
+ } {
274
+ if (!(source instanceof Framebuffer)) {
275
+ return {framebuffer: toFramebuffer(source), deleteFramebuffer: true};
276
+ }
277
+ return {framebuffer: source, deleteFramebuffer: false};
278
+ }
279
+
280
+ /**
281
+ * Wraps a given texture into a framebuffer object, that can be further used
282
+ * to read data from the texture object.
283
+ */
284
+ export function toFramebuffer(texture: Texture, props?: FramebufferProps): Framebuffer {
285
+ const {device, width, height, id} = texture;
286
+ const framebuffer = device.createFramebuffer({
287
+ ...props,
288
+ id: `framebuffer-for-${id}`,
289
+ width,
290
+ height,
291
+ colorAttachments: [texture]
292
+ });
293
+ return framebuffer;
294
+ }
295
+
296
+ function getPixelArray(
297
+ pixelArray,
298
+ type,
299
+ format,
300
+ width: number,
301
+ height: number
302
+ ): Uint8Array | Uint16Array | Float32Array {
303
+ if (pixelArray) {
304
+ return pixelArray;
305
+ }
306
+ // Allocate pixel array if not already available, using supplied type
307
+ type = type || GL.UNSIGNED_BYTE;
308
+ const ArrayType = getTypedArrayFromGLType(type, {clamped: false});
309
+ const components = glFormatToComponents(format);
310
+ // TODO - check for composite type (components = 1).
311
+ return new ArrayType(width * height * components) as Uint8Array | Uint16Array | Float32Array;
312
+ }
@@ -0,0 +1,46 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {assert} from '@luma.gl/core';
5
+ import {GL} from '@luma.gl/constants';
6
+
7
+ // Returns number of components in a specific readPixels WebGL format
8
+ export function glFormatToComponents(format) {
9
+ switch (format) {
10
+ case GL.ALPHA:
11
+ case GL.R32F:
12
+ case GL.RED:
13
+ return 1;
14
+ case GL.RG32F:
15
+ case GL.RG:
16
+ return 2;
17
+ case GL.RGB:
18
+ case GL.RGB32F:
19
+ return 3;
20
+ case GL.RGBA:
21
+ case GL.RGBA32F:
22
+ return 4;
23
+ // TODO: Add support for additional WebGL2 formats
24
+ default:
25
+ assert(false);
26
+ return 0;
27
+ }
28
+ }
29
+
30
+ // Return byte count for given readPixels WebGL type
31
+ export function glTypeToBytes(type) {
32
+ switch (type) {
33
+ case GL.UNSIGNED_BYTE:
34
+ return 1;
35
+ case GL.UNSIGNED_SHORT_5_6_5:
36
+ case GL.UNSIGNED_SHORT_4_4_4_4:
37
+ case GL.UNSIGNED_SHORT_5_5_5_1:
38
+ return 2;
39
+ case GL.FLOAT:
40
+ return 4;
41
+ // TODO: Add support for additional WebGL2 types
42
+ default:
43
+ assert(false);
44
+ return 0;
45
+ }
46
+ }
@@ -1,28 +1,19 @@
1
1
  // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
 
3
- import {TypedArray} from '@luma.gl/api';
4
- import GL from '@luma.gl/constants';
5
- import {GLType} from '../types/webgl'
4
+ import {TypedArray, TypedArrayConstructor} from '@luma.gl/core';
5
+ import {GL, GLDataType, GLPixelType} from '@luma.gl/constants';
6
6
 
7
7
  const ERR_TYPE_DEDUCTION = 'Failed to deduce GL constant from typed array';
8
8
 
9
- type TypedArrayConstructor =
10
- | Float32ArrayConstructor
11
- | Uint16ArrayConstructor
12
- | Uint32ArrayConstructor
13
- | Uint8ArrayConstructor
14
- | Uint8ClampedArrayConstructor
15
- | Int8ArrayConstructor
16
- | Int16ArrayConstructor
17
- | Int32ArrayConstructor;
18
-
19
9
  /**
20
10
  * Converts TYPED ARRAYS to corresponding GL constant
21
11
  * Used to auto deduce gl parameter types
22
- * @param {*} arrayOrType
12
+ * @deprecated Use getDataTypeFromTypedArray
13
+ * @param arrayOrType
23
14
  * @returns
24
15
  */
25
- export function getGLTypeFromTypedArray(arrayOrType: TypedArray): GLType {
16
+ export function getGLTypeFromTypedArray(arrayOrType: TypedArray): GLDataType {
26
17
  // If typed array, look up constructor
27
18
  const type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;
28
19
  switch (type) {
@@ -50,13 +41,14 @@ export function getGLTypeFromTypedArray(arrayOrType: TypedArray): GLType {
50
41
  /**
51
42
  * Converts GL constant to corresponding TYPED ARRAY
52
43
  * Used to auto deduce gl parameter types
53
- * @param {*} glType
54
- * @param {*} param1
44
+ * @deprecated Use getTypedArrayFromDataType
45
+ * @param glType
46
+ * @param param1
55
47
  * @returns
56
48
  */
57
49
  // eslint-disable-next-line complexity
58
50
  export function getTypedArrayFromGLType(
59
- glType: any,
51
+ glType: GLDataType | GLPixelType,
60
52
  options?: {
61
53
  clamped?: boolean;
62
54
  }
@@ -90,14 +82,14 @@ export function getTypedArrayFromGLType(
90
82
  * Flip rows (can be used on arrays returned from `Framebuffer.readPixels`)
91
83
  * https: *stackoverflow.com/questions/41969562/
92
84
  * how-can-i-flip-the-result-of-webglrenderingcontext-readpixels
93
- * @param {*} param0
85
+ * @param param0
94
86
  */
95
- export function flipRows(options: {
96
- data: any;
97
- width: any;
98
- height: any;
87
+ export function flipRows(options: {
88
+ data: TypedArray;
89
+ width: number;
90
+ height: number;
99
91
  bytesPerPixel?: number;
100
- temp?: any;
92
+ temp?: Uint8Array;
101
93
  }): void {
102
94
  const {data, width, height, bytesPerPixel = 4, temp} = options;
103
95
  const bytesPerRow = width * bytesPerPixel;
@@ -118,9 +110,9 @@ export function getTypedArrayFromGLType(
118
110
 
119
111
 
120
112
  export function scalePixels(options: {
121
- data: any;
122
- width: any;
123
- height: any;
113
+ data: TypedArray;
114
+ width: number;
115
+ height: number;
124
116
  }): {
125
117
  data: Uint8Array;
126
118
  width: number;
@@ -1,22 +1,23 @@
1
1
  // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
2
3
 
3
4
  /**
4
5
  * ContextProps
5
- * @param webgl2 Set to false to not create a WebGL2 context (force webgl1)
6
- * @param webgl1 set to false to not create a WebGL1 context (fail if webgl2 not available)
7
- * @param onContextLost
8
- * @param onContextRestored
9
- *
10
- * BROWSER CONTEXT PARAMETERS
11
- * @param debug Instrument context (at the expense of performance).
12
- * @param alpha Default render target has an alpha buffer.
13
- * @param depth Default render target has a depth buffer of at least 16 bits.
14
- * @param stencil Default render target has a stencil buffer of at least 8 bits.
15
- * @param antialias Boolean that indicates whether or not to perform anti-aliasing.
16
- * @param premultipliedAlpha Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
17
- * @param preserveDrawingBuffer Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
18
- * @param failIfMajorPerformanceCaveat Do not create if the system performance is low.
19
- */
6
+ * @param webgl2 Set to false to not create a WebGL2 context (force webgl1)
7
+ * @param webgl1 set to false to not create a WebGL1 context (fail if webgl2 not available)
8
+ * @param onContextLost
9
+ * @param onContextRestored
10
+ *
11
+ * BROWSER CONTEXT PARAMETERS
12
+ * @param debug Instrument context (at the expense of performance).
13
+ * @param alpha Default render target has an alpha buffer.
14
+ * @param depth Default render target has a depth buffer of at least 16 bits.
15
+ * @param stencil Default render target has a stencil buffer of at least 8 bits.
16
+ * @param antialias Boolean that indicates whether or not to perform anti-aliasing.
17
+ * @param premultipliedAlpha Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
18
+ * @param preserveDrawingBuffer Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
19
+ * @param failIfMajorPerformanceCaveat Do not create if the system performance is low.
20
+ */
20
21
  type ContextProps = {
21
22
  type?: 'webgl' | 'webgl1' | 'webgl2' | string;
22
23
  webgl1?: boolean;
@@ -27,35 +28,40 @@ type ContextProps = {
27
28
  desynchronized?: boolean; // hints the user agent to reduce the latency by desynchronizing the canvas paint cycle from the event loop
28
29
  antialias?: boolean; // indicates whether or not to perform anti-aliasing.
29
30
  depth?: boolean; // indicates that the drawing buffer has a depth buffer of at least 16 bits.
30
- failIfMajorPerformanceCaveat?: boolean, // indicates if a context will be created if the system performance is low or if no hardware GPU is available.
31
- powerPreference?: 'default' | 'high-performance' | 'low-power',
32
- premultipliedAlpha?: boolean, // page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
33
- preserveDrawingBuffer?: boolean // buffers will not be cleared and will preserve their values until cleared or overwritten by the author.
31
+ failIfMajorPerformanceCaveat?: boolean; // indicates if a context will be created if the system performance is low or if no hardware GPU is available.
32
+ powerPreference?: 'default' | 'high-performance' | 'low-power';
33
+ premultipliedAlpha?: boolean; // page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
34
+ preserveDrawingBuffer?: boolean; // buffers will not be cleared and will preserve their values until cleared or overwritten by the author.
34
35
  };
35
36
 
36
37
  const DEFAULT_CONTEXT_PROPS: ContextProps = {
37
38
  webgl2: true, // Attempt to create a WebGL2 context
38
39
  webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
39
40
  powerPreference: 'high-performance', // After all, most apps are using WebGL for performance reasons
41
+ // eslint-disable-next-line no-console
40
42
  onContextLost: () => console.error('WebGL context lost'),
41
- onContextRestored: () => console.info('WebGL context restored'),
43
+ // eslint-disable-next-line no-console
44
+ onContextRestored: () => console.info('WebGL context restored')
42
45
  };
43
46
 
44
47
  /**
45
48
  * Create a WebGL context for a canvas
46
49
  * Note calling this multiple time on the same canvas does return the same context
47
- * @param canvas A canvas element or offscreen canvas
50
+ * @param canvas A canvas element or offscreen canvas
48
51
  */
49
- export function createBrowserContext(canvas: HTMLCanvasElement | OffscreenCanvas, props: ContextProps): WebGLRenderingContext {
50
- props = {...DEFAULT_CONTEXT_PROPS, ...props};
52
+ export function createBrowserContext(
53
+ canvas: HTMLCanvasElement | OffscreenCanvas,
54
+ props: ContextProps
55
+ ): WebGLRenderingContext {
56
+ props = {...DEFAULT_CONTEXT_PROPS, ...props};
51
57
 
52
58
  // Try to extract any extra information about why context creation failed
53
59
  let errorMessage = null;
54
- const onCreateError = (error) => (errorMessage = error.statusMessage || errorMessage);
60
+ const onCreateError = error => (errorMessage = error.statusMessage || errorMessage);
55
61
  canvas.addEventListener('webglcontextcreationerror', onCreateError, false);
56
62
 
57
63
  // Create the desired context
58
- let gl: WebGLRenderingContext | null = null;
64
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = null;
59
65
 
60
66
  if (props.type === 'webgl2') {
61
67
  props = {...props, webgl1: false};
@@ -64,14 +70,26 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
64
70
  props = {...props, webgl2: false};
65
71
  }
66
72
 
73
+ // props.failIfMajorPerformanceCaveat = true;
74
+
67
75
  // Prefer webgl2 over webgl1 if both are acceptable
68
- if (props.webgl2) {
69
- gl = gl || canvas.getContext('webgl2', props) as WebGL2RenderingContext | null;
76
+ if (!gl && props.webgl2) {
77
+ gl = canvas.getContext('webgl2', props) as WebGL2RenderingContext;
70
78
  }
71
- if (props.webgl1) {
72
- gl = gl || canvas.getContext('webgl', props) as WebGLRenderingContext | null;
79
+ if (!gl && props.webgl1) {
80
+ gl = canvas.getContext('webgl', props) as WebGLRenderingContext;
73
81
  }
74
82
 
83
+ // Software GPU
84
+
85
+ // props.failIfMajorPerformanceCaveat = false;
86
+ // if (!gl && props.webgl2) {
87
+ // gl = canvas.getContext('webgl2', props);
88
+ // }
89
+ // if (!gl && props.webgl1) {
90
+ // gl = canvas.getContext('webgl', props);
91
+ // }
92
+
75
93
  // TODO are we removing this listener before giving it a chance to fire?
76
94
  canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);
77
95
 
@@ -86,12 +104,16 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
86
104
  if (props.onContextLost) {
87
105
  // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
88
106
  const {onContextLost} = props;
89
- canvas.addEventListener('webglcontextlost',(event: Event) => onContextLost(event), false);
107
+ canvas.addEventListener('webglcontextlost', (event: Event) => onContextLost(event), false);
90
108
  }
91
109
  if (props.onContextRestored) {
92
110
  // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
93
111
  const {onContextRestored} = props;
94
- canvas.addEventListener('webglcontextrestored', (event: Event) => onContextRestored(event), false);
112
+ canvas.addEventListener(
113
+ 'webglcontextrestored',
114
+ (event: Event) => onContextRestored(event),
115
+ false
116
+ );
95
117
  }
96
118
 
97
119
  return gl;