@luma.gl/webgl 9.0.0-alpha.9 → 9.0.0-beta.10

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 (553) 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 +300 -146
  5. package/dist/adapter/converters/sampler-parameters.d.ts +3 -13
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +74 -219
  8. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  9. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  10. package/dist/adapter/converters/shader-formats.js +59 -0
  11. package/dist/adapter/converters/texture-formats.d.ts +41 -57
  12. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  13. package/dist/adapter/converters/texture-formats.js +490 -925
  14. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +56 -33
  17. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  18. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  20. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  21. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  23. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  24. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  26. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  27. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +101 -0
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +2 -49
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +263 -307
  32. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  33. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  34. package/dist/adapter/helpers/parse-shader-compiler-log.js +48 -33
  35. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  36. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  37. package/dist/adapter/helpers/set-uniform.js +66 -111
  38. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  39. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  40. package/dist/adapter/helpers/webgl-topology-utils.js +88 -0
  41. package/dist/adapter/objects/constants-to-keys.d.ts +2 -4
  42. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  43. package/dist/adapter/objects/constants-to-keys.js +18 -38
  44. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  45. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  46. package/dist/adapter/objects/webgl-renderbuffer.js +92 -91
  47. package/dist/adapter/objects/webgl-resource.d.ts +6 -31
  48. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  49. package/dist/adapter/objects/webgl-resource.js +103 -205
  50. package/dist/adapter/resources/webgl-buffer.d.ts +20 -16
  51. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-buffer.js +163 -155
  53. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  54. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-command-buffer.js +283 -58
  56. package/dist/adapter/resources/webgl-command-encoder.d.ts +12 -6
  57. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-command-encoder.js +36 -52
  59. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  60. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -29
  61. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  62. package/dist/adapter/resources/webgl-framebuffer.js +184 -261
  63. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  64. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  65. package/dist/adapter/resources/webgl-query-set.js +136 -0
  66. package/dist/adapter/resources/webgl-render-pass.d.ts +21 -4
  67. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-render-pass.js +140 -20
  69. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -21
  70. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-render-pipeline.js +371 -413
  72. package/dist/adapter/resources/webgl-sampler.d.ts +5 -6
  73. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-sampler.js +46 -46
  75. package/dist/adapter/resources/webgl-shader.d.ts +16 -6
  76. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-shader.js +113 -72
  78. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  79. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  80. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  81. package/dist/adapter/resources/webgl-texture.d.ts +53 -35
  82. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-texture.js +623 -822
  84. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  85. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-transform-feedback.js +162 -0
  87. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  88. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  89. package/dist/adapter/resources/webgl-vertex-array.js +239 -0
  90. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  91. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  92. package/dist/adapter/webgl-canvas-context.js +61 -50
  93. package/dist/adapter/webgl-device.d.ts +112 -55
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +453 -331
  96. package/dist/classic/accessor.d.ts +3 -3
  97. package/dist/classic/accessor.d.ts.map +1 -1
  98. package/dist/classic/accessor.js +135 -130
  99. package/dist/classic/clear.d.ts +22 -0
  100. package/dist/classic/clear.d.ts.map +1 -0
  101. package/dist/classic/clear.js +89 -0
  102. package/dist/classic/copy-and-blit.d.ts +62 -0
  103. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  104. package/dist/classic/copy-and-blit.js +191 -0
  105. package/dist/classic/format-utils.d.ts +3 -0
  106. package/dist/classic/format-utils.d.ts.map +1 -0
  107. package/dist/classic/format-utils.js +44 -0
  108. package/dist/classic/typed-array-utils.d.ts +17 -17
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -102
  111. package/dist/context/debug/spector.d.ts +1 -2
  112. package/dist/context/debug/spector.d.ts.map +1 -1
  113. package/dist/context/debug/spector.js +56 -63
  114. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  115. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  116. package/dist/context/debug/webgl-developer-tools.js +106 -102
  117. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  118. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  119. package/dist/context/helpers/create-browser-context.js +67 -0
  120. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  121. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  122. package/dist/context/helpers/webgl-context-data.js +21 -0
  123. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  124. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  125. package/dist/context/helpers/webgl-extensions.js +10 -0
  126. package/dist/context/parameters/unified-parameter-api.d.ts +4 -5
  127. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  128. package/dist/context/parameters/unified-parameter-api.js +91 -54
  129. package/dist/context/parameters/webgl-parameter-tables.d.ts +115 -106
  130. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  131. package/dist/context/parameters/webgl-parameter-tables.js +463 -423
  132. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  133. package/dist/context/state-tracker/deep-array-equal.js +19 -18
  134. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  135. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  136. package/dist/context/state-tracker/track-context-state.js +192 -163
  137. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  138. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  139. package/dist/context/state-tracker/with-parameters.js +44 -32
  140. package/dist/dist.dev.js +6574 -0
  141. package/dist/dist.min.js +10 -0
  142. package/dist/index.cjs +5586 -0
  143. package/dist/index.cjs.map +7 -0
  144. package/dist/index.d.ts +25 -32
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +37 -28
  147. package/dist/types.d.ts +3 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js +3 -1
  150. package/dist.min.js +19 -0
  151. package/package.json +22 -15
  152. package/src/adapter/converters/device-parameters.ts +217 -54
  153. package/src/adapter/converters/sampler-parameters.ts +46 -126
  154. package/src/adapter/converters/shader-formats.ts +69 -0
  155. package/src/adapter/converters/texture-formats.ts +369 -340
  156. package/src/adapter/converters/vertex-formats.ts +71 -10
  157. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  158. package/src/adapter/device-helpers/webgl-device-info.ts +111 -0
  159. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  160. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +38 -25
  161. package/src/adapter/helpers/get-shader-layout.ts +104 -158
  162. package/src/adapter/helpers/parse-shader-compiler-log.ts +31 -11
  163. package/src/adapter/helpers/set-uniform.ts +39 -36
  164. package/src/adapter/helpers/webgl-topology-utils.ts +110 -0
  165. package/src/adapter/objects/constants-to-keys.ts +8 -26
  166. package/src/adapter/objects/webgl-renderbuffer.ts +68 -40
  167. package/src/adapter/objects/webgl-resource.ts +16 -156
  168. package/src/adapter/resources/webgl-buffer.ts +103 -112
  169. package/src/adapter/resources/webgl-command-buffer.ts +333 -41
  170. package/src/adapter/resources/webgl-command-encoder.ts +33 -22
  171. package/src/adapter/resources/webgl-external-texture.ts +11 -8
  172. package/src/adapter/resources/webgl-framebuffer.ts +125 -165
  173. package/src/adapter/resources/webgl-query-set.ts +171 -0
  174. package/src/adapter/resources/webgl-render-pass.ts +176 -6
  175. package/src/adapter/resources/webgl-render-pipeline.ts +308 -229
  176. package/src/adapter/resources/webgl-sampler.ts +19 -18
  177. package/src/adapter/resources/webgl-shader.ts +91 -32
  178. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  179. package/src/adapter/resources/webgl-texture.ts +147 -184
  180. package/src/adapter/resources/webgl-transform-feedback.ts +196 -0
  181. package/src/adapter/resources/webgl-vertex-array.ts +282 -0
  182. package/src/adapter/webgl-canvas-context.ts +23 -22
  183. package/src/adapter/webgl-device.ts +411 -196
  184. package/src/classic/accessor.ts +12 -8
  185. package/src/classic/clear.ts +118 -0
  186. package/src/classic/copy-and-blit.ts +318 -0
  187. package/src/classic/format-utils.ts +47 -0
  188. package/src/classic/typed-array-utils.ts +19 -31
  189. package/src/context/debug/spector.ts +16 -10
  190. package/src/context/debug/webgl-developer-tools.ts +52 -32
  191. package/src/context/helpers/create-browser-context.ts +116 -0
  192. package/src/context/helpers/webgl-context-data.ts +31 -0
  193. package/src/context/helpers/webgl-extensions.ts +17 -0
  194. package/src/context/parameters/unified-parameter-api.ts +11 -16
  195. package/src/context/parameters/webgl-parameter-tables.ts +171 -121
  196. package/src/context/state-tracker/deep-array-equal.ts +3 -0
  197. package/src/context/state-tracker/track-context-state.ts +35 -26
  198. package/src/context/state-tracker/with-parameters.ts +12 -3
  199. package/src/index.ts +41 -55
  200. package/src/types.ts +6 -0
  201. package/dist/adapter/converters/device-parameters.js.map +0 -1
  202. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  203. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  204. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  205. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  206. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  210. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  211. package/dist/adapter/device-helpers/device-features.js +0 -112
  212. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  213. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  214. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  215. package/dist/adapter/device-helpers/device-limits.js +0 -91
  216. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  217. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  218. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  219. package/dist/adapter/device-helpers/get-device-info.js +0 -44
  220. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  221. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  222. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  223. package/dist/adapter/device-helpers/is-old-ie.js +0 -8
  224. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  225. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  226. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  227. package/dist/adapter/helpers/attribute-utils.js +0 -81
  228. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  229. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  230. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  231. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  232. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  233. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  234. package/dist/adapter/helpers/uniforms.js +0 -99
  235. package/dist/adapter/helpers/uniforms.js.map +0 -1
  236. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  237. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  238. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  239. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  240. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  241. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  242. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  243. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  244. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  245. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  246. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  247. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  248. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  249. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  250. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  251. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  252. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  253. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  254. package/dist/adapter/webgl-device.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -2
  256. package/dist/bundle.d.ts.map +0 -1
  257. package/dist/bundle.js +0 -5
  258. package/dist/bundle.js.map +0 -1
  259. package/dist/classic/accessor.js.map +0 -1
  260. package/dist/classic/buffer.d.ts +0 -95
  261. package/dist/classic/buffer.d.ts.map +0 -1
  262. package/dist/classic/buffer.js +0 -392
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/classic/typed-array-utils.js.map +0 -1
  265. package/dist/context/context/context-state.d.ts +0 -18
  266. package/dist/context/context/context-state.d.ts.map +0 -1
  267. package/dist/context/context/context-state.js +0 -26
  268. package/dist/context/context/context-state.js.map +0 -1
  269. package/dist/context/context/create-browser-context.d.ts +0 -41
  270. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  271. package/dist/context/context/create-browser-context.js +0 -61
  272. package/dist/context/context/create-browser-context.js.map +0 -1
  273. package/dist/context/context/create-headless-context.d.ts +0 -9
  274. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  275. package/dist/context/context/create-headless-context.js +0 -43
  276. package/dist/context/context/create-headless-context.js.map +0 -1
  277. package/dist/context/context/device-pixels.d.ts +0 -25
  278. package/dist/context/context/device-pixels.d.ts.map +0 -1
  279. package/dist/context/context/device-pixels.js +0 -103
  280. package/dist/context/context/device-pixels.js.map +0 -1
  281. package/dist/context/context/webgl-checks.d.ts +0 -13
  282. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  283. package/dist/context/context/webgl-checks.js +0 -34
  284. package/dist/context/context/webgl-checks.js.map +0 -1
  285. package/dist/context/debug/spector.js.map +0 -1
  286. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  287. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  288. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  289. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  290. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  291. package/dist/context/polyfill/get-parameter-polyfill.js +0 -91
  292. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  293. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  294. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  295. package/dist/context/polyfill/polyfill-context.js +0 -91
  296. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  297. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  298. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  299. package/dist/context/polyfill/polyfill-table.js +0 -160
  300. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  301. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  302. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  303. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -335
  304. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  305. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  306. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  307. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  309. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  310. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  311. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  312. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  313. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  314. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  315. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  316. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  317. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  319. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  320. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  321. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  323. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  324. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  325. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  326. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  327. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  328. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  329. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  330. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  331. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  332. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  333. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  334. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  335. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  336. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  337. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  338. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  339. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  340. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  341. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  342. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  343. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  345. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  347. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  349. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  351. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  353. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  355. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  357. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  358. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  359. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  360. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  361. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  362. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  363. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  364. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  365. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  366. package/dist/es5/adapter/webgl-device.js +0 -463
  367. package/dist/es5/adapter/webgl-device.js.map +0 -1
  368. package/dist/es5/bundle.js +0 -7
  369. package/dist/es5/bundle.js.map +0 -1
  370. package/dist/es5/classic/accessor.js +0 -181
  371. package/dist/es5/classic/accessor.js.map +0 -1
  372. package/dist/es5/classic/buffer.js +0 -478
  373. package/dist/es5/classic/buffer.js.map +0 -1
  374. package/dist/es5/classic/typed-array-utils.js +0 -126
  375. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  376. package/dist/es5/context/context/context-state.js +0 -31
  377. package/dist/es5/context/context/context-state.js.map +0 -1
  378. package/dist/es5/context/context/create-browser-context.js +0 -83
  379. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  380. package/dist/es5/context/context/create-headless-context.js +0 -60
  381. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  382. package/dist/es5/context/context/device-pixels.js +0 -121
  383. package/dist/es5/context/context/device-pixels.js.map +0 -1
  384. package/dist/es5/context/context/webgl-checks.js +0 -54
  385. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  386. package/dist/es5/context/debug/spector.js +0 -133
  387. package/dist/es5/context/debug/spector.js.map +0 -1
  388. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  389. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  390. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  391. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  392. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  393. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  394. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  395. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  396. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  397. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  398. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  399. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  400. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  401. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  402. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  403. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  404. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  405. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  406. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  407. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  408. package/dist/es5/index.js +0 -290
  409. package/dist/es5/index.js.map +0 -1
  410. package/dist/es5/init.js +0 -10
  411. package/dist/es5/init.js.map +0 -1
  412. package/dist/es5/types/webgl.js +0 -6
  413. package/dist/es5/types/webgl.js.map +0 -1
  414. package/dist/es5/types.js +0 -2
  415. package/dist/es5/types.js.map +0 -1
  416. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  417. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  418. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  419. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  420. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  421. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  422. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  423. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  424. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  425. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  426. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  427. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  428. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  429. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  430. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  431. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  432. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  433. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  434. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  435. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  436. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  437. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  438. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  439. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  440. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  441. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  442. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  443. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  444. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  445. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  446. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  447. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  448. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  449. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  450. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  451. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  453. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  455. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  457. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  459. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  461. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  463. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  464. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  465. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  466. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  467. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  468. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  469. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  470. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  471. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  472. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  473. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  474. package/dist/esm/adapter/webgl-device.js +0 -337
  475. package/dist/esm/adapter/webgl-device.js.map +0 -1
  476. package/dist/esm/bundle.js +0 -5
  477. package/dist/esm/bundle.js.map +0 -1
  478. package/dist/esm/classic/accessor.js +0 -144
  479. package/dist/esm/classic/accessor.js.map +0 -1
  480. package/dist/esm/classic/buffer.js +0 -392
  481. package/dist/esm/classic/buffer.js.map +0 -1
  482. package/dist/esm/classic/typed-array-utils.js +0 -112
  483. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  484. package/dist/esm/context/context/context-state.js +0 -26
  485. package/dist/esm/context/context/context-state.js.map +0 -1
  486. package/dist/esm/context/context/create-browser-context.js +0 -61
  487. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  488. package/dist/esm/context/context/create-headless-context.js +0 -43
  489. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  490. package/dist/esm/context/context/device-pixels.js +0 -103
  491. package/dist/esm/context/context/device-pixels.js.map +0 -1
  492. package/dist/esm/context/context/webgl-checks.js +0 -34
  493. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  494. package/dist/esm/context/debug/spector.js +0 -76
  495. package/dist/esm/context/debug/spector.js.map +0 -1
  496. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  497. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  498. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  499. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  500. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  501. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  502. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  503. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  504. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  505. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  506. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  507. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  508. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  509. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  510. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  511. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  512. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  513. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  514. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  515. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  516. package/dist/esm/index.js +0 -28
  517. package/dist/esm/index.js.map +0 -1
  518. package/dist/esm/init.js +0 -4
  519. package/dist/esm/init.js.map +0 -1
  520. package/dist/esm/types/webgl.js +0 -2
  521. package/dist/esm/types/webgl.js.map +0 -1
  522. package/dist/esm/types.js +0 -2
  523. package/dist/esm/types.js.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/dist/init.d.ts +0 -2
  526. package/dist/init.d.ts.map +0 -1
  527. package/dist/init.js +0 -4
  528. package/dist/init.js.map +0 -1
  529. package/dist/types/webgl.d.ts +0 -145
  530. package/dist/types/webgl.d.ts.map +0 -1
  531. package/dist/types/webgl.js +0 -2
  532. package/dist/types/webgl.js.map +0 -1
  533. package/dist/types.js.map +0 -1
  534. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  535. package/src/adapter/device-helpers/device-features.ts +0 -158
  536. package/src/adapter/device-helpers/device-limits.ts +0 -153
  537. package/src/adapter/device-helpers/get-device-info.ts +0 -49
  538. package/src/adapter/device-helpers/is-old-ie.ts +0 -11
  539. package/src/adapter/helpers/attribute-utils.ts +0 -61
  540. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  541. package/src/bundle.ts +0 -4
  542. package/src/classic/buffer.ts +0 -474
  543. package/src/context/context/context-state.ts +0 -41
  544. package/src/context/context/create-browser-context.ts +0 -118
  545. package/src/context/context/create-headless-context.ts +0 -48
  546. package/src/context/context/device-pixels.ts +0 -158
  547. package/src/context/context/webgl-checks.ts +0 -49
  548. package/src/context/polyfill/get-parameter-polyfill.ts +0 -118
  549. package/src/context/polyfill/polyfill-context.ts +0 -97
  550. package/src/context/polyfill/polyfill-table.ts +0 -162
  551. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -360
  552. package/src/init.ts +0 -4
  553. package/src/types/webgl.ts +0 -284
