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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (553) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +300 -146
  5. package/dist/adapter/converters/sampler-parameters.d.ts +3 -13
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +74 -219
  8. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  9. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  10. package/dist/adapter/converters/shader-formats.js +59 -0
  11. package/dist/adapter/converters/texture-formats.d.ts +41 -57
  12. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  13. package/dist/adapter/converters/texture-formats.js +490 -925
  14. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +56 -33
  17. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  18. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  20. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  21. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  23. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  24. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  26. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  27. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +101 -0
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +2 -49
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +263 -307
  32. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  33. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  34. package/dist/adapter/helpers/parse-shader-compiler-log.js +48 -33
  35. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  36. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  37. package/dist/adapter/helpers/set-uniform.js +66 -111
  38. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  39. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  40. package/dist/adapter/helpers/webgl-topology-utils.js +88 -0
  41. package/dist/adapter/objects/constants-to-keys.d.ts +2 -4
  42. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  43. package/dist/adapter/objects/constants-to-keys.js +18 -38
  44. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  45. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  46. package/dist/adapter/objects/webgl-renderbuffer.js +92 -91
  47. package/dist/adapter/objects/webgl-resource.d.ts +6 -31
  48. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  49. package/dist/adapter/objects/webgl-resource.js +103 -205
  50. package/dist/adapter/resources/webgl-buffer.d.ts +20 -16
  51. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-buffer.js +163 -155
  53. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  54. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-command-buffer.js +283 -58
  56. package/dist/adapter/resources/webgl-command-encoder.d.ts +12 -6
  57. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-command-encoder.js +36 -52
  59. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  60. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -29
  61. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  62. package/dist/adapter/resources/webgl-framebuffer.js +184 -261
  63. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  64. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  65. package/dist/adapter/resources/webgl-query-set.js +136 -0
  66. package/dist/adapter/resources/webgl-render-pass.d.ts +21 -4
  67. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-render-pass.js +140 -20
  69. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -21
  70. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-render-pipeline.js +371 -413
  72. package/dist/adapter/resources/webgl-sampler.d.ts +5 -6
  73. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-sampler.js +46 -46
  75. package/dist/adapter/resources/webgl-shader.d.ts +16 -6
  76. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-shader.js +113 -72
  78. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  79. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  80. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  81. package/dist/adapter/resources/webgl-texture.d.ts +53 -35
  82. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-texture.js +623 -822
  84. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  85. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-transform-feedback.js +162 -0
  87. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  88. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  89. package/dist/adapter/resources/webgl-vertex-array.js +239 -0
  90. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  91. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  92. package/dist/adapter/webgl-canvas-context.js +61 -50
  93. package/dist/adapter/webgl-device.d.ts +112 -55
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +453 -331
  96. package/dist/classic/accessor.d.ts +3 -3
  97. package/dist/classic/accessor.d.ts.map +1 -1
  98. package/dist/classic/accessor.js +135 -130
  99. package/dist/classic/clear.d.ts +22 -0
  100. package/dist/classic/clear.d.ts.map +1 -0
  101. package/dist/classic/clear.js +89 -0
  102. package/dist/classic/copy-and-blit.d.ts +62 -0
  103. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  104. package/dist/classic/copy-and-blit.js +191 -0
  105. package/dist/classic/format-utils.d.ts +3 -0
  106. package/dist/classic/format-utils.d.ts.map +1 -0
  107. package/dist/classic/format-utils.js +44 -0
  108. package/dist/classic/typed-array-utils.d.ts +17 -17
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -102
  111. package/dist/context/debug/spector.d.ts +1 -2
  112. package/dist/context/debug/spector.d.ts.map +1 -1
  113. package/dist/context/debug/spector.js +56 -63
  114. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  115. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  116. package/dist/context/debug/webgl-developer-tools.js +106 -102
  117. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  118. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  119. package/dist/context/helpers/create-browser-context.js +67 -0
  120. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  121. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  122. package/dist/context/helpers/webgl-context-data.js +21 -0
  123. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  124. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  125. package/dist/context/helpers/webgl-extensions.js +10 -0
  126. package/dist/context/parameters/unified-parameter-api.d.ts +4 -5
  127. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  128. package/dist/context/parameters/unified-parameter-api.js +91 -54
  129. package/dist/context/parameters/webgl-parameter-tables.d.ts +115 -106
  130. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  131. package/dist/context/parameters/webgl-parameter-tables.js +463 -423
  132. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  133. package/dist/context/state-tracker/deep-array-equal.js +19 -18
  134. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  135. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  136. package/dist/context/state-tracker/track-context-state.js +192 -163
  137. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  138. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  139. package/dist/context/state-tracker/with-parameters.js +44 -32
  140. package/dist/dist.dev.js +6574 -0
  141. package/dist/dist.min.js +10 -0
  142. package/dist/index.cjs +5586 -0
  143. package/dist/index.cjs.map +7 -0
  144. package/dist/index.d.ts +25 -32
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +37 -28
  147. package/dist/types.d.ts +3 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js +3 -1
  150. package/dist.min.js +19 -0
  151. package/package.json +22 -15
  152. package/src/adapter/converters/device-parameters.ts +217 -54
  153. package/src/adapter/converters/sampler-parameters.ts +46 -126
  154. package/src/adapter/converters/shader-formats.ts +69 -0
  155. package/src/adapter/converters/texture-formats.ts +369 -340
  156. package/src/adapter/converters/vertex-formats.ts +71 -10
  157. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  158. package/src/adapter/device-helpers/webgl-device-info.ts +111 -0
  159. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  160. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +38 -25
  161. package/src/adapter/helpers/get-shader-layout.ts +104 -158
  162. package/src/adapter/helpers/parse-shader-compiler-log.ts +31 -11
  163. package/src/adapter/helpers/set-uniform.ts +39 -36
  164. package/src/adapter/helpers/webgl-topology-utils.ts +110 -0
  165. package/src/adapter/objects/constants-to-keys.ts +8 -26
  166. package/src/adapter/objects/webgl-renderbuffer.ts +68 -40
  167. package/src/adapter/objects/webgl-resource.ts +16 -156
  168. package/src/adapter/resources/webgl-buffer.ts +103 -112
  169. package/src/adapter/resources/webgl-command-buffer.ts +333 -41
  170. package/src/adapter/resources/webgl-command-encoder.ts +33 -22
  171. package/src/adapter/resources/webgl-external-texture.ts +11 -8
  172. package/src/adapter/resources/webgl-framebuffer.ts +125 -165
  173. package/src/adapter/resources/webgl-query-set.ts +171 -0
  174. package/src/adapter/resources/webgl-render-pass.ts +176 -6
  175. package/src/adapter/resources/webgl-render-pipeline.ts +308 -229
  176. package/src/adapter/resources/webgl-sampler.ts +19 -18
  177. package/src/adapter/resources/webgl-shader.ts +91 -32
  178. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  179. package/src/adapter/resources/webgl-texture.ts +147 -184
  180. package/src/adapter/resources/webgl-transform-feedback.ts +196 -0
  181. package/src/adapter/resources/webgl-vertex-array.ts +282 -0
  182. package/src/adapter/webgl-canvas-context.ts +23 -22
  183. package/src/adapter/webgl-device.ts +411 -196
  184. package/src/classic/accessor.ts +12 -8
  185. package/src/classic/clear.ts +118 -0
  186. package/src/classic/copy-and-blit.ts +318 -0
  187. package/src/classic/format-utils.ts +47 -0
  188. package/src/classic/typed-array-utils.ts +19 -31
  189. package/src/context/debug/spector.ts +16 -10
  190. package/src/context/debug/webgl-developer-tools.ts +52 -32
  191. package/src/context/helpers/create-browser-context.ts +116 -0
  192. package/src/context/helpers/webgl-context-data.ts +31 -0
  193. package/src/context/helpers/webgl-extensions.ts +17 -0
  194. package/src/context/parameters/unified-parameter-api.ts +11 -16
  195. package/src/context/parameters/webgl-parameter-tables.ts +171 -121
  196. package/src/context/state-tracker/deep-array-equal.ts +3 -0
  197. package/src/context/state-tracker/track-context-state.ts +35 -26
  198. package/src/context/state-tracker/with-parameters.ts +12 -3
  199. package/src/index.ts +41 -55
  200. package/src/types.ts +6 -0
  201. package/dist/adapter/converters/device-parameters.js.map +0 -1
  202. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  203. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  204. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  205. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  206. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  210. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  211. package/dist/adapter/device-helpers/device-features.js +0 -112
  212. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  213. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  214. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  215. package/dist/adapter/device-helpers/device-limits.js +0 -91
  216. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  217. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  218. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  219. package/dist/adapter/device-helpers/get-device-info.js +0 -44
  220. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  221. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  222. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  223. package/dist/adapter/device-helpers/is-old-ie.js +0 -8
  224. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  225. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  226. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  227. package/dist/adapter/helpers/attribute-utils.js +0 -81
  228. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  229. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  230. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  231. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  232. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  233. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  234. package/dist/adapter/helpers/uniforms.js +0 -99
  235. package/dist/adapter/helpers/uniforms.js.map +0 -1
  236. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  237. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  238. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  239. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  240. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  241. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  242. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  243. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  244. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  245. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  246. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  247. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  248. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  249. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  250. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  251. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  252. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  253. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  254. package/dist/adapter/webgl-device.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -2
  256. package/dist/bundle.d.ts.map +0 -1
  257. package/dist/bundle.js +0 -5
  258. package/dist/bundle.js.map +0 -1
  259. package/dist/classic/accessor.js.map +0 -1
  260. package/dist/classic/buffer.d.ts +0 -95
  261. package/dist/classic/buffer.d.ts.map +0 -1
  262. package/dist/classic/buffer.js +0 -392
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/classic/typed-array-utils.js.map +0 -1
  265. package/dist/context/context/context-state.d.ts +0 -18
  266. package/dist/context/context/context-state.d.ts.map +0 -1
  267. package/dist/context/context/context-state.js +0 -26
  268. package/dist/context/context/context-state.js.map +0 -1
  269. package/dist/context/context/create-browser-context.d.ts +0 -41
  270. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  271. package/dist/context/context/create-browser-context.js +0 -61
  272. package/dist/context/context/create-browser-context.js.map +0 -1
  273. package/dist/context/context/create-headless-context.d.ts +0 -9
  274. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  275. package/dist/context/context/create-headless-context.js +0 -43
  276. package/dist/context/context/create-headless-context.js.map +0 -1
  277. package/dist/context/context/device-pixels.d.ts +0 -25
  278. package/dist/context/context/device-pixels.d.ts.map +0 -1
  279. package/dist/context/context/device-pixels.js +0 -103
  280. package/dist/context/context/device-pixels.js.map +0 -1
  281. package/dist/context/context/webgl-checks.d.ts +0 -13
  282. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  283. package/dist/context/context/webgl-checks.js +0 -34
  284. package/dist/context/context/webgl-checks.js.map +0 -1
  285. package/dist/context/debug/spector.js.map +0 -1
  286. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  287. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  288. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  289. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  290. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  291. package/dist/context/polyfill/get-parameter-polyfill.js +0 -91
  292. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  293. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  294. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  295. package/dist/context/polyfill/polyfill-context.js +0 -91
  296. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  297. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  298. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  299. package/dist/context/polyfill/polyfill-table.js +0 -160
  300. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  301. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  302. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  303. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -335
  304. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  305. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  306. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  307. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  309. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  310. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  311. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  312. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  313. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  314. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  315. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  316. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  317. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  319. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  320. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  321. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  323. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  324. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  325. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  326. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  327. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  328. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  329. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  330. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  331. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  332. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  333. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  334. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  335. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  336. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  337. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  338. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  339. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  340. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  341. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  342. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  343. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  345. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  347. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  349. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  351. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  353. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  355. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  357. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  358. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  359. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  360. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  361. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  362. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  363. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  364. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  365. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  366. package/dist/es5/adapter/webgl-device.js +0 -463
  367. package/dist/es5/adapter/webgl-device.js.map +0 -1
  368. package/dist/es5/bundle.js +0 -7
  369. package/dist/es5/bundle.js.map +0 -1
  370. package/dist/es5/classic/accessor.js +0 -181
  371. package/dist/es5/classic/accessor.js.map +0 -1
  372. package/dist/es5/classic/buffer.js +0 -478
  373. package/dist/es5/classic/buffer.js.map +0 -1
  374. package/dist/es5/classic/typed-array-utils.js +0 -126
  375. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  376. package/dist/es5/context/context/context-state.js +0 -31
  377. package/dist/es5/context/context/context-state.js.map +0 -1
  378. package/dist/es5/context/context/create-browser-context.js +0 -83
  379. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  380. package/dist/es5/context/context/create-headless-context.js +0 -60
  381. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  382. package/dist/es5/context/context/device-pixels.js +0 -121
  383. package/dist/es5/context/context/device-pixels.js.map +0 -1
  384. package/dist/es5/context/context/webgl-checks.js +0 -54
  385. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  386. package/dist/es5/context/debug/spector.js +0 -133
  387. package/dist/es5/context/debug/spector.js.map +0 -1
  388. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  389. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  390. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  391. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  392. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  393. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  394. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  395. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  396. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  397. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  398. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  399. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  400. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  401. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  402. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  403. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  404. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  405. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  406. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  407. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  408. package/dist/es5/index.js +0 -290
  409. package/dist/es5/index.js.map +0 -1
  410. package/dist/es5/init.js +0 -10
  411. package/dist/es5/init.js.map +0 -1
  412. package/dist/es5/types/webgl.js +0 -6
  413. package/dist/es5/types/webgl.js.map +0 -1
  414. package/dist/es5/types.js +0 -2
  415. package/dist/es5/types.js.map +0 -1
  416. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  417. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  418. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  419. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  420. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  421. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  422. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  423. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  424. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  425. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  426. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  427. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  428. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  429. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  430. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  431. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  432. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  433. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  434. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  435. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  436. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  437. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  438. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  439. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  440. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  441. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  442. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  443. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  444. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  445. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  446. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  447. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  448. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  449. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  450. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  451. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  453. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  455. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  457. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  459. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  461. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  463. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  464. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  465. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  466. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  467. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  468. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  469. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  470. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  471. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  472. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  473. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  474. package/dist/esm/adapter/webgl-device.js +0 -337
  475. package/dist/esm/adapter/webgl-device.js.map +0 -1
  476. package/dist/esm/bundle.js +0 -5
  477. package/dist/esm/bundle.js.map +0 -1
  478. package/dist/esm/classic/accessor.js +0 -144
  479. package/dist/esm/classic/accessor.js.map +0 -1
  480. package/dist/esm/classic/buffer.js +0 -392
  481. package/dist/esm/classic/buffer.js.map +0 -1
  482. package/dist/esm/classic/typed-array-utils.js +0 -112
  483. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  484. package/dist/esm/context/context/context-state.js +0 -26
  485. package/dist/esm/context/context/context-state.js.map +0 -1
  486. package/dist/esm/context/context/create-browser-context.js +0 -61
  487. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  488. package/dist/esm/context/context/create-headless-context.js +0 -43
  489. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  490. package/dist/esm/context/context/device-pixels.js +0 -103
  491. package/dist/esm/context/context/device-pixels.js.map +0 -1
  492. package/dist/esm/context/context/webgl-checks.js +0 -34
  493. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  494. package/dist/esm/context/debug/spector.js +0 -76
  495. package/dist/esm/context/debug/spector.js.map +0 -1
  496. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  497. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  498. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  499. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  500. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  501. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  502. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  503. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  504. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  505. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  506. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  507. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  508. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  509. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  510. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  511. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  512. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  513. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  514. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  515. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  516. package/dist/esm/index.js +0 -28
  517. package/dist/esm/index.js.map +0 -1
  518. package/dist/esm/init.js +0 -4
  519. package/dist/esm/init.js.map +0 -1
  520. package/dist/esm/types/webgl.js +0 -2
  521. package/dist/esm/types/webgl.js.map +0 -1
  522. package/dist/esm/types.js +0 -2
  523. package/dist/esm/types.js.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/dist/init.d.ts +0 -2
  526. package/dist/init.d.ts.map +0 -1
  527. package/dist/init.js +0 -4
  528. package/dist/init.js.map +0 -1
  529. package/dist/types/webgl.d.ts +0 -145
  530. package/dist/types/webgl.d.ts.map +0 -1
  531. package/dist/types/webgl.js +0 -2
  532. package/dist/types/webgl.js.map +0 -1
  533. package/dist/types.js.map +0 -1
  534. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  535. package/src/adapter/device-helpers/device-features.ts +0 -158
  536. package/src/adapter/device-helpers/device-limits.ts +0 -153
  537. package/src/adapter/device-helpers/get-device-info.ts +0 -49
  538. package/src/adapter/device-helpers/is-old-ie.ts +0 -11
  539. package/src/adapter/helpers/attribute-utils.ts +0 -61
  540. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  541. package/src/bundle.ts +0 -4
  542. package/src/classic/buffer.ts +0 -474
  543. package/src/context/context/context-state.ts +0 -41
  544. package/src/context/context/create-browser-context.ts +0 -118
  545. package/src/context/context/create-headless-context.ts +0 -48
  546. package/src/context/context/device-pixels.ts +0 -158
  547. package/src/context/context/webgl-checks.ts +0 -49
  548. package/src/context/polyfill/get-parameter-polyfill.ts +0 -118
  549. package/src/context/polyfill/polyfill-context.ts +0 -97
  550. package/src/context/polyfill/polyfill-table.ts +0 -162
  551. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -360
  552. package/src/init.ts +0 -4
  553. package/src/types/webgl.ts +0 -284
