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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +89 -74
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +4 -10
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +29 -180
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +52 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +306 -343
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +53 -22
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +9 -25
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +54 -58
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +49 -22
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/decode-webgl-types.js +89 -0
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  42. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  43. package/dist/adapter/helpers/get-shader-layout.js +58 -138
  44. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
  48. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  49. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  50. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  51. package/dist/adapter/helpers/set-uniform.js +51 -82
  52. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  53. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  54. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  55. package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
  56. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  57. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  58. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  59. package/dist/adapter/objects/constants-to-keys.js +2 -29
  60. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  62. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  63. package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
  64. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  65. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  66. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-resource.js +26 -83
  68. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  69. package/dist/adapter/resources/webgl-buffer.d.ts +19 -14
  70. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-buffer.js +67 -101
  72. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  73. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  74. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-command-buffer.js +175 -48
  76. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  78. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  80. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  81. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  82. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -25
  83. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  84. package/dist/adapter/resources/webgl-framebuffer.js +63 -175
  85. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  86. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  87. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-render-pass.js +98 -12
  89. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pipeline.d.ts +34 -20
  91. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pipeline.js +110 -293
  93. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  94. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  95. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-sampler.js +11 -21
  97. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  98. package/dist/adapter/resources/webgl-shader.d.ts +5 -5
  99. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-shader.js +18 -44
  101. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  102. package/dist/adapter/resources/webgl-texture.d.ts +51 -31
  103. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-texture.js +123 -244
  105. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  106. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  107. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  108. package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
  109. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +167 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +12 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +92 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +205 -158
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +26 -52
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/clear.d.ts +22 -0
  127. package/dist/classic/clear.d.ts.map +1 -0
  128. package/dist/classic/clear.js +88 -0
  129. package/dist/classic/clear.js.map +1 -0
  130. package/dist/classic/copy-and-blit.d.ts +62 -0
  131. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  132. package/dist/classic/copy-and-blit.js +192 -0
  133. package/dist/classic/copy-and-blit.js.map +1 -0
  134. package/dist/classic/format-utils.d.ts +3 -0
  135. package/dist/classic/format-utils.d.ts.map +1 -0
  136. package/dist/classic/format-utils.js +37 -0
  137. package/dist/classic/format-utils.js.map +1 -0
  138. package/dist/classic/typed-array-utils.d.ts +17 -17
  139. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  140. package/dist/classic/typed-array-utils.js +18 -39
  141. package/dist/classic/typed-array-utils.js.map +1 -1
  142. package/dist/context/context/create-browser-context.d.ts +17 -18
  143. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  144. package/dist/context/context/create-browser-context.js +11 -19
  145. package/dist/context/context/create-browser-context.js.map +1 -1
  146. package/dist/context/context/create-headless-context.d.ts +1 -1
  147. package/dist/context/context/create-headless-context.d.ts.map +1 -1
  148. package/dist/context/context/create-headless-context.js +6 -7
  149. package/dist/context/context/create-headless-context.js.map +1 -1
  150. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  151. package/dist/context/context/webgl-checks.js +1 -4
  152. package/dist/context/context/webgl-checks.js.map +1 -1
  153. package/dist/context/debug/spector.d.ts +1 -2
  154. package/dist/context/debug/spector.d.ts.map +1 -1
  155. package/dist/context/debug/spector.js +7 -19
  156. package/dist/context/debug/spector.js.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  158. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.js +18 -41
  160. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.d.ts +5 -5
  162. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.js +9 -17
  164. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  166. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.js +267 -286
  168. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  169. package/dist/context/polyfill/context-data.d.ts +13 -0
  170. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  171. package/dist/context/polyfill/context-data.js +12 -0
  172. package/dist/context/polyfill/context-data.js.map +1 -0
  173. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  174. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  175. package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
  176. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  178. package/dist/context/polyfill/polyfill-context.js +27 -31
  179. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  180. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  181. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-table.js +17 -40
  183. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  187. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +25 -61
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +8 -10
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +9344 -0
  198. package/dist/index.cjs +6556 -0
  199. package/dist/index.d.ts +23 -24
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -27
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +52 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +120 -43
  209. package/src/adapter/converters/sampler-parameters.ts +54 -126
  210. package/src/adapter/converters/shader-formats.ts +44 -0
  211. package/src/adapter/converters/texture-formats.ts +265 -192
  212. package/src/adapter/converters/vertex-formats.ts +71 -10
  213. package/src/adapter/device-helpers/device-features.ts +5 -2
  214. package/src/adapter/device-helpers/device-limits.ts +4 -2
  215. package/src/adapter/device-helpers/get-device-info.ts +72 -18
  216. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  217. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +31 -24
  218. package/src/adapter/helpers/get-shader-layout.ts +87 -131
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
  220. package/src/adapter/helpers/set-uniform.ts +39 -35
  221. package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
  222. package/src/adapter/objects/constants-to-keys.ts +6 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  224. package/src/adapter/objects/webgl-resource.ts +16 -23
  225. package/src/adapter/resources/webgl-buffer.ts +101 -106
  226. package/src/adapter/resources/webgl-command-buffer.ts +327 -25
  227. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  228. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  229. package/src/adapter/resources/webgl-framebuffer.ts +86 -133
  230. package/src/adapter/resources/webgl-render-pass.ts +165 -4
  231. package/src/adapter/resources/webgl-render-pipeline.ts +209 -205
  232. package/src/adapter/resources/webgl-sampler.ts +12 -8
  233. package/src/adapter/resources/webgl-shader.ts +32 -27
  234. package/src/adapter/resources/webgl-texture.ts +117 -91
  235. package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
  236. package/src/adapter/resources/webgl-vertex-array.ts +283 -0
  237. package/src/adapter/webgl-canvas-context.ts +18 -13
  238. package/src/adapter/webgl-device.ts +327 -92
  239. package/src/classic/accessor.ts +8 -5
  240. package/src/classic/clear.ts +113 -0
  241. package/src/classic/copy-and-blit.ts +312 -0
  242. package/src/classic/format-utils.ts +46 -0
  243. package/src/classic/typed-array-utils.ts +19 -27
  244. package/src/context/context/create-browser-context.ts +53 -31
  245. package/src/context/context/create-headless-context.ts +5 -2
  246. package/src/context/context/webgl-checks.ts +3 -1
  247. package/src/context/debug/spector.ts +8 -5
  248. package/src/context/debug/webgl-developer-tools.ts +26 -17
  249. package/src/context/parameters/unified-parameter-api.ts +15 -9
  250. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  251. package/src/context/polyfill/context-data.ts +30 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  253. package/src/context/polyfill/polyfill-context.ts +15 -8
  254. package/src/context/polyfill/polyfill-table.ts +20 -15
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  256. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  257. package/src/context/state-tracker/track-context-state.ts +13 -10
  258. package/src/context/state-tracker/with-parameters.ts +13 -4
  259. package/src/index.ts +65 -39
  260. package/src/types.ts +5 -0
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  262. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  263. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  264. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  265. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  266. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  267. package/dist/adapter/helpers/attribute-utils.js +0 -81
  268. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  270. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  271. package/dist/adapter/helpers/uniforms.js +0 -99
  272. package/dist/adapter/helpers/uniforms.js.map +0 -1
  273. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  274. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  275. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  276. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  277. package/dist/bundle.d.ts +0 -2
  278. package/dist/bundle.d.ts.map +0 -1
  279. package/dist/bundle.js +0 -5
  280. package/dist/bundle.js.map +0 -1
  281. package/dist/classic/buffer.d.ts +0 -95
  282. package/dist/classic/buffer.d.ts.map +0 -1
  283. package/dist/classic/buffer.js +0 -392
  284. package/dist/classic/buffer.js.map +0 -1
  285. package/dist/context/context/context-state.d.ts +0 -18
  286. package/dist/context/context/context-state.d.ts.map +0 -1
  287. package/dist/context/context/context-state.js +0 -26
  288. package/dist/context/context/context-state.js.map +0 -1
  289. package/dist/context/context/device-pixels.d.ts +0 -25
  290. package/dist/context/context/device-pixels.d.ts.map +0 -1
  291. package/dist/context/context/device-pixels.js +0 -103
  292. package/dist/context/context/device-pixels.js.map +0 -1
  293. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  294. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  295. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  296. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  297. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  298. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  299. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  300. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  301. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  302. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  303. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  304. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  305. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  306. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  307. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  308. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  309. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  310. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  311. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  312. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  313. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  314. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  315. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  316. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  317. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  318. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  319. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  320. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  321. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  322. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  323. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  324. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  325. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  326. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  327. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  328. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  329. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  330. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  331. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  332. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  333. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  334. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  335. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  336. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  337. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  338. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  339. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  340. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  341. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  342. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  343. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  344. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  345. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  346. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  347. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  348. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  349. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  350. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  351. package/dist/es5/adapter/webgl-device.js +0 -463
  352. package/dist/es5/adapter/webgl-device.js.map +0 -1
  353. package/dist/es5/bundle.js +0 -7
  354. package/dist/es5/bundle.js.map +0 -1
  355. package/dist/es5/classic/accessor.js +0 -181
  356. package/dist/es5/classic/accessor.js.map +0 -1
  357. package/dist/es5/classic/buffer.js +0 -478
  358. package/dist/es5/classic/buffer.js.map +0 -1
  359. package/dist/es5/classic/typed-array-utils.js +0 -126
  360. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  361. package/dist/es5/context/context/context-state.js +0 -31
  362. package/dist/es5/context/context/context-state.js.map +0 -1
  363. package/dist/es5/context/context/create-browser-context.js +0 -83
  364. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  365. package/dist/es5/context/context/create-headless-context.js +0 -60
  366. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  367. package/dist/es5/context/context/device-pixels.js +0 -121
  368. package/dist/es5/context/context/device-pixels.js.map +0 -1
  369. package/dist/es5/context/context/webgl-checks.js +0 -54
  370. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  371. package/dist/es5/context/debug/spector.js +0 -133
  372. package/dist/es5/context/debug/spector.js.map +0 -1
  373. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  374. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  375. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  376. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  377. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  378. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  379. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  380. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  381. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  382. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  383. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  384. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  385. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  386. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  387. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  388. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  389. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  390. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  391. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  392. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  393. package/dist/es5/index.js +0 -290
  394. package/dist/es5/index.js.map +0 -1
  395. package/dist/es5/init.js +0 -10
  396. package/dist/es5/init.js.map +0 -1
  397. package/dist/es5/types/webgl.js +0 -6
  398. package/dist/es5/types/webgl.js.map +0 -1
  399. package/dist/es5/types.js +0 -2
  400. package/dist/es5/types.js.map +0 -1
  401. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  402. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  403. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  404. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  405. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  406. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  407. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  408. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  409. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  410. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  411. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  412. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  413. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  414. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  415. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  416. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  417. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  418. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  419. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  420. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  421. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  422. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  423. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  424. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  425. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  426. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  427. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  428. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  429. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  430. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  431. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  432. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  433. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  434. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  435. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  436. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  437. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  438. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  439. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  440. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  441. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  442. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  443. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  444. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  445. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  446. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  447. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  448. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  449. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  450. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  451. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  452. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  453. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  454. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  455. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  456. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  457. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  458. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  459. package/dist/esm/adapter/webgl-device.js +0 -337
  460. package/dist/esm/adapter/webgl-device.js.map +0 -1
  461. package/dist/esm/bundle.js +0 -5
  462. package/dist/esm/bundle.js.map +0 -1
  463. package/dist/esm/classic/accessor.js +0 -144
  464. package/dist/esm/classic/accessor.js.map +0 -1
  465. package/dist/esm/classic/buffer.js +0 -392
  466. package/dist/esm/classic/buffer.js.map +0 -1
  467. package/dist/esm/classic/typed-array-utils.js +0 -112
  468. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  469. package/dist/esm/context/context/context-state.js +0 -26
  470. package/dist/esm/context/context/context-state.js.map +0 -1
  471. package/dist/esm/context/context/create-browser-context.js +0 -61
  472. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  473. package/dist/esm/context/context/create-headless-context.js +0 -43
  474. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  475. package/dist/esm/context/context/device-pixels.js +0 -103
  476. package/dist/esm/context/context/device-pixels.js.map +0 -1
  477. package/dist/esm/context/context/webgl-checks.js +0 -34
  478. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  479. package/dist/esm/context/debug/spector.js +0 -76
  480. package/dist/esm/context/debug/spector.js.map +0 -1
  481. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  482. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  483. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  484. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  485. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  487. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  489. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  490. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  491. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  492. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  493. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  495. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  496. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  497. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  498. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  499. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  500. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  501. package/dist/esm/index.js +0 -28
  502. package/dist/esm/index.js.map +0 -1
  503. package/dist/esm/init.js +0 -4
  504. package/dist/esm/init.js.map +0 -1
  505. package/dist/esm/types/webgl.js +0 -2
  506. package/dist/esm/types/webgl.js.map +0 -1
  507. package/dist/esm/types.js +0 -2
  508. package/dist/esm/types.js.map +0 -1
  509. package/dist/init.d.ts +0 -2
  510. package/dist/init.d.ts.map +0 -1
  511. package/dist/init.js +0 -4
  512. package/dist/init.js.map +0 -1
  513. package/dist/types/webgl.d.ts +0 -145
  514. package/dist/types/webgl.d.ts.map +0 -1
  515. package/dist/types/webgl.js +0 -2
  516. package/dist/types/webgl.js.map +0 -1
  517. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  518. package/src/adapter/helpers/attribute-utils.ts +0 -61
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/classic/buffer.ts +0 -474
  522. package/src/context/context/context-state.ts +0 -41
  523. package/src/context/context/device-pixels.ts +0 -158
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -284
@@ -1,7 +1,13 @@
1
- import type {TextureFormat, DeviceFeature, Device} from '@luma.gl/api';
2
- import {decodeTextureFormat} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import type {TextureFormat, DeviceFeature} from '@luma.gl/core';
5
+ import {decodeTextureFormat} from '@luma.gl/core';
6
+ import {GL} from '@luma.gl/constants';
4
7
  import {isWebGL2} from '../../context/context/webgl-checks';
