@luma.gl/webgl 9.0.0-alpha.2 → 9.0.0-alpha.21

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 (468) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +11 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +17 -35
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/renderbuffer-formats.d.ts +2 -2
  6. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/renderbuffer-formats.js +2 -7
  8. package/dist/adapter/converters/renderbuffer-formats.js.map +1 -1
  9. package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
  10. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  11. package/dist/adapter/converters/sampler-parameters.js +19 -55
  12. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  13. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  14. package/dist/adapter/converters/texture-formats.js +13 -66
  15. package/dist/adapter/converters/texture-formats.js.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  17. package/dist/adapter/converters/vertex-formats.js +2 -8
  18. package/dist/adapter/converters/vertex-formats.js.map +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.js +1 -4
  23. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  24. package/dist/adapter/device-helpers/get-device-info.js +8 -10
  25. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  26. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  27. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  28. package/dist/adapter/helpers/attribute-utils.js +0 -17
  29. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  30. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  31. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  32. package/dist/adapter/helpers/get-shader-info.js +25 -0
  33. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  34. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  35. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  36. package/dist/adapter/helpers/get-shader-layout.js +41 -67
  37. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  38. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  39. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  40. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  41. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  42. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  43. package/dist/adapter/helpers/set-uniform.js +1 -31
  44. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  45. package/dist/adapter/helpers/uniforms.d.ts +1 -1
  46. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  47. package/dist/adapter/helpers/uniforms.js +4 -14
  48. package/dist/adapter/helpers/uniforms.js.map +1 -1
  49. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  50. package/dist/adapter/objects/constants-to-keys.js +0 -7
  51. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  52. package/dist/adapter/objects/webgl-renderbuffer.d.ts +3 -3
  53. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  54. package/dist/adapter/objects/webgl-renderbuffer.js +6 -22
  55. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  56. package/dist/adapter/objects/webgl-resource.d.ts +3 -5
  57. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  58. package/dist/adapter/objects/webgl-resource.js +15 -68
  59. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  60. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +6 -6
  61. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  62. package/dist/adapter/objects/webgl-vertex-array-object.js +7 -17
  63. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  64. package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
  65. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-buffer.js +18 -49
  67. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  68. package/dist/adapter/resources/webgl-command-buffer.d.ts +2 -2
  69. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  70. package/dist/adapter/resources/webgl-command-buffer.js +3 -18
  71. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  72. package/dist/adapter/resources/webgl-command-encoder.d.ts +3 -3
  73. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-command-encoder.js +2 -15
  75. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  76. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  77. package/dist/adapter/resources/webgl-framebuffer.d.ts +16 -16
  78. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-framebuffer.js +17 -75
  80. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  81. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -3
  82. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-render-pass.js +3 -8
  84. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  85. package/dist/adapter/resources/webgl-render-pipeline.d.ts +5 -5
  86. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  87. package/dist/adapter/resources/webgl-render-pipeline.js +51 -140
  88. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  89. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  90. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-sampler.js +5 -13
  92. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  93. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  94. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-shader.js +8 -21
  96. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  97. package/dist/adapter/resources/webgl-texture.d.ts +26 -26
  98. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-texture.js +66 -183
  100. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  101. package/dist/adapter/webgl-canvas-context.d.ts +3 -3
  102. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  103. package/dist/adapter/webgl-canvas-context.js +6 -19
  104. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  105. package/dist/adapter/webgl-device.d.ts +53 -37
  106. package/dist/adapter/webgl-device.d.ts.map +1 -1
  107. package/dist/adapter/webgl-device.js +108 -109
  108. package/dist/adapter/webgl-device.js.map +1 -1
  109. package/dist/classic/accessor.d.ts +1 -1
  110. package/dist/classic/accessor.d.ts.map +1 -1
  111. package/dist/classic/accessor.js +12 -36
  112. package/dist/classic/accessor.js.map +1 -1
  113. package/dist/classic/buffer.d.ts +3 -4
  114. package/dist/classic/buffer.d.ts.map +1 -1
  115. package/dist/classic/buffer.js +30 -87
  116. package/dist/classic/buffer.js.map +1 -1
  117. package/dist/classic/typed-array-utils.d.ts +1 -1
  118. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  119. package/dist/classic/typed-array-utils.js +0 -20
  120. package/dist/classic/typed-array-utils.js.map +1 -1
  121. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
  122. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  123. package/dist/context/context/{create-context.js → create-browser-context.js} +19 -15
  124. package/dist/context/context/create-browser-context.js.map +1 -0
  125. package/dist/context/context/create-headless-context.d.ts +9 -0
  126. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  127. package/dist/context/context/create-headless-context.js +42 -0
  128. package/dist/context/context/create-headless-context.js.map +1 -0
  129. package/dist/context/context/webgl-checks.js +0 -3
  130. package/dist/context/context/webgl-checks.js.map +1 -1
  131. package/dist/context/debug/spector.d.ts +1 -0
  132. package/dist/context/debug/spector.d.ts.map +1 -1
  133. package/dist/context/debug/spector.js +7 -19
  134. package/dist/context/debug/spector.js.map +1 -1
  135. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  136. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  137. package/dist/context/debug/webgl-developer-tools.js +8 -32
  138. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  139. package/dist/context/parameters/unified-parameter-api.d.ts +6 -5
  140. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  141. package/dist/context/parameters/unified-parameter-api.js +8 -18
  142. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  143. package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
  144. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  145. package/dist/context/parameters/webgl-parameter-tables.js +16 -34
  146. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  147. package/dist/context/polyfill/context-data.d.ts +13 -0
  148. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  149. package/dist/context/polyfill/context-data.js +12 -0
  150. package/dist/context/polyfill/context-data.js.map +1 -0
  151. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  152. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  153. package/dist/context/polyfill/get-parameter-polyfill.js +1 -6
  154. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  155. package/dist/context/polyfill/polyfill-context.js +20 -28
  156. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  157. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  158. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  159. package/dist/context/polyfill/polyfill-table.js +8 -30
  160. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  161. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  162. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  163. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  164. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  165. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  166. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  167. package/dist/context/state-tracker/track-context-state.js +15 -50
  168. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  169. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  170. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  171. package/dist/context/state-tracker/with-parameters.js +7 -9
  172. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  173. package/dist/dist.dev.js +9204 -0
  174. package/dist/index.cjs +5948 -0
  175. package/dist/index.d.ts +19 -19
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +24 -26
  178. package/dist/index.js.map +1 -1
  179. package/dist/types/webgl.d.ts +8 -7
  180. package/dist/types/webgl.d.ts.map +1 -1
  181. package/dist/types/webgl.js.map +1 -1
  182. package/dist/types.js.map +1 -1
  183. package/dist.min.js +36 -0
  184. package/package.json +18 -9
  185. package/src/.DS_Store +0 -0
  186. package/src/adapter/.DS_Store +0 -0
  187. package/src/adapter/converters/device-parameters.ts +45 -16
  188. package/src/adapter/converters/renderbuffer-formats.ts +1 -3
  189. package/src/adapter/converters/sampler-parameters.ts +18 -7
  190. package/src/adapter/converters/texture-formats.ts +18 -16
  191. package/src/adapter/converters/vertex-formats.ts +1 -0
  192. package/src/adapter/device-helpers/device-features.ts +9 -2
  193. package/src/adapter/device-helpers/device-limits.ts +1 -1
  194. package/src/adapter/device-helpers/get-device-info.ts +12 -8
  195. package/src/adapter/helpers/get-shader-info.ts +37 -0
  196. package/src/adapter/helpers/get-shader-layout.ts +59 -37
  197. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  198. package/src/adapter/helpers/set-uniform.ts +3 -1
  199. package/src/adapter/helpers/uniforms.ts +21 -10
  200. package/src/adapter/objects/constants-to-keys.ts +4 -1
  201. package/src/adapter/objects/webgl-renderbuffer.ts +8 -8
  202. package/src/adapter/objects/webgl-resource.ts +8 -13
  203. package/src/adapter/objects/webgl-vertex-array-object.ts +10 -10
  204. package/src/adapter/resources/webgl-buffer.ts +16 -16
  205. package/src/adapter/resources/webgl-command-buffer.ts +3 -3
  206. package/src/adapter/resources/webgl-command-encoder.ts +8 -8
  207. package/src/adapter/resources/webgl-external-texture.ts +1 -1
  208. package/src/adapter/resources/webgl-framebuffer.ts +36 -33
  209. package/src/adapter/resources/webgl-render-pass.ts +4 -3
  210. package/src/adapter/resources/webgl-render-pipeline.ts +89 -77
  211. package/src/adapter/resources/webgl-sampler.ts +12 -6
  212. package/src/adapter/resources/webgl-shader.ts +10 -9
  213. package/src/adapter/resources/webgl-texture.ts +55 -45
  214. package/src/adapter/webgl-canvas-context.ts +8 -9
  215. package/src/adapter/webgl-device.ts +153 -69
  216. package/src/classic/accessor.ts +2 -15
  217. package/src/classic/buffer.ts +18 -25
  218. package/src/classic/typed-array-utils.ts +4 -2
  219. package/src/context/.DS_Store +0 -0
  220. package/src/context/context/{create-context.ts → create-browser-context.ts} +17 -7
  221. package/src/context/context/create-headless-context.ts +48 -0
  222. package/src/context/debug/spector.ts +6 -5
  223. package/src/context/debug/webgl-developer-tools.ts +13 -13
  224. package/src/context/parameters/unified-parameter-api.ts +18 -12
  225. package/src/context/parameters/webgl-parameter-tables.ts +113 -94
  226. package/src/context/polyfill/context-data.ts +27 -0
  227. package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
  228. package/src/context/polyfill/polyfill-context.ts +6 -8
  229. package/src/context/polyfill/polyfill-table.ts +16 -14
  230. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  231. package/src/context/state-tracker/track-context-state.ts +13 -12
  232. package/src/context/state-tracker/with-parameters.ts +8 -2
  233. package/src/index.ts +28 -26
  234. package/src/types/webgl.ts +10 -7
  235. package/dist/bundle.d.ts +0 -2
  236. package/dist/bundle.d.ts.map +0 -1
  237. package/dist/bundle.js +0 -5
  238. package/dist/bundle.js.map +0 -1
  239. package/dist/context/context/context-state.d.ts +0 -18
  240. package/dist/context/context/context-state.d.ts.map +0 -1
  241. package/dist/context/context/context-state.js +0 -26
  242. package/dist/context/context/context-state.js.map +0 -1
  243. package/dist/context/context/create-context.d.ts.map +0 -1
  244. package/dist/context/context/create-context.js.map +0 -1
  245. package/dist/context/context/device-pixels.d.ts +0 -25
  246. package/dist/context/context/device-pixels.d.ts.map +0 -1
  247. package/dist/context/context/device-pixels.js +0 -98
  248. package/dist/context/context/device-pixels.js.map +0 -1
  249. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  250. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  251. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  252. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  253. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  254. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  255. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  256. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  257. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  258. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  259. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  260. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  261. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  262. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  263. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  264. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  265. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  266. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  267. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  268. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  270. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  271. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  272. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  273. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  274. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  275. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  276. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  277. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  278. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  279. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  280. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  281. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  282. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  283. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  284. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  285. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  286. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  287. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  288. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  289. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  290. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  291. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  292. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  293. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  294. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  295. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  296. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  297. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  298. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  299. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  300. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  301. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  302. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  303. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  304. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  305. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  306. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  307. package/dist/es5/adapter/webgl-device.js +0 -399
  308. package/dist/es5/adapter/webgl-device.js.map +0 -1
  309. package/dist/es5/bundle.js +0 -7
  310. package/dist/es5/bundle.js.map +0 -1
  311. package/dist/es5/classic/accessor.js +0 -181
  312. package/dist/es5/classic/accessor.js.map +0 -1
  313. package/dist/es5/classic/buffer.js +0 -470
  314. package/dist/es5/classic/buffer.js.map +0 -1
  315. package/dist/es5/classic/typed-array-utils.js +0 -126
  316. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  317. package/dist/es5/context/context/context-state.js +0 -31
  318. package/dist/es5/context/context/context-state.js.map +0 -1
  319. package/dist/es5/context/context/create-context.js +0 -69
  320. package/dist/es5/context/context/create-context.js.map +0 -1
  321. package/dist/es5/context/context/device-pixels.js +0 -115
  322. package/dist/es5/context/context/device-pixels.js.map +0 -1
  323. package/dist/es5/context/context/webgl-checks.js +0 -54
  324. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  325. package/dist/es5/context/debug/spector.js +0 -133
  326. package/dist/es5/context/debug/spector.js.map +0 -1
  327. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  328. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  329. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  330. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  331. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  332. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  333. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  334. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  335. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  336. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  337. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  338. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  339. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  340. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  341. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  342. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  343. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  344. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  345. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  346. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  347. package/dist/es5/index.js +0 -276
  348. package/dist/es5/index.js.map +0 -1
  349. package/dist/es5/init.js +0 -10
  350. package/dist/es5/init.js.map +0 -1
  351. package/dist/es5/types/webgl.js +0 -6
  352. package/dist/es5/types/webgl.js.map +0 -1
  353. package/dist/es5/types.js +0 -2
  354. package/dist/es5/types.js.map +0 -1
  355. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  356. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  357. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  358. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  359. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  360. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  361. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  362. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  363. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  364. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  365. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  366. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  367. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  368. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  369. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  370. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  371. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  372. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  373. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  374. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  375. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  376. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  377. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  378. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  379. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  380. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  381. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  382. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  383. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  384. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  385. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  386. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  387. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  388. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  389. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  390. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  391. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  392. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  393. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  394. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  395. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  396. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  397. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  398. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  399. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  400. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  401. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  402. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  403. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  404. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  405. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  406. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  407. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  408. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  409. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  410. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  411. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  412. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  413. package/dist/esm/adapter/webgl-device.js +0 -280
  414. package/dist/esm/adapter/webgl-device.js.map +0 -1
  415. package/dist/esm/bundle.js +0 -5
  416. package/dist/esm/bundle.js.map +0 -1
  417. package/dist/esm/classic/accessor.js +0 -144
  418. package/dist/esm/classic/accessor.js.map +0 -1
  419. package/dist/esm/classic/buffer.js +0 -384
  420. package/dist/esm/classic/buffer.js.map +0 -1
  421. package/dist/esm/classic/typed-array-utils.js +0 -112
  422. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  423. package/dist/esm/context/context/context-state.js +0 -26
  424. package/dist/esm/context/context/context-state.js.map +0 -1
  425. package/dist/esm/context/context/create-context.js +0 -49
  426. package/dist/esm/context/context/create-context.js.map +0 -1
  427. package/dist/esm/context/context/device-pixels.js +0 -98
  428. package/dist/esm/context/context/device-pixels.js.map +0 -1
  429. package/dist/esm/context/context/webgl-checks.js +0 -34
  430. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  431. package/dist/esm/context/debug/spector.js +0 -76
  432. package/dist/esm/context/debug/spector.js.map +0 -1
  433. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  434. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  435. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  436. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  437. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  438. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  439. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  440. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  441. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  442. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  443. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  444. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  445. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  446. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  447. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  448. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  449. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  450. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  451. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  452. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  453. package/dist/esm/index.js +0 -27
  454. package/dist/esm/index.js.map +0 -1
  455. package/dist/esm/init.js +0 -4
  456. package/dist/esm/init.js.map +0 -1
  457. package/dist/esm/types/webgl.js +0 -2
  458. package/dist/esm/types/webgl.js.map +0 -1
  459. package/dist/esm/types.js +0 -2
  460. package/dist/esm/types.js.map +0 -1
  461. package/dist/init.d.ts +0 -2
  462. package/dist/init.d.ts.map +0 -1
  463. package/dist/init.js +0 -4
  464. package/dist/init.js.map +0 -1
  465. package/src/bundle.ts +0 -4
  466. package/src/context/context/context-state.ts +0 -41
  467. package/src/context/context/device-pixels.ts +0 -152
  468. package/src/init.ts +0 -4