@@ -1,954 +1,519 @@
1
- import { decodeTextureFormat } from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import { isWebGL2 } from '../../context/context/webgl-checks';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { decodeTextureFormat } from '@luma.gl/core';
5
+ import { GL } from '@luma.gl/constants';
6
+ import { getWebGLExtension } from "../../context/helpers/webgl-extensions.js";
7
+ import { getGLFromVertexType } from "./vertex-formats.js";
8
+ /* eslint-disable camelcase */
9
+ // TEXTURE FEATURES
10
+ // Define local device feature strings to optimize minification
4
11
  const texture_compression_bc = 'texture-compression-bc';
5
12
  const texture_compression_astc = 'texture-compression-astc';
6
13
  const texture_compression_etc2 = 'texture-compression-etc2';
7
14
  const texture_compression_etc1_webgl = 'texture-compression-etc1-webgl';
8
15
  const texture_compression_pvrtc_webgl = 'texture-compression-pvrtc-webgl';
9
16
  const texture_compression_atc_webgl = 'texture-compression-atc-webgl';
10
- const X_S3TC = 'WEBGL_compressed_texture_s3tc';
11
- const X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb';
12
- const X_RGTC = 'EXT_texture_compression_rgtc';
13
- const X_BPTC = 'EXT_texture_compression_bptc';
14
- const X_ETC2 = 'WEBGL_compressed_texture_etc';
17
+ const float32_renderable = 'float32-renderable-webgl';
18
+ const float16_renderable = 'float16-renderable-webgl';
19
+ const rgb9e5ufloat_renderable = 'rgb9e5ufloat_renderable-webgl';
20
+ const snorm8_renderable = 'snorm8-renderable-webgl';
21
+ const norm16_renderable = 'norm16-renderable-webgl';
22
+ const snorm16_renderable = 'snorm16-renderable-webgl';
23
+ const float32_filterable = 'float32-filterable';
24
+ const float16_filterable = 'float16-filterable-webgl';
25
+ // Define local webgl extension strings to optimize minification
26
+ const X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3
27
+ const X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3
28
+ const X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5
29
+ const X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7
30
+ const X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'
15
31
  const X_ASTC = 'WEBGL_compressed_texture_astc';
16
32
  const X_ETC1 = 'WEBGL_compressed_texture_etc1';
17
33
  const X_PVRTC = 'WEBGL_compressed_texture_pvrtc';