8
+ import { getGLFromVertexType } from './vertex-formats';
9
+
10
+ /* eslint-disable camelcase */
5
11
 
6
12
  // TEXTURE FEATURES
7
13
 
@@ -29,13 +35,13 @@ const EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API
29
35
  const EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';
30
36
  const EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';
31
37
  const EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';
32
- const EXT_HALF_FLOAT_WEBGL1 = 'WEBGL_color_buffer_half_float';
38
+ // const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';
33
39
  // const DEPTH = 'WEBGL_depth_texture';
34
40
 
35
41
  const checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>
36
42
  gl.getExtension(extension);
37
43
  const checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>
38
- extensions.every((extension) => gl.getExtension(extension));
44
+ extensions.every(extension => gl.getExtension(extension));
39
45
 
40
46
  // prettier-ignore
41
47
  const TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {
@@ -68,12 +74,12 @@ export function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFe
68
74
  }
69
75
 
70
76
  const checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>
71
- features.every((feature) => checkTextureFeature(gl, feature));
77
+ features.every(feature => checkTextureFeature(gl, feature));
72
78
 
73
79
  /** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */
74
80
  export function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {
75
81
  const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];
76
- return textureFeatures.filter((feature) => checkTextureFeature(gl, feature));
82
+ return textureFeatures.filter(feature => checkTextureFeature(gl, feature));
77
83
  }