@@ -1,337 +1,459 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { Device, CanvasContext, log } from '@luma.gl/api';
3
- import { isBrowser } from '@probe.gl/env';
4
- import { polyfillContext } from '../context/polyfill/polyfill-context';
5
- import { trackContextState } from '../context/state-tracker/track-context-state';
6
- import { createBrowserContext } from '../context/context/create-browser-context';
7
- import { createHeadlessContext, isHeadlessGLRegistered } from '../context/context/create-headless-context';
8
- import { getDeviceInfo } from './device-helpers/get-device-info';
9
- import { getDeviceFeatures } from './device-helpers/device-features';
10
- import { getDeviceLimits, getWebGLLimits } from './device-helpers/device-limits';
11
- import WebGLCanvasContext from './webgl-canvas-context';
12
- import { loadSpectorJS, initializeSpectorJS } from '../context/debug/spector';
13
- import { loadWebGLDeveloperTools, makeDebugContext } from '../context/debug/webgl-developer-tools';
14
- import { isTextureFormatSupported, isTextureFormatRenderable, isTextureFormatFilterable } from './converters/texture-formats';
15
- import ClassicBuffer from '../classic/buffer';
16
- import WEBGLShader from './resources/webgl-shader';
17
- import WEBGLSampler from './resources/webgl-sampler';
18
- import WEBGLTexture from './resources/webgl-texture';
19
- import WEBGLFramebuffer from './resources/webgl-framebuffer';
20
- import WEBGLRenderPass from './resources/webgl-render-pass';
21
- import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Device, CanvasContext, log, uid, assert } from '@luma.gl/core';
5
+ import { popContextState, pushContextState, trackContextState } from "../context/state-tracker/track-context-state.js";
6
+ import { createBrowserContext } from "../context/helpers/create-browser-context.js";
7
+ import { getDeviceInfo } from "./device-helpers/webgl-device-info.js";
8
+ import { WebGLDeviceFeatures } from "./device-helpers/webgl-device-features.js";
9
+ import { WebGLDeviceLimits } from "./device-helpers/webgl-device-limits.js";
10
+ import { WebGLCanvasContext } from "./webgl-canvas-context.js";
11
+ import { loadSpectorJS, initializeSpectorJS } from "../context/debug/spector.js";
12
+ import { loadWebGLDeveloperTools, makeDebugContext } from "../context/debug/webgl-developer-tools.js";
13
+ import { isTextureFormatSupported, isTextureFormatRenderable, isTextureFormatFilterable } from "./converters/texture-formats.js";
14
+ import { WEBGLBuffer } from "./resources/webgl-buffer.js";
15
+ import { WEBGLShader } from "./resources/webgl-shader.js";
16
+ import { WEBGLSampler } from "./resources/webgl-sampler.js";
17
+ import { WEBGLTexture } from "./resources/webgl-texture.js";
18
+ import { WEBGLFramebuffer } from "./resources/webgl-framebuffer.js";
19
+ import { WEBGLRenderPass } from "./resources/webgl-render-pass.js";
20
+ import { WEBGLRenderPipeline } from "./resources/webgl-render-pipeline.js";
21
+ import { WEBGLCommandEncoder } from "./resources/webgl-command-encoder.js";
22
+ import { WEBGLVertexArray } from "./resources/webgl-vertex-array.js";
23
+ import { WEBGLTransformFeedback } from "./resources/webgl-transform-feedback.js";
24
+ import { WEBGLQuerySet } from "./resources/webgl-query-set.js";
25
+ import { readPixelsToArray, readPixelsToBuffer } from "../classic/copy-and-blit.js";
26
+ import { setGLParameters, getGLParameters } from "../context/parameters/unified-parameter-api.js";
27
+ import { withGLParameters } from "../context/state-tracker/with-parameters.js";
28
+ import { clear } from "../classic/clear.js";
29
+ import { getWebGLExtension } from "../context/helpers/webgl-extensions.js";
22
30
  const LOG_LEVEL = 1;