18
34
  const X_ATC = 'WEBGL_compressed_texture_atc';
19
- const EXT_SRGB = 'EXT_sRGB';
20
- const EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';
21
- const EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';
22
- const EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';
23
- const EXT_HALF_FLOAT_WEBGL1 = 'WEBGL_color_buffer_half_float';
24
-
25
- const checkExtension = (gl, extension) => gl.getExtension(extension);
26
-
27
- const checkExtensions = (gl, extensions) => extensions.every(extension => gl.getExtension(extension));
28
-
29
- const TEXTURE_FEATURE_CHECKS = {
30
- 'texture-blend-float-webgl1': gl => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),
31
- 'texture-formats-srgb-webgl1': gl => isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB),
32
- 'texture-formats-depth-webgl1': gl => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),
33
- 'texture-formats-float32-webgl1': gl => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),
34
- 'texture-formats-float16-webgl1': gl => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),
35
- 'texture-formats-norm16-webgl': gl => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,
36
- 'texture-filter-linear-float32-webgl': gl => checkExtension(gl, 'OES_texture_float_linear'),
37
- 'texture-filter-linear-float16-webgl': gl => checkExtension(gl, 'OES_texture_half_float_linear'),
38
- 'texture-filter-anisotropic-webgl': gl => checkExtension(gl, 'EXT_texture_filter_anisotropic'),
39
- 'texture-renderable-float32-webgl': gl => checkExtension(gl, 'EXT_color_buffer_float'),
40
- 'texture-renderable-float16-webgl': gl => checkExtension(gl, 'EXT_color_buffer_half_float'),
41
- 'texture-compression-bc': gl => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),
42
- 'texture-compression-bc5-webgl': gl => checkExtensions(gl, [X_RGTC]),
43
- 'texture-compression-etc2': gl => checkExtensions(gl, [X_ETC2]),
44
- 'texture-compression-astc': gl => checkExtensions(gl, [X_ASTC]),
45
- 'texture-compression-etc1-webgl': gl => checkExtensions(gl, [X_ETC1]),
46
- 'texture-compression-pvrtc-webgl': gl => checkExtensions(gl, [X_PVRTC]),
47
- 'texture-compression-atc-webgl': gl => checkExtensions(gl, [X_ATC])
35
+ // Define local webgl extension strings to optimize minification
36
+ const EXT_texture_norm16 = 'EXT_texture_norm16';
37
+ const EXT_render_snorm = 'EXT_render_snorm';
38
+ const EXT_color_buffer_float = 'EXT_color_buffer_float';
39
+ // prettier-ignore
40
+ export const TEXTURE_FEATURES = {
41
+ 'float32-renderable-webgl': ['EXT_color_buffer_float'],
42
+ 'float16-renderable-webgl': ['EXT_color_buffer_half_float'],
43
+ 'rgb9e5ufloat_renderable-webgl': ['WEBGL_render_shared_exponent'],
44
+ 'snorm8-renderable-webgl': [EXT_render_snorm],
45
+ 'norm16-renderable-webgl': [EXT_texture_norm16],
46
+ 'snorm16-renderable-webgl': [EXT_texture_norm16, EXT_render_snorm],
47
+ 'float32-filterable': ['OES_texture_float_linear'],
48
+ 'float16-filterable-webgl': ['OES_texture_half_float_linear'],
49
+ 'texture-filterable-anisotropic-webgl': ['EXT_texture_filter_anisotropic'],
50
+ 'texture-blend-float-webgl': ['EXT_float_blend'],
51
+ 'texture-compression-bc': [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC],
52
+ // 'texture-compression-bc3-srgb-webgl': [X_S3TC_SRGB],
53
+ // 'texture-compression-bc3-webgl': [X_S3TC],
54
+ 'texture-compression-bc5-webgl': [X_RGTC],
55
+ 'texture-compression-bc7-webgl': [X_BPTC],
56
+ 'texture-compression-etc2': [X_ETC2],
57
+ 'texture-compression-astc': [X_ASTC],
58
+ 'texture-compression-etc1-webgl': [X_ETC1],
59
+ 'texture-compression-pvrtc-webgl': [X_PVRTC],
60
+ 'texture-compression-atc-webgl': [X_ATC]
48
61
  };