78
84
 
79
85
  // TEXTURE FORMATS
@@ -84,60 +90,45 @@ type Format = {
84
90
  /** If a different unsized format is needed in WebGL1 */
85
91
  gl1?: GL;
86
92
  gl1ext?: string;
87
- gl2ext?: string; // format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited
93
+ /** format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited */
94
+ gl2ext?: string;
88
95
 
89
- b?: number; // (bytes per pixel), for memory usage calculations.
96
+ /** (bytes per pixel), for memory usage calculations. */
97
+ b?: number;
90
98
  /** channels */
91
99
  c?: number;
92
100
  bpp?: number;
93
101
  /** packed */
94
102
  p?: number;
95
- x?: string; // compressed
96
- f?: DeviceFeature; // for compressed texture formats
97
- render?: DeviceFeature; // renderable if extension is present
103
+ /** compressed */
104
+ x?: string;
105
+ /** for compressed texture formats */
106
+ f?: DeviceFeature;
107
+ /** renderable if feature is present */
108
+ render?: DeviceFeature;
109
+ /** filterable if feature is present */
98
110
  filter?: DeviceFeature;
99
111
 
100
- wgpu?: false; // If not supported on WebGPU
112
+ /** If not supported on WebGPU */
113
+ wgpu?: false;
101
114
 
102
115
  types?: number[];
103
116
 
104
117
  dataFormat?: GL;
118
+ /** Depth and stencil format attachment points. If set, needs to be a Renderbuffer unless depthTexture is set */
105
119
  attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;
120
+ /** if depthTexture is set this is a depth/stencil format that can be set to a texture */
121
+ depthTexture?: boolean;
122
+
123
+ renderbuffer?: boolean
106
124
  };
