@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,169 +1,107 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
2
4
 
3
- import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';
4
- import {Framebuffer, Texture, log, assert} from '@luma.gl/api';
5
- import GL from '@luma.gl/constants';
6
- import WebGLDevice from '../webgl-device';
7
- import WebGLTexture from './webgl-texture';
8
- import Renderbuffer from '../objects/webgl-renderbuffer';
9
- import {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';
5
+ import type {FramebufferProps, TextureFormat} from '@luma.gl/core';
6
+ import {Framebuffer, Texture, assert} from '@luma.gl/core';
7
+ import {GL} from '@luma.gl/constants';
8
+ import {WebGLDevice} from '../webgl-device';
9
+ import {WEBGLTexture} from './webgl-texture';
10
+ import {WEBGLTextureView} from './webgl-texture-view';
11
+ import {getDepthStencilAttachmentWebGL} from '../converters/texture-formats';
10
12
 
11
- export type TextureAttachment = [Texture, number?, number?];
12
- export type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;
13
+ // TODO - for now we don't see a usage for renderbuffers in WebGL 2.
14
+ // import {WEBGLRenderbuffer} from '../objects/webgl-renderbuffer';
15
+
16
+ export type Attachment = WEBGLTextureView | WEBGLTexture; // | WEBGLRenderbuffer;
13
17
 
14
18
  /** luma.gl Framebuffer, WebGL implementation */
15
- export default class WEBGLFramebuffer extends Framebuffer {
19
+ export class WEBGLFramebuffer extends Framebuffer {
16
20
  device: WebGLDevice;
17
- gl: WebGLRenderingContext;
21
+ gl: WebGL2RenderingContext;
18
22
  handle: WebGLFramebuffer;
19
23
 
20
- get texture() { return this.colorAttachments[0]; }
21
- readonly colorAttachments: WebGLTexture[] = [];
22
- readonly depthStencilAttachment: WebGLTexture | null = null; d
23
- protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];
24
+ get texture() {
25
+ return this.colorAttachments[0];
26
+ }
24
27
 
25
28
  constructor(device: WebGLDevice, props: FramebufferProps) {
26
29
  super(device, props);
27
- this.device = device;
28
- this.gl = device.gl;
29
- this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();
30
-
31
- if (this.handle) { // default framebuffer is null...
32
- // @ts-expect-error Per SPECTOR docs
33
- this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};
34
- }
35
-
36
- this.colorAttachments = this._createColorAttachments();
37
- // @ts-expect-error
38
- this.depthStencilAttachment = this._createDepthStencilAttachment();
39
30
 
40
- /** Attach from a map of attachments */
41
- const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
31
+ // WebGL default framebuffer handle is null
32
+ const isDefaultFramebuffer = props.handle === null;
42
33
 
43
- // Walk the attachments
44
- for (let i = 0; i < this.colorAttachments.length; ++i) {
45
- const attachment = this.colorAttachments[i];
46
- const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
47
- if (attachment) {
48
- this._attachOne(attachmentPoint, attachment);
34
+ this.device = device;
35
+ this.gl = device.gl;
36
+ this.handle =
37
+ this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
38
+
39
+ if (!isDefaultFramebuffer) {
40
+ // default framebuffer handle is null, so we can't set spector metadata...
41
+ device.setSpectorMetadata(this.handle, {id: this.props.id, props: this.props});
42
+
43
+ // Auto create textures for attachments if needed
44
+ this.autoCreateAttachmentTextures();
45
+
46
+ /** Attach from a map of attachments */
47
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
48
+
49
+ // Walk the attachments
50
+ for (let i = 0; i < this.colorAttachments.length; ++i) {
51
+ const attachment = this.colorAttachments[i] as WEBGLTextureView;
52
+ const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
53
+ if (attachment) {
54
+ this._attachOne(attachmentPoint, attachment);
55
+ }
49
56
  }
50
- }
51
57
 
52
- if (this.props.depthStencilAttachment) {
53
- this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);
54
- }
58
+ if (this.depthStencilAttachment) {
59
+ this._attachOne(
60
+ getDepthStencilAttachmentWebGL(this.depthStencilAttachment.props.format),
61
+ this.depthStencilAttachment as WEBGLTextureView
62
+ );
63
+ }
55
64
 
56
- // @ts-expect-error
57
- this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
65
+ /** Check the status */
66
+ // @ts-expect-error
67
+ if (props.check !== false) {
68
+ const status = this.gl.checkFramebufferStatus(GL.FRAMEBUFFER) as GL;
69
+ if (status !== GL.FRAMEBUFFER_COMPLETE) {
70
+ throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
71
+ }
72
+ }
58
73
 
59
- // @ts-expect-error
60
- if (props.check !== false) {
61
- this._checkStatus();
74
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
62
75
  }
63
76
  }
64
77
 
65
- destroy() {
66
- if (this.handle !== null) {
67
- for (const resource of this._ownResources) {
68
- resource.destroy();
69
- }
78
+ /** destroys any auto created resources etc. */
79
+ override destroy(): void {
80
+ super.destroy(); // destroys owned resources etc.
81
+ if (!this.destroyed && this.handle !== null) {
70
82
  this.gl.deleteFramebuffer(this.handle);
71
83
  // this.handle = null;
72
- this.destroyed = true;
73
84
  }
74
85
  }
75
86
 
76
87
  // PRIVATE
77
88
 
78
- /** Check the status */
79
- protected _checkStatus(): void {
80
- const {gl} = this;
81
- const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
82
- const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
83
- // @ts-expect-error
84
- gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
85
- if (status !== gl.FRAMEBUFFER_COMPLETE) {
86
- throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
87
- }
88
- }
89
-
90
- _createColorAttachments(): WebGLTexture[] {
91
- return this.props.colorAttachments.map(colorAttachment => {
92
- if (!colorAttachment) {
93
- return undefined;
94
- }
95
- if (colorAttachment instanceof WebGLTexture) {
96
- return colorAttachment;
97
- }
98
- // if (typeof colorAttachment === 'default') {
99
- // return this._createColorAttachment('rgba8unorm', this.width, this.height);
100
- // }
101
- // @ts-expect-error
102
- return this._createColorAttachment(colorAttachment, this.width, this.height);
103
- });
104
- }
105
-
106
- /** Create a color attachment */
107
- protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {
108
- const texture = this.device._createTexture({
109
- id: `${this.id}-color`,
110
- data: null, // reserves texture memory, but texels are undefined
89
+ /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */
90
+ protected override createDepthStencilTexture(format: TextureFormat): Texture {
91
+ // return new WEBGLRenderbuffer(this.device, {
92
+ return new WEBGLTexture(this.device, {
93
+ id: `${this.id}-depth-stencil`,
111
94
  format,
112
- // type: GL.UNSIGNED_BYTE,
113
- width,
114
- height,
115
- // Note: Mipmapping can be disabled by texture resource when we resize the texture
116
- // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant
117
- // behavior we always disable mipmaps.
118
- mipmaps: false,
119
- // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.
120
- // Use LINEAR so subpixel algos like fxaa work.
121
- // Set WRAP modes that support NPOT textures too.
122
- sampler: {
123
- minFilter: 'linear',
124
- magFilter: 'linear',
125
- addressModeU: 'clamp-to-edge',
126
- addressModeV: 'clamp-to-edge'
127
- },
128
- // parameters: {
129
- // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,
130
- // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,
131
- // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,
132
- // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE
133
- // }
134
- }) as WebGLTexture;
135
- this._ownResources.push(texture);
136
- return texture;
137
- }
138
-
139
- /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */
140
- protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {
141
- if (!this.props.depthStencilAttachment) {
142
- return undefined;
143
- }
144
- if (this.props.depthStencilAttachment instanceof Renderbuffer) {
145
- return this.props.depthStencilAttachment;
146
- }
147
- if (this.props.depthStencilAttachment instanceof Texture) {
148
- return this.props.depthStencilAttachment as unknown as WebGLTexture;
149
- }
150
- const format = this.props.depthStencilAttachment;
151
- const webglFormat = getWebGLTextureFormat(this.gl, format);
152
-
153
- const texture = new Renderbuffer(this.device, {
154
- id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?
155
- format: webglFormat,
156
- // dataFormat: GL.DEPTH_STENCIL,
157
- // type: GL.UNSIGNED_INT_24_8,
158
95
  width: this.width,
159
- height: this.height
96
+ height: this.height,
97
+ mipmaps: false
160
98
  });
161
- this._ownResources.push(texture);
162
- return texture;
163
99
  }
164
100
 
165
- /** Attachment resize is expected to be a noop if size is same */
166
- protected _resizeAttachments(width: number, height: number): this {
101
+ /**
102
+ * Attachment resize is expected to be a noop if size is same
103
+ */
104
+ protected override resizeAttachments(width: number, height: number): this {
167
105
  // for default framebuffer, just update the stored size
168
106
  if (this.handle === null) {
169
107
  // assert(width === undefined && height === undefined);
@@ -171,6 +109,7 @@ export default class WEBGLFramebuffer extends Framebuffer {
171
109
  this.height = this.gl.drawingBufferHeight;
172
110
  return this;
173
111
  }
112
+
174
113
  if (width === undefined) {
175
114
  width = this.gl.drawingBufferWidth;
176
115
  }
@@ -178,56 +117,75 @@ export default class WEBGLFramebuffer extends Framebuffer {
178
117
  height = this.gl.drawingBufferHeight;
179
118
  }
180
119
 
181
- if (width !== this.width && height !== this.height) {
182
- log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();
183
- }
120
+ // TODO Not clear that this is better than default destroy/create implementation
184
121
 
185
122
  for (const colorAttachment of this.colorAttachments) {
186
- colorAttachment.resize({width, height});
123
+ (colorAttachment.texture as WEBGLTexture).resize({width, height});
124
+ }
125
+ if (this.depthStencilAttachment) {
126
+ (this.depthStencilAttachment.texture as WEBGLTexture).resize({width, height});
187
127
  }
188
- this.depthStencilAttachment?.resize({width, height});
189
128
  return this;
190
129
  }
191
130
 
192
131
  /** Attach one attachment */
193
- protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {
194
- if (attachment instanceof Renderbuffer) {
195
- this._attachRenderbuffer(attachmentPoint, attachment);
196
- return attachment;
197
- } else if (Array.isArray(attachment)) {
132
+ protected _attachOne(attachmentPoint: GL, attachment: Attachment): WEBGLTexture {
133
+ // if (attachment instanceof WEBGLRenderbuffer) {
134
+ // this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
135
+ // return attachment;
136
+ // }
137
+ if (Array.isArray(attachment)) {
198
138
  const [texture, layer = 0, level = 0] = attachment;
199
- this._attachTexture(attachmentPoint, texture as unknown as WebGLTexture, layer, level);
200
- return texture as unknown as WebGLTexture;
201
- } else if (attachment instanceof WebGLTexture) {
139
+ this._attachTexture(attachmentPoint, texture as unknown as WEBGLTexture, layer, level);
140
+ return texture as unknown as WEBGLTexture;
141
+ }
142
+ if (attachment instanceof WEBGLTexture) {
202
143
  this._attachTexture(attachmentPoint, attachment, 0, 0);
203
144
  return attachment;
204
145
  }
146
+ if (attachment instanceof WEBGLTextureView) {
147
+ const textureView = attachment;
148
+ this._attachTexture(
149
+ attachmentPoint,
150
+ textureView.texture,
151
+ textureView.props.baseMipLevel,
152
+ textureView.props.baseArrayLayer
153
+ );
154
+ return attachment.texture;
155
+ }
156
+ throw new Error('attach');
205
157
  }
206
158
 
207
- protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {
208
- this.gl.framebufferRenderbuffer(
209
- GL.FRAMEBUFFER,
210
- attachment,
211
- GL.RENDERBUFFER,
212
- renderbuffer.handle
213
- );
214
- }
159
+ // TODO - we do not seem to need render buffers in WebGL 2
160
+ // protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {
161
+ // this.gl.framebufferRenderbuffer(
162
+ // GL.FRAMEBUFFER,
163
+ // attachment,
164
+ // GL.RENDERBUFFER,
165
+ // renderbuffer.handle
166
+ // );
167
+ // }
215
168
 
216
169
  /**
217
170
  * @param attachment
218
171
  * @param texture
219
- * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`
220
- * @param level = 0 - mipmapLevel (must be 0 in WebGL1)
172
+ * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`
173
+ * @param level = 0 - mipmapLevel
221
174
  */
222
- protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {
223
- const {gl, gl2} = this.device;
175
+ protected _attachTexture(
176
+ attachment: GL,
177
+ texture: WEBGLTexture,
178
+ layer: number,
179
+ level: number
180
+ ): void {
181
+ const {gl} = this.device;
182
+
224
183
  gl.bindTexture(texture.target, texture.handle);
225
184
 
226
185
  switch (texture.target) {
227
186
  case GL.TEXTURE_2D_ARRAY:
228
187
  case GL.TEXTURE_3D:
229
- this.device.assertWebGL2();
230
- gl2?.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
188
+ gl.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
231
189
  break;
232
190
 
233
191
  case GL.TEXTURE_CUBE_MAP:
@@ -251,15 +209,17 @@ export default class WEBGLFramebuffer extends Framebuffer {
251
209
  // Helper functions
252
210
 
253
211
  // Map an index to a cube map face constant
254
- function mapIndexToCubeMapFace(layer) {
212
+ function mapIndexToCubeMapFace(layer: number | GL): GL {
255
213
  // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
256
214
  // if smaller assume layer is index, otherwise assume it is already a cube map face constant
257
- return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
215
+ return layer < (GL.TEXTURE_CUBE_MAP_POSITIVE_X as number)
216
+ ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X
217
+ : layer;
258
218
  }
259
219
 
260
220
  // Helper METHODS
261
221
  // Get a string describing the framebuffer error if installed
262
- function _getFrameBufferStatus(status) {
222
+ function _getFrameBufferStatus(status: GL) {
263
223
  switch (status) {
264
224
  case GL.FRAMEBUFFER_COMPLETE:
265
225
  return 'success';
@@ -0,0 +1,171 @@
1
+ // WebGL2 Query (also handles disjoint timer extensions)
2
+ import {QuerySet, QuerySetProps} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
4
+ import {WebGLDevice} from '../webgl-device';
5
+
6
+ /**
7
+ * Asynchronous queries for different kinds of information
8
+ */
9
+ export class WEBGLQuerySet extends QuerySet {
10
+ device: WebGLDevice;
11
+ handle: WebGLQuery;
12
+
13
+ target: number | null = null;
14
+ _queryPending = false;
15
+ _pollingPromise: Promise<any> | null = null;
16
+
17
+ override get [Symbol.toStringTag](): string {
18
+ return 'Query';
19
+ }
20
+
21
+ // Create a query class
22
+ constructor(device: WebGLDevice, props: QuerySetProps) {
23
+ super(device, props);
24
+ this.device = device;
25
+
26
+ if (props.count > 1) {
27
+ throw new Error('WebGL QuerySet can only have one value');
28
+ }
29
+
30
+ this.handle = this.device.gl.createQuery();
31
+ Object.seal(this);
32
+ }
33
+
34
+ override destroy() {
35
+ this.device.gl.deleteQuery(this.handle);
36
+ }
37
+
38
+ // FOR RENDER PASS AND COMMAND ENCODER
39
+
40
+ /**
41
+ * Shortcut for timer query (dependent on extension in both WebGL1 and 2)
42
+ * Measures GPU time delta between this call and a matching `end` call in the
43
+ * GPU instruction stream.
44
+ */
45
+ beginTimestampQuery(): void {
46
+ return this._begin(GL.TIME_ELAPSED_EXT);
47
+ }
48
+
49
+ endTimestampQuery(): void {
50
+ this._end();
51
+ }
52
+
53
+ // Shortcut for occlusion queries
54
+ beginOcclusionQuery(options?: {conservative?: boolean}): void {
55
+ return this._begin(
56
+ options?.conservative ? GL.ANY_SAMPLES_PASSED_CONSERVATIVE : GL.ANY_SAMPLES_PASSED
57
+ );
58
+ }
59
+
60
+ endOcclusionQuery() {
61
+ this._end();
62
+ }
63
+
64
+ // Shortcut for transformFeedbackQuery
65
+ beginTransformFeedbackQuery(): void {
66
+ return this._begin(GL.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
67
+ }
68
+
69
+ endTransformFeedbackQuery(): void {
70
+ this._end();
71
+ }
72
+
73
+ async resolveQuery(): Promise<bigint[]> {
74
+ const value = await this.pollQuery();
75
+ return [value];
76
+ }
77
+
78
+ // PRIVATE METHODS
79
+
80
+ /**
81
+ * Due to OpenGL API limitations, after calling `begin()` on one Query
82
+ * instance, `end()` must be called on that same instance before
83
+ * calling `begin()` on another query. While there can be multiple
84
+ * outstanding queries representing disjoint `begin()`/`end()` intervals.
85
+ * It is not possible to interleave or overlap `begin` and `end` calls.
86
+ */
87
+ protected _begin(target: number): void {
88
+ // Don't start a new query if one is already active.
89
+ if (this._queryPending) {
90
+ return;
91
+ }
92
+
93
+ this.target = target;
94
+ this.device.gl.beginQuery(this.target, this.handle);
95
+
96
+ return;
97
+ }
98
+
99
+ // ends the current query
100
+ protected _end(): void {
101
+ // Can't end a new query if the last one hasn't been resolved.
102
+ if (this._queryPending) {
103
+ return;
104
+ }
105
+
106
+ if (this.target) {
107
+ this.device.gl.endQuery(this.target);
108
+ this.target = null;
109
+ this._queryPending = true;
110
+ }
111
+ return;
112
+ }
113
+
114
+ // Returns true if the query result is available
115
+ isResultAvailable(): boolean {
116
+ if (!this._queryPending) {
117
+ return false;
118
+ }
119
+
120
+ const resultAvailable = this.device.gl.getQueryParameter(
121
+ this.handle,
122
+ GL.QUERY_RESULT_AVAILABLE
123
+ );
124
+ if (resultAvailable) {
125
+ this._queryPending = false;
126
+ }
127
+ return resultAvailable;
128
+ }
129
+
130
+ // Timing query is disjoint, i.e. results are invalid
131
+ isTimerDisjoint(): boolean {
132
+ return this.device.gl.getParameter(GL.GPU_DISJOINT_EXT);
133
+ }
134
+
135
+ // Returns query result.
136
+ getResult(): any {
137
+ return this.device.gl.getQueryParameter(this.handle, GL.QUERY_RESULT);
138
+ }
139
+
140
+ // Returns the query result, converted to milliseconds to match JavaScript conventions.
141
+ getTimerMilliseconds() {
142
+ return this.getResult() / 1e6;
143
+ }
144
+
145
+ // Polls the query
146
+ pollQuery(limit: number = Number.POSITIVE_INFINITY): Promise<any> {
147
+ if (this._pollingPromise) {
148
+ return this._pollingPromise;
149
+ }
150
+
151
+ let counter = 0;
152
+
153
+ this._pollingPromise = new Promise((resolve, reject) => {
154
+ const poll = () => {
155
+ if (this.isResultAvailable()) {
156
+ resolve(this.getResult());
157
+ this._pollingPromise = null;
158
+ } else if (counter++ > limit) {
159
+ reject('Timed out');
160
+ this._pollingPromise = null;
161
+ } else {
162
+ requestAnimationFrame(poll);
163
+ }
164
+ };
165
+
166
+ requestAnimationFrame(poll);
167
+ });
168
+
169
+ return this._pollingPromise;
170
+ }
171
+ }