@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.31

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