@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.30

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 (500) hide show
  1. package/LICENSE +2 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +14 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +28 -46
  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/texture-formats.d.ts +31 -42
  11. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/texture-formats.js +163 -178
  13. package/dist/adapter/converters/texture-formats.js.map +1 -1
  14. package/dist/adapter/converters/vertex-formats.d.ts +2 -2
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +3 -9
  17. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  18. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  19. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/device-features.js +13 -20
  21. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  23. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-limits.js +2 -5
  25. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  26. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  27. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  29. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  30. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  31. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  32. package/dist/adapter/helpers/attribute-utils.d.ts +4 -4
  33. package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -1
  34. package/dist/adapter/helpers/attribute-utils.js +1 -18
  35. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  36. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  37. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  38. package/dist/adapter/helpers/get-shader-info.js +25 -0
  39. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  40. package/dist/adapter/helpers/get-shader-layout.d.ts +10 -7
  41. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  42. package/dist/adapter/helpers/get-shader-layout.js +101 -84
  43. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  44. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  48. package/dist/adapter/helpers/set-uniform.d.ts +2 -2
  49. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  50. package/dist/adapter/helpers/set-uniform.js +3 -33
  51. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  52. package/dist/adapter/helpers/uniforms.d.ts +9 -10
  53. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  54. package/dist/adapter/helpers/uniforms.js +8 -18
  55. package/dist/adapter/helpers/uniforms.js.map +1 -1
  56. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  57. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  58. package/dist/adapter/objects/constants-to-keys.js +1 -28
  59. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  60. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  62. package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
  63. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  64. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  65. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  66. package/dist/adapter/objects/webgl-resource.js +19 -75
  67. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  68. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +38 -11
  69. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  70. package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
  71. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  72. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  73. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-buffer.js +43 -71
  75. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  76. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-command-buffer.js +169 -41
  79. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  80. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-command-encoder.js +8 -17
  83. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  84. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  87. package/dist/adapter/resources/webgl-framebuffer.js +41 -149
  88. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  89. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  90. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-render-pass.js +88 -9
  92. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  93. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -11
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-render-pipeline.js +90 -152
  96. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  97. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  98. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-sampler.js +7 -15
  100. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  101. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  102. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-shader.js +9 -22
  104. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  105. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  106. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  107. package/dist/adapter/resources/webgl-texture.js +98 -213
  108. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  109. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  110. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  111. package/dist/adapter/webgl-canvas-context.js +8 -20
  112. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  113. package/dist/adapter/webgl-device.d.ts +64 -41
  114. package/dist/adapter/webgl-device.d.ts.map +1 -1
  115. package/dist/adapter/webgl-device.js +133 -113
  116. package/dist/adapter/webgl-device.js.map +1 -1
  117. package/dist/classic/accessor.d.ts +3 -3
  118. package/dist/classic/accessor.d.ts.map +1 -1
  119. package/dist/classic/accessor.js +14 -38
  120. package/dist/classic/accessor.js.map +1 -1
  121. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
  122. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  123. package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
  124. package/dist/classic/buffer-with-accessor.js.map +1 -0
  125. package/dist/classic/clear.d.ts +22 -0
  126. package/dist/classic/clear.d.ts.map +1 -0
  127. package/dist/classic/clear.js +88 -0
  128. package/dist/classic/clear.js.map +1 -0
  129. package/dist/classic/copy-and-blit.d.ts +62 -0
  130. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  131. package/dist/classic/copy-and-blit.js +202 -0
  132. package/dist/classic/copy-and-blit.js.map +1 -0
  133. package/dist/classic/format-utils.d.ts +3 -0
  134. package/dist/classic/format-utils.d.ts.map +1 -0
  135. package/dist/classic/format-utils.js +38 -0
  136. package/dist/classic/format-utils.js.map +1 -0
  137. package/dist/classic/typed-array-utils.d.ts +15 -17
  138. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  139. package/dist/classic/typed-array-utils.js +1 -21
  140. package/dist/classic/typed-array-utils.js.map +1 -1
  141. package/dist/context/context/create-browser-context.d.ts +40 -0
  142. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  143. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
  144. package/dist/context/context/create-browser-context.js.map +1 -0
  145. package/dist/context/context/create-headless-context.d.ts +9 -0
  146. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  147. package/dist/context/context/create-headless-context.js +42 -0
  148. package/dist/context/context/create-headless-context.js.map +1 -0
  149. package/dist/context/context/webgl-checks.js +1 -4
  150. package/dist/context/context/webgl-checks.js.map +1 -1
  151. package/dist/context/debug/spector.d.ts +1 -2
  152. package/dist/context/debug/spector.d.ts.map +1 -1
  153. package/dist/context/debug/spector.js +8 -20
  154. package/dist/context/debug/spector.js.map +1 -1
  155. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  156. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.js +11 -34
  158. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  159. package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
  160. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.js +8 -18
  162. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  163. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  164. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  166. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  167. package/dist/context/polyfill/context-data.d.ts +13 -0
  168. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  169. package/dist/context/polyfill/context-data.js +12 -0
  170. package/dist/context/polyfill/context-data.js.map +1 -0
  171. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  172. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  173. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  174. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  175. package/dist/context/polyfill/polyfill-context.js +21 -29
  176. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  178. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  179. package/dist/context/polyfill/polyfill-table.js +10 -32
  180. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  183. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  184. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  185. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  186. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  187. package/dist/context/state-tracker/track-context-state.js +16 -51
  188. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  189. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  190. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  191. package/dist/context/state-tracker/with-parameters.js +7 -9
  192. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  193. package/dist/dist.dev.js +10158 -0
  194. package/dist/index.cjs +6604 -0
  195. package/dist/index.d.ts +25 -22
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +27 -26
  198. package/dist/index.js.map +1 -1
  199. package/dist/types.d.ts +1 -1
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/types.js.map +1 -1
  202. package/dist.min.js +37 -0
  203. package/package.json +21 -9
  204. package/src/adapter/converters/device-parameters.ts +88 -35
  205. package/src/adapter/converters/sampler-parameters.ts +19 -9
  206. package/src/adapter/converters/texture-formats.ts +261 -178
  207. package/src/adapter/converters/vertex-formats.ts +3 -2
  208. package/src/adapter/device-helpers/device-features.ts +10 -3
  209. package/src/adapter/device-helpers/device-limits.ts +3 -3
  210. package/src/adapter/device-helpers/get-device-info.ts +14 -10
  211. package/src/adapter/helpers/attribute-utils.ts +4 -5
  212. package/src/adapter/helpers/get-shader-info.ts +40 -0
  213. package/src/adapter/helpers/get-shader-layout.ts +150 -68
  214. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  215. package/src/adapter/helpers/set-uniform.ts +7 -6
  216. package/src/adapter/helpers/uniforms.ts +23 -13
  217. package/src/adapter/objects/constants-to-keys.ts +3 -25
  218. package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
  219. package/src/adapter/objects/webgl-resource.ts +14 -23
  220. package/src/adapter/objects/webgl-vertex-array-object.ts +201 -37
  221. package/src/adapter/resources/webgl-buffer.ts +56 -58
  222. package/src/adapter/resources/webgl-command-buffer.ts +332 -25
  223. package/src/adapter/resources/webgl-command-encoder.ts +16 -11
  224. package/src/adapter/resources/webgl-external-texture.ts +2 -2
  225. package/src/adapter/resources/webgl-framebuffer.ts +88 -133
  226. package/src/adapter/resources/webgl-render-pass.ts +155 -4
  227. package/src/adapter/resources/webgl-render-pipeline.ts +161 -104
  228. package/src/adapter/resources/webgl-sampler.ts +13 -8
  229. package/src/adapter/resources/webgl-shader.ts +11 -10
  230. package/src/adapter/resources/webgl-texture.ts +113 -85
  231. package/src/adapter/webgl-canvas-context.ts +14 -14
  232. package/src/adapter/webgl-device.ts +192 -77
  233. package/src/classic/accessor.ts +4 -17
  234. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
  235. package/src/classic/clear.ts +110 -0
  236. package/src/classic/copy-and-blit.ts +308 -0
  237. package/src/classic/format-utils.ts +43 -0
  238. package/src/classic/typed-array-utils.ts +18 -27
  239. package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
  240. package/src/context/context/create-headless-context.ts +48 -0
  241. package/src/context/context/webgl-checks.ts +1 -1
  242. package/src/context/debug/spector.ts +7 -6
  243. package/src/context/debug/webgl-developer-tools.ts +21 -15
  244. package/src/context/parameters/unified-parameter-api.ts +20 -14
  245. package/src/context/parameters/webgl-parameter-tables.ts +117 -98
  246. package/src/context/polyfill/context-data.ts +27 -0
  247. package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
  248. package/src/context/polyfill/polyfill-context.ts +7 -9
  249. package/src/context/polyfill/polyfill-table.ts +18 -16
  250. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  251. package/src/context/state-tracker/track-context-state.ts +14 -13
  252. package/src/context/state-tracker/with-parameters.ts +8 -2
  253. package/src/index.ts +42 -33
  254. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  255. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  256. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  257. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  258. package/dist/bundle.d.ts +0 -2
  259. package/dist/bundle.d.ts.map +0 -1
  260. package/dist/bundle.js +0 -5
  261. package/dist/bundle.js.map +0 -1
  262. package/dist/classic/buffer.d.ts.map +0 -1
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/context/context/context-state.d.ts +0 -18
  265. package/dist/context/context/context-state.d.ts.map +0 -1
  266. package/dist/context/context/context-state.js +0 -26
  267. package/dist/context/context/context-state.js.map +0 -1
  268. package/dist/context/context/create-context.d.ts +0 -41
  269. package/dist/context/context/create-context.d.ts.map +0 -1
  270. package/dist/context/context/create-context.js +0 -49
  271. package/dist/context/context/create-context.js.map +0 -1
  272. package/dist/context/context/device-pixels.d.ts +0 -25
  273. package/dist/context/context/device-pixels.d.ts.map +0 -1
  274. package/dist/context/context/device-pixels.js +0 -98
  275. package/dist/context/context/device-pixels.js.map +0 -1
  276. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  277. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  278. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  279. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  280. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  281. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  282. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  283. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  284. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  285. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  286. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  287. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  288. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  289. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  290. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  291. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  292. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  293. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  294. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  295. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  296. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  297. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  298. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  299. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  300. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  301. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  302. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  303. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  304. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  305. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  306. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  307. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  308. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  309. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  310. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  311. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  312. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  313. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  314. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  315. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  316. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  317. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  318. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  319. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  320. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  321. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  322. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  323. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  324. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  325. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  326. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  327. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  328. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  329. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  330. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  331. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  332. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  333. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  334. package/dist/es5/adapter/webgl-device.js +0 -399
  335. package/dist/es5/adapter/webgl-device.js.map +0 -1
  336. package/dist/es5/bundle.js +0 -7
  337. package/dist/es5/bundle.js.map +0 -1
  338. package/dist/es5/classic/accessor.js +0 -181
  339. package/dist/es5/classic/accessor.js.map +0 -1
  340. package/dist/es5/classic/buffer.js +0 -470
  341. package/dist/es5/classic/buffer.js.map +0 -1
  342. package/dist/es5/classic/typed-array-utils.js +0 -126
  343. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  344. package/dist/es5/context/context/context-state.js +0 -31
  345. package/dist/es5/context/context/context-state.js.map +0 -1
  346. package/dist/es5/context/context/create-context.js +0 -69
  347. package/dist/es5/context/context/create-context.js.map +0 -1
  348. package/dist/es5/context/context/device-pixels.js +0 -115
  349. package/dist/es5/context/context/device-pixels.js.map +0 -1
  350. package/dist/es5/context/context/webgl-checks.js +0 -54
  351. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  352. package/dist/es5/context/debug/spector.js +0 -133
  353. package/dist/es5/context/debug/spector.js.map +0 -1
  354. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  355. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  356. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  357. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  358. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  359. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  360. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  361. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  362. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  363. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  364. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  365. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  366. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  367. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  368. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  369. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  370. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  371. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  372. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  373. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  374. package/dist/es5/index.js +0 -276
  375. package/dist/es5/index.js.map +0 -1
  376. package/dist/es5/init.js +0 -10
  377. package/dist/es5/init.js.map +0 -1
  378. package/dist/es5/types/webgl.js +0 -6
  379. package/dist/es5/types/webgl.js.map +0 -1
  380. package/dist/es5/types.js +0 -2
  381. package/dist/es5/types.js.map +0 -1
  382. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  383. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  384. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  385. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  386. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  387. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  388. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  389. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  390. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  391. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  392. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  393. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  394. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  395. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  396. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  397. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  398. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  399. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  400. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  401. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  402. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  403. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  404. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  405. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  406. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  407. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  408. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  409. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  410. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  411. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  412. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  413. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  414. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  415. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  416. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  417. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  418. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  419. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  420. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  421. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  422. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  423. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  424. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  425. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  426. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  427. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  428. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  429. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  430. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  431. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  432. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  433. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  434. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  435. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  436. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  437. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  438. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  439. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  440. package/dist/esm/adapter/webgl-device.js +0 -280
  441. package/dist/esm/adapter/webgl-device.js.map +0 -1
  442. package/dist/esm/bundle.js +0 -5
  443. package/dist/esm/bundle.js.map +0 -1
  444. package/dist/esm/classic/accessor.js +0 -144
  445. package/dist/esm/classic/accessor.js.map +0 -1
  446. package/dist/esm/classic/buffer.js +0 -384
  447. package/dist/esm/classic/buffer.js.map +0 -1
  448. package/dist/esm/classic/typed-array-utils.js +0 -112
  449. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  450. package/dist/esm/context/context/context-state.js +0 -26
  451. package/dist/esm/context/context/context-state.js.map +0 -1
  452. package/dist/esm/context/context/create-context.js.map +0 -1
  453. package/dist/esm/context/context/device-pixels.js +0 -98
  454. package/dist/esm/context/context/device-pixels.js.map +0 -1
  455. package/dist/esm/context/context/webgl-checks.js +0 -34
  456. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  457. package/dist/esm/context/debug/spector.js +0 -76
  458. package/dist/esm/context/debug/spector.js.map +0 -1
  459. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  460. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  461. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  462. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  463. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  464. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  465. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  466. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  467. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  468. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  469. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  470. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  471. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  472. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  473. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  474. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  475. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  476. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  477. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  478. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  479. package/dist/esm/index.js +0 -27
  480. package/dist/esm/index.js.map +0 -1
  481. package/dist/esm/init.js +0 -4
  482. package/dist/esm/init.js.map +0 -1
  483. package/dist/esm/types/webgl.js +0 -2
  484. package/dist/esm/types/webgl.js.map +0 -1
  485. package/dist/esm/types.js +0 -2
  486. package/dist/esm/types.js.map +0 -1
  487. package/dist/init.d.ts +0 -2
  488. package/dist/init.d.ts.map +0 -1
  489. package/dist/init.js +0 -4
  490. package/dist/init.js.map +0 -1
  491. package/dist/types/webgl.d.ts +0 -144
  492. package/dist/types/webgl.d.ts.map +0 -1
  493. package/dist/types/webgl.js +0 -2
  494. package/dist/types/webgl.js.map +0 -1
  495. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  496. package/src/bundle.ts +0 -4
  497. package/src/context/context/context-state.ts +0 -41
  498. package/src/context/context/device-pixels.ts +0 -152
  499. package/src/init.ts +0 -4
  500. package/src/types/webgl.ts +0 -283