107
125
 
108
126
  // TABLES
109
127
 
110
- /** Legal combinations for internalFormat, format and type *
111
- // [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},
112
- // [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},
113
- // Sized texture format
114
- // R
115
- [GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},
116
- [GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
117
- [GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
118
- // // RG
119
- [GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},
120
- [GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
121
- [GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
122
- // // RGB
123
- [GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},
124
- [GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},
125
- [GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
126
- [GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
127
- // // RGBA
128
-
129
- [GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},
130
- [GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},
131
- [GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
132
- [GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},
133
- [GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},
134
- [GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},
135
- [GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},
136
- [GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
137
- [GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}
138
- */
139
-
140
- /** Texture format data */
128
+ /**
129
+ * Texture format data -
130
+ * Exported but can change without notice
131
+ */
141
132
  // prettier-ignore
142
133
  export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
143
134
  // Unsized formats that leave the precision up to the driver.
@@ -151,31 +142,31 @@ export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
151
142
  // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},
152
143
 
153
144
  // 8-bit formats
154
- 'r8unorm': {gl: GL.R8, b: 1, c: 1},
145
+ 'r8unorm': {gl: GL.R8, b: 1, c: 1, renderbuffer: true},
155
146
  'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},
156
- 'r8uint': {gl: GL.R8UI, b: 1, c: 1},
157
- 'r8sint': {gl: GL.R8I, b: 1, c: 1},
147
+ 'r8uint': {gl: GL.R8UI, b: 1, c: 1, renderbuffer: true},
148
+ 'r8sint': {gl: GL.R8I, b: 1, c: 1, renderbuffer: true},
158
149
 
159
150
  // 16-bit formats
160
- 'rg8unorm': {gl: GL.RG8, b: 2, c: 2},
151
+ 'rg8unorm': {gl: GL.RG8, b: 2, c: 2, renderbuffer: true},
161
152
  'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},
162
- 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2},
163
- 'rg8sint': {gl: GL.RG8I, b: 2, c: 2},
153
+ 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2, renderbuffer: true},
154
+ 'rg8sint': {gl: GL.RG8I, b: 2, c: 2, renderbuffer: true},
164
155
 
165
- 'r16uint': {gl: GL.R16UI, b: 2, c: 1},
166
- 'r16sint': {gl: GL.R16I, b: 2, c: 1},
167
- 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},
168
- 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},
169
- 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},
156
+ 'r16uint': {gl: GL.R16UI, b: 2, c: 1, renderbuffer: true},
157
+ 'r16sint': {gl: GL.R16I, b: 2, c: 1, renderbuffer: true},
158
+ 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},
159
+ 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},
160
+ 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
170
161
 
