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

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 +100 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +217 -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 +9296 -0
  198. package/dist/index.cjs +6469 -0
  199. package/dist/index.d.ts +20 -24
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +25 -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 +343 -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 +42 -42
  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,26 +1,38 @@
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,
18
29
  isHeadlessGLRegistered
19
30
  } from '../context/context/create-headless-context';
31
+
20
32
  import {getDeviceInfo} from './device-helpers/get-device-info';
21
33
  import {getDeviceFeatures} from './device-helpers/device-features';
22
34
  import {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';
23
- import WebGLCanvasContext from './webgl-canvas-context';
35
+ import {WebGLCanvasContext} from './webgl-canvas-context';
24
36
  import {loadSpectorJS, initializeSpectorJS} from '../context/debug/spector';
25
37
  import {loadWebGLDeveloperTools, makeDebugContext} from '../context/debug/webgl-developer-tools';
26
38
  import {
@@ -33,37 +45,45 @@ import {
33
45
  import type {
34
46
  BufferProps,
35
47
  ShaderProps,
36
- Sampler,
48
+ // Sampler,
37
49
  SamplerProps,
38
50
  TextureProps,
39
51
  ExternalTexture,
40
52
  ExternalTextureProps,
41
53
  FramebufferProps,
42
- RenderPipeline,
54
+ // RenderPipeline,
43
55
  RenderPipelineProps,
44
56
  ComputePipeline,
45
57
  ComputePipelineProps,
46
- RenderPass,
58
+ // RenderPass,
47
59
  RenderPassProps,
48
60
  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';
61
+ ComputePassProps,
62
+ // CommandEncoder,
63
+ CommandEncoderProps,
64
+ TransformFeedbackProps
65
+ } from '@luma.gl/core';
66
+
67
+ import {WEBGLBuffer} from './resources/webgl-buffer';
68
+ import {WEBGLShader} from './resources/webgl-shader';
69
+ import {WEBGLSampler} from './resources/webgl-sampler';
70
+ import {WEBGLTexture} from './resources/webgl-texture';
71
+ import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
72
+ import {WEBGLRenderPass} from './resources/webgl-render-pass';
73
+ import {WEBGLRenderPipeline} from './resources/webgl-render-pipeline';
74
+ import {WEBGLCommandEncoder} from './resources/webgl-command-encoder';
75
+ import {WEBGLVertexArray} from './resources/webgl-vertex-array';
76
+ import {WEBGLTransformFeedback} from './resources/webgl-transform-feedback';
77
+
78
+ import {readPixelsToArray, readPixelsToBuffer} from '../classic/copy-and-blit';
79
+ import {setGLParameters} from '../context/parameters/unified-parameter-api';
80
+ import {withGLParameters} from '../context/state-tracker/with-parameters';
81
+ import {clear} from '../classic/clear';
60
82
 
61
83
  const LOG_LEVEL = 1;
62
84
 
63
- let counter = 0;
64
-
65
85
  /** WebGPU style Device API for a WebGL context */
66
- export default class WebGLDevice extends Device implements ContextState {
86
+ export class WebGLDevice extends Device {
67
87
  //
68
88
  // Public `Device` API
69
89
  //
@@ -95,37 +115,6 @@ export default class WebGLDevice extends Device implements ContextState {
95
115
  private _features?: Set<DeviceFeature>;
96
116
  private _limits?: DeviceLimits;
97
117
 
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
118
  //
130
119
  // Static methods, expected to be present by `luma.createDevice()`
131
120
  //
@@ -152,7 +141,7 @@ export default class WebGLDevice extends Device implements ContextState {
152
141
  }
153
142
 
154
143
  static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
155
- log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
144
+ log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created')();
156
145
 
157
146
  // Wait for page to load. Only wait when props. canvas is string
158
147
  // to avoid setting page onload callback unless necessary
@@ -161,11 +150,13 @@ export default class WebGLDevice extends Device implements ContextState {
161
150
  }
162
151
 
163
152
  // Load webgl and spector debug scripts from CDN if requested
164
- if (props.debug) {
153
+ if (log.get('debug') || props.debug) {
165
154
  await loadWebGLDeveloperTools();
166
155
  }
156
+
167
157
  // @ts-expect-error spector not on props
168
- if (props.spector) {
158
+ const {spector} = props;
159
+ if (log.get('spector') || spector) {
169
160
  await loadSpectorJS();
170
161
  }
171
162
 
@@ -176,7 +167,18 @@ export default class WebGLDevice extends Device implements ContextState {
176
167
  return WebGLDevice.attach(props.gl);
177
168
  }
178
169
 
179
- return new WebGLDevice(props);
170
+ const device = new WebGLDevice(props);
171
+
172
+ // Log some debug info about the newly created context
173
+ const message = `\
174
+ Created ${device.info.type}${device.debug ? ' debug' : ''} context: \
175
+ ${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;
176
+ log.probe(LOG_LEVEL, message)();
177
+ log.table(LOG_LEVEL, device.info)();
178
+
179
+ log.groupEnd(LOG_LEVEL)();
180
+
181
+ return device;
180
182
  }
181
183
 
182
184
  //
@@ -184,7 +186,7 @@ export default class WebGLDevice extends Device implements ContextState {
184
186
  //
185
187
 
186
188
  constructor(props: DeviceProps) {
187
- super(props);
189
+ super({...props, id: props.id || uid('webgl-device')});
188
190
 
189
191
  // If attaching to an already attached context, return the attached device
190
192
  // @ts-expect-error device is attached to context
@@ -194,9 +196,10 @@ export default class WebGLDevice extends Device implements ContextState {
194
196
  }
195
197
 
196
198
  // Create and instrument context
197
- this.canvasContext = new WebGLCanvasContext(this, props);
199
+ const canvas = props.canvas || props.gl?.canvas;
200
+ this.canvasContext = new WebGLCanvasContext(this, {...props, canvas});
198
201
 
199
- this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
202
+ this.lost = new Promise<{reason: 'destroyed'; message: string}>(resolve => {
200
203
  this._resolveContextLost = resolve;
201
204
  });
202
205
 
@@ -206,10 +209,12 @@ export default class WebGLDevice extends Device implements ContextState {
206
209
  message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
207
210
  });
208
211
 
209
- let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl;
212
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
210
213
  gl =
211
214
  gl ||
212
- (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
215
+ (isBrowser()
216
+ ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost})
217
+ : null);
213
218
  gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
214
219
 
215
220
  if (!gl) {
@@ -221,6 +226,7 @@ export default class WebGLDevice extends Device implements ContextState {
221
226
  this.gl2 = this.gl as WebGL2RenderingContext;
222
227
  this.isWebGL2 = isWebGL2(this.gl);
223
228
  this.isWebGL1 = !this.isWebGL2;
229
+ this.canvasContext.resize();
224
230
 
225
231
  // luma Device fields
226
232
  this.info = getDeviceInfo(this.gl);
@@ -256,43 +262,19 @@ export default class WebGLDevice extends Device implements ContextState {
256
262
  const canvas = this.handle.canvas || (props.canvas as HTMLCanvasElement);
257
263
  this.spector = initializeSpectorJS({...this.props, canvas});
258
264
  }
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
265
  }
268
266
 
269
267
  /**
270
268
  * Destroys the context
271
269
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
272
270
  */
273
- destroy() {
271
+ destroy(): void {
274
272
  const ext = this.gl.getExtension('STACKGL_destroy_context');
275
273
  if (ext) {
276
274
  ext.destroy();
277
275
  }
278
276
  }
279
277
 
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
278
  get isLost(): boolean {
297
279
  return this.gl.isContextLost();
298
280
  }
@@ -329,8 +311,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
329
311
  throw new Error('WebGL only supports a single canvas');
330
312
  }
331
313
 
332
- _createBuffer(props: BufferProps): WEBGLBuffer {
333
- return new ClassicBuffer(this, props);
314
+ createBuffer(props: BufferProps | ArrayBuffer | ArrayBufferView): WEBGLBuffer {
315
+ const newProps = this._getBufferProps(props);
316
+ return new WEBGLBuffer(this, newProps);
334
317
  }
335
318
 
336
319
  _createTexture(props: TextureProps): WEBGLTexture {
@@ -357,6 +340,10 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
357
340
  return new WEBGLRenderPipeline(this, props);
358
341
  }
359
342
 
343
+ override createVertexArray(props: VertexArrayProps): VertexArray {
344
+ return new WEBGLVertexArray(this, props);
345
+ }
346
+
360
347
  beginRenderPass(props: RenderPassProps): WEBGLRenderPass {
361
348
  return new WEBGLRenderPass(this, props);
362
349
  }
@@ -366,7 +353,11 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
366
353
  }
367
354
 
368
355
  beginComputePass(props: ComputePassProps): ComputePass {
369
- throw new Error('compute shaders not supported in WebGL');
356
+ throw new Error('ComputePass not supported in WebGL');
357
+ }
358
+
359
+ createTransformFeedback(props: TransformFeedbackProps): WEBGLTransformFeedback {
360
+ return new WEBGLTransformFeedback(this, props);
370
361
  }
371
362
 
372
363
  private renderPass: WEBGLRenderPass | null = null;
@@ -380,16 +371,195 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
380
371
  return this.renderPass;
381
372
  }
382
373
 
374
+ override createCommandEncoder(props?: CommandEncoderProps): WEBGLCommandEncoder {
375
+ return new WEBGLCommandEncoder(this, props);
376
+ }
377
+
383
378
  /**
384
379
  * Offscreen Canvas Support: Commit the frame
385
380
  * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
386
381
  * Chrome's offscreen canvas does not require gl.commit
387
382
  */
388
383
  submit(): void {
389
- this.renderPass?.endPass();
384
+ this.renderPass?.end();
390
385
  this.renderPass = null;
391
386
  // this.canvasContext.commit();
392
387
  }
388
+
389
+ //
390
+ // TEMPORARY HACKS - will be removed in v9.1
391
+ //
392
+
393
+ /** @deprecated - should use command encoder */
394
+ override readPixelsToArrayWebGL(
395
+ source: Framebuffer | Texture,
396
+ options?: {
397
+ sourceX?: number;
398
+ sourceY?: number;
399
+ sourceFormat?: number;
400
+ sourceAttachment?: number;
401
+ target?: Uint8Array | Uint16Array | Float32Array;
402
+ // following parameters are auto deduced if not provided
403
+ sourceWidth?: number;
404
+ sourceHeight?: number;
405
+ sourceType?: number;
406
+ }
407
+ ): Uint8Array | Uint16Array | Float32Array {
408
+ return readPixelsToArray(source, options);
409
+ }
410
+
411
+ /** @deprecated - should use command encoder */
412
+ override readPixelsToBufferWebGL2(
413
+ source: Framebuffer | Texture,
414
+ options?: {
415
+ sourceX?: number;
416
+ sourceY?: number;
417
+ sourceFormat?: number;
418
+ target?: Buffer; // A new Buffer object is created when not provided.
419
+ targetByteOffset?: number; // byte offset in buffer object
420
+ // following parameters are auto deduced if not provided
421
+ sourceWidth?: number;
422
+ sourceHeight?: number;
423
+ sourceType?: number;
424
+ }
425
+ ): Buffer {
426
+ return readPixelsToBuffer(source, options);
427
+ }
428
+
429
+ override setParametersWebGL(parameters: any): void {
430
+ setGLParameters(this, parameters);
431
+ }
432
+
433
+ override withParametersWebGL(parameters: any, func: any): any {
434
+ withGLParameters(this, parameters, func);
435
+ }
436
+
437
+ override clearWebGL(options?: {framebuffer?: Framebuffer; color?: any; depth?: any; stencil?: any}): void {
438
+ clear(this, options);
439
+ }
440
+
441
+ //
442
+ // WebGL-only API (not part of `Device` API)
443
+ //
444
+
445
+ /** WebGL1 typed context. Can always be used. */
446
+ readonly gl: WebGLRenderingContext;
447
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
448
+ readonly gl2: WebGL2RenderingContext | null = null;
449
+ readonly debug: boolean = false;
450
+
451
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
452
+ readonly isWebGL1: boolean;
453
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
454
+ readonly isWebGL2: boolean;
455
+
456
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
457
+ readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
458
+
459
+ /** State used by luma.gl classes - TODO - not used? */
460
+ readonly _extensions: Record<string, any> = {};
461
+ _polyfilled: boolean = false;
462
+
463
+ /** Instance of Spector.js (if initialized) */
464
+ spector;
465
+
466
+ private _webglLimits?: WebGLLimits;
467
+
468
+ /** Return WebGL specific limits */
469
+ get webglLimits(): WebGLLimits {
470
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
471
+ return this._webglLimits;
472
+ }
473
+
474
+ /**
475
+ * Triggers device (or WebGL context) loss.
476
+ * @note primarily intended for testing how application reacts to device loss
477
+ */
478
+ override loseDevice(): boolean {
479
+ let deviceLossTriggered = false;
480
+ const ext = this.gl.getExtension('WEBGL_lose_context');
481
+ if (ext) {
482
+ deviceLossTriggered = true;
483
+ ext.loseContext();
484
+ // ext.loseContext should trigger context loss callback but the platform may not do this, so do it explicitly
485
+ }
486
+ this._resolveContextLost?.({
487
+ reason: 'destroyed',
488
+ message: 'Application triggered context loss'
489
+ });
490
+ return deviceLossTriggered;
491
+ }
492
+
493
+ /** Save current WebGL context state onto an internal stack */
494
+ pushState(): void {
495
+ pushContextState(this.gl);
496
+ }
497
+
498
+ /** Restores previously saved context state */
499
+ popState(): void {
500
+ popContextState(this.gl);
501
+ }
502
+
503
+ /**
504
+ * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
505
+ * luma.gl ids and props can be inspected
506
+ */
507
+ setSpectorMetadata(handle: unknown, props: Record<string, unknown>) {
508
+ // @ts-expect-error
509
+ // eslint-disable-next-line camelcase
510
+ handle.__SPECTOR_Metadata = props;
511
+ }
512
+
513
+ /**
514
+ * Returns the GL.<KEY> constant that corresponds to a numeric value of a GL constant
515
+ * Be aware that there are some duplicates especially for constants that are 0,
516
+ * so this isn't guaranteed to return the right key in all cases.
517
+ */
518
+ getGLKey(value: unknown, gl?: WebGLRenderingContext): string {
519
+ // @ts-ignore expect-error depends on settings
520
+ gl = gl || this.gl2 || this.gl;
521
+ const number = Number(value);
522
+ for (const key in gl) {
523
+ // @ts-ignore expect-error depends on settings
524
+ if (gl[key] === number) {
525
+ return `GL.${key}`;
526
+ }
527
+ }
528
+ // No constant found. Stringify the value and return it.
529
+ return String(value);
530
+ }
531
+
532
+ /** Store constants */
533
+ _constants: (TypedArray | null)[];
534
+
535
+ /**
536
+ * Set a constant value for a location. Disabled attributes at that location will read from this value
537
+ * @note WebGL constants are stored globally on the WebGL context, not the VertexArray
538
+ * so they need to be updated before every render
539
+ * @todo - remember/cache values to avoid setting them unnecessarily?
540
+ */
541
+ setConstantAttribute(location: number, constant: TypedArray): void {
542
+ this._constants = this._constants || new Array(this.limits.maxVertexAttributes).fill(null);
543
+ const currentConstant = this._constants[location];
544
+ if (currentConstant && compareConstantArrayValues(currentConstant, constant)) {
545
+ log.info(1, `setConstantAttribute(${location}) could have been skipped, value unchanged`)();
546
+ }
547
+ this._constants[location] = constant;
548
+
549
+ switch (constant.constructor) {
550
+ case Float32Array:
551
+ setConstantFloatArray(this, location, constant as Float32Array);
552
+ break;
553
+ case Int32Array:
554
+ setConstantIntArray(this, location, constant as Int32Array);
555
+ break;
556
+ case Uint32Array:
557
+ setConstantUintArray(this, location, constant as Uint32Array);
558
+ break;
559
+ default:
560
+ assert(false);
561
+ }
562
+ }
393
563
  }
394
564
 
395
565
  /** Check if supplied parameter is a WebGLRenderingContext */
@@ -412,3 +582,84 @@ function isWebGL2(gl: any): boolean {
412
582
  // Look for debug contexts, headless gl etc
413
583
  return Boolean(gl && gl._version === 2);
414
584
  }
585
+
586
+ /** Set constant float array attribute */
587
+ function setConstantFloatArray(device: WebGLDevice, location: number, array: Float32Array): void {
588
+ switch (array.length) {
589
+ case 1:
590
+ device.gl.vertexAttrib1fv(location, array);
591
+ break;
592
+ case 2:
593
+ device.gl.vertexAttrib2fv(location, array);
594
+ break;
595
+ case 3:
596
+ device.gl.vertexAttrib3fv(location, array);
597
+ break;
598
+ case 4:
599
+ device.gl.vertexAttrib4fv(location, array);
600
+ break;
601
+ default:
602
+ assert(false);
603
+ }
604
+ }
605
+
606
+ /** Set constant signed int array attribute */
607
+ function setConstantIntArray(device: WebGLDevice, location: number, array: Int32Array): void {
608
+ device.assertWebGL2();
609
+ device.gl2?.vertexAttribI4iv(location, array);
610
+ // TODO - not clear if we need to use the special forms, more testing needed
611
+ // switch (array.length) {
612
+ // case 1:
613
+ // gl.vertexAttribI1iv(location, array);
614
+ // break;
615
+ // case 2:
616
+ // gl.vertexAttribI2iv(location, array);
617
+ // break;
618
+ // case 3:
619
+ // gl.vertexAttribI3iv(location, array);
620
+ // break;
621
+ // case 4:
622
+ // break;
623
+ // default:
624
+ // assert(false);
625
+ // }
626
+ }
627
+
628
+ /** Set constant unsigned int array attribute */
629
+ function setConstantUintArray(device: WebGLDevice, location: number, array: Uint32Array) {
630
+ device.assertWebGL2();
631
+ device.gl2?.vertexAttribI4uiv(location, array);
632
+ // TODO - not clear if we need to use the special forms, more testing needed
633
+ // switch (array.length) {
634
+ // case 1:
635
+ // gl.vertexAttribI1uiv(location, array);
636
+ // break;
637
+ // case 2:
638
+ // gl.vertexAttribI2uiv(location, array);
639
+ // break;
640
+ // case 3:
641
+ // gl.vertexAttribI3uiv(location, array);
642
+ // break;
643
+ // case 4:
644
+ // gl.vertexAttribI4uiv(location, array);
645
+ // break;
646
+ // default:
647
+ // assert(false);
648
+ // }
649
+ }
650
+
651
+ /**
652
+ * Compares contents of two typed arrays
653
+ * @todo max length?
654
+ */
655
+ function compareConstantArrayValues(v1: TypedArray, v2: TypedArray): boolean {
656
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
657
+ return false;
658
+ }
659
+ for (let i = 0; i < v1.length; ++i) {
660
+ if (v1[i] !== v2[i]) {
661
+ return false;
662
+ }
663
+ }
664
+ return true;
665
+ }
@@ -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) {