@@ -1,25 +1,30 @@
1
- import type {BufferProps} from '@luma.gl/api';
2
- import {Buffer, assert} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import WebGLDevice from '../webgl-device';
1
+ import type {BufferProps} from '@luma.gl/core';
2
+ import {Buffer, assert} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
4
+ import {WebGLDevice} from '../webgl-device';
5
5
 
6
6
  const DEBUG_DATA_LENGTH = 10;
7
7
 
8
8
  /** WebGL Buffer interface */
9
- export default class WEBGLBuffer extends Buffer {
9
+ export class WEBGLBuffer extends Buffer {
10
10
  readonly device: WebGLDevice;
11
11
  readonly gl: WebGLRenderingContext;
12
12
  readonly gl2: WebGL2RenderingContext | null;
13
13
  readonly handle: WebGLBuffer;
14
- readonly target: number;
15
14
 
15
+ /** Target in OpenGL defines the type of buffer */
16
+ readonly glTarget: GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER;
17
+ /** Usage is a hint on how frequently the buffer will be updates */
18
+ readonly glUsage: GL.STATIC_DRAW | GL.DYNAMIC_DRAW;
19
+ /** Index type is needed when issuing draw calls, so we pre-compute it */
20
+ readonly glIndexType: GL.UNSIGNED_SHORT | GL.UNSIGNED_INT = GL.UNSIGNED_SHORT;
21
+
22
+ /** Number of bytes allocated on the GPU for this buffer */
16
23
  byteLength: number;
24
+ /** Number of bytes used */
17
25
  bytesUsed: number;
18
- debugData: ArrayBuffer;
19
-
20
- webglUsage: number;
21
-
22
- accessor: {};
26
+ /** A partial CPU-side copy of the data in this buffer, for debugging purposes */
27
+ debugData: ArrayBuffer | null = null;
23
28
 
24
29
  constructor(device: WebGLDevice, props: BufferProps = {}) {
25
30
  super(device, props);
@@ -28,18 +33,17 @@ export default class WEBGLBuffer extends Buffer {
28
33
  this.gl = this.device.gl;
29
34
  this.gl2 = this.device.gl2;
30
35
 
31
- const handle = typeof props === 'object' ? (props as BufferProps).handle : undefined;
36
+ const handle = typeof props === 'object' ? (props ).handle : undefined;
32
37
  this.handle = handle || this.gl.createBuffer();
33
- // @ts-expect-error Add metadata for spector
34
- this.handle.__SPECTOR_Metadata = {...this.props, data: typeof this.props.data}; // {name: this.props.id};
35
-
36
- // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
37
- // otherwise buffer type will lock to generic (non-element) buffer
38
- // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
39
- // @ts-expect-error Hack - Checking for subclass prop
40
- this.target = this.props.target || getWebGLTarget(this.props.usage);
41
- // @ts-expect-error Hack - Checking for subclass prop
42
- this.webglUsage = this.props.webglUsage || getWebGLUsage(this.props.usage);
38
+ device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data});
39
+
40
+ // - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
41
+ // otherwise buffer type will lock to generic (non-element) buffer
42
+ // - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
43
+ this.glTarget = getWebGLTarget(this.props.usage);
44
+ this.glUsage = getWebGLUsage(this.props.usage);
45
+ this.glIndexType = this.props.indexType === 'uint32' ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;
46
+
43
47
  this.debugData = null;
44
48
 
45
49
  // Set data: (re)initializes the buffer
@@ -48,25 +52,19 @@ export default class WEBGLBuffer extends Buffer {
48
52
  } else {
49
53
  this._initWithByteLength(props.byteLength || 0);
50
54
  }
51
-
52
- // Deprecated: Merge main props and accessor
53
- // this.accessor = {...props.accessor};
54
-
55
- // Object.seal(this);
56
55
  }
57
56
 
58
- // PRIVATE METHODS
57
+ // PRIVATE METHODS
59
58
 
60
- // Allocate a new buffer and initialize to contents of typed array
59
+ /** Allocate a new buffer and initialize to contents of typed array */
61
60
  _initWithData(data, byteOffset: number = 0, byteLength: number = data.byteLength + byteOffset): this {
62
61
  assert(ArrayBuffer.isView(data));
63
62
 
64
- const target = this._getWriteTarget();
65
-
66
- this.gl.bindBuffer(target, this.handle);
67
- this.gl.bufferData(target, byteLength, this.webglUsage);
68
- this.gl.bufferSubData(target, byteOffset, data);
69
- this.gl.bindBuffer(target, null);
63
+ const glTarget = this._getWriteTarget();
64
+ this.gl.bindBuffer(glTarget, this.handle);
65
+ this.gl.bufferData(glTarget, byteLength, this.glUsage);
66
+ this.gl.bufferSubData(glTarget, byteOffset, data);
67
+ this.gl.bindBuffer(glTarget, null);
70
68
 
71
69
  this.debugData = data.slice(0, DEBUG_DATA_LENGTH);
72
70
  this.bytesUsed = byteLength;
@@ -88,11 +86,11 @@ export default class WEBGLBuffer extends Buffer {
88
86
  data = new Float32Array(0);
89
87
  }
90
88
 
91
- const target = this._getWriteTarget();
89
+ const glTarget = this._getWriteTarget();
92
90
 
93
- this.gl.bindBuffer(target, this.handle);
94
- this.gl.bufferData(target, data, this.webglUsage);
95
- this.gl.bindBuffer(target, null);
91
+ this.gl.bindBuffer(glTarget, this.handle);
92
+ this.gl.bufferData(glTarget, data, this.glUsage);
93
+ this.gl.bindBuffer(glTarget, null);
96
94
 
97
95
  this.debugData = null;
98
96
  this.bytesUsed = byteLength;
@@ -101,41 +99,40 @@ export default class WEBGLBuffer extends Buffer {
101
99
  return this;
102
100
  }
103
101
 
104
- destroy(): void {
105
- if (this.handle) {
102
+ override destroy(): void {
103
+ if (!this.destroyed && this.handle) {
106
104
  this.removeStats();
107
105
  this.trackDeallocatedMemory();
108
106
  this.gl.deleteBuffer(this.handle);
107
+ this.destroyed = true;
109
108
  // @ts-expect-error
110
109
  this.handle = null;
111
110
  }
112
111
  }
113
112
 
114
- write(data: ArrayBufferView, byteOffset: number = 0): void {
113
+ override write(data: ArrayBufferView, byteOffset: number = 0): void {
115
114
  const srcOffset = 0;
116
- const byteLength = data.byteLength;
115
+ const byteLength = undefined; // data.byteLength;
117
116
 
118
117
  // Create the buffer - binding it here for the first time locks the type
119
118
  // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type
120
- const target = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;
121
- this.gl.bindBuffer(target, this.handle);
119
+ const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
120
+ this.gl.bindBuffer(glTarget, this.handle);
122
121
  // WebGL2: subData supports additional srcOffset and length parameters
123
122
  if (srcOffset !== 0 || byteLength !== undefined) {
124
123
  this.device.assertWebGL2();
125
-
126
- // @ts-expect-error
127
- this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);
124
+ this.gl2.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
128
125
  } else {
129
- this.gl.bufferSubData(target, byteOffset, data);
126
+ this.gl.bufferSubData(glTarget, byteOffset, data);
130
127
  }
131
- this.gl.bindBuffer(target, null);
128
+ this.gl.bindBuffer(glTarget, null);
132
129
 
133
130
  // TODO - update local `data` if offsets are right
134
131
  // this.debugData = data.slice(byteOffset, 40);
135
132
  }
136
133
 
137
134
  /** Read data from the buffer */
138
- async readAsync(
135
+ override async readAsync(
139
136
  byteOffset: number = 0,
140
137
  byteLength?: number
141
138
  ): Promise<ArrayBuffer> {
@@ -162,13 +159,13 @@ export default class WEBGLBuffer extends Buffer {
162
159
  }
163
160
 
164
161
  _getWriteTarget() {
165
- return this.target;
166
- // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;
162
+ return this.glTarget;
163
+ // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
167
164
  }
168
165
 
169
166
  _getReadTarget() {
170
- return this.target;
171
- return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.target;
167
+ return this.glTarget;
168
+ // return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.glTarget;
172
169
  }
173
170
  }
174
171
 
@@ -183,7 +180,7 @@ export default class WEBGLBuffer extends Buffer {
183
180
  // static INDIRECT = 0x0100;
184
181
  // static QUERY_RESOLVE = 0x0200;
185
182
 
186
- function getWebGLTarget(usage: number): GL {
183
+ function getWebGLTarget(usage: number): GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER {
187
184
  if (usage & Buffer.INDEX) {
188
185
  return GL.ELEMENT_ARRAY_BUFFER;
189
186
  }
@@ -205,7 +202,8 @@ function getWebGLTarget(usage: number): GL {
205
202
  return GL.ARRAY_BUFFER;
206
203
  }
207
204
 
208
- function getWebGLUsage(usage: number): GL {
205
+ /** @todo usage is not passed correctly */
206
+ function getWebGLUsage(usage: number): GL.STATIC_DRAW | GL.DYNAMIC_DRAW {
209
207
  if (usage & Buffer.INDEX) {
210
208
  return GL.STATIC_DRAW;
211
209
  }
@@ -215,5 +213,5 @@ function getWebGLUsage(usage: number): GL {
215
213
  if (usage & Buffer.UNIFORM) {
216
214
  return GL.DYNAMIC_DRAW;
217
215
  }
218
- return GL.DYNAMIC_DRAW;
216
+ return GL.STATIC_DRAW;
219
217
  }
@@ -1,12 +1,24 @@
1
+ // luma.gl, MIT license
2
+
1
3
  import type {
2
4
  CopyBufferToBufferOptions,
3
5
  CopyBufferToTextureOptions,
4
6
  CopyTextureToBufferOptions,
5
7
  CopyTextureToTextureOptions
6
- } from '@luma.gl/api';
7
- import GL from '@luma.gl/constants';
8
- import WebGLDevice from '../webgl-device';
9
- import WEBGLBuffer from './webgl-buffer';
8
+ } from '@luma.gl/core';
9
+ import {
10
+ CommandBuffer,
11
+ Texture,
12
+ // Buffer,
13
+ Framebuffer
14
+ } from '@luma.gl/core';
15
+ import {GL} from '@luma.gl/constants';
16
+
17
+ // import {getTypedArrayFromGLType, getGLTypeFromTypedArray} from '../../classic/typed-array-utils';
18
+ import {WebGLDevice} from '../webgl-device';
19
+ import {WEBGLBuffer} from './webgl-buffer';
20
+ import {WEBGLTexture} from './webgl-texture';
21
+ import {WEBGLFramebuffer} from './webgl-framebuffer';
10
22
 
11
23
  function cast<T>(value: unknown): T {
12
24
  return value as T;
@@ -38,25 +50,31 @@ type Command =
38
50
  | CopyTextureToBufferCommand
39
51
  | CopyTextureToTextureCommand;
40
52
 
41
- export default class CommandBuffer {
53
+ export class WEBGLCommandBuffer extends CommandBuffer {
54
+ device: WebGLDevice;
42
55
  commands: Command[] = [];
43
- }
44
56
 
45
- export function submitCommands(device: WebGLDevice, commands: Command[] = []) {
46
- for (const command of commands) {
47
- switch (command.name) {
48
- case 'copy-buffer-to-buffer':
49
- _copyBufferToBuffer(device, command.options);
50
- break;
51
- case 'copy-buffer-to-texture':
52
- _copyBufferToTexture(device, command.options);
53
- break;
54
- case 'copy-texture-to-buffer':
55
- _copyTextureToBuffer(device, command.options);
56
- break;
57
- case 'copy-texture-to-texture':
58
- _copyTextureToTexture(device, command.options);
59
- break;
57
+ constructor(device: WebGLDevice) {
58
+ super({});
59
+ this.device = device;
60
+ }
61
+
62
+ submitCommands(commands: Command[] = this.commands) {
63
+ for (const command of commands) {
64
+ switch (command.name) {
65
+ case 'copy-buffer-to-buffer':
66
+ _copyBufferToBuffer(this.device, command.options);
67
+ break;
68
+ case 'copy-buffer-to-texture':
69
+ _copyBufferToTexture(this.device, command.options);
70
+ break;
71
+ case 'copy-texture-to-buffer':
72
+ _copyTextureToBuffer(this.device, command.options);
73
+ break;
74
+ case 'copy-texture-to-texture':
75
+ _copyTextureToTexture(this.device, command.options);
76
+ break;
77
+ }
60
78
  }
61
79
  }
62
80
  }
@@ -65,7 +83,7 @@ function _copyBufferToBuffer(device: WebGLDevice, options: CopyBufferToBufferOpt
65
83
  const source = cast<WEBGLBuffer>(options.source);
66
84
  const destination = cast<WEBGLBuffer>(options.destination);
67
85
 
68
- const {gl2} = device;
86
+ const gl2 = device.assertWebGL2();
69
87
  if (gl2) {
70
88
  // In WebGL2 we can perform the copy on the GPU
71
89
  // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type
@@ -87,8 +105,297 @@ function _copyBufferToBuffer(device: WebGLDevice, options: CopyBufferToBufferOpt
87
105
  }
88
106
  }
89
107
 
90
- function _copyBufferToTexture(device: WebGLDevice, options: CopyBufferToTextureOptions): void {}
108
+ /**
109
+ * Copies data from a Buffer object into a Texture object
110
+ * NOTE: doesn't wait for copy to be complete
111
+ */
112
+ function _copyBufferToTexture(device: WebGLDevice, options: CopyBufferToTextureOptions): void {
113
+ throw new Error('Not implemented');
114
+ }
115
+
116
+ /**
117
+ * Copies data from a Texture object into a Buffer object.
118
+ * NOTE: doesn't wait for copy to be complete
119
+ */
120
+ function _copyTextureToBuffer(device: WebGLDevice, options: CopyTextureToBufferOptions): void {
121
+ const {
122
+ /** Texture to copy to/from. */
123
+ source,
124
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
125
+ mipLevel = 0,
126
+ /** Defines which aspects of the texture to copy to/from. */
127
+ aspect = 'all',
128
+
129
+ /** Width to copy */
130
+ width = options.source.width,
131
+ /** Height to copy */
132
+ height = options.source.height,
133
+ depthOrArrayLayers = 0,
134
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */
135
+ origin = [0, 0],
136
+
137
+ /** Destination buffer */
138
+ destination,
139
+ /** Offset, in bytes, from the beginning of the buffer to the start of the image data (default 0) */
140
+ byteOffset = 0,
141
+ /**
142
+ * The stride, in bytes, between the beginning of each block row and the subsequent block row.
143
+ * Required if there are multiple block rows (i.e. the copy height or depth is more than one block).
144
+ */
145
+ bytesPerRow,
146
+ /**
147
+ * Number of block rows per single image of the texture.
148
+ * rowsPerImage &times; bytesPerRow is the stride, in bytes, between the beginning of each image of data and the subsequent image.
149
+ * Required if there are multiple images (i.e. the copy depth is more than one).
150
+ */
151
+ rowsPerImage
152
+ } = options;
153
+
154
+ // TODO - Not possible to read just stencil or depth part in WebGL?
155
+ if (aspect !== 'all') {
156
+ throw new Error('not supported');
157
+ }
158
+
159
+ // TODO - mipLevels are set when attaching texture to framebuffer
160
+ if (mipLevel !== 0 || depthOrArrayLayers !== undefined || bytesPerRow || rowsPerImage) {
161
+ throw new Error('not implemented');
162
+ }
163
+
164
+ // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature
165
+ const gl2 = device.assertWebGL2();
166
+
167
+ const {framebuffer, destroyFramebuffer} = getFramebuffer(source);
168
+ try {
169
+ const webglBuffer = destination as WEBGLBuffer;
170
+ const sourceWidth = width || framebuffer.width;
171
+ const sourceHeight = height || framebuffer.height;
172
+
173
+ // TODO - hack - should be deduced
174
+ const sourceFormat = GL.RGBA;
175
+ const sourceType = GL.UNSIGNED_BYTE;
176
+
177
+ // if (!target) {
178
+ // // Create new buffer with enough size
179
+ // const components = glFormatToComponents(sourceFormat);
180
+ // const byteCount = glTypeToBytes(sourceType);
181
+ // const byteLength = byteOffset + sourceWidth * sourceHeight * components * byteCount;
182
+ // target = device.createBuffer({byteLength});
183
+ // }
184
+
185
+ gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, webglBuffer.handle);
186
+ gl2.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);
187
+
188
+ gl2.readPixels(
189
+ origin[0],
190
+ origin[1],
191
+ sourceWidth,
192
+ sourceHeight,
193
+ sourceFormat,
194
+ sourceType,
195
+ byteOffset
196
+ );
197
+ } finally {
198
+ gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, null);
199
+ gl2.bindFramebuffer(GL.FRAMEBUFFER, null);
200
+
201
+ if (destroyFramebuffer) {
202
+ framebuffer.destroy();
203
+ }
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Copies data from a Framebuffer or a Texture object into a Buffer object.
209
+ * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transfer.
210
+ export function readPixelsToBuffer(
211
+ source: Framebuffer | Texture,
212
+ options?: {
213
+ sourceX?: number;
214
+ sourceY?: number;
215
+ sourceFormat?: number;
216
+ target?: Buffer; // A new Buffer object is created when not provided.
217
+ targetByteOffset?: number; // byte offset in buffer object
218
+ // following parameters are auto deduced if not provided
219
+ sourceWidth?: number;
220
+ sourceHeight?: number;
221
+ sourceType?: number;
222
+ }
223
+ ): Buffer
224
+ */
225
+
226
+ /**
227
+ * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)
228
+ */
229
+ // eslint-disable-next-line complexity, max-statements
230
+ function _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextureOptions): void {
231
+ const {
232
+ /** Texture to copy to/from. */
233
+ source,
234
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
235
+ // mipLevel = 0,
236
+ /** Defines which aspects of the texture to copy to/from. */
237
+ // aspect = 'all',
238
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */
239
+ origin = [0, 0],
91
240
 
92
- function _copyTextureToBuffer(device: WebGLDevice, options: CopyTextureToBufferOptions): void {}
241
+ /** Texture to copy to/from. */
242
+ destination,
243
+ /** Mip-map level of the texture to copy to/from. (Default 0) */
244
+ // destinationMipLevel = options.mipLevel,
245
+ /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */
246
+ // destinationOrigin = [0, 0],
247
+ /** Defines which aspects of the texture to copy to/from. */
248
+ // destinationAspect = options.aspect,
93
249
 
94
- function _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextureOptions): void {}
250
+ } = options;
251
+
252
+ let {
253
+ width = options.destination.width,
254
+ height = options.destination.width,
255
+ // depthOrArrayLayers = 0
256
+ } = options;
257
+
258
+ const destinationMipmaplevel = 0;
259
+ const destinationInternalFormat = GL.RGBA;
260
+
261
+ const {framebuffer, destroyFramebuffer} = getFramebuffer(source);
262
+ const [sourceX, sourceY] = origin;
263
+
264
+ const isSubCopy = false;
265
+ // typeof destinationX !== 'undefined' ||
266
+ // typeof destinationY !== 'undefined' ||
267
+ // typeof destinationZ !== 'undefined';
268
+
269
+ // destinationX = destinationX || 0;
270
+ // destinationY = destinationY || 0;
271
+ // destinationZ = destinationZ || 0;
272
+ device.gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);
273
+ // TODO - support gl.readBuffer (WebGL2 only)
274
+ // const prevBuffer = gl.readBuffer(attachment);
275
+
276
+ let texture = null;
277
+ let textureTarget: GL;
278
+ if (destination instanceof WEBGLTexture) {
279
+ texture = destination;
280
+ width = Number.isFinite(width) ? width : texture.width;
281
+ height = Number.isFinite(height) ? height : texture.height;
282
+ texture.bind(0);
283
+ textureTarget = texture.destination;
284
+ } else {
285
+ throw new Error('whoops');
286
+ // textureTarget = destination;
287
+ }
288
+
289
+ if (!isSubCopy) {
290
+ device.gl.copyTexImage2D(
291
+ textureTarget,
292
+ destinationMipmaplevel,
293
+ destinationInternalFormat,
294
+ sourceX,
295
+ sourceY,
296
+ width,
297
+ height,
298
+ 0 /* border must be 0 */
299
+ );
300
+ } else {
301
+ // switch (textureTarget) {
302
+ // case GL.TEXTURE_2D:
303
+ // case GL.TEXTURE_CUBE_MAP:
304
+ // device.gl.copyTexSubImage2D(
305
+ // textureTarget,
306
+ // destinationMipmaplevel,
307
+ // destinationX,
308
+ // destinationY,
309
+ // sourceX,
310
+ // sourceY,
311
+ // width,
312
+ // height
313
+ // );
314
+ // break;
315
+ // case GL.TEXTURE_2D_ARRAY:
316
+ // case GL.TEXTURE_3D:
317
+ // const gl2 = device.assertWebGL2();
318
+ // gl2.copyTexSubImage3D(
319
+ // textureTarget,
320
+ // destinationMipmaplevel,
321
+ // destinationX,
322
+ // destinationY,
323
+ // destinationZ,
324
+ // sourceX,
325
+ // sourceY,
326
+ // width,
327
+ // height
328
+ // );
329
+ // break;
330
+ // default:
331
+ // }
332
+ }
333
+ if (texture) {
334
+ texture.unbind();
335
+ }
336
+ // @ts-expect-error
337
+ device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
338
+ if (destroyFramebuffer) {
339
+ framebuffer.destroy();
340
+ }
341
+ return texture;
342
+ }
343
+
344
+ // Returns number of components in a specific readPixels WebGL format
345
+ export function glFormatToComponents(format): 1 | 2 | 3 | 4 {
346
+ switch (format) {
347
+ case GL.ALPHA:
348
+ case GL.R32F:
349
+ case GL.RED:
350
+ return 1;
351
+ case GL.RG32F:
352
+ case GL.RG:
353
+ return 2;
354
+ case GL.RGB:
355
+ case GL.RGB32F:
356
+ return 3;
357
+ case GL.RGBA:
358
+ case GL.RGBA32F:
359
+ return 4;
360
+ // TODO: Add support for additional WebGL2 formats
361
+ default:
362
+ throw new Error('GLFormat');
363
+ }
364
+ }
365
+
366
+ // Return byte count for given readPixels WebGL type
367
+ export function glTypeToBytes(type: GL): 1 | 2 | 4 {
368
+ switch (type) {
369
+ case GL.UNSIGNED_BYTE:
370
+ return 1;
371
+ case GL.UNSIGNED_SHORT_5_6_5:
372
+ case GL.UNSIGNED_SHORT_4_4_4_4:
373
+ case GL.UNSIGNED_SHORT_5_5_5_1:
374
+ return 2;
375
+ case GL.FLOAT:
376
+ return 4;
377
+ // TODO: Add support for additional WebGL2 types
378
+ default:
379
+ throw new Error('GLType');
380
+ }
381
+ }
382
+
383
+ // Helper methods
384
+
385
+ function getFramebuffer(source: Texture | Framebuffer): {
386
+ framebuffer: WEBGLFramebuffer;
387
+ destroyFramebuffer: boolean;
388
+ } {
389
+ if (source instanceof Texture) {
390
+ const {width, height, id} = source;
391
+ const framebuffer = source.device.createFramebuffer({
392
+ id: `framebuffer-for-${id}`,
393
+ width,
394
+ height,
395
+ colorAttachments: [source]
396
+ }) as unknown as WEBGLFramebuffer;
397
+
398
+ return {framebuffer, destroyFramebuffer: true};
399
+ }
400
+ return {framebuffer: source as unknown as WEBGLFramebuffer, destroyFramebuffer: false};
401
+ }
@@ -1,25 +1,30 @@
1
- import {CommandEncoder, CommandEncoderProps} from '@luma.gl/api';
1
+ import {CommandEncoder, CommandEncoderProps} from '@luma.gl/core';
2
2
  import type {
3
3
  CopyBufferToBufferOptions,
4
4
  CopyBufferToTextureOptions,
5
5
  CopyTextureToBufferOptions,
6
6
  CopyTextureToTextureOptions
7
- } from '@luma.gl/api';
7
+ } from '@luma.gl/core';
8
8
 
9
- import CommandBuffer from './webgl-command-buffer';
10
- import WebGLDevice from '../webgl-device';
9
+ import {WEBGLCommandBuffer} from './webgl-command-buffer';
10
+ import {WebGLDevice} from '../webgl-device';
11
11
 
12
- export default class WEBGLCommandEncoder extends CommandEncoder {
12
+ export class WEBGLCommandEncoder extends CommandEncoder {
13
13
  readonly device: WebGLDevice;
14
14
 
15
- readonly commandBuffer = new CommandBuffer();
15
+ readonly commandBuffer: WEBGLCommandBuffer;
16
16
 
17
17
  constructor(device: WebGLDevice, props: CommandEncoderProps) {
18
18
  super(props);
19
19
  this.device = device;
20
+ this.commandBuffer = new WEBGLCommandBuffer(device);
20
21
  }
21
22
 
22
- destroy() {}
23
+ override destroy(): void {}
24
+
25
+ override finish(): void {
26
+ this.commandBuffer.submitCommands();
27
+ }
23
28
 
24
29
  // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
25
30
  // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
@@ -41,10 +46,10 @@ export default class WEBGLCommandEncoder extends CommandEncoder {
41
46
  this.commandBuffer.commands.push({name: 'copy-texture-to-texture', options});
42
47
  }
43
48
 
44
- pushDebugGroup(groupLabel: string): void {}
45
- popDebugGroup() {}
49
+ override pushDebugGroup(groupLabel: string): void {}
50
+ override popDebugGroup() {}
46
51
 
47
- insertDebugMarker(markerLabel: string): void {}
52
+ override insertDebugMarker(markerLabel: string): void {}
48
53
 
49
54
  // writeTimestamp(querySet: Query, queryIndex: number): void {}
50
55
 
@@ -55,4 +60,4 @@ export default class WEBGLCommandEncoder extends CommandEncoder {
55
60
  // destination: Buffer,
56
61
  // destinationOffset?: number;
57
62
  // }): void;
58
- };
63
+ }
@@ -1,5 +1,5 @@
1
1
  /*
2
- export default class WEBGLExternalTexture extends WEBGLTexture {
2
+ export class WEBGLExternalTexture extends WEBGLTexture {
3
3
  readonly device: WebGLDevice;
4
4
  readonly gl: WebGLRenderingContext;
5
5
  readonly gl2: WebGL2RenderingContext | null;
@@ -53,7 +53,7 @@ export default class WEBGLExternalTexture extends WEBGLTexture {
53
53
  constructor(device: Device | WebGLRenderingContext, props: TextureProps) {
54
54
  super(WebGLDevice.attach(device), {id: uid('texture'), ...props});
55
55
 
56
- this.target = getWebGLTextureTarget(props);
56
+ this.glTarget = getWebGLTextureTarget(props);
57
57
 
58
58
  this.device = WebGLDevice.attach(device);
59
59
  this.gl = this.device.gl;