171
162
  // Packed 16-bit formats
172
- 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false},
173
- 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false},
174
- 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false},
163
+ 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false, renderbuffer: true},
164
+ 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false, renderbuffer: true},
165
+ 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false, renderbuffer: true},
175
166
 
176
167
  // 24-bit formats
177
- 'rbg8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},
178
- 'rbg8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},
168
+ 'rgb8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},
169
+ 'rgb8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},
179
170
 
180
171
  // 32-bit formats
181
172
  'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},
@@ -190,34 +181,34 @@ export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
190
181
  'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},
191
182
  'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},
192
183
  // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension
193
- 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},
194
- 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},
195
- 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},
184
+ 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},
185
+ 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
186
+ 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
196
187
 
197
- 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4},
198
- 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4},
188
+ 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4, renderbuffer: true},
189
+ 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4, renderbuffer: true},
199
190
  'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},
200
191
 
201
192
  // Packed 32-bit formats
202
193
  'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},
203
- 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl'},
204
- 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1},
194
+ 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl', renderbuffer: true},
195
+ 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1, renderbuffer: true},
205
196
  // webgl2 only
206
- 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4},
197
+ 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4, renderbuffer: true},
207
198
 
208
199
  // 48-bit formats
209
- 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},
210
- 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},
200
+ 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
201
+ 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
211
202
 
212
203
  // 64-bit formats
213
- 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2},
214
- 'rg32sint': {gl: GL.RG32I, b: 8, c: 2},
215
- 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},
216
- 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4},
217
- 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4},
204
+ 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2, renderbuffer: true},
205
+ 'rg32sint': {gl: GL.RG32I, b: 8, c: 2, renderbuffer: true},
206
+ 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},
207
+ 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4, renderbuffer: true},
208
+ 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4, renderbuffer: true},
218
209
  'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},
219
- 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},
220
- 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},
210
+ 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},
211
+ 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},
221
212
 
222
213
  // 96-bit formats (deprecated!)
223
214
  'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',
@@ -225,22 +216,23 @@ export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
225
216
  dataFormat: GL.RGB, types: [GL.FLOAT]},
226
217
 
227
218
  // 128-bit formats
228
- 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4},
229
- 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4},
230
- 'rgba32float': {gl: GL.RGBA32F, gl1: GL.RGBA, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},
219
+ 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4, renderbuffer: true},
220
+ 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4, renderbuffer: true},
221
+ 'rgba32float': {gl: GL.RGBA32F, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},
231
222
 
232
223
  // Depth and stencil formats
233
- 'stencil8': {gl: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT}, // 8 stencil bits
224
+ 'stencil8': {gl: GL.STENCIL_INDEX8, gl1: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT, renderbuffer: true}, // 8 stencil bits
234
225
 
235
- 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT}, // 16 depth bits
226
+ 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true}, // 16 depth bits
236
227
  'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},
237
- 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT},
228
+ 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true},
238
229
 
239
- 'depth24plus-stencil8': {b: 4, gl: GL.UNSIGNED_INT_24_8, gl1: GL.DEPTH_STENCIL, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
230
+ // The depth component of the "depth24plus" and "depth24plus-stencil8" formats may be implemented as either a 24-bit depth value or a "depth32float" value.
231
+ 'depth24plus-stencil8': {gl: GL.DEPTH_STENCIL, gl1: GL.DEPTH_STENCIL, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true, depthTexture: true},
240
232
  // "depth24unorm-stencil8" feature
241
- 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
233
+ 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},
242
234
  // "depth32float-stencil8" feature
243
- "depth32float-stencil8": {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
235
+ 'depth32float-stencil8': {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},
244
236
 
245
237
  // BC compressed formats: check device.features.has("texture-compression-bc");
246
238
 
@@ -326,25 +318,137 @@ export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
326
318
  'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}
327
319
  };
328
320
 