49
- export function checkTextureFeature(gl, feature) {
50
- var _TEXTURE_FEATURE_CHEC;
51
-
52
- return ((_TEXTURE_FEATURE_CHEC = TEXTURE_FEATURE_CHECKS[feature]) === null || _TEXTURE_FEATURE_CHEC === void 0 ? void 0 : _TEXTURE_FEATURE_CHEC.call(TEXTURE_FEATURE_CHECKS, gl)) || false;
62
+ /** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */
63
+ // export function getTextureFeatures(
64
+ // gl: WebGL2RenderingContext,
65
+ // extensions: GLExtensions
66
+ // ): DeviceFeature[] {
67
+ // const textureFeatures = Object.keys(TEXTURE_FEATURES) as DeviceFeature[];
68
+ // return textureFeatures.filter(feature => checkTextureFeature(gl, feature, extensions));
69
+ // }
70
+ export function isTextureFeature(feature) {
71
+ return feature in TEXTURE_FEATURES;
53
72
  }
54
-
55
- const checkTextureFeatures = (gl, features) => features.every(feature => checkTextureFeature(gl, feature));
56
-
57
- export function getTextureFeatures(gl) {
58
- const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS);
59
- return textureFeatures.filter(feature => checkTextureFeature(gl, feature));
73
+ /** Checks a texture feature (for Device.features). Mainly compressed texture support */
74
+ export function checkTextureFeature(gl, feature, extensions) {
75
+ const textureExtensions = TEXTURE_FEATURES[feature] || [];
76
+ return textureExtensions.every(extension => getWebGLExtension(gl, extension, extensions));
60
77
  }
78
+ // TABLES
79
+ /**
80
+ * Texture format data -
81
+ * Exported but can change without notice
82
+ */
83
+ // prettier-ignore
61
84
  export const TEXTURE_FORMATS = {
62
- 'rgb8unorm-unsized': {
63
- gl: GL.RGB,
64
- gl1: GL.RGB,
65
- b: 4,
66
- c: 2,
67
- bpp: 4,
68
- dataFormat: GL.RGB,
69
- types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]
70
- },
71
- 'rgba8unorm-unsized': {
72
- gl: GL.RGBA,
73
- gl1: GL.RGBA,
74
- b: 4,
75
- c: 2,
76
- bpp: 4,
77
- dataFormat: GL.RGBA,
78
- types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]
79
- },
80
- 'r8unorm': {
81
- gl: GL.R8,
82
- b: 1,
83
- c: 1
84
- },
85
- 'r8snorm': {
86
- gl: GL.R8_SNORM,
87
- b: 1,
88
- c: 1
89
- },
90
- 'r8uint': {
91
- gl: GL.R8UI,
92
- b: 1,
93
- c: 1
94
- },
95
- 'r8sint': {
96
- gl: GL.R8I,
97
- b: 1,
98
- c: 1
99
- },
100
- 'rg8unorm': {
101
- gl: GL.RG8,
102
- b: 2,
103
- c: 2
104
- },
105
- 'rg8snorm': {
106
- gl: GL.RG8_SNORM,
107
- b: 2,
108
- c: 2
109
- },
110
- 'rg8uint': {
111
- gl: GL.RG8UI,
112
- b: 2,
113
- c: 2
114
- },
115
- 'rg8sint': {
116
- gl: GL.RG8I,
117
- b: 2,
118
- c: 2
119
- },
120
- 'r16uint': {
121
- gl: GL.R16UI,
122
- b: 2,
123
- c: 1
124
- },
125
- 'r16sint': {
126
- gl: GL.R16I,
127
- b: 2,
128
- c: 1
129
- },
130
- 'r16float': {
131
- gl: GL.R16F,
132
- b: 2,
133
- c: 1,
134
- render: 'texture-renderable-float16-webgl',
135
- filter: 'texture-filter-linear-float16-webgl'
136
- },
137
- 'r16unorm-webgl': {
138
- gl: GL.R16_EXT,
139
- b: 2,
140
- c: 1,
141
- f: 'texture-formats-norm16-webgl'
142
- },
143
- 'r16snorm-webgl': {
144
- gl: GL.R16_SNORM_EXT,
145
- b: 2,
146
- c: 1,
147
- f: 'texture-formats-norm16-webgl'
148
- },
149
- 'rgba4unorm-webgl': {
150
- gl: GL.RGBA4,
151
- b: 2,
152
- c: 4,
153
- wgpu: false
154
- },
155
- 'rgb565unorm-webgl': {
156
- gl: GL.RGB565,
157
- b: 2,
158
- c: 4,
159
- wgpu: false
160
- },
161
- 'rgb5a1unorm-webgl': {
162
- gl: GL.RGB5_A1,
163
- b: 2,
164
- c: 4,
165
- wgpu: false
166
- },
167
- 'rbg8unorm-webgl': {
168
- gl: GL.RGB8,
169
- b: 3,
170
- c: 3,
171
- wgpu: false
172
- },
173
- 'rbg8snorm-webgl': {
174
- gl: GL.RGB8_SNORM,
175
- b: 3,
176
- c: 3,
177
- wgpu: false
178
- },
179
- 'rgba8unorm': {
180
- gl: GL.RGBA8,
181
- gl1: GL.RGBA,
182
- b: 4,
183
- c: 2,
184
- bpp: 4
185
- },
186
- 'rgba8unorm-srgb': {
187
- gl: GL.SRGB8_ALPHA8,
188
- gl1: GL.SRGB_ALPHA_EXT,
189
- b: 4,
190
- c: 4,
191
- gl1ext: EXT_SRGB,
192
- bpp: 4
193
- },
194
- 'rgba8snorm': {
195
- gl: GL.RGBA8_SNORM,
196
- b: 4,
197
- c: 4
198
- },
199
- 'rgba8uint': {
200
- gl: GL.RGBA8UI,
201
- b: 4,
202
- c: 4,
203
- bpp: 4
204
- },
205
- 'rgba8sint': {
206
- gl: GL.RGBA8I,
207
- b: 4,
208
- c: 4,
209
- bpp: 4
210
- },
211
- 'bgra8unorm': {
212
- b: 4,
213
- c: 4
214
- },
215
- 'bgra8unorm-srgb': {
216
- b: 4,
217
- c: 4
218
- },
219
- 'rg16uint': {
220
- gl: GL.RG16UI,
221
- b: 4,
222
- c: 1,
223
- bpp: 4
224
- },
225
- 'rg16sint': {
226
- gl: GL.RG16I,
227
- b: 4,
228
- c: 2,
229
- bpp: 4
230
- },
231
- 'rg16float': {
232
- gl: GL.RG16F,
233
- bpp: 4,
234
- b: 4,
235
- c: 2,
236
- render: 'texture-renderable-float16-webgl',
237
- filter: 'texture-filter-linear-float16-webgl'
238
- },
239
- 'rg16unorm-webgl': {
240
- gl: GL.RG16_EXT,
241
- b: 2,
242
- c: 2,
243
- f: 'texture-formats-norm16-webgl'
244
- },
245
- 'rg16snorm-webgl': {
246
- gl: GL.RG16_SNORM_EXT,
247
- b: 2,
248
- c: 2,
249
- f: 'texture-formats-norm16-webgl'
250
- },
251
- 'r32uint': {
252
- gl: GL.R32UI,
253
- b: 4,
254
- c: 1,
255
- bpp: 4
256
- },
257
- 'r32sint': {
258
- gl: GL.R32I,
259
- b: 4,
260
- c: 1,
261
- bpp: 4
262
- },
263
- 'r32float': {
264
- gl: GL.R32F,
265
- bpp: 4,
266
- b: 4,
267
- c: 1,
268
- render: 'texture-renderable-float32-webgl',
269
- filter: 'texture-filter-linear-float32-webgl'
270
- },
271
- 'rgb9e5ufloat': {
272
- gl: GL.RGB9_E5,
273
- b: 4,
274
- c: 3,
275
- p: 1,
276
- render: 'texture-renderable-float16-webgl',
277
- filter: 'texture-filter-linear-float16-webgl'
278
- },
279
- 'rg11b10ufloat': {
280
- gl: GL.R11F_G11F_B10F,
281
- b: 4,
282
- c: 3,
283
- p: 1,
284
- render: 'texture-renderable-float32-webgl'
285
- },
286
- 'rgb10a2unorm': {
287
- gl: GL.RGB10_A2,
288
- b: 4,
289
- c: 4,
290
- p: 1
291
- },
292
- 'rgb10a2unorm-webgl': {
293
- b: 4,
294
- c: 4,
295
- gl: GL.RGB10_A2UI,
296
- p: 1,
297
- wgpu: false,
298
- bpp: 4
299
- },
300
- 'rgb16unorm-webgl': {
301
- gl: GL.RGB16_EXT,
302
- b: 2,
303
- c: 3,
304
- f: 'texture-formats-norm16-webgl'
305
- },
306
- 'rgb16snorm-webgl': {
307
- gl: GL.RGB16_SNORM_EXT,
308
- b: 2,
309
- c: 3,
310
- f: 'texture-formats-norm16-webgl'
311
- },
312
- 'rg32uint': {
313
- gl: GL.RG32UI,
314
- b: 8,
315
- c: 2
316
- },
317
- 'rg32sint': {
318
- gl: GL.RG32I,
319
- b: 8,
320
- c: 2
321
- },
322
- 'rg32float': {
323
- gl: GL.RG32F,
324
- b: 8,
325
- c: 2,
326
- render: 'texture-renderable-float32-webgl',
327
- filter: 'texture-filter-linear-float32-webgl'
328
- },
329
- 'rgba16uint': {
330
- gl: GL.RGBA16UI,
331
- b: 8,
332
- c: 4
333
- },
334
- 'rgba16sint': {
335
- gl: GL.RGBA16I,
336
- b: 8,
337
- c: 4
338
- },
339
- 'rgba16float': {
340
- gl: GL.RGBA16F,
341
- gl1: GL.RGBA,
342
- b: 8,
343
- c: 4,
344
- render: 'texture-renderable-float16-webgl',
345
- filter: 'texture-filter-linear-float16-webgl'
346
- },
347
- 'rgba16unorm-webgl': {
348
- gl: GL.RGBA16_EXT,
349
- b: 2,
350
- c: 4,
351
- f: 'texture-formats-norm16-webgl'
352
- },
353
- 'rgba16snorm-webgl': {
354
- gl: GL.RGBA16_SNORM_EXT,
355
- b: 2,
356
- c: 4,
357
- f: 'texture-formats-norm16-webgl'
358
- },
359
- 'rgb32float-webgl': {
360
- gl: GL.RGB32F,
361
- gl1: GL.RGB,
362
- render: 'texture-renderable-float32-webgl',
363
- filter: 'texture-filter-linear-float32-webgl',
364
- gl2ext: EXT_FLOAT_RENDER_WEBGL2,
365
- gl1ext: EXT_FLOAT_WEBGL1,
366
- dataFormat: GL.RGB,
367
- types: [GL.FLOAT]
368
- },
369
- 'rgba32uint': {
370
- gl: GL.RGBA32UI,
371
- b: 16,
372
- c: 4
373
- },
374
- 'rgba32sint': {
375
- gl: GL.RGBA32I,
376
- b: 16,
377
- c: 4
378
- },
379
- 'rgba32float': {
380
- gl: GL.RGBA32F,
381
- gl1: GL.RGBA,
382
- b: 16,
383
- c: 4,
384
- render: 'texture-renderable-float32-webgl',
385
- filter: 'texture-filter-linear-float32-webgl'
386
- },
387
- 'stencil8': {
388
- gl: GL.STENCIL_INDEX8,
389
- b: 1,
390
- c: 1,
391
- attachment: GL.STENCIL_ATTACHMENT
392
- },
393
- 'depth16unorm': {
394
- gl: GL.DEPTH_COMPONENT16,
395
- gl1: GL.DEPTH_COMPONENT16,
396
- b: 2,
397
- c: 1,
398
- attachment: GL.DEPTH_ATTACHMENT
399
- },
400
- 'depth24plus': {
401
- gl: GL.DEPTH_COMPONENT24,
402
- b: 3,
403
- c: 1,
404
- attachment: GL.DEPTH_ATTACHMENT
405
- },
406
- 'depth32float': {
407
- gl: GL.DEPTH_COMPONENT32F,
408
- b: 4,
409
- c: 1,
410
- attachment: GL.DEPTH_ATTACHMENT
411
- },
412
- 'depth24plus-stencil8': {
413
- b: 4,
414
- gl: GL.UNSIGNED_INT_24_8,
415
- gl1: GL.DEPTH_STENCIL,
416
- c: 2,
417
- p: 1,
418
- attachment: GL.DEPTH_STENCIL_ATTACHMENT
419
- },
420
- 'depth24unorm-stencil8': {
421
- gl: GL.DEPTH24_STENCIL8,
422
- b: 4,
423
- c: 2,
424
- p: 1,
425
- attachment: GL.DEPTH_STENCIL_ATTACHMENT
426
- },
427
- "depth32float-stencil8": {
428
- gl: GL.DEPTH32F_STENCIL8,
429
- b: 5,
430
- c: 2,
431
- p: 1,
432
- attachment: GL.DEPTH_STENCIL_ATTACHMENT
433
- },
434
- 'bc1-rgb-unorm-webgl': {
435
- gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,
436
- x: X_S3TC,
437
- f: texture_compression_bc
438
- },
439
- 'bc1-rgb-unorm-srgb-webgl': {
440
- gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT,
441
- x: X_S3TC_SRGB,
442
- f: texture_compression_bc
443
- },
444
- 'bc1-rgba-unorm': {
445
- gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT,
446
- x: X_S3TC,
447
- f: texture_compression_bc
448
- },
449
- 'bc1-rgba-unorm-srgb': {
450
- gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT,
451
- x: X_S3TC_SRGB,
452
- f: texture_compression_bc
453
- },
454
- 'bc2-rgba-unorm': {
455
- gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,
456
- x: X_S3TC,
457
- f: texture_compression_bc
458
- },
459
- 'bc2-rgba-unorm-srgb': {
460
- gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
461
- x: X_S3TC_SRGB,
462
- f: texture_compression_bc
463
- },
464
- 'bc3-rgba-unorm': {
465
- gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,
466
- x: X_S3TC,
467
- f: texture_compression_bc
468
- },
469
- 'bc3-rgba-unorm-srgb': {
470
- gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
471
- x: X_S3TC_SRGB,
472
- f: texture_compression_bc
473
- },
474
- 'bc4-r-unorm': {
475
- gl: GL.COMPRESSED_RED_RGTC1_EXT,
476
- x: X_RGTC,
477
- f: texture_compression_bc
478
- },
479
- 'bc4-r-snorm': {
480
- gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT,
481
- x: X_RGTC,
482
- f: texture_compression_bc
483
- },
484
- 'bc5-rg-unorm': {
485
- gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT,
486
- x: X_RGTC,
487
- f: texture_compression_bc
488
- },
489
- 'bc5-rg-snorm': {
490
- gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,
491
- x: X_RGTC,
492
- f: texture_compression_bc
493
- },
494
- 'bc6h-rgb-ufloat': {
495
- gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,
496
- x: X_BPTC,
497
- f: texture_compression_bc
498
- },
499
- 'bc6h-rgb-float': {
500
- gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,
501
- x: X_BPTC,
502
- f: texture_compression_bc
503
- },
504
- 'bc7-rgba-unorm': {
505
- gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT,
506
- x: X_BPTC,
507
- f: texture_compression_bc
508
- },
509
- 'bc7-rgba-unorm-srgb': {
510
- gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT,
511
- x: X_BPTC,
512
- f: texture_compression_bc
513
- },
514
- 'etc2-rgb8unorm': {
515
- gl: GL.COMPRESSED_RGB8_ETC2,
516
- f: texture_compression_etc2
517
- },
518
- 'etc2-rgb8unorm-srgb': {
519
- gl: GL.COMPRESSED_SRGB8_ETC2,
520
- f: texture_compression_etc2
521
- },
522
- 'etc2-rgb8a1unorm': {
523
- gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
524
- f: texture_compression_etc2
525
- },
526
- 'etc2-rgb8a1unorm-srgb': {
527
- gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
528
- f: texture_compression_etc2
529
- },
530
- 'etc2-rgba8unorm': {
531
- gl: GL.COMPRESSED_RGBA8_ETC2_EAC,
532
- f: texture_compression_etc2
533
- },
534
- 'etc2-rgba8unorm-srgb': {
535
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
536
- f: texture_compression_etc2
537
- },
538
- 'eac-r11unorm': {
539
- gl: GL.COMPRESSED_R11_EAC,
540
- f: texture_compression_etc2
541
- },
542
- 'eac-r11snorm': {
543
- gl: GL.COMPRESSED_SIGNED_R11_EAC,
544
- f: texture_compression_etc2
545
- },
546
- 'eac-rg11unorm': {
547
- gl: GL.COMPRESSED_RG11_EAC,
548
- f: texture_compression_etc2
549
- },
550
- 'eac-rg11snorm': {
551
- gl: GL.COMPRESSED_SIGNED_RG11_EAC,
552
- f: texture_compression_etc2
553
- },
554
- 'astc-4x4-unorm': {
555
- gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR,
556
- f: texture_compression_astc
557
- },
558
- 'astc-4x4-unorm-srgb': {
559
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
560
- f: texture_compression_astc
561
- },
562
- 'astc-5x4-unorm': {
563
- gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR,
564
- f: texture_compression_astc
565
- },
566
- 'astc-5x4-unorm-srgb': {
567
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
568
- f: texture_compression_astc
569
- },
570
- 'astc-5x5-unorm': {
571
- gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR,
572
- f: texture_compression_astc
573
- },
574
- 'astc-5x5-unorm-srgb': {
575
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
576
- f: texture_compression_astc
577
- },
578
- 'astc-6x5-unorm': {
579
- gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR,
580
- f: texture_compression_astc
581
- },
582
- 'astc-6x5-unorm-srgb': {
583
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
584
- f: texture_compression_astc
585
- },
586
- 'astc-6x6-unorm': {
587
- gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR,
588
- f: texture_compression_astc
589
- },
590
- 'astc-6x6-unorm-srgb': {
591
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
592
- f: texture_compression_astc
593
- },
594
- 'astc-8x5-unorm': {
595
- gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR,
596
- f: texture_compression_astc
597
- },
598
- 'astc-8x5-unorm-srgb': {
599
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
600
- f: texture_compression_astc
601
- },
602
- 'astc-8x6-unorm': {
603
- gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR,
604
- f: texture_compression_astc
605
- },
606
- 'astc-8x6-unorm-srgb': {
607
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
608
- f: texture_compression_astc
609
- },
610
- 'astc-8x8-unorm': {
611
- gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR,
612
- f: texture_compression_astc
613
- },
614
- 'astc-8x8-unorm-srgb': {
615
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
616
- f: texture_compression_astc
617
- },
618
- 'astc-10x5-unorm': {
619
- gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR,
620
- f: texture_compression_astc
621
- },
622
- 'astc-10x5-unorm-srgb': {
623
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
624
- f: texture_compression_astc
625
- },
626
- 'astc-10x6-unorm': {
627
- gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR,
628
- f: texture_compression_astc
629
- },
630
- 'astc-10x6-unorm-srgb': {
631
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
632
- f: texture_compression_astc
633
- },
634
- 'astc-10x8-unorm': {
635
- gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR,
636
- f: texture_compression_astc
637
- },
638
- 'astc-10x8-unorm-srgb': {
639
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
640
- f: texture_compression_astc
641
- },
642
- 'astc-10x10-unorm': {
643
- gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR,
644
- f: texture_compression_astc
645
- },
646
- 'astc-10x10-unorm-srgb': {
647
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
648
- f: texture_compression_astc
649
- },
650
- 'astc-12x10-unorm': {
651
- gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR,
652
- f: texture_compression_astc
653
- },
654
- 'astc-12x10-unorm-srgb': {
655
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
656
- f: texture_compression_astc
657
- },
658
- 'astc-12x12-unorm': {
659
- gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR,
660
- f: texture_compression_astc
661
- },
662
- 'astc-12x12-unorm-srgb': {
663
- gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
664
- f: texture_compression_astc
665
- },
666
- 'pvrtc-rgb4unorm-webgl': {
667
- gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
668
- f: texture_compression_pvrtc_webgl
669
- },
670
- 'pvrtc-rgba4unorm-webgl': {
671
- gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
672
- f: texture_compression_pvrtc_webgl
673
- },
674
- 'pvrtc-rbg2unorm-webgl': {
675
- gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
676
- f: texture_compression_pvrtc_webgl
677
- },
678
- 'pvrtc-rgba2unorm-webgl': {
679
- gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
680
- f: texture_compression_pvrtc_webgl
681
- },
682
- 'etc1-rbg-unorm-webgl': {
683
- gl: GL.COMPRESSED_RGB_ETC1_WEBGL,
684
- f: texture_compression_etc1_webgl
685
- },
686
- 'atc-rgb-unorm-webgl': {
687
- gl: GL.COMPRESSED_RGB_ATC_WEBGL,
688
- f: texture_compression_atc_webgl
689
- },
690
- 'atc-rgba-unorm-webgl': {
691
- gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
692
- f: texture_compression_atc_webgl
693
- },
694
- 'atc-rgbai-unorm-webgl': {
695
- gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,
696
- f: texture_compression_atc_webgl
697
- }
85
+ // Unsized formats that leave the precision up to the driver. TODO - Fix bpp constants
86
+ 'rgb8unorm-unsized': { gl: 6407, b: 4, c: 2, bpp: 4,
87
+ dataFormat: 6407, types: [5121, 33635] },
88
+ 'rgba8unorm-unsized': { gl: 6408, b: 4, c: 2, bpp: 4,
89
+ dataFormat: 6408, types: [5121, 32819, 32820] },
90
+ // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},
91
+ // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},
92
+ // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},
93
+ // 8-bit formats
94
+ 'r8unorm': { gl: 33321, b: 1, c: 1, rb: true },
95
+ 'r8snorm': { gl: 36756, b: 1, c: 1, render: snorm8_renderable },
96
+ 'r8uint': { gl: 33330, b: 1, c: 1, rb: true },
97
+ 'r8sint': { gl: 33329, b: 1, c: 1, rb: true },
98
+ // 16-bit formats
99
+ 'rg8unorm': { gl: 33323, b: 2, c: 2, rb: true },
100
+ 'rg8snorm': { gl: 36757, b: 2, c: 2, render: snorm8_renderable },
101
+ 'rg8uint': { gl: 33336, b: 2, c: 2, rb: true },
102
+ 'rg8sint': { gl: 33335, b: 2, c: 2, rb: true },
103
+ 'r16uint': { gl: 33332, b: 2, c: 1, rb: true },
104
+ 'r16sint': { gl: 33331, b: 2, c: 1, rb: true },
105
+ 'r16float': { gl: 33325, b: 2, c: 1, render: float16_renderable, filter: 'float16-filterable-webgl', rb: true },
106
+ 'r16unorm-webgl': { gl: 33322, b: 2, c: 1, f: norm16_renderable, rb: true },
107
+ 'r16snorm-webgl': { gl: 36760, b: 2, c: 1, f: snorm16_renderable },
108
+ // Packed 16-bit formats
109
+ 'rgba4unorm-webgl': { gl: 32854, b: 2, c: 4, wgpu: false, rb: true },
110
+ 'rgb565unorm-webgl': { gl: 36194, b: 2, c: 4, wgpu: false, rb: true },
111
+ 'rgb5a1unorm-webgl': { gl: 32855, b: 2, c: 4, wgpu: false, rb: true },
112
+ // 24-bit formats
113
+ 'rgb8unorm-webgl': { gl: 32849, b: 3, c: 3, wgpu: false },
114
+ 'rgb8snorm-webgl': { gl: 36758, b: 3, c: 3, wgpu: false },
115
+ // 32-bit formats
116
+ 'rgba8unorm': { gl: 32856, b: 4, c: 2, bpp: 4 },
117
+ 'rgba8unorm-srgb': { gl: 35907, b: 4, c: 4, bpp: 4 },
118
+ 'rgba8snorm': { gl: 36759, b: 4, c: 4, render: snorm8_renderable },
119
+ 'rgba8uint': { gl: 36220, b: 4, c: 4, bpp: 4 },
120
+ 'rgba8sint': { gl: 36238, b: 4, c: 4, bpp: 4 },
121
+ // reverse colors, webgpu only
122
+ 'bgra8unorm': { b: 4, c: 4 },
123
+ 'bgra8unorm-srgb': { b: 4, c: 4 },
124
+ 'rg16uint': { gl: 33338, b: 4, c: 1, bpp: 4 },
125
+ 'rg16sint': { gl: 33337, b: 4, c: 2, bpp: 4 },
126
+ // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension
127
+ 'rg16float': { gl: 33327, bpp: 4, b: 4, c: 2, render: float16_renderable, filter: float16_filterable, rb: true },
128
+ 'rg16unorm-webgl': { gl: 33324, b: 2, c: 2, render: norm16_renderable },
129
+ 'rg16snorm-webgl': { gl: 36761, b: 2, c: 2, render: snorm16_renderable },
130
+ 'r32uint': { gl: 33334, b: 4, c: 1, bpp: 4, rb: true },
131
+ 'r32sint': { gl: 33333, b: 4, c: 1, bpp: 4, rb: true },
132
+ 'r32float': { gl: 33326, bpp: 4, b: 4, c: 1, render: float32_renderable, filter: float32_filterable },
133
+ // Packed 32-bit formats
134
+ 'rgb9e5ufloat': { gl: 35901, b: 4, c: 3, p: 1, render: rgb9e5ufloat_renderable }, // , filter: true},
135
+ 'rg11b10ufloat': { gl: 35898, b: 4, c: 3, p: 1, render: float32_renderable, rb: true },
136
+ 'rgb10a2unorm': { gl: 32857, b: 4, c: 4, p: 1, rb: true },
137
+ 'rgb10a2uint-webgl': { b: 4, c: 4, gl: 36975, p: 1, wgpu: false, bpp: 4, rb: true },
138
+ // 48-bit formats
139
+ 'rgb16unorm-webgl': { gl: 32852, b: 2, c: 3, f: norm16_renderable }, // rgb not renderable
140
+ 'rgb16snorm-webgl': { gl: 36762, b: 2, c: 3, f: norm16_renderable }, // rgb not renderable
141
+ // 64-bit formats
142
+ 'rg32uint': { gl: 33340, b: 8, c: 2, rb: true },
143
+ 'rg32sint': { gl: 33339, b: 8, c: 2, rb: true },
144
+ 'rg32float': { gl: 33328, b: 8, c: 2, render: float32_renderable, filter: float32_filterable, rb: true },
145
+ 'rgba16uint': { gl: 36214, b: 8, c: 4, rb: true },
146
+ 'rgba16sint': { gl: 36232, b: 8, c: 4, rb: true },
147
+ 'rgba16float': { gl: 34842, b: 8, c: 4, render: float16_renderable, filter: float16_filterable },
148
+ 'rgba16unorm-webgl': { gl: 32859, b: 2, c: 4, render: norm16_renderable, rb: true },
149
+ 'rgba16snorm-webgl': { gl: 36763, b: 2, c: 4, render: snorm16_renderable },
150
+ // 96-bit formats (deprecated!)
151
+ 'rgb32float-webgl': { gl: 34837, render: float32_renderable, filter: float32_filterable,
152
+ gl2ext: EXT_color_buffer_float, dataFormat: 6407, types: [5126] },
153
+ // 128-bit formats
154
+ 'rgba32uint': { gl: 36208, b: 16, c: 4, rb: true },
155
+ 'rgba32sint': { gl: 36226, b: 16, c: 4, rb: true },
156
+ 'rgba32float': { gl: 34836, b: 16, c: 4, render: float32_renderable, filter: float32_filterable, rb: true },
157
+ // Depth and stencil formats
158
+ 'stencil8': { gl: 36168, b: 1, c: 1, attachment: 36128, rb: true }, // 8 stencil bits
159
+ 'depth16unorm': { gl: 33189, b: 2, c: 1, attachment: 36096,
160
+ dataFormat: 6402, types: [5123], rb: true }, // 16 depth bits
161
+ 'depth24plus': { gl: 33190, b: 3, c: 1, attachment: 36096,
162
+ dataFormat: 6402, types: [5125] },
163
+ 'depth32float': { gl: 36012, b: 4, c: 1, attachment: 36096,
164
+ dataFormat: 6402, types: [5126], rb: true },
165
+ // The depth component of the "depth24plus" and "depth24plus-stencil8" formats may be implemented as either a 24-bit depth value or a "depth32float" value.
166
+ 'depth24plus-stencil8': { gl: 35056, b: 4, c: 2, p: 1, attachment: 33306, rb: true, depthTexture: true,
167
+ dataFormat: 34041, types: [34042] },
168
+ // "depth24unorm-stencil8" feature
169
+ 'depth24unorm-stencil8': { gl: 35056, b: 4, c: 2, p: 1, attachment: 33306,
170
+ dataFormat: 34041, types: [34042], rb: true },
171
+ // "depth32float-stencil8" feature - TODO below is render buffer only?
172
+ 'depth32float-stencil8': { gl: 36013, b: 5, c: 2, p: 1, attachment: 33306,
173
+ dataFormat: 34041, types: [36269], rb: true },
174
+ // BC compressed formats: check device.features.has("texture-compression-bc");
175
+ 'bc1-rgb-unorm-webgl': { gl: 33776, x: X_S3TC, f: texture_compression_bc },
176
+ 'bc1-rgb-unorm-srgb-webgl': { gl: 35916, x: X_S3TC_SRGB, f: texture_compression_bc },
177
+ 'bc1-rgba-unorm': { gl: 33777, x: X_S3TC, f: texture_compression_bc },
178
+ 'bc1-rgba-unorm-srgb': { gl: 35916, x: X_S3TC_SRGB, f: texture_compression_bc },
179
+ 'bc2-rgba-unorm': { gl: 33778, x: X_S3TC, f: texture_compression_bc },
180
+ 'bc2-rgba-unorm-srgb': { gl: 35918, x: X_S3TC_SRGB, f: texture_compression_bc },
181
+ 'bc3-rgba-unorm': { gl: 33779, x: X_S3TC, f: texture_compression_bc },
182
+ 'bc3-rgba-unorm-srgb': { gl: 35919, x: X_S3TC_SRGB, f: texture_compression_bc },
183
+ 'bc4-r-unorm': { gl: 36283, x: X_RGTC, f: texture_compression_bc },
184
+ 'bc4-r-snorm': { gl: 36284, x: X_RGTC, f: texture_compression_bc },
185
+ 'bc5-rg-unorm': { gl: 36285, x: X_RGTC, f: texture_compression_bc },
186
+ 'bc5-rg-snorm': { gl: 36286, x: X_RGTC, f: texture_compression_bc },
187
+ 'bc6h-rgb-ufloat': { gl: 36495, x: X_BPTC, f: texture_compression_bc },
188
+ 'bc6h-rgb-float': { gl: 36494, x: X_BPTC, f: texture_compression_bc },
189
+ 'bc7-rgba-unorm': { gl: 36492, x: X_BPTC, f: texture_compression_bc },
190
+ 'bc7-rgba-unorm-srgb': { gl: 36493, x: X_BPTC, f: texture_compression_bc },
191
+ // WEBGL_compressed_texture_etc: device.features.has("texture-compression-etc2")
192
+ // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression
193
+ 'etc2-rgb8unorm': { gl: 37492, f: texture_compression_etc2 },
194
+ 'etc2-rgb8unorm-srgb': { gl: 37494, f: texture_compression_etc2 },
195
+ 'etc2-rgb8a1unorm': { gl: 37496, f: texture_compression_etc2 },
196
+ 'etc2-rgb8a1unorm-srgb': { gl: 37497, f: texture_compression_etc2 },
197
+ 'etc2-rgba8unorm': { gl: 37493, f: texture_compression_etc2 },
198
+ 'etc2-rgba8unorm-srgb': { gl: 37495, f: texture_compression_etc2 },
199
+ 'eac-r11unorm': { gl: 37488, f: texture_compression_etc2 },
200
+ 'eac-r11snorm': { gl: 37489, f: texture_compression_etc2 },
201
+ 'eac-rg11unorm': { gl: 37490, f: texture_compression_etc2 },
202
+ 'eac-rg11snorm': { gl: 37491, f: texture_compression_etc2 },
203
+ // X_ASTC compressed formats: device.features.has("texture-compression-astc")
204
+ 'astc-4x4-unorm': { gl: 37808, f: texture_compression_astc },
205
+ 'astc-4x4-unorm-srgb': { gl: 37840, f: texture_compression_astc },
206
+ 'astc-5x4-unorm': { gl: 37809, f: texture_compression_astc },
207
+ 'astc-5x4-unorm-srgb': { gl: 37841, f: texture_compression_astc },
208
+ 'astc-5x5-unorm': { gl: 37810, f: texture_compression_astc },
209
+ 'astc-5x5-unorm-srgb': { gl: 37842, f: texture_compression_astc },
210
+ 'astc-6x5-unorm': { gl: 37811, f: texture_compression_astc },
211
+ 'astc-6x5-unorm-srgb': { gl: 37843, f: texture_compression_astc },
212
+ 'astc-6x6-unorm': { gl: 37812, f: texture_compression_astc },
213
+ 'astc-6x6-unorm-srgb': { gl: 37844, f: texture_compression_astc },
214
+ 'astc-8x5-unorm': { gl: 37813, f: texture_compression_astc },
215
+ 'astc-8x5-unorm-srgb': { gl: 37845, f: texture_compression_astc },
216
+ 'astc-8x6-unorm': { gl: 37814, f: texture_compression_astc },
217
+ 'astc-8x6-unorm-srgb': { gl: 37846, f: texture_compression_astc },
218
+ 'astc-8x8-unorm': { gl: 37815, f: texture_compression_astc },
219
+ 'astc-8x8-unorm-srgb': { gl: 37847, f: texture_compression_astc },
220
+ 'astc-10x5-unorm': { gl: 37819, f: texture_compression_astc },
221
+ 'astc-10x5-unorm-srgb': { gl: 37851, f: texture_compression_astc },
222
+ 'astc-10x6-unorm': { gl: 37817, f: texture_compression_astc },
223
+ 'astc-10x6-unorm-srgb': { gl: 37849, f: texture_compression_astc },
224
+ 'astc-10x8-unorm': { gl: 37818, f: texture_compression_astc },
225
+ 'astc-10x8-unorm-srgb': { gl: 37850, f: texture_compression_astc },
226
+ 'astc-10x10-unorm': { gl: 37819, f: texture_compression_astc },
227
+ 'astc-10x10-unorm-srgb': { gl: 37851, f: texture_compression_astc },
228
+ 'astc-12x10-unorm': { gl: 37820, f: texture_compression_astc },
229
+ 'astc-12x10-unorm-srgb': { gl: 37852, f: texture_compression_astc },
230
+ 'astc-12x12-unorm': { gl: 37821, f: texture_compression_astc },
231
+ 'astc-12x12-unorm-srgb': { gl: 37853, f: texture_compression_astc },
232
+ // WEBGL_compressed_texture_pvrtc
233
+ 'pvrtc-rgb4unorm-webgl': { gl: 35840, f: texture_compression_pvrtc_webgl },
234
+ 'pvrtc-rgba4unorm-webgl': { gl: 35842, f: texture_compression_pvrtc_webgl },
235
+ 'pvrtc-rbg2unorm-webgl': { gl: 35841, f: texture_compression_pvrtc_webgl },
236
+ 'pvrtc-rgba2unorm-webgl': { gl: 35843, f: texture_compression_pvrtc_webgl },
237
+ // WEBGL_compressed_texture_etc1
238
+ 'etc1-rbg-unorm-webgl': { gl: 36196, f: texture_compression_etc1_webgl },
239
+ // WEBGL_compressed_texture_atc
240
+ 'atc-rgb-unorm-webgl': { gl: 35986, f: texture_compression_atc_webgl },
241
+ 'atc-rgba-unorm-webgl': { gl: 35986, f: texture_compression_atc_webgl },
242
+ 'atc-rgbai-unorm-webgl': { gl: 34798, f: texture_compression_atc_webgl }
243
+ };
244
+ /** Legal combinations for internalFormat, format and type *
245
+ // [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8]},
246
+ // [GL.DEPTH_STENCIL]: ,
247
+ // Sized texture format
248
+ // R
249
+ [GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},
250
+ [GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
251
+ [GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
252
+ // // RG
253
+ [GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},
254
+ [GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
255
+ [GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
256
+ // // RGB
257
+ [GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},
258
+ [GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},
259
+ [GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
260
+ [GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
261
+ // // RGBA
262
+
263
+ [GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},
264
+ [GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},
265
+ [GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
266
+ [GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},
267
+ [GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},
268
+ [GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},
269
+ [GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},
270
+ [GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
271
+ [GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}
272
+ */
273
+ /* This table is now baked into the above table
274
+ type RenderbufferFormat = {
275
+ bpp: number;
276
+ gl2?: boolean;
277
+ ext?: string;
698
278
  };
699
279
 
700
- function getTextureFormat(format) {
701
- if (typeof format === 'string') {
702
- return format;
703
- }
704
-
705
- const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => entry.gl === format || entry.gl1 === format);
706
-
707
- if (!entry) {
708
- throw new Error("Unknown texture format ".concat(format));
709
- }
710
-
711
- return entry[0];
280
+ export const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat> = {
281
+ [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.
282
+ // TODO - Not clear which webgpu value to map this to.
283
+ // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},
284
+ [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},
285
+
286
+ [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.
287
+
288
+ [GL.DEPTH_STENCIL]: {bpp: 4},
289
+ [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},
290
+ [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},
291
+
292
+ // When using a WebGL 1 context, color renderbuffer formats are limited
293
+ [GL.RGBA4]: {gl2: true, bpp: 2},
294
+ [GL.RGB565]: {gl2: true, bpp: 2},
295
+ [GL.RGB5_A1]: {gl2: true, bpp: 2},
296
+
297
+ // When using a WebGL 2 context, the following values are available additionally:
298
+ [GL.R8]: {gl2: true, bpp: 1},
299
+ [GL.R8UI]: {gl2: true, bpp: 1},
300
+ [GL.R8I]: {gl2: true, bpp: 1},
301
+ [GL.R16UI]: {gl2: true, bpp: 2},
302
+ [GL.R16I]: {gl2: true, bpp: 2},
303
+ [GL.R32UI]: {gl2: true, bpp: 4},
304
+ [GL.R32I]: {gl2: true, bpp: 4},
305
+ [GL.RG8]: {gl2: true, bpp: 2},
306
+ [GL.RG8UI]: {gl2: true, bpp: 2},
307
+ [GL.RG8I]: {gl2: true, bpp: 2},
308
+ [GL.RG16UI]: {gl2: true, bpp: 4},
309
+ [GL.RG16I]: {gl2: true, bpp: 4},
310
+ [GL.RG32UI]: {gl2: true, bpp: 8},
311
+ [GL.RG32I]: {gl2: true, bpp: 8},
312
+ [GL.RGB8]: {gl2: true, bpp: 3},
313
+ [GL.RGBA8]: {gl2: true, bpp: 4},
314
+ // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension
315
+ [GL.RGB10_A2]: {gl2: true, bpp: 4},
316
+ [GL.RGBA8UI]: {gl2: true, bpp: 4},
317
+ [GL.RGBA8I]: {gl2: true, bpp: 4},
318
+ [GL.RGB10_A2UI]: {gl2: true, bpp: 4},
319
+ [GL.RGBA16UI]: {gl2: true, bpp: 8},
320
+ [GL.RGBA16I]: {gl2: true, bpp: 8},
321
+ [GL.RGBA32I]: {gl2: true, bpp: 16},
322
+ [GL.RGBA32UI]: {gl2: true, bpp: 16},
323
+
324
+ // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension
325
+ [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},
326
+ [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},
327
+ [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},
328
+ [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},
329
+ [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},
330
+ // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers
331
+ [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},
332
+ // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2},
333
+ [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}
334
+ };
335
+ */
336
+ /** @deprecated should be removed */
337
+ const DATA_FORMAT_CHANNELS = {
338
+ [6403]: 1,
339
+ [36244]: 1,
340
+ [33319]: 2,
341
+ [33320]: 2,
342
+ [6407]: 3,
343
+ [36248]: 3,
344
+ [6408]: 4,
345
+ [36249]: 4,
346
+ [6402]: 1,
347
+ [34041]: 1,
348
+ [6406]: 1,
349
+ [6409]: 1,
350
+ [6410]: 2
351
+ };
352
+ /** @deprecated should be removed */
353
+ const TYPE_SIZES = {
354
+ [5126]: 4,
355
+ [5125]: 4,
356
+ [5124]: 4,
357
+ [5123]: 2,
358
+ [5122]: 2,
359
+ [5131]: 2,
360
+ [5120]: 1,
361
+ [5121]: 1
362
+ };
363
+ // FUNCTIONS
364
+ /** Checks if a texture format is supported */
365
+ export function isTextureFormatSupported(gl, format, extensions) {
366
+ const info = TEXTURE_FORMATS[format];
367
+ if (!info) {
368
+ return false;
369
+ }
370
+ // Check that we have a GL constant
371
+ if (info.gl === undefined) {
372
+ return false;
373
+ }
374
+ // Check extensions
375
+ const extension = info.x || info.gl2ext;
376
+ if (extension) {
377
+ return Boolean(getWebGLExtension(gl, extension, extensions));
378
+ }
379
+ return true;
712
380
  }
