@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
@@ -6,17 +6,20 @@ import type {
6
6
  DeviceFeature,
7
7
  CanvasContextProps,
8
8
  TextureFormat
9
- } from '@luma.gl/api';
10
- import {Device, CanvasContext, log, assert} from '@luma.gl/api';
9
+ } from '@luma.gl/core';
10
+ import {Device, CanvasContext, log, uid} from '@luma.gl/core';
11
11
  import {isBrowser} from '@probe.gl/env';
12
12
  import {polyfillContext} from '../context/polyfill/polyfill-context';
13
- import {trackContextState} from '../context/state-tracker/track-context-state';
14
- import {ContextState} from '../context/context/context-state';
15
- import {createBrowserContext} from '../context/context/create-context';
13
+ import {popContextState, pushContextState, trackContextState} from '../context/state-tracker/track-context-state';
14
+ import {createBrowserContext} from '../context/context/create-browser-context';
15
+ import {
16
+ createHeadlessContext,
17
+ isHeadlessGLRegistered
18
+ } from '../context/context/create-headless-context';
16
19
  import {getDeviceInfo} from './device-helpers/get-device-info';
17
20
  import {getDeviceFeatures} from './device-helpers/device-features';
18
21
  import {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';
19
- import WebGLCanvasContext from './webgl-canvas-context';
22
+ import {WebGLCanvasContext} from './webgl-canvas-context';
20
23
  import {loadSpectorJS, initializeSpectorJS} from '../context/debug/spector';
21
24
  import {loadWebGLDeveloperTools, makeDebugContext} from '../context/debug/webgl-developer-tools';
22
25
  import {
@@ -29,48 +32,51 @@ import {
29
32
  import type {
30
33
  BufferProps,
31
34
  ShaderProps,
32
- Sampler,
35
+ // Sampler,
33
36
  SamplerProps,
34
37
  TextureProps,
35
38
  ExternalTexture,
36
39
  ExternalTextureProps,
37
40
  FramebufferProps,
38
- RenderPipeline,
41
+ // RenderPipeline,
39
42
  RenderPipelineProps,
40
43
  ComputePipeline,
41
44
  ComputePipelineProps,
42
- RenderPass,
45
+ // RenderPass,
43
46
  RenderPassProps,
44
47
  ComputePass,
45
- ComputePassProps
46
- } from '@luma.gl/api';
47
-
48
- import ClassicBuffer from '../classic/buffer';
49
- import WEBGLBuffer from './resources/webgl-buffer';
50
- import WEBGLShader from './resources/webgl-shader';
51
- import WEBGLSampler from './resources/webgl-sampler';
52
- import WEBGLTexture from './resources/webgl-texture';
53
- import WEBGLFramebuffer from './resources/webgl-framebuffer';
54
- import WEBGLRenderPass from './resources/webgl-render-pass';
55
- import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
48
+ ComputePassProps,
49
+ // CommandEncoder,
50
+ CommandEncoderProps
51
+ } from '@luma.gl/core';
52
+
53
+ import {BufferWithAccessor} from '../classic/buffer-with-accessor';
54
+ import {WEBGLBuffer} from './resources/webgl-buffer';
55
+ import {WEBGLShader} from './resources/webgl-shader';
56
+ import {WEBGLSampler} from './resources/webgl-sampler';
57
+ import {WEBGLTexture} from './resources/webgl-texture';
58
+ import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
59
+ import {WEBGLRenderPass} from './resources/webgl-render-pass';
60
+ import {WEBGLRenderPipeline} from './resources/webgl-render-pipeline';
61
+ import {WEBGLCommandEncoder} from './resources/webgl-command-encoder';
56
62
 
57
63
  const LOG_LEVEL = 1;
58
64
 
59
- let counter = 0;
60
-
61
65
  /** WebGPU style Device API for a WebGL context */
62
- export default class WebGLDevice extends Device implements ContextState {
63
- // Public API
66
+ export class WebGLDevice extends Device {
67
+ //
68
+ // Public `Device` API
69
+ //
64
70
 
65
71
  static type: string = 'webgl';
66
72
 
67
73
  static isSupported(): boolean {
68
- return typeof WebGLRenderingContext !== 'undefined';
74
+ return typeof WebGLRenderingContext !== 'undefined' || isHeadlessGLRegistered();
69
75
  }
70
76
 
71
77
  readonly info: DeviceInfo;
72
78
  readonly canvasContext: WebGLCanvasContext;
73
- readonly lost: Promise<{reason: 'destroyed'; message: string}>;
79
+
74
80
  readonly handle: WebGLRenderingContext;
75
81
 
76
82
  get features(): Set<DeviceFeature> {
@@ -83,36 +89,15 @@ export default class WebGLDevice extends Device implements ContextState {
83
89
  return this._limits;
84
90
  }
85
91
 
86
- // WebGL specific API
87
-
88
- /** WebGL1 typed context. Can always be used. */
89
- readonly gl: WebGLRenderingContext;
90
- /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
91
- readonly gl2: WebGL2RenderingContext;
92
- readonly debug: boolean = false;
93
-
94
- /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
95
- readonly isWebGL1: boolean;
96
- /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
97
- readonly isWebGL2: boolean;
98
-
99
- get webglLimits(): WebGLLimits {
100
- this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
101
- return this._webglLimits;
102
- }
103
-
104
- private _features: Set<DeviceFeature>;
105
- private _limits: DeviceLimits;
106
- private _webglLimits: WebGLLimits;
92
+ readonly lost: Promise<{reason: 'destroyed'; message: string}>;
107
93
 
108
- /** State used by luma.gl classes: TODO - move to canvasContext*/
109
- readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
110
- /** State used by luma.gl classes */
111
- readonly _extensions: Record<string, any> = {};
112
- _polyfilled: boolean = false;
94
+ private _resolveContextLost?: (value: {reason: 'destroyed'; message: string}) => void;
95
+ private _features?: Set<DeviceFeature>;
96
+ private _limits?: DeviceLimits;
113
97
 
114
- /** Instance of Spector.js (if initialized) */
115
- spector;
98
+ //
99
+ // Static methods, expected to be present by `luma.createDevice()`
100
+ //
116
101
 
117
102
  /**
118
103
  * Get a device instance from a GL context
@@ -135,7 +120,7 @@ export default class WebGLDevice extends Device implements ContextState {
135
120
  return new WebGLDevice({gl: gl as WebGLRenderingContext});
136
121
  }
137
122
 
138
- static async create(props?: DeviceProps): Promise<WebGLDevice> {
123
+ static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
139
124
  log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
140
125
 
141
126
  // Wait for page to load. Only wait when props. canvas is string
@@ -145,33 +130,64 @@ export default class WebGLDevice extends Device implements ContextState {
145
130
  }
146
131
 
147
132
  // Load webgl and spector debug scripts from CDN if requested
148
- if (props.debug) {
133
+ if (log.get('debug') || props.debug) {
149
134
  await loadWebGLDeveloperTools();
150
135
  }
136
+
151
137
  // @ts-expect-error spector not on props
152
- if (props.spector) {
138
+ const {spector} = props;
139
+ if (log.get('spector') || spector) {
153
140
  await loadSpectorJS();
154
141
  }
155
142
 
156
- log.probe(LOG_LEVEL, 'DOM is loaded')();
143
+ log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
144
+
145
+ // @ts-expect-error
146
+ if (props.gl && props.gl.device) {
147
+ return WebGLDevice.attach(props.gl);
148
+ }
149
+
157
150
  return new WebGLDevice(props);
158
151
  }
159
152
 
153
+ //
154
+ // Public API
155
+ //
156
+
160
157
  constructor(props: DeviceProps) {
161
- super(props);
158
+ super({...props, id: props.id || uid('webgl-device')});
162
159
 
163
160
  // If attaching to an already attached context, return the attached device
164
161
  // @ts-expect-error device is attached to context
165
162
  const device: WebGLDevice | undefined = props.gl?.device;
166
163
  if (device) {
167
- log.warn(`WebGL context already attached to device ${device.id}`);
168
- return device;
164
+ throw new Error(`WebGL context already attached to device ${device.id}`);
169
165
  }
170
166
 
171
167
  // Create and instrument context
172
168
  this.canvasContext = new WebGLCanvasContext(this, props);
173
169
 
174
- this.handle = props.gl || createBrowserContext(this.canvasContext.canvas, props);
170
+ this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
171
+ this._resolveContextLost = resolve;
172
+ });
173
+
174
+ const onContextLost = (event: Event) =>
175
+ this._resolveContextLost?.({
176
+ reason: 'destroyed',
177
+ message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
178
+ });
179
+
180
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
181
+ gl =
182
+ gl ||
183
+ (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
184
+ gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
185
+
186
+ if (!gl) {
187
+ throw new Error('WebGL context creation failed');
188
+ }
189
+
190
+ this.handle = gl;
175
191
  this.gl = this.handle;
176
192
  this.gl2 = this.gl as WebGL2RenderingContext;
177
193
  this.isWebGL2 = isWebGL2(this.gl);
@@ -182,13 +198,20 @@ export default class WebGLDevice extends Device implements ContextState {
182
198
 
183
199
  // @ts-expect-error Link webgl context back to device
184
200
  this.gl.device = this;
185
- // @ts-expect-error Annotate webgl context to handle
201
+ // @ts-expect-error Annotate webgl context to handle
186
202
  this.gl._version = this.isWebGL2 ? 2 : 1;
187
203
 
188
204
  // Add subset of WebGL2 methods to WebGL1 context
189
205
  polyfillContext(this.gl);
206
+
190
207
  // Install context state tracking
191
- trackContextState(this.gl, {copyState: false, log: (...args: any[]) => log.log(1, ...args)()});
208
+ // @ts-expect-error - hidden parameters
209
+ const {enable = true, copyState = false} = props;
210
+ trackContextState(this.gl, {
211
+ enable,
212
+ copyState,
213
+ log: (...args: any[]) => log.log(1, ...args)()
214
+ });
192
215
 
193
216
  // DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1
194
217
  if (isBrowser() && props.debug) {
@@ -218,16 +241,11 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
218
241
  * Destroys the context
219
242
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
220
243
  */
221
- destroy() {
222
- let ext = this.gl.getExtension('STACKGL_destroy_context');
244
+ destroy(): void {
245
+ const ext = this.gl.getExtension('STACKGL_destroy_context');
223
246
  if (ext) {
224
247
  ext.destroy();
225
248
  }
226
- // ext = this.gl.getExtension('WEBGL_lose_context');
227
- // if (ext) {
228
- // // TODO - disconnect context lost callbacks?
229
- // ext.loseContext();
230
- // }
231
249
  }
232
250
 
233
251
  get isLost(): boolean {
@@ -254,7 +272,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
254
272
 
255
273
  /** Returns a WebGL2RenderingContext or throws an error */
256
274
  assertWebGL2(): WebGL2RenderingContext {
257
- assert(this.isWebGL2, 'Requires WebGL2');
275
+ if (!this.gl2) {
276
+ throw new Error('Requires WebGL2');
277
+ }
258
278
  return this.gl2;
259
279
  }
260
280
 
@@ -264,8 +284,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
264
284
  throw new Error('WebGL only supports a single canvas');
265
285
  }
266
286
 
267
- _createBuffer(props: BufferProps): WEBGLBuffer {
268
- return new ClassicBuffer(this, props);
287
+ createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WEBGLBuffer {
288
+ const newProps = this._getBufferProps(props);
289
+ return new BufferWithAccessor(this, newProps);
269
290
  }
270
291
 
271
292
  _createTexture(props: TextureProps): WEBGLTexture {
@@ -304,7 +325,7 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
304
325
  throw new Error('compute shaders not supported in WebGL');
305
326
  }
306
327
 
307
- private renderPass: WEBGLRenderPass;
328
+ private renderPass: WEBGLRenderPass | null = null;
308
329
 
309
330
  getDefaultRenderPass(): WEBGLRenderPass {
310
331
  this.renderPass =
@@ -315,16 +336,111 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
315
336
  return this.renderPass;
316
337
  }
317
338
 
339
+ override createCommandEncoder(props: CommandEncoderProps): WEBGLCommandEncoder {
340
+ return new WEBGLCommandEncoder(this, props);
341
+ }
342
+
318
343
  /**
319
344
  * Offscreen Canvas Support: Commit the frame
320
345
  * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
321
346
  * Chrome's offscreen canvas does not require gl.commit
322
347
  */
323
348
  submit(): void {
324
- this.renderPass.endPass();
349
+ this.renderPass?.end();
325
350
  this.renderPass = null;
326
351
  // this.canvasContext.commit();
327
352
  }
353
+
354
+ //
355
+ // WebGL-only API (not part of `Device` API)
356
+ //
357
+
358
+ /** WebGL1 typed context. Can always be used. */
359
+ readonly gl: WebGLRenderingContext;
360
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
361
+ readonly gl2: WebGL2RenderingContext | null = null;
362
+ readonly debug: boolean = false;
363
+
364
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
365
+ readonly isWebGL1: boolean;
366
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
367
+ readonly isWebGL2: boolean;
368
+
369
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
370
+ readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
371
+
372
+ /** State used by luma.gl classes - TODO - not used? */
373
+ readonly _extensions: Record<string, any> = {};
374
+ _polyfilled: boolean = false;
375
+
376
+ /** Instance of Spector.js (if initialized) */
377
+ spector;
378
+
379
+ private _webglLimits?: WebGLLimits;
380
+
381
+ /** Return WebGL specific limits */
382
+ get webglLimits() : WebGLLimits {
383
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
384
+ return this._webglLimits;
385
+ }
386
+
387
+ /**
388
+ * Triggers device (or WebGL context) loss.
389
+ * @note primarily intended for testing how application reacts to device loss
390
+ */
391
+ override loseDevice(): boolean {
392
+ let deviceLossTriggered = false;
393
+ const ext = this.gl.getExtension('WEBGL_lose_context');
394
+ if (ext) {
395
+ deviceLossTriggered = true;
396
+ ext.loseContext();
397
+ // ext.loseContext should trigger context loss callback but the platform may not do this, so do it explicitly
398
+ }
399
+ this._resolveContextLost?.({
400
+ reason: 'destroyed',
401
+ message: 'Application triggered context loss'
402
+ });
403
+ return deviceLossTriggered;
404
+ }
405
+
406
+ /** Save current WebGL context state onto an internal stack */
407
+ pushState(): void {
408
+ pushContextState(this.gl);
409
+ }
410
+
411
+ /** Restores previously saved context state */
412
+ popState(): void {
413
+ popContextState(this.gl);
414
+ }
415
+
416
+ /**
417
+ * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
418
+ * luma.gl ids and props can be inspected
419
+ */
420
+ setSpectorMetadata(handle: unknown, props: Record<string, unknown>) {
421
+ // @ts-expect-error
422
+ // eslint-disable-next-line camelcase
423
+ handle.__SPECTOR_Metadata = props;
424
+ }
425
+
426
+ /**
427
+ * Returns the GL.<KEY> constant that corresponds to a numeric value of a GL constant
428
+ * Be aware that there are some duplicates especially for constants that are 0,
429
+ * so this isn't guaranteed to return the right key in all cases.
430
+ */
431
+ getGLKey(value: unknown, gl?: WebGLRenderingContext): string {
432
+ // @ts-ignore expect-error depends on settings
433
+ gl = gl || this.gl2 || this.gl;
434
+ const number = Number(value);
435
+ for (const key in gl) {
436
+ // @ts-ignore expect-error depends on settings
437
+ if (gl[key] === number) {
438
+ return `GL.${key}`;
439
+ }
440
+ }
441
+ // No constant found. Stringify the value and return it.
442
+ return String(value);
443
+ }
328
444
  }
329
445
 
330
446
  /** Check if supplied parameter is a WebGLRenderingContext */
@@ -339,7 +455,6 @@ function isWebGL(gl: any): boolean {
339
455
  return Boolean(gl && Number.isFinite(gl._version));
340
456
  }
341
457
 
342
-
343
458
  /** Check if supplied parameter is a WebGL2RenderingContext */
344
459
  function isWebGL2(gl: any): boolean {
345
460
  if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
@@ -1,20 +1,7 @@
1
- import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
1
+ import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/core';
2
+ import {GL} from '@luma.gl/constants';
3
3
  import {getTypedArrayFromGLType} from './typed-array-utils';
4
4
 
5
- // export interface AccessorObject {
6
- // offset?: number;
7
- // stride?: number;
8
- // type?: number;
9
- // size?: number;
10
- // divisor?: number;
11
- // normalized?: boolean;
12
- // integer?: boolean;
13
-
14
- // buffer?: Buffer;
15
- // index?: number;
16
- // }
17
-
18
5
  const DEFAULT_ACCESSOR_VALUES = {
19
6
  offset: 0,
20
7
  stride: 0,
@@ -32,7 +19,7 @@ const PROP_CHECKS = {
32
19
  }
33
20
  };
34
21
 
35
- export default class Accessor implements AccessorObject {
22
+ export class Accessor implements AccessorObject {
36
23
  offset?: number;
37
24
  stride?: number;
38
25
  type?: number;
@@ -98,7 +85,7 @@ export default class Accessor implements AccessorObject {
98
85
 
99
86
  // Auto-deduce integer type?
100
87
  if (props.type === GL.INT || props.type === GL.UNSIGNED_INT) {
101
- this.integer = true;
88
+ this.integer = true;
102
89
  }
103
90
  }
104
91
  if (props.size !== undefined) {