329
- // FUNCTIONS
321
+ /** Legal combinations for internalFormat, format and type *
322
+ // [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},
323
+ // [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},
324
+ // Sized texture format
325
+ // R
326
+ [GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},
327
+ [GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
328
+ [GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
329
+ // // RG
330
+ [GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},
331
+ [GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
332
+ [GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
333
+ // // RGB
334
+ [GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},
335
+ [GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},
336
+ [GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
337
+ [GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
338
+ // // RGBA
330
339
 
331
- function getTextureFormat(format: TextureFormat | GL): TextureFormat {
332
- if (typeof format === 'string') {
333
- return format;
334
- }
335
- const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => (entry.gl === format || entry.gl1 === format));
336
- if (!entry) {
337
- throw new Error(`Unknown texture format ${format}`);
338
- }
339
- return entry[0] as TextureFormat;
340
- }
340
+ [GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},
341
+ [GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},
342
+ [GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
343
+ [GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},
344
+ [GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},
345
+ [GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},
346
+ [GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},
347
+ [GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},
348
+ [GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}
349
+ */
350
+
351
+ /* This table is now baked into the above table
352
+ type RenderbufferFormat = {
353
+ bpp: number;
354
+ gl2?: boolean;
355
+ ext?: string;
356
+ };
357
+
358
+ export const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat> = {
359
+ [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.
360
+ // TODO - Not clear which webgpu value to map this to.
361
+ // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},
362
+ [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},
363
+
364
+ [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.
365
+
366
+ [GL.DEPTH_STENCIL]: {bpp: 4},
367
+ [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},
368
+ [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},
369
+
370
+ // When using a WebGL 1 context, color renderbuffer formats are limited
371
+ [GL.RGBA4]: {gl2: true, bpp: 2},
372
+ [GL.RGB565]: {gl2: true, bpp: 2},
373
+ [GL.RGB5_A1]: {gl2: true, bpp: 2},
374
+
375
+ // When using a WebGL 2 context, the following values are available additionally:
376
+ [GL.R8]: {gl2: true, bpp: 1},
377
+ [GL.R8UI]: {gl2: true, bpp: 1},
378
+ [GL.R8I]: {gl2: true, bpp: 1},
379
+ [GL.R16UI]: {gl2: true, bpp: 2},
380
+ [GL.R16I]: {gl2: true, bpp: 2},
381
+ [GL.R32UI]: {gl2: true, bpp: 4},
382
+ [GL.R32I]: {gl2: true, bpp: 4},
383
+ [GL.RG8]: {gl2: true, bpp: 2},
384
+ [GL.RG8UI]: {gl2: true, bpp: 2},
385
+ [GL.RG8I]: {gl2: true, bpp: 2},
386
+ [GL.RG16UI]: {gl2: true, bpp: 4},
387
+ [GL.RG16I]: {gl2: true, bpp: 4},
388
+ [GL.RG32UI]: {gl2: true, bpp: 8},
389
+ [GL.RG32I]: {gl2: true, bpp: 8},
390
+ [GL.RGB8]: {gl2: true, bpp: 3},
391
+ [GL.RGBA8]: {gl2: true, bpp: 4},
392
+ // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension
393
+ [GL.RGB10_A2]: {gl2: true, bpp: 4},
394
+ [GL.RGBA8UI]: {gl2: true, bpp: 4},
395
+ [GL.RGBA8I]: {gl2: true, bpp: 4},
396
+ [GL.RGB10_A2UI]: {gl2: true, bpp: 4},
397
+ [GL.RGBA16UI]: {gl2: true, bpp: 8},
398
+ [GL.RGBA16I]: {gl2: true, bpp: 8},
399
+ [GL.RGBA32I]: {gl2: true, bpp: 16},
400
+ [GL.RGBA32UI]: {gl2: true, bpp: 16},
401
+
402
+ // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension
403
+ [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},
404
+ [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},
405
+ [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},
406
+ [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},
407
+ [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},
408
+ // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers
409
+ [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},
410
+ // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, gl1: EXT_FLOAT_WEBGL1},
411
+ [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}
412
+ };
413
+ */
414
+
415
+ /** @deprecated should be removed */
416
+ const DATA_FORMAT_CHANNELS = {
417
+ [GL.RED]: 1,
418
+ [GL.RED_INTEGER]: 1,
419
+ [GL.RG]: 2,
420
+ [GL.RG_INTEGER]: 2,
421
+ [GL.RGB]: 3,
422
+ [GL.RGB_INTEGER]: 3,
423
+ [GL.RGBA]: 4,
424
+ [GL.RGBA_INTEGER]: 4,
425
+ [GL.DEPTH_COMPONENT]: 1,
426
+ [GL.DEPTH_STENCIL]: 1,
427
+ [GL.ALPHA]: 1,
428
+ [GL.LUMINANCE]: 1,
429
+ [GL.LUMINANCE_ALPHA]: 2
430
+ };
431
+
432
+ /** @deprecated should be removed */
433
+ const TYPE_SIZES = {
434
+ [GL.FLOAT]: 4,
435
+ [GL.UNSIGNED_INT]: 4,
436
+ [GL.INT]: 4,
437
+ [GL.UNSIGNED_SHORT]: 2,
438
+ [GL.SHORT]: 2,
439
+ [GL.HALF_FLOAT]: 2,
440
+ [GL.BYTE]: 1,
441
+ [GL.UNSIGNED_BYTE]: 1
442
+ };
443
+
444
+ // FUNCTIONS
341
445
 
342
446
  /** Checks if a texture format is supported */