713
-
714
- export function isTextureFormatSupported(gl, formatOrGL) {
715
- const format = getTextureFormat(formatOrGL);
716
- const info = TEXTURE_FORMATS[format];
717
-
718
- if (!info) {
719
- return false;
720
- }
721
-
722
- if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {
723
- return false;
724
- }
725
-
726
- const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);
727
-
728
- if (extension) {
729
- return Boolean(gl.getExtension(extension));
730
- }
731
-
732
- return true;
381
+ export function isRenderbufferFormatSupported(gl, format, extensions) {
382
+ // Note: Order is important since the function call initializes extensions.
383
+ return isTextureFormatSupported(gl, format, extensions) && TEXTURE_FORMATS[format]?.rb;
733
384
  }
734
- export function getTextureFormatSupport(gl, formatOrGL) {
735
- const format = getTextureFormat(formatOrGL);
736
- const info = TEXTURE_FORMATS[format];
737
-
738
- if (!info) {
739
- return {
740
- supported: false
741
- };
742
- }
743
-
744
- let decoded;
745
-
746
- try {
747
- decoded = decodeTextureFormat(format);
748
- } catch {}
749
-
750
- let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;
751
- supported = supported && checkTextureFeatures(gl, [info.f]);
752
- const filterable = info.filter ? checkTextureFeatures(gl, [info.filter]) : decoded && !decoded.signed;
753
- const renderable = info.filter ? checkTextureFeatures(gl, [info.render]) : decoded && !decoded.signed;
754
- return {
755
- supported,
756
- renderable: supported && checkTextureFeatures(gl, [info.render]),
757
- filterable: supported && checkTextureFeatures(gl, [info.filter]),
758
- blendable: false,
759
- storable: false
760
- };
385
+ /**
386
+ * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings
387
+ */
388
+ export function convertGLToTextureFormat(format) {
389
+ if (typeof format === 'string') {
390
+ return format;
391
+ }
392
+ const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => entry.gl === format);
393
+ if (!entry) {
394
+ throw new Error(`Unknown texture format ${format}`);
395
+ }
396
+ return entry[0];
761
397
  }
