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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +89 -74
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +4 -10
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +29 -180
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +52 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +306 -343
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +53 -22
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +9 -25
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +54 -58
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +49 -22
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/decode-webgl-types.js +89 -0
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  42. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  43. package/dist/adapter/helpers/get-shader-layout.js +58 -138
  44. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
  48. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  49. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  50. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  51. package/dist/adapter/helpers/set-uniform.js +51 -82
  52. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  53. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  54. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  55. package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
  56. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  57. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  58. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  59. package/dist/adapter/objects/constants-to-keys.js +2 -29
  60. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  62. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  63. package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
  64. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  65. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  66. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-resource.js +26 -83
  68. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  69. package/dist/adapter/resources/webgl-buffer.d.ts +19 -14
  70. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-buffer.js +67 -101
  72. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  74. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-command-buffer.js +175 -48
  76. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  78. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  80. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  81. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  82. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -25
  83. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.js +63 -175
  85. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  86. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  87. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-render-pass.js +98 -12
  89. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pipeline.d.ts +34 -20
  91. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pipeline.js +110 -293
  93. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  94. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  95. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-sampler.js +11 -21
  97. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  98. package/dist/adapter/resources/webgl-shader.d.ts +5 -5
  99. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-shader.js +18 -44
  101. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  102. package/dist/adapter/resources/webgl-texture.d.ts +51 -31
  103. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-texture.js +123 -244
  105. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  106. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  107. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  108. package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
  109. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +167 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +12 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +92 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +205 -158
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +26 -52
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/clear.d.ts +22 -0
  127. package/dist/classic/clear.d.ts.map +1 -0
  128. package/dist/classic/clear.js +88 -0
  129. package/dist/classic/clear.js.map +1 -0
  130. package/dist/classic/copy-and-blit.d.ts +62 -0
  131. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  132. package/dist/classic/copy-and-blit.js +192 -0
  133. package/dist/classic/copy-and-blit.js.map +1 -0
  134. package/dist/classic/format-utils.d.ts +3 -0
  135. package/dist/classic/format-utils.d.ts.map +1 -0
  136. package/dist/classic/format-utils.js +37 -0
  137. package/dist/classic/format-utils.js.map +1 -0
  138. package/dist/classic/typed-array-utils.d.ts +17 -17
  139. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  140. package/dist/classic/typed-array-utils.js +18 -39
  141. package/dist/classic/typed-array-utils.js.map +1 -1
  142. package/dist/context/context/create-browser-context.d.ts +17 -18
  143. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  144. package/dist/context/context/create-browser-context.js +11 -19
  145. package/dist/context/context/create-browser-context.js.map +1 -1
  146. package/dist/context/context/create-headless-context.d.ts +1 -1
  147. package/dist/context/context/create-headless-context.d.ts.map +1 -1
  148. package/dist/context/context/create-headless-context.js +6 -7
  149. package/dist/context/context/create-headless-context.js.map +1 -1
  150. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  151. package/dist/context/context/webgl-checks.js +1 -4
  152. package/dist/context/context/webgl-checks.js.map +1 -1
  153. package/dist/context/debug/spector.d.ts +1 -2
  154. package/dist/context/debug/spector.d.ts.map +1 -1
  155. package/dist/context/debug/spector.js +7 -19
  156. package/dist/context/debug/spector.js.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  158. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.js +18 -41
  160. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.d.ts +5 -5
  162. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.js +9 -17
  164. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  166. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.js +267 -286
  168. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  169. package/dist/context/polyfill/context-data.d.ts +13 -0
  170. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  171. package/dist/context/polyfill/context-data.js +12 -0
  172. package/dist/context/polyfill/context-data.js.map +1 -0
  173. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  174. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  175. package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
  176. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  178. package/dist/context/polyfill/polyfill-context.js +27 -31
  179. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  180. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  181. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-table.js +17 -40
  183. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  187. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +25 -61
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +8 -10
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +9344 -0
  198. package/dist/index.cjs +6556 -0
  199. package/dist/index.d.ts +23 -24
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -27
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +52 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +120 -43
  209. package/src/adapter/converters/sampler-parameters.ts +54 -126
  210. package/src/adapter/converters/shader-formats.ts +44 -0
  211. package/src/adapter/converters/texture-formats.ts +265 -192
  212. package/src/adapter/converters/vertex-formats.ts +71 -10
  213. package/src/adapter/device-helpers/device-features.ts +5 -2
  214. package/src/adapter/device-helpers/device-limits.ts +4 -2
  215. package/src/adapter/device-helpers/get-device-info.ts +72 -18
  216. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  217. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +31 -24
  218. package/src/adapter/helpers/get-shader-layout.ts +87 -131
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
  220. package/src/adapter/helpers/set-uniform.ts +39 -35
  221. package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
  222. package/src/adapter/objects/constants-to-keys.ts +6 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  224. package/src/adapter/objects/webgl-resource.ts +16 -23
  225. package/src/adapter/resources/webgl-buffer.ts +101 -106
  226. package/src/adapter/resources/webgl-command-buffer.ts +327 -25
  227. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  228. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  229. package/src/adapter/resources/webgl-framebuffer.ts +86 -133
  230. package/src/adapter/resources/webgl-render-pass.ts +165 -4
  231. package/src/adapter/resources/webgl-render-pipeline.ts +209 -205
  232. package/src/adapter/resources/webgl-sampler.ts +12 -8
  233. package/src/adapter/resources/webgl-shader.ts +32 -27
  234. package/src/adapter/resources/webgl-texture.ts +117 -91
  235. package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
  236. package/src/adapter/resources/webgl-vertex-array.ts +283 -0
  237. package/src/adapter/webgl-canvas-context.ts +18 -13
  238. package/src/adapter/webgl-device.ts +327 -92
  239. package/src/classic/accessor.ts +8 -5
  240. package/src/classic/clear.ts +113 -0
  241. package/src/classic/copy-and-blit.ts +312 -0
  242. package/src/classic/format-utils.ts +46 -0
  243. package/src/classic/typed-array-utils.ts +19 -27
  244. package/src/context/context/create-browser-context.ts +53 -31
  245. package/src/context/context/create-headless-context.ts +5 -2
  246. package/src/context/context/webgl-checks.ts +3 -1
  247. package/src/context/debug/spector.ts +8 -5
  248. package/src/context/debug/webgl-developer-tools.ts +26 -17
  249. package/src/context/parameters/unified-parameter-api.ts +15 -9
  250. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  251. package/src/context/polyfill/context-data.ts +30 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  253. package/src/context/polyfill/polyfill-context.ts +15 -8
  254. package/src/context/polyfill/polyfill-table.ts +20 -15
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  256. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  257. package/src/context/state-tracker/track-context-state.ts +13 -10
  258. package/src/context/state-tracker/with-parameters.ts +13 -4
  259. package/src/index.ts +65 -39
  260. package/src/types.ts +5 -0
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  262. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  263. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  264. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  265. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  266. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  267. package/dist/adapter/helpers/attribute-utils.js +0 -81
  268. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  270. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  271. package/dist/adapter/helpers/uniforms.js +0 -99
  272. package/dist/adapter/helpers/uniforms.js.map +0 -1
  273. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  274. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  275. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  276. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  277. package/dist/bundle.d.ts +0 -2
  278. package/dist/bundle.d.ts.map +0 -1
  279. package/dist/bundle.js +0 -5
  280. package/dist/bundle.js.map +0 -1
  281. package/dist/classic/buffer.d.ts +0 -95
  282. package/dist/classic/buffer.d.ts.map +0 -1
  283. package/dist/classic/buffer.js +0 -392
  284. package/dist/classic/buffer.js.map +0 -1
  285. package/dist/context/context/context-state.d.ts +0 -18
  286. package/dist/context/context/context-state.d.ts.map +0 -1
  287. package/dist/context/context/context-state.js +0 -26
  288. package/dist/context/context/context-state.js.map +0 -1
  289. package/dist/context/context/device-pixels.d.ts +0 -25
  290. package/dist/context/context/device-pixels.d.ts.map +0 -1
  291. package/dist/context/context/device-pixels.js +0 -103
  292. package/dist/context/context/device-pixels.js.map +0 -1
  293. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  294. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  295. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  296. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  297. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  298. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  299. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  300. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  301. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  302. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  303. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  304. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  305. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  306. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  307. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  308. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  309. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  310. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  311. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  312. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  313. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  314. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  315. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  316. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  317. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  318. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  319. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  320. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  321. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  322. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  323. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  324. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  325. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  326. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  327. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  328. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  329. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  330. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  331. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  332. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  333. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  334. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  335. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  336. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  337. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  338. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  339. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  340. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  341. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  342. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  343. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  344. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  345. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  346. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  347. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  348. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  349. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  350. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  351. package/dist/es5/adapter/webgl-device.js +0 -463
  352. package/dist/es5/adapter/webgl-device.js.map +0 -1
  353. package/dist/es5/bundle.js +0 -7
  354. package/dist/es5/bundle.js.map +0 -1
  355. package/dist/es5/classic/accessor.js +0 -181
  356. package/dist/es5/classic/accessor.js.map +0 -1
  357. package/dist/es5/classic/buffer.js +0 -478
  358. package/dist/es5/classic/buffer.js.map +0 -1
  359. package/dist/es5/classic/typed-array-utils.js +0 -126
  360. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  361. package/dist/es5/context/context/context-state.js +0 -31
  362. package/dist/es5/context/context/context-state.js.map +0 -1
  363. package/dist/es5/context/context/create-browser-context.js +0 -83
  364. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  365. package/dist/es5/context/context/create-headless-context.js +0 -60
  366. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  367. package/dist/es5/context/context/device-pixels.js +0 -121
  368. package/dist/es5/context/context/device-pixels.js.map +0 -1
  369. package/dist/es5/context/context/webgl-checks.js +0 -54
  370. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  371. package/dist/es5/context/debug/spector.js +0 -133
  372. package/dist/es5/context/debug/spector.js.map +0 -1
  373. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  374. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  375. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  376. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  377. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  378. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  379. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  380. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  381. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  382. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  383. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  384. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  385. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  386. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  387. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  388. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  389. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  390. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  391. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  392. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  393. package/dist/es5/index.js +0 -290
  394. package/dist/es5/index.js.map +0 -1
  395. package/dist/es5/init.js +0 -10
  396. package/dist/es5/init.js.map +0 -1
  397. package/dist/es5/types/webgl.js +0 -6
  398. package/dist/es5/types/webgl.js.map +0 -1
  399. package/dist/es5/types.js +0 -2
  400. package/dist/es5/types.js.map +0 -1
  401. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  402. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  403. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  404. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  405. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  406. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  407. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  408. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  409. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  410. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  411. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  412. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  413. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  414. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  415. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  416. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  417. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  418. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  419. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  420. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  421. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  422. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  423. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  424. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  425. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  426. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  427. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  428. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  429. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  430. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  431. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  432. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  433. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  434. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  435. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  436. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  437. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  438. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  439. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  440. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  441. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  442. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  443. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  444. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  445. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  446. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  447. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  448. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  449. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  450. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  451. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  452. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  453. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  454. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  455. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  456. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  457. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  458. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  459. package/dist/esm/adapter/webgl-device.js +0 -337
  460. package/dist/esm/adapter/webgl-device.js.map +0 -1
  461. package/dist/esm/bundle.js +0 -5
  462. package/dist/esm/bundle.js.map +0 -1
  463. package/dist/esm/classic/accessor.js +0 -144
  464. package/dist/esm/classic/accessor.js.map +0 -1
  465. package/dist/esm/classic/buffer.js +0 -392
  466. package/dist/esm/classic/buffer.js.map +0 -1
  467. package/dist/esm/classic/typed-array-utils.js +0 -112
  468. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  469. package/dist/esm/context/context/context-state.js +0 -26
  470. package/dist/esm/context/context/context-state.js.map +0 -1
  471. package/dist/esm/context/context/create-browser-context.js +0 -61
  472. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  473. package/dist/esm/context/context/create-headless-context.js +0 -43
  474. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  475. package/dist/esm/context/context/device-pixels.js +0 -103
  476. package/dist/esm/context/context/device-pixels.js.map +0 -1
  477. package/dist/esm/context/context/webgl-checks.js +0 -34
  478. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  479. package/dist/esm/context/debug/spector.js +0 -76
  480. package/dist/esm/context/debug/spector.js.map +0 -1
  481. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  482. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  483. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  484. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  485. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  487. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  489. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  490. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  491. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  492. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  493. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  495. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  496. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  497. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  498. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  499. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  500. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  501. package/dist/esm/index.js +0 -28
  502. package/dist/esm/index.js.map +0 -1
  503. package/dist/esm/init.js +0 -4
  504. package/dist/esm/init.js.map +0 -1
  505. package/dist/esm/types/webgl.js +0 -2
  506. package/dist/esm/types/webgl.js.map +0 -1
  507. package/dist/esm/types.js +0 -2
  508. package/dist/esm/types.js.map +0 -1
  509. package/dist/init.d.ts +0 -2
  510. package/dist/init.d.ts.map +0 -1
  511. package/dist/init.js +0 -4
  512. package/dist/init.js.map +0 -1
  513. package/dist/types/webgl.d.ts +0 -145
  514. package/dist/types/webgl.d.ts.map +0 -1
  515. package/dist/types/webgl.js +0 -2
  516. package/dist/types/webgl.js.map +0 -1
  517. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  518. package/src/adapter/helpers/attribute-utils.ts +0 -61
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/classic/buffer.ts +0 -474
  522. package/src/context/context/context-state.ts +0 -41
  523. package/src/context/context/device-pixels.ts +0 -158
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -284
@@ -1,17 +1,28 @@
1
1
  // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