343
447
  export function isTextureFormatSupported(
344
448
  gl: WebGLRenderingContext,
345
449
  formatOrGL: TextureFormat | GL
346
450
  ): boolean {
347
- const format = getTextureFormat(formatOrGL);
451
+ const format = convertGLToTextureFormat(formatOrGL);
348
452
  const info = TEXTURE_FORMATS[format];
349
453
  if (!info) {
350
454
  return false;
@@ -364,6 +468,39 @@ export function isTextureFormatSupported(
364
468
  return true;
365
469
  }
366
470
 
471
+ export function isRenderbufferFormatSupported(gl: WebGLRenderingContext, format: TextureFormat): boolean {
472
+ // Note: Order is important since the function call initializes extensions.
473
+ return isTextureFormatSupported(gl, format) && TEXTURE_FORMATS[format]?.renderbuffer;
474
+ }
475
+
476
+ /**
477
+ * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings
478
+ */
479
+ export function convertGLToTextureFormat(format: GL | TextureFormat): TextureFormat {
480
+ if (typeof format === 'string') {
481
+ return format;
482
+ }
483
+ const entry = Object.entries(TEXTURE_FORMATS).find(
484
+ ([, entry]) => entry.gl === format || entry.gl1 === format
485
+ );
486
+ if (!entry) {
487
+ throw new Error(`Unknown texture format ${format}`);
488
+ }
489
+ return entry[0] as TextureFormat;
490
+ }
491
+
492
+ /**
493
+ * Map WebGPU style texture format strings to GL constants
494
+ */
495
+ export function convertTextureFormatToGL(format: TextureFormat, isWebGL2: boolean): GL | undefined {
496
+ const formatInfo = TEXTURE_FORMATS[format];
497
+ const webglFormat = isWebGL2 ? formatInfo?.gl : formatInfo?.gl1;
498
+ if (webglFormat === undefined) {
499
+ throw new Error(`Unsupported texture format ${format}`);
500
+ }
501
+ return webglFormat;
502
+ }
503
+
367
504
  /** Checks if a texture format is supported */
368
505
  export function getTextureFormatSupport(
369
506
  gl: WebGLRenderingContext,
@@ -375,27 +512,27 @@ export function getTextureFormatSupport(
375
512
  blendable?: boolean;
376
513
  storable?: boolean;
377
514
  } {
378
- const format = getTextureFormat(formatOrGL);
515
+ const format = convertGLToTextureFormat(formatOrGL);
379
516
  const info = TEXTURE_FORMATS[format];
380
517
  if (!info) {
381
518
  return {supported: false};
382
519
  }
383
- let decoded;
384
- try {
385
- decoded = decodeTextureFormat(format);
386
- } catch {}
520
+ // let decoded;
521
+ // try {
522
+ // decoded = decodeTextureFormat(format);
523
+ // } catch {}
387
524
 
388
525
  // Support Check that we have a GL constant
389
526
  let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;
390
527
  supported = supported && checkTextureFeatures(gl, [info.f]);
391
528
 
392
529
  // Filtering
393
- const filterable = info.filter
394
- ? checkTextureFeatures(gl, [info.filter])
395
- : decoded && !decoded.signed;
396
- const renderable = info.filter
397
- ? checkTextureFeatures(gl, [info.render])
398
- : decoded && !decoded.signed;
530
+ // const filterable = info.filter
531
+ // ? checkTextureFeatures(gl, [info.filter])
532
+ // : decoded && !decoded.signed;
533
+ // const renderable = info.filter
534
+ // ? checkTextureFeatures(gl, [info.render])
535
+ // : decoded && !decoded.signed;
399
536
 
400
537
  return {
401
538
  supported,
@@ -411,7 +548,7 @@ export function isTextureFormatFilterable(
411
548
  gl: WebGLRenderingContext,
412
549
  formatOrGL: TextureFormat | GL
413
550
  ): boolean {
414
- const format = getTextureFormat(formatOrGL);
551
+ const format = convertGLToTextureFormat(formatOrGL);
415
552
  if (!isTextureFormatSupported(gl, format)) {
416
553
  return false;
417
554
  }
@@ -447,7 +584,7 @@ export function isTextureFormatRenderable(
447
584
  gl: WebGLRenderingContext,
448
585
  formatOrGL: TextureFormat | GL
449
586
  ): boolean {
450
- const format = getTextureFormat(formatOrGL);
587
+ const format = convertGLToTextureFormat(formatOrGL);
451
588
  if (!isTextureFormatSupported(gl, format)) {
452
589
  return false;
453
590
  }
@@ -458,27 +595,9 @@ export function isTextureFormatRenderable(
458
595
  return true;
459
596
  }
460
597
 
461
- /**
462
- * Converts WebGPU string style texture formats to GL constants
463
- * Pass through GL constants
464
- */
465
- export function getWebGLTextureFormat(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): GL | undefined {
466
- const format = getTextureFormat(formatOrGL);
467
- const formatInfo = TEXTURE_FORMATS[format];
468
- const webglFormat = isWebGL2(gl) ? formatInfo?.gl : formatInfo?.gl1;
469
- // Remap or pass through
470
- if (typeof format === 'number') {
471
- return webglFormat || format;
472
- }
473
- if (webglFormat === undefined) {
474
- throw new Error(`Unsupported texture format ${format}`);
475
- }
476
- return webglFormat;
477
- }
478
-
479
- export function getWebGLTextureParameters(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL) {
480
- const format = getTextureFormat(formatOrGL);
481
- const webglFormat = getWebGLTextureFormat(gl, format);
598
+ export function getWebGLTextureParameters(formatOrGL: TextureFormat | GL, isWebGL2: boolean) {
599
+ const format = convertGLToTextureFormat(formatOrGL);
600
+ const webglFormat = convertTextureFormatToGL(format, isWebGL2);
482
601
  const decoded = decodeTextureFormat(format);
483
602
  return {
484
603
  format: webglFormat,
@@ -488,26 +607,21 @@ export function getWebGLTextureParameters(gl: WebGLRenderingContext, formatOrGL:
488
607
  decoded.normalized,
489
608
  webglFormat
490
609
  ),
491
- type: getWebGLDataType(decoded.dataType),
610
+ // depth formats don't have a type
611
+ type: decoded.dataType ? getGLFromVertexType(decoded.dataType) : GL.UNSIGNED_BYTE,
492
612
  // @ts-expect-error
493
613
  compressed: decoded.compressed
494
614
  };
495
615
  }
496
616
 
497
- export function getWebGLDepthStencilAttachment(
498
- formatOrGL: TextureFormat | GL
617
+ export function getDepthStencilAttachmentWebGL(
618
+ format: TextureFormat
499
619
  ): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {
500
- const format = getTextureFormat(formatOrGL);
501
- if (typeof format === 'number') {
502
- // TODO
503
- throw new Error('unsupported depth stencil format')
504
- }
505
620
  const info = TEXTURE_FORMATS[format];
506
- const attachment = info.attachment;
507
- if (!attachment) {
508
- throw new Error('not a depth stencil format');
621
+ if (!info?.attachment) {
622
+ throw new Error(`${format} is not a depth stencil format`);
509
623
  }
510
- return attachment;
624
+ return info.attachment;
511
625
  }
512
626
 
513
627
  /**
@@ -546,7 +660,7 @@ export function _checkFloat32ColorAttachment(
546
660
  framebuffer = gl.createFramebuffer();
547
661
  gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);
548
662
  gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);
549
- const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;
663
+ const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) as GL === GL.FRAMEBUFFER_COMPLETE;
550
664
 
551
665
  gl.bindTexture(GL.TEXTURE_2D, null);
552
666
  return status;
@@ -556,39 +670,13 @@ export function _checkFloat32ColorAttachment(
556
670
  }
557
671
  }
558
672
 
559
- /** @deprecated should be removed */
560
- const DATA_FORMAT_CHANNELS = {
561
- [GL.RED]: 1,
562
- [GL.RED_INTEGER]: 1,
563
- [GL.RG]: 2,
564
- [GL.RG_INTEGER]: 2,
565
- [GL.RGB]: 3,
566
- [GL.RGB_INTEGER]: 3,
567
- [GL.RGBA]: 4,
568
- [GL.RGBA_INTEGER]: 4,
569
- [GL.DEPTH_COMPONENT]: 1,
570
- [GL.DEPTH_STENCIL]: 1,
571
- [GL.ALPHA]: 1,
572
- [GL.LUMINANCE]: 1,
573
- [GL.LUMINANCE_ALPHA]: 2
574
- };
575
-
576
- /** @deprecated should be removed */
577
- const TYPE_SIZES = {
578
- [GL.FLOAT]: 4,
579
- [GL.UNSIGNED_INT]: 4,
580
- [GL.INT]: 4,
581
- [GL.UNSIGNED_SHORT]: 2,
582
- [GL.SHORT]: 2,
583
- [GL.HALF_FLOAT]: 2,
584
- [GL.BYTE]: 1,
585
- [GL.UNSIGNED_BYTE]: 1
586
- };
587
-
588
673
  /** TODO - VERY roundabout legacy way of calculating bytes per pixel */
589
- export function getTextureFormatBytesPerPixel(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): number {
590
- const format = getTextureFormat(formatOrGL);
591
- const params = getWebGLTextureParameters(gl, format);
674
+ export function getTextureFormatBytesPerPixel(
675
+ formatOrGL: TextureFormat | GL,
676
+ isWebGL2: boolean
677
+ ): number {
678
+ const format = convertGLToTextureFormat(formatOrGL);
679
+ const params = getWebGLTextureParameters(format, isWebGL2);
592
680
  // NOTE(Tarek): Default to RGBA bytes
593
681
  const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;
594
682
  const channelSize = TYPE_SIZES[params.type] || 1;
@@ -616,18 +704,3 @@ function getWebGLPixelDataFormat(
616
704
  default: return GL.RGBA;
617
705
  }
618
706
  }
619
-
620
- export function getWebGLDataType(dataType: string): GL {
621
- // prettier-ignore
622
- switch (dataType) {
623
- case 'uint8': return GL.UNSIGNED_BYTE;
624
- case 'sint8': return GL.BYTE;
625
- case 'uint16': return GL.UNSIGNED_SHORT;
626
- case 'sint16': return GL.SHORT;
627
- case 'uint32': return GL.UNSIGNED_INT;
628
- case 'sint32': return GL.INT;
629
- case 'float16': return GL.HALF_FLOAT;
630
- case 'float32': return GL.FLOAT;
631
- default: return GL.UNSIGNED_BYTE;
632
- }
633
- }