23
- let counter = 0;
24
- export default class WebGLDevice extends Device {
25
- static isSupported() {
26
- return typeof WebGLRenderingContext !== 'undefined' || isHeadlessGLRegistered();
27
- }
28
-
29
- get features() {
30
- this._features = this._features || getDeviceFeatures(this.gl);
31
- return this._features;
32
- }
33
-
34
- get limits() {
35
- this._limits = this._limits || getDeviceLimits(this.gl);
36
- return this._limits;
37
- }
38
-
39
- get webglLimits() {
40
- this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
41
- return this._webglLimits;
42
- }
43
-
44
- static attach(gl) {
45
- if (gl instanceof WebGLDevice) {
46
- return gl;
47
- }
48
-
49
- if ((gl === null || gl === void 0 ? void 0 : gl.device) instanceof Device) {
50
- return gl.device;
51
- }
52
-
53
- if (!isWebGL(gl)) {
54
- throw new Error('Invalid WebGLRenderingContext');
55
- }
56
-
57
- return new WebGLDevice({
58
- gl: gl
59
- });
60
- }
61
-
62
- static async create(props = {}) {
63
- log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
64
-
65
- if (typeof props.canvas === 'string') {
66
- await CanvasContext.pageLoaded;
67
- }
68
-
69
- if (props.debug) {
70
- await loadWebGLDeveloperTools();
71
- }
72
-
73
- if (props.spector) {
74
- await loadSpectorJS();
75
- }
76
-
77
- log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
78
-
79
- if (props.gl && props.gl.device) {
80
- return WebGLDevice.attach(props.gl);
81
- }
82
-
83
- return new WebGLDevice(props);
84
- }
85
-
86
- constructor(props) {
87
- var _props$gl;
88
-
89
- super(props);
90
-
91
- _defineProperty(this, "info", void 0);
92
-
93
- _defineProperty(this, "canvasContext", void 0);
94
-
95
- _defineProperty(this, "handle", void 0);
96
-
97
- _defineProperty(this, "lost", void 0);
98
-
99
- _defineProperty(this, "_resolveContextLost", void 0);
100
-
101
- _defineProperty(this, "_features", void 0);
102
-
103
- _defineProperty(this, "_limits", void 0);
104
-
105
- _defineProperty(this, "gl", void 0);
106
-
107
- _defineProperty(this, "gl2", null);
108
-
109
- _defineProperty(this, "debug", false);
110
-
111
- _defineProperty(this, "isWebGL1", void 0);
112
-
113
- _defineProperty(this, "isWebGL2", void 0);
114
-
115
- _defineProperty(this, "_webglLimits", void 0);
116
-
117
- _defineProperty(this, "_canvasSizeInfo", {
118
- clientWidth: 0,
119
- clientHeight: 0,
120
- devicePixelRatio: 1
121
- });
122
-
123
- _defineProperty(this, "_extensions", {});
124
-
125
- _defineProperty(this, "_polyfilled", false);
126
-
127
- _defineProperty(this, "spector", void 0);
128
-
129
- _defineProperty(this, "renderPass", null);
130
-
131
- const device = (_props$gl = props.gl) === null || _props$gl === void 0 ? void 0 : _props$gl.device;
132
-
133
- if (device) {
134
- throw new Error("WebGL context already attached to device ".concat(device.id));
135
- }
136
-
137
- this.canvasContext = new WebGLCanvasContext(this, props);
138
- this.lost = new Promise(resolve => {
139
- this._resolveContextLost = resolve;
140
- });
141
-
142
- const onContextLost = event => {
143
- var _this$_resolveContext;
144
-
145
- return (_this$_resolveContext = this._resolveContextLost) === null || _this$_resolveContext === void 0 ? void 0 : _this$_resolveContext.call(this, {
146
- reason: 'destroyed',
147
- message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
148
- });
149
- };
150
-
151
- let gl = props.gl;
152
- gl = gl || (isBrowser() ? createBrowserContext(this.canvasContext.canvas, { ...props,
153
- onContextLost
154
- }) : null);
155
- gl = gl || (!isBrowser() ? createHeadlessContext({ ...props,
156
- onContextLost
157
- }) : null);
158
-
159
- if (!gl) {
160
- throw new Error('WebGL context creation failed');
161
- }
162
-
163
- this.handle = gl;
164
- this.gl = this.handle;
165
- this.gl2 = this.gl;
166
- this.isWebGL2 = isWebGL2(this.gl);
167
- this.isWebGL1 = !this.isWebGL2;
168
- this.info = getDeviceInfo(this.gl);
169
- this.gl.device = this;
170
- this.gl._version = this.isWebGL2 ? 2 : 1;
171
- polyfillContext(this.gl);
172
- const {
173
- enable = true,
174
- copyState = false
175
- } = props;
176
- trackContextState(this.gl, {
177
- enable,
178
- copyState,
179
- log: (...args) => log.log(1, ...args)()
180
- });
181
-
182
- if (isBrowser() && props.debug) {
183
- this.gl = makeDebugContext(this.gl, { ...props,
184
- webgl2: this.isWebGL2,
185
- throwOnError: true
186
- });
187
- this.gl2 = this.gl;
188
- this.debug = true;
189
- log.level = Math.max(log.level, 1);
190
- log.warn('WebGL debug mode activated. Performance reduced.')();
191
- }
192
-
193
- if (isBrowser() && props.spector) {
194
- const canvas = this.handle.canvas || props.canvas;
195
- this.spector = initializeSpectorJS({ ...this.props,
196
- canvas
197
- });
198
- }
199
-
200
- const message = "Created ".concat(this.info.type).concat(this.debug ? ' debug' : '', " context: ").concat(this.info.vendor, ", ").concat(this.info.renderer, " for canvas: ").concat(this.canvasContext.id);
201
- log.probe(LOG_LEVEL, message)();
202
- log.groupEnd(LOG_LEVEL)();
203
- }
204
-
205
- destroy() {
206
- const ext = this.gl.getExtension('STACKGL_destroy_context');
207
-
208
- if (ext) {
209
- ext.destroy();
210
- }
211
- }
212
-
213
- loseDevice() {
214
- var _this$_resolveContext2;
215
-
216
- const ext = this.gl.getExtension('WEBGL_lose_context');
217
-
218
- if (ext) {
219
- ext.loseContext();
220
- }
221
-
222
- (_this$_resolveContext2 = this._resolveContextLost) === null || _this$_resolveContext2 === void 0 ? void 0 : _this$_resolveContext2.call(this, {
223
- reason: 'destroyed',
224
- message: 'Application triggered context loss'
225
- });
226
- }
227
-
228
- get isLost() {
229
- return this.gl.isContextLost();
230
- }
231
-
232
- getSize() {
233
- return [this.gl.drawingBufferWidth, this.gl.drawingBufferHeight];
234
- }
235
-
236
- isTextureFormatSupported(format) {
237
- return isTextureFormatSupported(this.gl, format);
238
- }
239
-
240
- isTextureFormatFilterable(format) {
241
- return isTextureFormatFilterable(this.gl, format);
242
- }
243
-
244
- isTextureFormatRenderable(format) {
245
- return isTextureFormatRenderable(this.gl, format);
246
- }
247
-
248
- assertWebGL2() {
249
- if (!this.gl2) {
250
- throw new Error('Requires WebGL2');
251
- }
252
-
253
- return this.gl2;
254
- }
255
-
256
- createCanvasContext(props) {
257
- throw new Error('WebGL only supports a single canvas');
258
- }
259
-
260
- _createBuffer(props) {
261
- return new ClassicBuffer(this, props);
262
- }
263
-
264
- _createTexture(props) {
265
- return new WEBGLTexture(this, props);
266
- }
267
-
268
- createExternalTexture(props) {
269
- throw new Error('createExternalTexture() not implemented');
270
- }
271
-
272
- createSampler(props) {
273
- return new WEBGLSampler(this, props);
274
- }
275
-
276
- createShader(props) {
277
- return new WEBGLShader(this, props);
278
- }
279
-
280
- createFramebuffer(props) {
281
- return new WEBGLFramebuffer(this, props);
282
- }
283
-
284
- createRenderPipeline(props) {
285
- return new WEBGLRenderPipeline(this, props);
286
- }
287
-
288
- beginRenderPass(props) {
289
- return new WEBGLRenderPass(this, props);
290
- }
291
-
292
- createComputePipeline(props) {
293
- throw new Error('ComputePipeline not supported in WebGL');
294
- }
295
-
296
- beginComputePass(props) {
297
- throw new Error('compute shaders not supported in WebGL');
298
- }
299
-
300
- getDefaultRenderPass() {
301
- this.renderPass = this.renderPass || this.beginRenderPass({
302
- framebuffer: this.canvasContext.getCurrentFramebuffer()
303
- });
304
- return this.renderPass;
305
- }
306
-
307
- submit() {
308
- var _this$renderPass;
309
-
310
- (_this$renderPass = this.renderPass) === null || _this$renderPass === void 0 ? void 0 : _this$renderPass.endPass();
311
- this.renderPass = null;
312
- }
313
-
31
+ /** WebGPU style Device API for a WebGL context */
32
+ export class WebGLDevice extends Device {
33
+ //
34
+ // Public `Device` API
35
+ //
36
+ /** type of this device */
37
+ static type = 'webgl';
38
+ /** type of this device */
39
+ type = 'webgl';
40
+ /** The underlying WebGL context */
41
+ handle;
42
+ features;
43
+ limits;
44
+ info;
45
+ canvasContext;
46
+ lost;
47
+ _resolveContextLost;
48
+ //
49
+ // Static methods, expected to be present by `luma.createDevice()`
50
+ //
51
+ /** Check if WebGL 2 is available */
52
+ static isSupported() {
53
+ return typeof WebGL2RenderingContext !== 'undefined';
54
+ }
55
+ /**
56
+ * Get a device instance from a GL context
57
+ * Creates and instruments the device if not already created
58
+ * @param gl
59
+ * @returns
60
+ */
61
+ static attach(gl) {
62
+ if (gl instanceof WebGLDevice) {
63
+ return gl;
64
+ }
65
+ // @ts-expect-error
66
+ if (gl?.device instanceof Device) {
67
+ // @ts-expect-error
68
+ return gl.device;
69
+ }
70
+ if (!isWebGL(gl)) {
71
+ throw new Error('Invalid WebGL2RenderingContext');
72
+ }
73
+ return new WebGLDevice({ gl: gl });
74
+ }
75
+ static async create(props = {}) {
76
+ log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created')();
77
+ const promises = [];
78
+ // Load webgl and spector debug scripts from CDN if requested
79
+ if (props.debug) {
80
+ promises.push(loadWebGLDeveloperTools());
81
+ }
82
+ if (props.spector) {
83
+ promises.push(loadSpectorJS());
84
+ }
85
+ // Wait for page to load: if canvas is a string we need to query the DOM for the canvas element.
86
+ // We only wait when props.canvas is string to avoids setting the global page onload callback unless necessary.
87
+ if (typeof props.canvas === 'string') {
88
+ promises.push(CanvasContext.pageLoaded);
89
+ }
90
+ // Wait for all the loads to settle before creating the context.
91
+ // The Device.create() functions are async, so in contrast to the constructor, we can `await` here.
92
+ const results = await Promise.allSettled(promises);
93
+ for (const result of results) {
94
+ if (result.status === 'rejected') {
95
+ log.error(`Failed to initialize debug libraries ${result.reason}`)();
96
+ }
97
+ }
98
+ log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
99
+ // @ts-expect-error
100
+ if (props.gl?.device) {
101
+ log.warn('reattaching existing device')();
102
+ return WebGLDevice.attach(props.gl);
103
+ }
104
+ const device = new WebGLDevice(props);
105
+ // Log some debug info about the newly created context
106
+ const message = `\
107
+ Created ${device.type}${device.debug ? ' debug' : ''} context: \
108
+ ${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;
109
+ log.probe(LOG_LEVEL, message)();
110
+ log.table(LOG_LEVEL, device.info)();
111
+ log.groupEnd(LOG_LEVEL)();
112
+ return device;
113
+ }
114
+ //
115
+ // Public API
116
+ //
117
+ constructor(props) {
118
+ super({ ...props, id: props.id || uid('webgl-device') });
119
+ // If attaching to an already attached context, return the attached device
120
+ // @ts-expect-error device is attached to context
121
+ const device = props.gl?.device;
122
+ if (device) {
123
+ throw new Error(`WebGL context already attached to device ${device.id}`);
124
+ }
125
+ // Create and instrument context
126
+ const canvas = props.gl?.canvas || props.canvas;
127
+ this.canvasContext = new WebGLCanvasContext(this, { ...props, canvas });
128
+ this.lost = new Promise(resolve => {
129
+ this._resolveContextLost = resolve;
130
+ });
131
+ let gl = props.gl || null;
132
+ gl ||= createBrowserContext(this.canvasContext.canvas, {
133
+ ...props,
134
+ onContextLost: (event) => this._resolveContextLost?.({
135
+ reason: 'destroyed',
136
+ message: 'Entered sleep mode, or too many apps or browser tabs are using the GPU.'
137
+ })
138
+ });
139
+ if (!gl) {
140
+ throw new Error('WebGL context creation failed');
141
+ }
142
+ this.handle = gl;
143
+ this.gl = gl;
144
+ this.gl.device = this; // Update GL context: Link webgl context back to device
145
+ this.gl._version = 2; // Update GL context: Store WebGL version field on gl context (HACK to identify debug contexts)
146
+ // luma Device fields
147
+ this.info = getDeviceInfo(this.gl, this._extensions);
148
+ this.limits = new WebGLDeviceLimits(this.gl);
149
+ this.features = new WebGLDeviceFeatures(this.gl, this._extensions, this.props.disabledFeatures);
150
+ if (this.props.initalizeFeatures) {
151
+ this.features.initializeFeatures();
152
+ }
153
+ this.canvasContext.resize();
154
+ // Install context state tracking
155
+ // @ts-expect-error - hidden parameters
156
+ const { enable = true, copyState = false } = props;
157
+ trackContextState(this.gl, {
158
+ enable,
159
+ copyState,
160
+ log: (...args) => log.log(1, ...args)()
161
+ });
162
+ // DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1
163
+ if (props.debug) {
164
+ this.gl = makeDebugContext(this.gl, { ...props, throwOnError: true });
165
+ this.debug = true;
166
+ log.level = Math.max(log.level, 1);
167
+ log.warn('WebGL debug mode activated. Performance reduced.')();
168
+ }
169
+ if (props.spector) {
170
+ this.spectorJS = initializeSpectorJS({ ...this.props, canvas: this.handle.canvas });
171
+ }
172
+ }
173
+ /**
174
+ * Destroys the context
175
+ * @note Has no effect for WebGL browser contexts, there is no browser API for destroying contexts
176
+ */
177
+ destroy() { }
178
+ get isLost() {
179
+ return this.gl.isContextLost();
180
+ }
181
+ getSize() {
182
+ return [this.gl.drawingBufferWidth, this.gl.drawingBufferHeight];
183
+ }
184
+ isTextureFormatSupported(format) {
185
+ return isTextureFormatSupported(this.gl, format, this._extensions);
186
+ }
187
+ isTextureFormatFilterable(format) {
188
+ return isTextureFormatFilterable(this.gl, format, this._extensions);
189
+ }
190
+ isTextureFormatRenderable(format) {
191
+ return isTextureFormatRenderable(this.gl, format, this._extensions);
192
+ }
193
+ // IMPLEMENTATION OF ABSTRACT DEVICE
194
+ createCanvasContext(props) {
195
+ throw new Error('WebGL only supports a single canvas');
196
+ }
197
+ createBuffer(props) {
198
+ const newProps = this._getBufferProps(props);
199
+ return new WEBGLBuffer(this, newProps);
200
+ }
201
+ _createTexture(props) {
202
+ return new WEBGLTexture(this, props);
203
+ }
204
+ createExternalTexture(props) {
205
+ throw new Error('createExternalTexture() not implemented'); // return new Program(props);
206
+ }
207
+ createSampler(props) {
208
+ return new WEBGLSampler(this, props);
209
+ }
210
+ createShader(props) {
211
+ return new WEBGLShader(this, props);
212
+ }
213
+ createFramebuffer(props) {
214
+ return new WEBGLFramebuffer(this, props);
215
+ }
216
+ createVertexArray(props) {
217
+ return new WEBGLVertexArray(this, props);
218
+ }
219
+ createTransformFeedback(props) {
220
+ return new WEBGLTransformFeedback(this, props);
221
+ }
222
+ createQuerySet(props) {
223
+ return new WEBGLQuerySet(this, props);
224
+ }
225
+ createRenderPipeline(props) {
226
+ return new WEBGLRenderPipeline(this, props);
227
+ }
228
+ beginRenderPass(props) {
229
+ return new WEBGLRenderPass(this, props);
230
+ }
231
+ createComputePipeline(props) {
232
+ throw new Error('ComputePipeline not supported in WebGL');
233
+ }
234
+ beginComputePass(props) {
235
+ throw new Error('ComputePass not supported in WebGL');
236
+ }
237
+ renderPass = null;
238
+ createCommandEncoder(props) {
239
+ return new WEBGLCommandEncoder(this, props);
240
+ }
241
+ /**
242
+ * Offscreen Canvas Support: Commit the frame
243
+ * https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/commit
244
+ * Chrome's offscreen canvas does not require gl.commit
245
+ */
246
+ submit() {
247
+ this.renderPass?.end();
248
+ this.renderPass = null;
249
+ // this.canvasContext.commit();
250
+ }
251
+ //
252
+ // TEMPORARY HACKS - will be removed in v9.1
253
+ //
254
+ /** @deprecated - should use command encoder */
255
+ readPixelsToArrayWebGL(source, options) {
256
+ return readPixelsToArray(source, options);
257
+ }
258
+ /** @deprecated - should use command encoder */
259
+ readPixelsToBufferWebGL(source, options) {
260
+ return readPixelsToBuffer(source, options);
261
+ }
262
+ setParametersWebGL(parameters) {
263
+ setGLParameters(this.gl, parameters);
264
+ }
265
+ getParametersWebGL(parameters) {
266
+ return getGLParameters(this.gl, parameters);
267
+ }
268
+ withParametersWebGL(parameters, func) {
269
+ withGLParameters(this.gl, parameters, func);
270
+ }
271
+ clearWebGL(options) {
272
+ clear(this, options);
273
+ }
274
+ //
275
+ // WebGL-only API (not part of `Device` API)
276
+ //
277
+ /** WebGL2 context. */
278
+ gl;
279
+ debug = false;
280
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
281
+ _canvasSizeInfo = { clientWidth: 0, clientHeight: 0, devicePixelRatio: 1 };
282
+ /** State used by luma.gl classes - TODO - not used? */
283
+ _extensions = {};
284
+ _polyfilled = false;
285
+ /** Instance of Spector.js (if initialized) */
286
+ spectorJS;
287
+ /**
288
+ * Triggers device (or WebGL context) loss.
289
+ * @note primarily intended for testing how application reacts to device loss
290
+ */
291
+ loseDevice() {
292
+ let deviceLossTriggered = false;
293
+ const extensions = this.getExtension('WEBGL_lose_context');
294
+ const ext = extensions.WEBGL_lose_context;
295
+ if (ext) {
296
+ deviceLossTriggered = true;
297
+ ext.loseContext();
298
+ // ext.loseContext should trigger context loss callback but the platform may not do this, so do it explicitly
299
+ }
300
+ this._resolveContextLost?.({
301
+ reason: 'destroyed',
302
+ message: 'Application triggered context loss'
303
+ });
304
+ return deviceLossTriggered;
305
+ }
306
+ /** Save current WebGL context state onto an internal stack */
307
+ pushState() {
308
+ pushContextState(this.gl);
309
+ }
310
+ /** Restores previously saved context state */
311
+ popState() {
312
+ popContextState(this.gl);
313
+ }
314
+ /**
315
+ * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
316
+ * luma.gl ids and props can be inspected
317
+ */
318
+ setSpectorMetadata(handle, props) {
319
+ // @ts-expect-error
320
+ // eslint-disable-next-line camelcase
321
+ handle.__SPECTOR_Metadata = props;
322
+ }
323
+ /**
324
+ * Returns the GL.<KEY> constant that corresponds to a numeric value of a GL constant
325
+ * Be aware that there are some duplicates especially for constants that are 0,
326
+ * so this isn't guaranteed to return the right key in all cases.
327
+ */
328
+ getGLKey(value, gl) {
329
+ // @ts-ignore expect-error depends on settings
330
+ gl = gl || this.gl2 || this.gl;
331
+ const number = Number(value);
332
+ for (const key in gl) {
333
+ // @ts-ignore expect-error depends on settings
334
+ if (gl[key] === number) {
335
+ return `GL.${key}`;
336
+ }
337
+ }
338
+ // No constant found. Stringify the value and return it.
339
+ return String(value);
340
+ }
341
+ /** Store constants */
342
+ _constants;
343
+ /**
344
+ * Set a constant value for a location. Disabled attributes at that location will read from this value
345
+ * @note WebGL constants are stored globally on the WebGL context, not the VertexArray
346
+ * so they need to be updated before every render
347
+ * @todo - remember/cache values to avoid setting them unnecessarily?
348
+ */
349
+ setConstantAttributeWebGL(location, constant) {
350
+ const maxVertexAttributes = this.limits.maxVertexAttributes;
351
+ this._constants = this._constants || new Array(maxVertexAttributes).fill(null);
352
+ const currentConstant = this._constants[location];
353
+ if (currentConstant && compareConstantArrayValues(currentConstant, constant)) {
354
+ log.info(1, `setConstantAttributeWebGL(${location}) could have been skipped, value unchanged`)();
355
+ }
356
+ this._constants[location] = constant;
357
+ switch (constant.constructor) {
358
+ case Float32Array:
359
+ setConstantFloatArray(this, location, constant);
360
+ break;
361
+ case Int32Array:
362
+ setConstantIntArray(this, location, constant);
363
+ break;
364
+ case Uint32Array:
365
+ setConstantUintArray(this, location, constant);
366
+ break;
367
+ default:
368
+ assert(false);
369
+ }
370
+ }
371
+ /** Ensure extensions are only requested once */
372
+ getExtension(name) {
373
+ getWebGLExtension(this.gl, name, this._extensions);
374
+ return this._extensions;
375
+ }
314
376
  }
315
-
316
- _defineProperty(WebGLDevice, "type", 'webgl');
317
-
377
+ /** Check if supplied parameter is a WebGL2RenderingContext */
318
378
  function isWebGL(gl) {
319
- if (typeof WebGLRenderingContext !== 'undefined' && gl instanceof WebGLRenderingContext) {
320
- return true;
321
- }
322
-
323
- if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
324
- return true;
325
- }
326
-
327
- return Boolean(gl && Number.isFinite(gl._version));
379
+ if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
380
+ return true;
381
+ }
382
+ // Look for debug contexts, headless gl etc
383
+ return Boolean(gl && Number.isFinite(gl._version));
328
384
  }
329
-
330
- function isWebGL2(gl) {
331
- if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
385
+ /** Set constant float array attribute */
386
+ function setConstantFloatArray(device, location, array) {
387
+ switch (array.length) {
388
+ case 1:
389
+ device.gl.vertexAttrib1fv(location, array);
390
+ break;
391
+ case 2:
392
+ device.gl.vertexAttrib2fv(location, array);
393
+ break;
394
+ case 3:
395
+ device.gl.vertexAttrib3fv(location, array);
396
+ break;
397
+ case 4:
398
+ device.gl.vertexAttrib4fv(location, array);
399
+ break;
400
+ default:
401
+ assert(false);
402
+ }
403
+ }
404
+ /** Set constant signed int array attribute */
405
+ function setConstantIntArray(device, location, array) {
406
+ device.gl.vertexAttribI4iv(location, array);
407
+ // TODO - not clear if we need to use the special forms, more testing needed
408
+ // switch (array.length) {
409
+ // case 1:
410
+ // gl.vertexAttribI1iv(location, array);
411
+ // break;
412
+ // case 2:
413
+ // gl.vertexAttribI2iv(location, array);
414
+ // break;
415
+ // case 3:
416
+ // gl.vertexAttribI3iv(location, array);
417
+ // break;
418
+ // case 4:
419
+ // break;
420
+ // default:
421
+ // assert(false);
422
+ // }
423
+ }
424
+ /** Set constant unsigned int array attribute */
425
+ function setConstantUintArray(device, location, array) {
426
+ device.gl.vertexAttribI4uiv(location, array);
427
+ // TODO - not clear if we need to use the special forms, more testing needed
428
+ // switch (array.length) {
429
+ // case 1:
430
+ // gl.vertexAttribI1uiv(location, array);
431
+ // break;
432
+ // case 2:
433
+ // gl.vertexAttribI2uiv(location, array);
434
+ // break;
435
+ // case 3:
436
+ // gl.vertexAttribI3uiv(location, array);
437
+ // break;
438
+ // case 4:
439
+ // gl.vertexAttribI4uiv(location, array);
440
+ // break;
441
+ // default:
442
+ // assert(false);
443
+ // }
444
+ }
445
+ /**
446
+ * Compares contents of two typed arrays
447
+ * @todo max length?
448
+ */
449
+ function compareConstantArrayValues(v1, v2) {
450
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
451
+ return false;
452
+ }
453
+ for (let i = 0; i < v1.length; ++i) {
454
+ if (v1[i] !== v2[i]) {
455
+ return false;
456
+ }
457
+ }
332
458
  return true;
333
- }
334
-
335
- return Boolean(gl && gl._version === 2);
336
459
  }
337
- //# sourceMappingURL=webgl-device.js.map