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

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