@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.41

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