@@ -7,16 +7,19 @@ import type {
7
7
  CanvasContextProps,
8
8
  TextureFormat
9
9
  } from '@luma.gl/api';
10
- import {Device, CanvasContext, log, assert} from '@luma.gl/api';
10
+ import {Device, CanvasContext, log, uid} from '@luma.gl/api';
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,48 @@ 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
48
  ComputePassProps
46
49
  } from '@luma.gl/api';
47
50
 
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';
51
+ import {ClassicBuffer} from '../classic/buffer';
52
+ import {WEBGLBuffer} from './resources/webgl-buffer';
53
+ import {WEBGLShader} from './resources/webgl-shader';
54
+ import {WEBGLSampler} from './resources/webgl-sampler';
55
+ import {WEBGLTexture} from './resources/webgl-texture';
56
+ import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
57
+ import {WEBGLRenderPass} from './resources/webgl-render-pass';
58
+ import {WEBGLRenderPipeline} from './resources/webgl-render-pipeline';
56
59
 
57
60
  const LOG_LEVEL = 1;
58
61
 
59
- let counter = 0;
60
-
61
62
  /** WebGPU style Device API for a WebGL context */
62
- export default class WebGLDevice extends Device implements ContextState {
63
- // Public API
63
+ export class WebGLDevice extends Device {
64
+ //
65
+ // Public `Device` API
66
+ //
64
67
 
65
68
  static type: string = 'webgl';
66
69
 
67
70
  static isSupported(): boolean {
68
- return typeof WebGLRenderingContext !== 'undefined';
71
+ return typeof WebGLRenderingContext !== 'undefined' || isHeadlessGLRegistered();
69
72
  }
70
73
 
71
74
  readonly info: DeviceInfo;
72
75
  readonly canvasContext: WebGLCanvasContext;
73
- readonly lost: Promise<{reason: 'destroyed'; message: string}>;
76
+
74
77
  readonly handle: WebGLRenderingContext;
75
78
 
76
79
  get features(): Set<DeviceFeature> {
@@ -83,36 +86,15 @@ export default class WebGLDevice extends Device implements ContextState {
83
86
  return this._limits;
84
87
  }
85
88
 
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;
89
+ readonly lost: Promise<{reason: 'destroyed'; message: string}>;
98
90
 
99
- get webglLimits(): WebGLLimits {
100
- this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
101
- return this._webglLimits;
102
- }
91
+ private _resolveContextLost?: (value: {reason: 'destroyed'; message: string}) => void;
92
+ private _features?: Set<DeviceFeature>;
93
+ private _limits?: DeviceLimits;
103
94
 
104
- private _features: Set<DeviceFeature>;
105
- private _limits: DeviceLimits;
106
- private _webglLimits: WebGLLimits;
107
-
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;
113
-
114
- /** Instance of Spector.js (if initialized) */
115
- spector;
95
+ //
96
+ // Static methods, expected to be present by `luma.createDevice()`
97
+ //
116
98
 
117
99
  /**
118
100
  * Get a device instance from a GL context
@@ -135,7 +117,7 @@ export default class WebGLDevice extends Device implements ContextState {
135
117
  return new WebGLDevice({gl: gl as WebGLRenderingContext});
136
118
  }
137
119
 
138
- static async create(props?: DeviceProps): Promise<WebGLDevice> {
120
+ static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
139
121
  log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
140
122
 
141
123
  // Wait for page to load. Only wait when props. canvas is string
@@ -153,25 +135,54 @@ export default class WebGLDevice extends Device implements ContextState {
153
135
  await loadSpectorJS();
154
136
  }
155
137
 
156
- log.probe(LOG_LEVEL, 'DOM is loaded')();
138
+ log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
139
+
140
+ // @ts-expect-error
141
+ if (props.gl && props.gl.device) {
142
+ return WebGLDevice.attach(props.gl);
143
+ }
144
+
157
145
  return new WebGLDevice(props);
158
146
  }
159
147
 
148
+ //
149
+ // Public API
150
+ //
151
+
160
152
  constructor(props: DeviceProps) {
161
- super(props);
153
+ super({...props, id: props.id || uid('webgl-device')});
162
154
 
163
155
  // If attaching to an already attached context, return the attached device
164
156
  // @ts-expect-error device is attached to context
165
157
  const device: WebGLDevice | undefined = props.gl?.device;
166
158
  if (device) {
167
- log.warn(`WebGL context already attached to device ${device.id}`);
168
- return device;
159
+ throw new Error(`WebGL context already attached to device ${device.id}`);
169
160
  }
170
161
 
171
162
  // Create and instrument context
172
163
  this.canvasContext = new WebGLCanvasContext(this, props);
173
164
 
174
- this.handle = props.gl || createBrowserContext(this.canvasContext.canvas, props);
165
+ this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
166
+ this._resolveContextLost = resolve;
167
+ });
168
+
169
+ const onContextLost = (event: Event) =>
170
+ this._resolveContextLost?.({
171
+ reason: 'destroyed',
172
+ message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
173
+ });
174
+
175
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
176
+ gl =
177
+ gl ||
178
+ (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
179
+ gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
180
+
181
+ if (!gl) {
182
+ throw new Error('WebGL context creation failed');
183
+ }
184
+
185
+ this.handle = gl;
175
186
  this.gl = this.handle;
176
187
  this.gl2 = this.gl as WebGL2RenderingContext;
177
188
  this.isWebGL2 = isWebGL2(this.gl);
@@ -182,13 +193,20 @@ export default class WebGLDevice extends Device implements ContextState {
182
193
 
183
194
  // @ts-expect-error Link webgl context back to device
184
195
  this.gl.device = this;
185
- // @ts-expect-error Annotate webgl context to handle
196
+ // @ts-expect-error Annotate webgl context to handle
186
197
  this.gl._version = this.isWebGL2 ? 2 : 1;
187
198
 
188
199
  // Add subset of WebGL2 methods to WebGL1 context
189
200
  polyfillContext(this.gl);
201
+
190
202
  // Install context state tracking
191
- trackContextState(this.gl, {copyState: false, log: (...args: any[]) => log.log(1, ...args)()});
203
+ // @ts-expect-error - hidden parameters
204
+ const {enable = true, copyState = false} = props;
205
+ trackContextState(this.gl, {
206
+ enable,
207
+ copyState,
208
+ log: (...args: any[]) => log.log(1, ...args)()
209
+ });
192
210
 
193
211
  // DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1
194
212
  if (isBrowser() && props.debug) {
@@ -218,16 +236,11 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
218
236
  * Destroys the context
219
237
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
220
238
  */
221
- destroy() {
222
- let ext = this.gl.getExtension('STACKGL_destroy_context');
239
+ destroy(): void {
240
+ const ext = this.gl.getExtension('STACKGL_destroy_context');
223
241
  if (ext) {
224
242
  ext.destroy();
225
243
  }
226
- // ext = this.gl.getExtension('WEBGL_lose_context');
227
- // if (ext) {
228
- // // TODO - disconnect context lost callbacks?
229
- // ext.loseContext();
230
- // }
231
244
  }
232
245
 
233
246
  get isLost(): boolean {
@@ -254,7 +267,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
254
267
 
255
268
  /** Returns a WebGL2RenderingContext or throws an error */
256
269
  assertWebGL2(): WebGL2RenderingContext {
257
- assert(this.isWebGL2, 'Requires WebGL2');
270
+ if (!this.gl2) {
271
+ throw new Error('Requires WebGL2');
272
+ }
258
273
  return this.gl2;
259
274
  }
260
275
 
@@ -304,7 +319,7 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
304
319
  throw new Error('compute shaders not supported in WebGL');
305
320
  }
306
321
 
307
- private renderPass: WEBGLRenderPass;
322
+ private renderPass: WEBGLRenderPass | null = null;
308
323
 
309
324
  getDefaultRenderPass(): WEBGLRenderPass {
310
325
  this.renderPass =
@@ -321,10 +336,80 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
321
336
  * Chrome's offscreen canvas does not require gl.commit
322
337
  */
323
338
  submit(): void {
324
- this.renderPass.endPass();
339
+ this.renderPass?.end();
325
340
  this.renderPass = null;
326
341
  // this.canvasContext.commit();
327
342
  }
343
+
344
+ //
345
+ // WebGL-only API (not part of `Device` API)
346
+ //
347
+
348
+ /** WebGL1 typed context. Can always be used. */
349
+ readonly gl: WebGLRenderingContext;
350
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
351
+ readonly gl2: WebGL2RenderingContext | null = null;
352
+ readonly debug: boolean = false;
353
+
354
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
355
+ readonly isWebGL1: boolean;
356
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
357
+ readonly isWebGL2: boolean;
358
+
359
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
360
+ readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
361
+
362
+ /** State used by luma.gl classes - TODO - not used? */
363
+ readonly _extensions: Record<string, any> = {};
364
+ _polyfilled: boolean = false;
365
+
366
+ /** Instance of Spector.js (if initialized) */
367
+ spector;
368
+
369
+ private _webglLimits?: WebGLLimits;
370
+
371
+ /** Return WebGL specific limits */
372
+ get webglLimits() : WebGLLimits {
373
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
374
+ return this._webglLimits;
375
+ }
376
+
377
+ /**
378
+ * Loses the context
379
+ * @note Triggers context loss, mainly for testing
380
+ * @todo Promote to `Device` API?
381
+ */
382
+ loseDevice(): void {
383
+ const ext = this.gl.getExtension('WEBGL_lose_context');
384
+ if (ext) {
385
+ ext.loseContext();
386
+ }
387
+ // loseContext should trigger context loss callback but
388
+ this._resolveContextLost?.({
389
+ reason: 'destroyed',
390
+ message: 'Application triggered context loss'
391
+ });
392
+ }
393
+
394
+ /** Save current WebGL context state onto an internal stack */
395
+ pushState(): void {
396
+ pushContextState(this.gl);
397
+ }
398
+
399
+ /** Restores previously saved context state */
400
+ popState(): void {
401
+ popContextState(this.gl);
402
+ }
403
+
404
+ /**
405
+ * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
406
+ * luma.gl ids and props can be inspected
407
+ */
408
+ setSpectorMetadata(handle: unknown, props: Record<string, unknown>) {
409
+ // @ts-expect-error
410
+ // eslint-disable-next-line camelcase
411
+ handle.__SPECTOR_Metadata = props;
412
+ }
328
413
  }
329
414
 
330
415
  /** Check if supplied parameter is a WebGLRenderingContext */
@@ -339,7 +424,6 @@ function isWebGL(gl: any): boolean {
339
424
  return Boolean(gl && Number.isFinite(gl._version));
340
425
  }
341
426
 
342
-
343
427
  /** Check if supplied parameter is a WebGL2RenderingContext */
344
428
  function isWebGL2(gl: any): boolean {
345
429
  if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
@@ -2,19 +2,6 @@ import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/api';
2
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) {
@@ -1,13 +1,15 @@
1
+ // luma.gl, MIT license
2
+
1
3
  import type {Device, BufferProps, TypedArray} from '@luma.gl/api';
2
- import {Buffer, log, assert, checkProps} from '@luma.gl/api';
4
+ import {assert, checkProps} from '@luma.gl/api';
3
5
  import GL from '@luma.gl/constants';
4
6
  import {assertWebGL2Context} from '../context/context/webgl-checks';
5
7
  import {AccessorObject} from '../types';
6
- import Accessor from './accessor';
8
+ import {Accessor} from './accessor';
7
9
  import {getGLTypeFromTypedArray, getTypedArrayFromGLType} from './typed-array-utils';
8
10
 
9
- import WebGLDevice from '../adapter/webgl-device';
10
- import WEBGLBuffer from '../adapter/resources/webgl-buffer';
11
+ import {WebGLDevice} from '../adapter/webgl-device';
12
+ import {WEBGLBuffer} from '../adapter/resources/webgl-buffer';
11
13
 
12
14
  const DEBUG_DATA_LENGTH = 10;
13
15
 
@@ -48,11 +50,11 @@ function getWEBGLBufferProps(props: ClassicBufferProps | ArrayBufferView | numbe
48
50
 
49
51
  // Signature: `new Buffer(gl, 100)`
50
52
  else if (typeof props === 'number') {
51
- return {byteLength: props as number};
53
+ return {byteLength: props };
52
54
  }
53
55
 
54
56
  props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);
55
- const bufferProps = {...props as ClassicBufferProps};
57
+ const bufferProps = {...props };
56
58
  if (bufferProps.offset) {
57
59
  bufferProps.byteOffset = bufferProps.offset;
58
60
  }
@@ -79,7 +81,7 @@ export type ClassicBufferProps = BufferProps & {
79
81
  }
80
82
 
81
83
  /** WebGL Buffer interface */
82
- export default class ClassicBuffer extends WEBGLBuffer {
84
+ export class ClassicBuffer extends WEBGLBuffer {
83
85
  usage: number;
84
86
  accessor: Accessor;
85
87
 
@@ -106,19 +108,10 @@ export default class ClassicBuffer extends WEBGLBuffer {
106
108
  Object.seal(this);
107
109
  }
108
110
 
109
- destroy(): void {
110
- if (this.handle) {
111
- this.removeStats();
112
- this.trackDeallocatedMemory();
113
- this.gl.deleteBuffer(this.handle);
114
- // @ts-expect-error
115
- this.handle = null;
116
- }
117
- }
118
-
119
- write(data: TypedArray, byteOffset?: number): void {
111
+ override write(data: TypedArray, byteOffset?: number): void {
120
112
  this.subData({data, offset: byteOffset});
121
113
  }
114
+
122
115
  // returns number of elements in the buffer (assuming that the full buffer is used)
123
116
  getElementCount(accessor: AccessorObject = this.accessor): number {
124
117
  return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));
@@ -264,7 +257,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
264
257
  // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type
265
258
  gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);
266
259
  gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);
267
- gl2.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);
260
+ gl2?.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);
268
261
  gl.bindBuffer(GL.COPY_READ_BUFFER, null);
269
262
  gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);
270
263
 
@@ -278,7 +271,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
278
271
  * Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.
279
272
  * @note WEBGL2 ONLY
280
273
  */
281
- getData(options?: {
274
+ override getData(options?: {
282
275
  dstData?: any;
283
276
  srcByteOffset?: number;
284
277
  dstOffset?: number;
@@ -314,7 +307,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
314
307
 
315
308
  // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type
316
309
  this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);
317
- this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);
310
+ this.gl2?.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);
318
311
  this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);
319
312
 
320
313
  // TODO - update local `data` if offsets are 0
@@ -340,10 +333,10 @@ export default class ClassicBuffer extends WEBGLBuffer {
340
333
  // uniform buffer state. Instead indexed bindings need to be made.
341
334
  if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {
342
335
  if (size !== undefined) {
343
- this.gl2.bindBufferRange(target, index, this.handle, offset, size);
336
+ this.gl2?.bindBufferRange(target, index, this.handle, offset, size);
344
337
  } else {
345
338
  assert(offset === 0); // Make sure offset wasn't supplied
346
- this.gl2.bindBufferBase(target, index, this.handle);
339
+ this.gl2?.bindBufferBase(target, index, this.handle);
347
340
  }
348
341
  } else {
349
342
  this.gl.bindBuffer(target, this.handle);
@@ -356,7 +349,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
356
349
  const {target = this.target, index = this.accessor && this.accessor.index} = options || {};
357
350
  const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;
358
351
  if (isIndexedBuffer) {
359
- this.gl2.bindBufferBase(target, index, null);
352
+ this.gl2?.bindBufferBase(target, index, null);
360
353
  } else {
361
354
  this.gl.bindBuffer(target, null);
362
355
  }
@@ -369,7 +362,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
369
362
  getDebugData(): {
370
363
  data: any;
371
364
  changed: boolean;
372
- } {
365
+ } {
373
366
  if (!this.debugData) {
374
367
  this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});
375
368
  return {data: this.debugData, changed: true};
@@ -1,4 +1,6 @@
1
- import {TypedArray} from '@luma.gl/api/types';
1
+ // luma.gl, MIT license
2
+
3
+ import {TypedArray} from '@luma.gl/api';
2
4
  import GL from '@luma.gl/constants';
3
5
  import {GLType} from '../types/webgl'
4
6
 
@@ -90,7 +92,7 @@ export function getTypedArrayFromGLType(
90
92
  * how-can-i-flip-the-result-of-webglrenderingcontext-readpixels
91
93
  * @param {*} param0
92
94
  */
93
- export function flipRows(options: {
95
+ export function flipRows(options: {
94
96
  data: any;
95
97
  width: any;
96
98
  height: any;
Binary file
@@ -37,7 +37,9 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
37
37
  webgl2: true, // Attempt to create a WebGL2 context
38
38
  webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
39
39
  powerPreference: 'high-performance', // After all, most apps are using WebGL for performance reasons
40
+ // eslint-disable-next-line no-console
40
41
  onContextLost: () => console.error('WebGL context lost'),
42
+ // eslint-disable-next-line no-console
41
43
  onContextRestored: () => console.info('WebGL context restored'),
42
44
  };
43
45
 
@@ -46,8 +48,8 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
46
48
  * Note calling this multiple time on the same canvas does return the same context
47
49
  * @param canvas A canvas element or offscreen canvas
48
50
  */
49
- export function createBrowserContext(canvas: HTMLCanvasElement | OffscreenCanvas, props: ContextProps): WebGLRenderingContext {
50
- props = {...DEFAULT_CONTEXT_PROPS, ...props};
51
+ export function createBrowserContext(canvas: HTMLCanvasElement | OffscreenCanvas, props: ContextProps): WebGLRenderingContext {
52
+ props = {...DEFAULT_CONTEXT_PROPS, ...props};
51
53
 
52
54
  // Try to extract any extra information about why context creation failed
53
55
  let errorMessage = null;
@@ -55,7 +57,7 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
55
57
  canvas.addEventListener('webglcontextcreationerror', onCreateError, false);
56
58
 
57
59
  // Create the desired context
58
- let gl = null;
60
+ let gl: WebGLRenderingContext | null = null;
59
61
 
60
62
  if (props.type === 'webgl2') {
61
63
  props = {...props, webgl1: false};
@@ -66,10 +68,10 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
66
68
 
67
69
  // Prefer webgl2 over webgl1 if both are acceptable
68
70
  if (props.webgl2) {
69
- gl = gl || canvas.getContext('webgl2', props);
71
+ gl = gl || canvas.getContext('webgl2', props) as WebGL2RenderingContext | null;
70
72
  }
71
73
  if (props.webgl1) {
72
- gl = gl || canvas.getContext('webgl', props);
74
+ gl = gl || canvas.getContext('webgl', props) as WebGLRenderingContext | null;
73
75
  }
74
76
 
75
77
  // TODO are we removing this listener before giving it a chance to fire?
@@ -83,8 +85,16 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
83
85
  );
84
86
  }
85
87
 
86
- canvas.addEventListener('webglcontextlost', props.onContextLost, false);
87
- canvas.addEventListener('webglcontextrestored', props.onContextRestored, false);
88
+ if (props.onContextLost) {
89
+ // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
90
+ const {onContextLost} = props;
91
+ canvas.addEventListener('webglcontextlost',(event: Event) => onContextLost(event), false);
92
+ }
93
+ if (props.onContextRestored) {
94
+ // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
95
+ const {onContextRestored} = props;
96
+ canvas.addEventListener('webglcontextrestored', (event: Event) => onContextRestored(event), false);
97
+ }
88
98
 
89
99
  return gl;
90
100
  }
@@ -0,0 +1,48 @@
1
+ const ERR_HEADLESSGL_FAILED =
2
+ 'Failed to create WebGL context in Node.js, headless gl returned null';
3
+
4
+ const ERR_HEADLESSGL_LOAD = '\
5
+ luma.gl: loaded under Node.js without headless gl installed, meaning that WebGL \
6
+ contexts can not be created. This may not be an error. For example, this is a \
7
+ typical configuration for isorender applications running on the server.';
8
+
9
+ const CONTEXT_DEFAULTS = {
10
+ width: 1,
11
+ height: 1,
12
+ debug: true,
13
+ throwOnError: false
14
+ };
15
+
16
+ /** Duck typing for the main headless gl export, a function to create contexts */
17
+ export type HeadlessGL = (width: number, height: number, options: Record<string, unknown>) => WebGLRenderingContext;
18
+
19
+ let headlessGL: HeadlessGL | null = null;
20
+
21
+ /** By importing `gl` and registering it with this function, contexts can be created under Node.js */
22
+ export function registerHeadlessGL(headlessgl: HeadlessGL) {
23
+ headlessGL = headlessgl;
24
+ }
25
+
26
+ /** @returns true if headless gl is registered */
27
+ export function isHeadlessGLRegistered(): boolean {
28
+ return headlessGL !== null;
29
+ }
30
+
31
+ /** Create headless gl context (for running under Node.js) */
32
+ export function createHeadlessContext(options?: Record<string, any>): WebGLRenderingContext {
33
+ options = {...CONTEXT_DEFAULTS, ...options};
34
+
35
+ const {width, height, webgl1, webgl2} = options;
36
+
37
+ if (webgl2 && !webgl1) {
38
+ throw new Error('headless-gl does not support WebGL2');
39
+ }
40
+ if (!headlessGL) {
41
+ throw new Error(ERR_HEADLESSGL_LOAD);
42
+ }
43
+ const gl = headlessGL(width, height, options);
44
+ if (!gl) {
45
+ throw new Error(ERR_HEADLESSGL_FAILED);
46
+ }
47
+ return gl;
48
+ }