2
4
  import type {
3
5
  DeviceProps,
4
6
  DeviceInfo,
5
7
  DeviceLimits,
6
8
  DeviceFeature,
7
9
  CanvasContextProps,
8
- TextureFormat
9
- } from '@luma.gl/api';
10
- import {Device, CanvasContext, log, assert} from '@luma.gl/api';
10
+ TextureFormat,
11
+ VertexArray,
12
+ VertexArrayProps,
13
+ Framebuffer,
14
+ Buffer,
15
+ Texture,
16
+ TypedArray
17
+ } from '@luma.gl/core';
18
+ import {Device, CanvasContext, log, uid, assert} from '@luma.gl/core';
11
19
  import {isBrowser} from '@probe.gl/env';
12
20
  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';
21
+ import {
22
+ popContextState,
23
+ pushContextState,
24
+ trackContextState
25
+ } from '../context/state-tracker/track-context-state';
15
26
  import {createBrowserContext} from '../context/context/create-browser-context';
16
27
  import {
17
28
  createHeadlessContext,
@@ -20,7 +31,7 @@ import {
20
31
  import {getDeviceInfo} from './device-helpers/get-device-info';
21
32
  import {getDeviceFeatures} from './device-helpers/device-features';
22
33
  import {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';
23
- import WebGLCanvasContext from './webgl-canvas-context';
34
+ import {WebGLCanvasContext} from './webgl-canvas-context';
24
35
  import {loadSpectorJS, initializeSpectorJS} from '../context/debug/spector';
25
36
  import {loadWebGLDeveloperTools, makeDebugContext} from '../context/debug/webgl-developer-tools';
26
37
  import {
@@ -33,37 +44,42 @@ import {
33
44
  import type {
34
45
  BufferProps,
35
46
  ShaderProps,
36
- Sampler,
47
+ // Sampler,
37
48
  SamplerProps,
38
49
  TextureProps,
39
50
  ExternalTexture,
40
51
  ExternalTextureProps,
41
52
  FramebufferProps,
42
- RenderPipeline,
53
+ // RenderPipeline,
43
54
  RenderPipelineProps,
44
55
  ComputePipeline,
45
56
  ComputePipelineProps,
46
- RenderPass,
57
+ // RenderPass,
47
58
  RenderPassProps,
48
59
  ComputePass,
49
- ComputePassProps
50
- } from '@luma.gl/api';
51
-
52
- import ClassicBuffer from '../classic/buffer';
53
- import WEBGLBuffer from './resources/webgl-buffer';
54
- import WEBGLShader from './resources/webgl-shader';
55
- import WEBGLSampler from './resources/webgl-sampler';
56
- import WEBGLTexture from './resources/webgl-texture';
57
- import WEBGLFramebuffer from './resources/webgl-framebuffer';
58
- import WEBGLRenderPass from './resources/webgl-render-pass';
59
- import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
60
+ ComputePassProps,
61
+ // CommandEncoder,
62
+ CommandEncoderProps,
63
+ TransformFeedbackProps
64
+ } from '@luma.gl/core';
65
+
66
+ import {WEBGLBuffer} from './resources/webgl-buffer';
67
+ import {WEBGLShader} from './resources/webgl-shader';
68
+ import {WEBGLSampler} from './resources/webgl-sampler';
69
+ import {WEBGLTexture} from './resources/webgl-texture';
70
+ import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
71
+ import {WEBGLRenderPass} from './resources/webgl-render-pass';
72
+ import {WEBGLRenderPipeline} from './resources/webgl-render-pipeline';
73
+ import {WEBGLCommandEncoder} from './resources/webgl-command-encoder';
74
+ import {WEBGLVertexArray} from './resources/webgl-vertex-array';
75
+ import {WEBGLTransformFeedback} from './resources/webgl-transform-feedback';
76
+
77
+ import {readPixelsToArray, readPixelsToBuffer} from '../classic/copy-and-blit';
60
78
 
61
79
  const LOG_LEVEL = 1;
62
80
 
63
- let counter = 0;
64
-
65
81
  /** WebGPU style Device API for a WebGL context */
66
- export default class WebGLDevice extends Device implements ContextState {
82
+ export class WebGLDevice extends Device {
67
83
  //
68
84
  // Public `Device` API
69
85
  //
@@ -95,37 +111,6 @@ export default class WebGLDevice extends Device implements ContextState {
95
111
  private _features?: Set<DeviceFeature>;
96
112
  private _limits?: DeviceLimits;
97
113
 
98
- //
99
- // WebGL-only API (not part of `Device` API)
100
- //
101
-
102
- /** WebGL1 typed context. Can always be used. */
103
- readonly gl: WebGLRenderingContext;
104
- /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
105
- readonly gl2: WebGL2RenderingContext | null = null;
106
- readonly debug: boolean = false;
107
-
108
- /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
109
- readonly isWebGL1: boolean;
110
- /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
111
- readonly isWebGL2: boolean;
112
-
113
- get webglLimits(): WebGLLimits {
114
- this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
115
- return this._webglLimits;
116
- }
117
-
118
- private _webglLimits?: WebGLLimits;
119
-
120
- /** State used by luma.gl classes: TODO - move to canvasContext*/
121
- readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
122
- /** State used by luma.gl classes */
123
- readonly _extensions: Record<string, any> = {};
124
- _polyfilled: boolean = false;
125
-
126
- /** Instance of Spector.js (if initialized) */
127
- spector;
128
-
129
114
  //
130
115
  // Static methods, expected to be present by `luma.createDevice()`
131
116
  //
@@ -152,7 +137,7 @@ export default class WebGLDevice extends Device implements ContextState {
152
137
  }
153
138
 
154
139
  static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
155
- log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
140
+ log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created')();
156
141
 
157
142
  // Wait for page to load. Only wait when props. canvas is string
158
143
  // to avoid setting page onload callback unless necessary
@@ -161,11 +146,13 @@ export default class WebGLDevice extends Device implements ContextState {
161
146
  }
162
147
 
163
148
  // Load webgl and spector debug scripts from CDN if requested
164
- if (props.debug) {
149
+ if (log.get('debug') || props.debug) {
165
150
  await loadWebGLDeveloperTools();
166
151
  }
152
+
167
153
  // @ts-expect-error spector not on props
168
- if (props.spector) {
154
+ const {spector} = props;
155
+ if (log.get('spector') || spector) {
169
156
  await loadSpectorJS();
170
157
  }
171
158
 
@@ -176,7 +163,18 @@ export default class WebGLDevice extends Device implements ContextState {
176
163
  return WebGLDevice.attach(props.gl);
177
164
  }
178
165
 
179
- return new WebGLDevice(props);
166
+ const device = new WebGLDevice(props);
167
+
168
+ // Log some debug info about the newly created context
169
+ const message = `\
170
+ Created ${device.info.type}${device.debug ? ' debug' : ''} context: \
171
+ ${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;
172
+ log.probe(LOG_LEVEL, message)();
173
+ log.table(LOG_LEVEL, device.info)();
174
+
175
+ log.groupEnd(LOG_LEVEL)();
176
+
177
+ return device;
180
178
  }
181
179
 
182
180
  //
@@ -184,7 +182,7 @@ export default class WebGLDevice extends Device implements ContextState {
184
182
  //
185
183
 
186
184
  constructor(props: DeviceProps) {
187
- super(props);
185
+ super({...props, id: props.id || uid('webgl-device')});
188
186
 
189
187
  // If attaching to an already attached context, return the attached device
190
188
  // @ts-expect-error device is attached to context
@@ -194,9 +192,10 @@ export default class WebGLDevice extends Device implements ContextState {
194
192
  }
195
193
 
196
194
  // Create and instrument context
197
- this.canvasContext = new WebGLCanvasContext(this, props);
195
+ const canvas = props.canvas || props.gl?.canvas;
196
+ this.canvasContext = new WebGLCanvasContext(this, {...props, canvas});
198
197
 
199
- this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
198
+ this.lost = new Promise<{reason: 'destroyed'; message: string}>(resolve => {
200
199
  this._resolveContextLost = resolve;
201
200
  });
202
201
 
@@ -206,10 +205,12 @@ export default class WebGLDevice extends Device implements ContextState {
206
205
  message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
207
206
  });
208
207
 
209
- let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl;
208
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
210
209
  gl =
211
210
  gl ||
212
- (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
211
+ (isBrowser()
212
+ ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost})
213
+ : null);
213
214
  gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
214
215
 
215
216
  if (!gl) {
@@ -221,6 +222,7 @@ export default class WebGLDevice extends Device implements ContextState {
221
222
  this.gl2 = this.gl as WebGL2RenderingContext;
222
223
  this.isWebGL2 = isWebGL2(this.gl);
223
224
  this.isWebGL1 = !this.isWebGL2;
225
+ this.canvasContext.resize();
224
226
 
225
227
  // luma Device fields
226
228
  this.info = getDeviceInfo(this.gl);
@@ -256,43 +258,19 @@ export default class WebGLDevice extends Device implements ContextState {
256
258
  const canvas = this.handle.canvas || (props.canvas as HTMLCanvasElement);
257
259
  this.spector = initializeSpectorJS({...this.props, canvas});
258
260
  }
259
-
260
- // Log some debug info about the newly created context
261
- const message = `\
262
- Created ${this.info.type}${this.debug ? ' debug' : ''} context: \
263
- ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`;
264
- log.probe(LOG_LEVEL, message)();
265
-
266
- log.groupEnd(LOG_LEVEL)();
267
261
  }
268
262
 
269
263
  /**
270
264
  * Destroys the context
271
265
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
272
266
  */
273
- destroy() {
267
+ destroy(): void {
274
268
  const ext = this.gl.getExtension('STACKGL_destroy_context');
275
269
  if (ext) {
276
270
  ext.destroy();
277
271
  }
278
272
  }
279
273
 
280
- /**
281
- * Loses the context
282
- * @note Triggers context loss, mainly for testing
283
- */
284
- loseDevice() {
285
- const ext = this.gl.getExtension('WEBGL_lose_context');
286
- if (ext) {
287
- ext.loseContext();
288
- }
289
- // loseContext should trigger context loss callback but
290
- this._resolveContextLost?.({
291
- reason: 'destroyed',
292
- message: 'Application triggered context loss'
293
- });
294
- }
295
-
296
274
  get isLost(): boolean {
297
275
  return this.gl.isContextLost();
298
276
  }
@@ -329,8 +307,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
329
307
  throw new Error('WebGL only supports a single canvas');
330
308
  }
331
309
 
332
- _createBuffer(props: BufferProps): WEBGLBuffer {
333
- return new ClassicBuffer(this, props);
310
+ createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WEBGLBuffer {
311
+ const newProps = this._getBufferProps(props);
312
+ return new WEBGLBuffer(this, newProps);
334
313
  }
335
314
 
336
315
  _createTexture(props: TextureProps): WEBGLTexture {
@@ -357,6 +336,10 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
357
336
  return new WEBGLRenderPipeline(this, props);
358
337
  }
359
338
 
339
+ override createVertexArray(props: VertexArrayProps): VertexArray {
340
+ return new WEBGLVertexArray(this, props);
341
+ }
342
+
360
343
  beginRenderPass(props: RenderPassProps): WEBGLRenderPass {
361
344
  return new WEBGLRenderPass(this, props);
362
345
  }
@@ -366,7 +349,11 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
366
349
  }
367
350
 
368
351
  beginComputePass(props: ComputePassProps): ComputePass {
369
- throw new Error('compute shaders not supported in WebGL');
352
+ throw new Error('ComputePass not supported in WebGL');
353
+ }
354
+
355
+ createTransformFeedback(props: TransformFeedbackProps): WEBGLTransformFeedback {
356
+ return new WEBGLTransformFeedback(this, props);
370
357
  }
371
358
 
372
359
  private renderPass: WEBGLRenderPass | null = null;
@@ -380,16 +367,183 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
380
367
  return this.renderPass;
381
368
  }
382
369
 
370
+ override createCommandEncoder(props?: CommandEncoderProps): WEBGLCommandEncoder {
371
+ return new WEBGLCommandEncoder(this, props);
372
+ }
373
+
383
374
  /**
384
375
  * Offscreen Canvas Support: Commit the frame
385
376
  * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
386
377
  * Chrome's offscreen canvas does not require gl.commit
387
378
  */
388
379
  submit(): void {
389
- this.renderPass?.endPass();
380
+ this.renderPass?.end();
390
381
  this.renderPass = null;
391
382
  // this.canvasContext.commit();
392
383
  }
384
+
385
+ //
386
+ // TEMPORARY HACKS - will be removed in v9.1
387
+ //
388
+
389
+ /** @deprecated - should use command encoder */
390
+ override readPixelsToArrayWebGL(
391
+ source: Framebuffer | Texture,
392
+ options?: {
393
+ sourceX?: number;
394
+ sourceY?: number;
395
+ sourceFormat?: number;
396
+ sourceAttachment?: number;
397
+ target?: Uint8Array | Uint16Array | Float32Array;
398
+ // following parameters are auto deduced if not provided
399
+ sourceWidth?: number;
400
+ sourceHeight?: number;
401
+ sourceType?: number;
402
+ }
403
+ ): Uint8Array | Uint16Array | Float32Array {
404
+ return readPixelsToArray(source, options);
405
+ }
406
+
407
+ /** @deprecated - should use command encoder */
408
+ override readPixelsToBufferWebGL2(
409
+ source: Framebuffer | Texture,
410
+ options?: {
411
+ sourceX?: number;
412
+ sourceY?: number;
413
+ sourceFormat?: number;
414
+ target?: Buffer; // A new Buffer object is created when not provided.
415
+ targetByteOffset?: number; // byte offset in buffer object
416
+ // following parameters are auto deduced if not provided
417
+ sourceWidth?: number;
418
+ sourceHeight?: number;
419
+ sourceType?: number;
420
+ }
421
+ ): Buffer {
422
+ return readPixelsToBuffer(source, options);
423
+ }
424
+
425
+ //
426
+ // WebGL-only API (not part of `Device` API)
427
+ //
428
+
429
+ /** WebGL1 typed context. Can always be used. */
430
+ readonly gl: WebGLRenderingContext;
431
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
432
+ readonly gl2: WebGL2RenderingContext | null = null;
433
+ readonly debug: boolean = false;
434
+
435
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
436
+ readonly isWebGL1: boolean;
437
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
438
+ readonly isWebGL2: boolean;
439
+
440
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
441
+ readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
442
+
443
+ /** State used by luma.gl classes - TODO - not used? */
444
+ readonly _extensions: Record<string, any> = {};
445
+ _polyfilled: boolean = false;
446
+
447
+ /** Instance of Spector.js (if initialized) */
448
+ spector;
449
+
450
+ private _webglLimits?: WebGLLimits;
451
+
452
+ /** Return WebGL specific limits */
453
+ get webglLimits(): WebGLLimits {
454
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
455
+ return this._webglLimits;
456
+ }
457
+
458
+ /**
459
+ * Triggers device (or WebGL context) loss.
460
+ * @note primarily intended for testing how application reacts to device loss
461
+ */
462
+ override loseDevice(): boolean {
463
+ let deviceLossTriggered = false;
464
+ const ext = this.gl.getExtension('WEBGL_lose_context');
465
+ if (ext) {
466
+ deviceLossTriggered = true;
467
+ ext.loseContext();
468
+ // ext.loseContext should trigger context loss callback but the platform may not do this, so do it explicitly
469
+ }
470
+ this._resolveContextLost?.({
471
+ reason: 'destroyed',
472
+ message: 'Application triggered context loss'
473
+ });
474
+ return deviceLossTriggered;
475
+ }
476
+
477
+ /** Save current WebGL context state onto an internal stack */
478
+ pushState(): void {
479
+ pushContextState(this.gl);
480
+ }
481
+
482
+ /** Restores previously saved context state */
483
+ popState(): void {
484
+ popContextState(this.gl);
485
+ }
486
+
487
+ /**
488
+ * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
489
+ * luma.gl ids and props can be inspected
490
+ */
491
+ setSpectorMetadata(handle: unknown, props: Record<string, unknown>) {
492
+ // @ts-expect-error
493
+ // eslint-disable-next-line camelcase
494
+ handle.__SPECTOR_Metadata = props;
495
+ }
496
+
497
+ /**
498
+ * Returns the GL.<KEY> constant that corresponds to a numeric value of a GL constant
499
+ * Be aware that there are some duplicates especially for constants that are 0,
500
+ * so this isn't guaranteed to return the right key in all cases.
501
+ */
502
+ getGLKey(value: unknown, gl?: WebGLRenderingContext): string {
503
+ // @ts-ignore expect-error depends on settings
504
+ gl = gl || this.gl2 || this.gl;
505
+ const number = Number(value);
506
+ for (const key in gl) {
507
+ // @ts-ignore expect-error depends on settings
508
+ if (gl[key] === number) {
509
+ return `GL.${key}`;
510
+ }
511
+ }
512
+ // No constant found. Stringify the value and return it.
513
+ return String(value);
514
+ }
515
+
516
+ /** Store constants */
517
+ _constants: (TypedArray | null)[];
518
+
519
+ /**
520
+ * Set a constant value for a location. Disabled attributes at that location will read from this value
521
+ * @note WebGL constants are stored globally on the WebGL context, not the VertexArray
522
+ * so they need to be updated before every render
523
+ * @todo - remember/cache values to avoid setting them unnecessarily?
524
+ */
525
+ setConstantAttribute(location: number, constant: TypedArray): void {
526
+ this._constants = this._constants || new Array(this.limits.maxVertexAttributes).fill(null);
527
+ const currentConstant = this._constants[location];
528
+ if (currentConstant && compareConstantArrayValues(currentConstant, constant)) {
529
+ log.info(1, `setConstantAttribute(${location}) could have been skipped, value unchanged`)();
530
+ }
531
+ this._constants[location] = constant;
532
+
533
+ switch (constant.constructor) {
534
+ case Float32Array:
535
+ setConstantFloatArray(this, location, constant as Float32Array);
536
+ break;
537
+ case Int32Array:
538
+ setConstantIntArray(this, location, constant as Int32Array);
539
+ break;
540
+ case Uint32Array:
541
+ setConstantUintArray(this, location, constant as Uint32Array);
542
+ break;
543
+ default:
544
+ assert(false);
545
+ }
546
+ }
393
547
  }
394
548
 
395
549
  /** Check if supplied parameter is a WebGLRenderingContext */
@@ -412,3 +566,84 @@ function isWebGL2(gl: any): boolean {
412
566
  // Look for debug contexts, headless gl etc
413
567
  return Boolean(gl && gl._version === 2);
414
568
  }
569
+
570
+ /** Set constant float array attribute */
571
+ function setConstantFloatArray(device: WebGLDevice, location: number, array: Float32Array): void {
572
+ switch (array.length) {
573
+ case 1:
574
+ device.gl.vertexAttrib1fv(location, array);
575
+ break;
576
+ case 2:
577
+ device.gl.vertexAttrib2fv(location, array);
578
+ break;
579
+ case 3:
580
+ device.gl.vertexAttrib3fv(location, array);
581
+ break;
582
+ case 4:
583
+ device.gl.vertexAttrib4fv(location, array);
584
+ break;
585
+ default:
586
+ assert(false);
587
+ }
588
+ }
589
+
590
+ /** Set constant signed int array attribute */
591
+ function setConstantIntArray(device: WebGLDevice, location: number, array: Int32Array): void {
592
+ device.assertWebGL2();
593
+ device.gl2?.vertexAttribI4iv(location, array);
594
+ // TODO - not clear if we need to use the special forms, more testing needed
595
+ // switch (array.length) {
596
+ // case 1:
597
+ // gl.vertexAttribI1iv(location, array);
598
+ // break;
599
+ // case 2:
600
+ // gl.vertexAttribI2iv(location, array);
601
+ // break;
602
+ // case 3:
603
+ // gl.vertexAttribI3iv(location, array);
604
+ // break;
605
+ // case 4:
606
+ // break;
607
+ // default:
608
+ // assert(false);
609
+ // }
610
+ }
611
+
612
+ /** Set constant unsigned int array attribute */
613
+ function setConstantUintArray(device: WebGLDevice, location: number, array: Uint32Array) {
614
+ device.assertWebGL2();
615
+ device.gl2?.vertexAttribI4uiv(location, array);
616
+ // TODO - not clear if we need to use the special forms, more testing needed
617
+ // switch (array.length) {
618
+ // case 1:
619
+ // gl.vertexAttribI1uiv(location, array);
620
+ // break;
621
+ // case 2:
622
+ // gl.vertexAttribI2uiv(location, array);
623
+ // break;
624
+ // case 3:
625
+ // gl.vertexAttribI3uiv(location, array);
626
+ // break;
627
+ // case 4:
628
+ // gl.vertexAttribI4uiv(location, array);
629
+ // break;
630
+ // default:
631
+ // assert(false);
632
+ // }
633
+ }
634
+
635
+ /**
636
+ * Compares contents of two typed arrays
637
+ * @todo max length?
638
+ */
639
+ function compareConstantArrayValues(v1: TypedArray, v2: TypedArray): boolean {
640
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
641
+ return false;
642
+ }
643
+ for (let i = 0; i < v1.length; ++i) {
644
+ if (v1[i] !== v2[i]) {
645
+ return false;
646
+ }
647
+ }
648
+ return true;
649
+ }
@@ -1,5 +1,8 @@
1
- import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/core';
5
+ import {GL} from '@luma.gl/constants';
3
6
  import {getTypedArrayFromGLType} from './typed-array-utils';
4
7
 
5
8
  const DEFAULT_ACCESSOR_VALUES = {
@@ -19,7 +22,7 @@ const PROP_CHECKS = {
19
22
  }
20
23
  };
21
24
 
22
- export default class Accessor implements AccessorObject {
25
+ export class Accessor implements AccessorObject {
23
26
  offset?: number;
24
27
  stride?: number;
25
28
  type?: number;
@@ -84,8 +87,8 @@ export default class Accessor implements AccessorObject {
84
87
  this.type = props.type;
85
88
 
86
89
  // Auto-deduce integer type?
87
- if (props.type === GL.INT || props.type === GL.UNSIGNED_INT) {
88
- this.integer = true;
90
+ if ((props.type as GL) === GL.INT || (props.type as GL) === GL.UNSIGNED_INT) {
91
+ this.integer = true;
89
92
  }
90
93
  }
91
94
  if (props.size !== undefined) {