762
- export function isTextureFormatFilterable(gl, formatOrGL) {
763
- const format = getTextureFormat(formatOrGL);
764
-
765
- if (!isTextureFormatSupported(gl, format)) {
766
- return false;
767
- }
768
-
769
- try {
770
- const decoded = decodeTextureFormat(format);
771
-
772
- if (decoded.signed) {
773
- return false;
398
+ /**
399
+ * Map WebGPU style texture format strings to GL constants
400
+ */
401
+ export function convertTextureFormatToGL(format) {
402
+ const formatInfo = TEXTURE_FORMATS[format];
403
+ const webglFormat = formatInfo?.gl;
404
+ if (webglFormat === undefined) {
405
+ throw new Error(`Unsupported texture format ${format}`);
774
406
  }
775
- } catch {
776
- return false;
777
- }
778
-
779
- if (format.endsWith('32float')) {
780
- return Boolean(gl.getExtension('OES_texture_float_linear'));
781
- }
782
-
783
- if (format.endsWith('16float')) {
784
- return Boolean(gl.getExtension('OES_texture_half_float_linear'));
785
- }
786
-
787
- return true;
407
+ return webglFormat;
788
408
  }
789
- export function isTextureFormatRenderable(gl, formatOrGL) {
790
- const format = getTextureFormat(formatOrGL);
791
-
792
- if (!isTextureFormatSupported(gl, format)) {
793
- return false;
794
- }
795
-
796
- if (typeof format === 'number') {
797
- return false;
798
- }
799
-
800
- return true;
409
+ /** Checks if a texture format is supported */
410
+ export function getTextureFormatSupport(gl, format, extensions) {
411
+ const info = TEXTURE_FORMATS[format];
412
+ if (!info) {
413
+ return { supported: false };
414
+ }
415
+ // let decoded;
416
+ // try {
417
+ // decoded = decodeTextureFormat(format);
418
+ // } catch {}
419
+ // Support Check that we have a GL constant
420
+ let supported = info.gl === undefined;
421
+ supported = supported && checkTextureFeature(gl, info.f, extensions);
422
+ // Filtering
423
+ // const filterable = info.filter
424
+ // ? checkTextureFeature(gl, infofilter])
425
+ // : decoded && !decoded.signed;
426
+ // const renderable = info.filter
427
+ // ? checkTextureFeature(gl, inforender])
428
+ // : decoded && !decoded.signed;
429
+ return {
430
+ supported,
431
+ renderable: supported && checkTextureFeature(gl, info.render, extensions),
432
+ filterable: supported && checkTextureFeature(gl, info.filter, extensions),
433
+ blendable: false, // tod,
434
+ storable: false
435
+ };
801
436
  }
802
- export function getWebGLTextureFormat(gl, formatOrGL) {
803
- const format = getTextureFormat(formatOrGL);
804
- const formatInfo = TEXTURE_FORMATS[format];
805
- const webglFormat = isWebGL2(gl) ? formatInfo === null || formatInfo === void 0 ? void 0 : formatInfo.gl : formatInfo === null || formatInfo === void 0 ? void 0 : formatInfo.gl1;
806
-
807
- if (typeof format === 'number') {
808
- return webglFormat || format;
809
- }
810
-
811
- if (webglFormat === undefined) {
812
- throw new Error("Unsupported texture format ".concat(format));
813
- }
814
-
815
- return webglFormat;
437
+ /** Checks whether linear filtering (interpolated sampling) is available for floating point textures */
438
+ export function isTextureFormatFilterable(gl, format, extensions) {
439
+ if (!isTextureFormatSupported(gl, format, extensions)) {
440
+ return false;
441
+ }
442
+ if (format.startsWith('depth') || format.startsWith('stencil')) {
443
+ return false;
444
+ }
445
+ try {
446
+ const decoded = decodeTextureFormat(format);
447
+ if (decoded.signed) {
448
+ return false;
449
+ }
450
+ }
451
+ catch {
452
+ return false;
453
+ }
454
+ if (format.endsWith('32float')) {
455
+ return Boolean(getWebGLExtension(gl, 'OES_texture_float_linear, extensions', extensions));
456
+ }
457
+ if (format.endsWith('16float')) {
458
+ return Boolean(getWebGLExtension(gl, 'OES_texture_half_float_linear, extensions', extensions));
459
+ }
460
+ return true;
816
461
  }
817
- export function getWebGLTextureParameters(gl, formatOrGL) {
818
- const format = getTextureFormat(formatOrGL);
819
- const webglFormat = getWebGLTextureFormat(gl, format);
820
- const decoded = decodeTextureFormat(format);
821
- return {
822
- format: webglFormat,
823
- dataFormat: getWebGLPixelDataFormat(decoded.format, decoded.integer, decoded.normalized, webglFormat),
824
- type: getWebGLDataType(decoded.dataType),
825
- compressed: decoded.compressed
826
- };
462
+ export function isTextureFormatRenderable(gl, format, extensions) {
463
+ if (!isTextureFormatSupported(gl, format, extensions)) {
464
+ return false;
465
+ }
466
+ if (typeof format === 'number') {
467
+ return false; // isTextureFormatFilterableWebGL(gl, format);
468
+ }
469
+ // TODO depends on device...
470
+ return true;
827
471
  }
828
- export function getWebGLDepthStencilAttachment(formatOrGL) {
829
- const format = getTextureFormat(formatOrGL);
830
-
831
- if (typeof format === 'number') {
832
- throw new Error('unsupported depth stencil format');
833
- }
834
-
835
- const info = TEXTURE_FORMATS[format];
836
- const attachment = info.attachment;
837
-
838
- if (!attachment) {
839
- throw new Error('not a depth stencil format');
840
- }
841
-
842
- return attachment;
472
+ /** Get parameters necessary to work with format in WebGL: internalFormat, dataFormat, type, compressed, */
473
+ export function getWebGLTextureParameters(format) {
474
+ const formatData = TEXTURE_FORMATS[format];
475
+ const webglFormat = convertTextureFormatToGL(format);
476
+ const decoded = decodeTextureFormat(format);
477
+ return {
478
+ format: webglFormat,
479
+ dataFormat: formatData?.dataFormat ||
480
+ getWebGLPixelDataFormat(decoded.format, decoded.integer, decoded.normalized, webglFormat),
481
+ // depth formats don't have a type
482
+ type: decoded.dataType
483
+ ? getGLFromVertexType(decoded.dataType)
484
+ : formatData?.types?.[0] || 5121,
485
+ // @ts-expect-error
486
+ compressed: decoded.compressed
487
+ };
843
488
  }
844
- export function _checkFloat32ColorAttachment(gl, internalFormat = gl.RGBA, srcFormat = GL.RGBA, srcType = GL.UNSIGNED_BYTE) {
845
- let texture = null;
846
- let framebuffer = null;
847
-
848
- try {
849
- texture = gl.createTexture();
850
- gl.bindTexture(GL.TEXTURE_2D, texture);
851
- const level = 0;
852
- const width = 1;
853
- const height = 1;
854
- const border = 0;
855
- const pixel = new Uint8Array([0, 0, 255, 255]);
856
- gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, srcFormat, srcType, pixel);
857
- framebuffer = gl.createFramebuffer();
858
- gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);
859
- gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);
860
- const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;
861
- gl.bindTexture(GL.TEXTURE_2D, null);
862
- return status;
863
- } finally {
864
- gl.deleteTexture(texture);
865
- gl.deleteFramebuffer(framebuffer);
866
- }
489
+ export function getDepthStencilAttachmentWebGL(format) {
490
+ const info = TEXTURE_FORMATS[format];
491
+ if (!info?.attachment) {
492
+ throw new Error(`${format} is not a depth stencil format`);
493
+ }
494
+ return info.attachment;
867
495
  }
868
- const DATA_FORMAT_CHANNELS = {
869
- [GL.RED]: 1,
870
- [GL.RED_INTEGER]: 1,
871
- [GL.RG]: 2,
872
- [GL.RG_INTEGER]: 2,
873
- [GL.RGB]: 3,
874
- [GL.RGB_INTEGER]: 3,
875
- [GL.RGBA]: 4,
876
- [GL.RGBA_INTEGER]: 4,
877
- [GL.DEPTH_COMPONENT]: 1,
878
- [GL.DEPTH_STENCIL]: 1,
879
- [GL.ALPHA]: 1,
880
- [GL.LUMINANCE]: 1,
881
- [GL.LUMINANCE_ALPHA]: 2
882
- };
883
- const TYPE_SIZES = {
884
- [GL.FLOAT]: 4,
885
- [GL.UNSIGNED_INT]: 4,
886
- [GL.INT]: 4,
887
- [GL.UNSIGNED_SHORT]: 2,
888
- [GL.SHORT]: 2,
889
- [GL.HALF_FLOAT]: 2,
890
- [GL.BYTE]: 1,
891
- [GL.UNSIGNED_BYTE]: 1
892
- };
893
- export function getTextureFormatBytesPerPixel(gl, formatOrGL) {
894
- const format = getTextureFormat(formatOrGL);
895
- const params = getWebGLTextureParameters(gl, format);
896
- const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;
897
- const channelSize = TYPE_SIZES[params.type] || 1;
898
- return channels * channelSize;
496
+ /** TODO - VERY roundabout legacy way of calculating bytes per pixel */
497
+ export function getTextureFormatBytesPerPixel(format) {
498
+ // TODO remove webgl1 support
499
+ const params = getWebGLTextureParameters(format);
500
+ // NOTE(Tarek): Default to RGBA bytes
501
+ const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;
502
+ const channelSize = TYPE_SIZES[params.type] || 1;
503
+ return channels * channelSize;
899
504
  }
900
-
505
+ // DATA TYPE HELPERS
901
506
  function getWebGLPixelDataFormat(dataFormat, integer, normalized, format) {
902
- if (format === GL.RGBA || format === GL.RGB) {
903
- return format;
904
- }
905
-
906
- switch (dataFormat) {
907
- case 'r':
908
- return integer && !normalized ? GL.RED_INTEGER : GL.RED;
909
-
910
- case 'rg':
911
- return integer && !normalized ? GL.RG_INTEGER : GL.RG;
912
-
913
- case 'rgb':
914
- return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;
915
-
916
- case 'rgba':
917
- return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;
918
-
919
- default:
920
- return GL.RGBA;
921
- }
922
- }
923
-
924
- export function getWebGLDataType(dataType) {
925
- switch (dataType) {
926
- case 'uint8':
927
- return GL.UNSIGNED_BYTE;
928
-
929
- case 'sint8':
930
- return GL.BYTE;
931
-
932
- case 'uint16':
933
- return GL.UNSIGNED_SHORT;
934
-
935
- case 'sint16':
936
- return GL.SHORT;
937
-
938
- case 'uint32':
939
- return GL.UNSIGNED_INT;
940
-
941
- case 'sint32':
942
- return GL.INT;
943
-
944
- case 'float16':
945
- return GL.HALF_FLOAT;
946
-
947
- case 'float32':
948
- return GL.FLOAT;
949
-
950
- default:
951
- return GL.UNSIGNED_BYTE;
952
- }
507
+ // WebGL1 formats use same internalFormat
508
+ if (format === 6408 || format === 6407) {
509
+ return format;
510
+ }
511
+ // prettier-ignore
512
+ switch (dataFormat) {
513
+ case 'r': return integer && !normalized ? 36244 : 6403;
514
+ case 'rg': return integer && !normalized ? 33320 : 33319;
515
+ case 'rgb': return integer && !normalized ? 36248 : 6407;
516
+ case 'rgba': return integer && !normalized ? 36249 : 6408;
517
+ default: return 6408;
518
+ }
953
519
  }
954
- //# sourceMappingURL=texture-formats.js.map