@loaders.gl/textures 4.0.0-alpha.4 → 4.0.0-alpha.6

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 (384) hide show
  1. package/dist/basis-loader.d.ts +11 -0
  2. package/dist/basis-loader.d.ts.map +1 -0
  3. package/dist/basis-loader.js +36 -24
  4. package/dist/basis-nodejs-worker.js +66490 -0
  5. package/dist/basis-worker.js +165 -76
  6. package/dist/bundle.d.ts +2 -0
  7. package/dist/bundle.d.ts.map +1 -0
  8. package/dist/bundle.js +2 -2
  9. package/dist/compressed-texture-loader.d.ts +49 -0
  10. package/dist/compressed-texture-loader.d.ts.map +1 -0
  11. package/dist/compressed-texture-loader.js +59 -36
  12. package/dist/compressed-texture-worker.js +269 -138
  13. package/dist/compressed-texture-writer.d.ts +17 -0
  14. package/dist/compressed-texture-writer.d.ts.map +1 -0
  15. package/dist/compressed-texture-writer.js +33 -21
  16. package/dist/crunch-loader.d.ts +21 -0
  17. package/dist/crunch-loader.d.ts.map +1 -0
  18. package/dist/crunch-loader.js +23 -16
  19. package/dist/crunch-worker.js +106 -41
  20. package/dist/dist.min.js +2195 -0
  21. package/dist/es5/basis-loader.js +38 -0
  22. package/dist/es5/basis-loader.js.map +1 -0
  23. package/dist/es5/bundle.js +6 -0
  24. package/dist/es5/bundle.js.map +1 -0
  25. package/dist/es5/compressed-texture-loader.js +76 -0
  26. package/dist/es5/compressed-texture-loader.js.map +1 -0
  27. package/dist/es5/compressed-texture-writer.js +28 -0
  28. package/dist/es5/compressed-texture-writer.js.map +1 -0
  29. package/dist/es5/crunch-loader.js +26 -0
  30. package/dist/es5/crunch-loader.js.map +1 -0
  31. package/dist/es5/index.js +132 -0
  32. package/dist/es5/index.js.map +1 -0
  33. package/dist/es5/ktx2-basis-writer-nodejs.js +14 -0
  34. package/dist/es5/ktx2-basis-writer-nodejs.js.map +1 -0
  35. package/dist/es5/ktx2-basis-writer.js +26 -0
  36. package/dist/es5/ktx2-basis-writer.js.map +1 -0
  37. package/dist/es5/lib/encoders/encode-ktx.js +12 -0
  38. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -0
  39. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +74 -0
  40. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -0
  41. package/dist/es5/lib/encoders/encode-texture.js +38 -0
  42. package/dist/es5/lib/encoders/encode-texture.js.map +1 -0
  43. package/dist/es5/lib/gl-extensions.js +68 -0
  44. package/dist/es5/lib/gl-extensions.js.map +1 -0
  45. package/dist/es5/lib/parsers/basis-module-loader.js +194 -0
  46. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -0
  47. package/dist/es5/lib/parsers/crunch-module-loader.js +67 -0
  48. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -0
  49. package/dist/es5/lib/parsers/parse-basis.js +270 -0
  50. package/dist/es5/lib/parsers/parse-basis.js.map +1 -0
  51. package/dist/es5/lib/parsers/parse-compressed-texture.js +22 -0
  52. package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -0
  53. package/dist/es5/lib/parsers/parse-crunch.js +100 -0
  54. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -0
  55. package/dist/es5/lib/parsers/parse-dds.js +84 -0
  56. package/dist/es5/lib/parsers/parse-dds.js.map +1 -0
  57. package/dist/es5/lib/parsers/parse-ktx.js +34 -0
  58. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -0
  59. package/dist/es5/lib/parsers/parse-npy.js +70 -0
  60. package/dist/es5/lib/parsers/parse-npy.js.map +1 -0
  61. package/dist/es5/lib/parsers/parse-pvr.js +161 -0
  62. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -0
  63. package/dist/es5/lib/texture-api/async-deep-map.js +156 -0
  64. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -0
  65. package/dist/es5/lib/texture-api/deep-load.js +63 -0
  66. package/dist/es5/lib/texture-api/deep-load.js.map +1 -0
  67. package/dist/es5/lib/texture-api/generate-url.js +20 -0
  68. package/dist/es5/lib/texture-api/generate-url.js.map +1 -0
  69. package/dist/es5/lib/texture-api/load-image-array.js +75 -0
  70. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -0
  71. package/dist/es5/lib/texture-api/load-image-cube.js +136 -0
  72. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -0
  73. package/dist/es5/lib/texture-api/load-image.js +129 -0
  74. package/dist/es5/lib/texture-api/load-image.js.map +1 -0
  75. package/dist/es5/lib/texture-api/texture-api-types.js +2 -0
  76. package/dist/es5/lib/texture-api/texture-api-types.js.map +1 -0
  77. package/dist/es5/lib/utils/extract-mipmap-images.js +41 -0
  78. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -0
  79. package/dist/es5/lib/utils/ktx-format-helper.js +79 -0
  80. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -0
  81. package/dist/es5/lib/utils/texture-formats.js +54 -0
  82. package/dist/es5/lib/utils/texture-formats.js.map +1 -0
  83. package/dist/es5/lib/utils/version.js +9 -0
  84. package/dist/es5/lib/utils/version.js.map +1 -0
  85. package/dist/es5/libs/README.md +9 -0
  86. package/dist/es5/libs/basis_encoder.js +21 -0
  87. package/dist/es5/libs/basis_encoder.wasm +0 -0
  88. package/dist/es5/libs/basis_transcoder.js +22 -0
  89. package/dist/es5/libs/basis_transcoder.wasm +0 -0
  90. package/dist/es5/libs/crunch.js +136 -0
  91. package/dist/es5/npy-loader.js +51 -0
  92. package/dist/es5/npy-loader.js.map +1 -0
  93. package/dist/es5/types.js +2 -0
  94. package/dist/es5/types.js.map +1 -0
  95. package/dist/es5/workers/basis-nodejs-worker.js +7 -0
  96. package/dist/es5/workers/basis-nodejs-worker.js.map +1 -0
  97. package/dist/es5/workers/basis-worker.js +6 -0
  98. package/dist/es5/workers/basis-worker.js.map +1 -0
  99. package/dist/es5/workers/compressed-texture-worker.js +6 -0
  100. package/dist/es5/workers/compressed-texture-worker.js.map +1 -0
  101. package/dist/es5/workers/crunch-worker.js +19 -0
  102. package/dist/es5/workers/crunch-worker.js.map +1 -0
  103. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js +53 -0
  104. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -0
  105. package/dist/es5/workers/ktx2-basis-writer-worker.js +53 -0
  106. package/dist/es5/workers/ktx2-basis-writer-worker.js.map +1 -0
  107. package/dist/es5/workers/npy-worker.js +6 -0
  108. package/dist/es5/workers/npy-worker.js.map +1 -0
  109. package/dist/esm/basis-loader.js +27 -0
  110. package/dist/esm/basis-loader.js.map +1 -0
  111. package/dist/esm/bundle.js +4 -0
  112. package/dist/esm/bundle.js.map +1 -0
  113. package/dist/esm/compressed-texture-loader.js +41 -0
  114. package/dist/esm/compressed-texture-loader.js.map +1 -0
  115. package/dist/esm/compressed-texture-writer.js +21 -0
  116. package/dist/esm/compressed-texture-writer.js.map +1 -0
  117. package/dist/esm/crunch-loader.js +18 -0
  118. package/dist/esm/crunch-loader.js.map +1 -0
  119. package/dist/esm/index.js +30 -0
  120. package/dist/esm/index.js.map +1 -0
  121. package/dist/esm/ktx2-basis-writer-nodejs.js +3 -0
  122. package/dist/esm/ktx2-basis-writer-nodejs.js.map +1 -0
  123. package/dist/{ktx2-basis-universal-texture-writer.js → esm/ktx2-basis-writer.js} +4 -4
  124. package/dist/esm/ktx2-basis-writer.js.map +1 -0
  125. package/dist/esm/lib/encoders/encode-ktx.js +6 -0
  126. package/dist/esm/lib/encoders/encode-ktx.js.map +1 -0
  127. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +35 -0
  128. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -0
  129. package/dist/esm/lib/encoders/encode-texture.js +12 -0
  130. package/dist/esm/lib/encoders/encode-texture.js.map +1 -0
  131. package/dist/{lib/gl-constants.js → esm/lib/gl-extensions.js} +2 -2
  132. package/dist/esm/lib/gl-extensions.js.map +1 -0
  133. package/dist/esm/lib/parsers/basis-module-loader.js +77 -0
  134. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -0
  135. package/dist/esm/lib/parsers/crunch-module-loader.js +19 -0
  136. package/dist/esm/lib/parsers/crunch-module-loader.js.map +1 -0
  137. package/dist/esm/lib/parsers/parse-basis.js +231 -0
  138. package/dist/esm/lib/parsers/parse-basis.js.map +1 -0
  139. package/dist/esm/lib/parsers/parse-compressed-texture.js +16 -0
  140. package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -0
  141. package/dist/esm/lib/parsers/parse-crunch.js +75 -0
  142. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -0
  143. package/dist/esm/lib/parsers/parse-dds.js +75 -0
  144. package/dist/esm/lib/parsers/parse-dds.js.map +1 -0
  145. package/dist/esm/lib/parsers/parse-ktx.js +25 -0
  146. package/dist/esm/lib/parsers/parse-ktx.js.map +1 -0
  147. package/dist/esm/lib/parsers/parse-npy.js +63 -0
  148. package/dist/esm/lib/parsers/parse-npy.js.map +1 -0
  149. package/dist/esm/lib/parsers/parse-pvr.js +154 -0
  150. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -0
  151. package/dist/esm/lib/texture-api/async-deep-map.js +34 -0
  152. package/dist/esm/lib/texture-api/async-deep-map.js.map +1 -0
  153. package/dist/esm/lib/texture-api/deep-load.js +10 -0
  154. package/dist/esm/lib/texture-api/deep-load.js.map +1 -0
  155. package/dist/esm/lib/texture-api/generate-url.js +13 -0
  156. package/dist/esm/lib/texture-api/generate-url.js.map +1 -0
  157. package/dist/esm/lib/texture-api/load-image-array.js +20 -0
  158. package/dist/esm/lib/texture-api/load-image-array.js.map +1 -0
  159. package/dist/esm/lib/texture-api/load-image-cube.js +63 -0
  160. package/dist/esm/lib/texture-api/load-image-cube.js.map +1 -0
  161. package/dist/esm/lib/texture-api/load-image.js +46 -0
  162. package/dist/esm/lib/texture-api/load-image.js.map +1 -0
  163. package/dist/esm/lib/texture-api/texture-api-types.js +2 -0
  164. package/dist/esm/lib/texture-api/texture-api-types.js.map +1 -0
  165. package/dist/esm/lib/utils/extract-mipmap-images.js +35 -0
  166. package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -0
  167. package/dist/esm/lib/utils/ktx-format-helper.js +73 -0
  168. package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -0
  169. package/dist/esm/lib/utils/texture-formats.js +36 -0
  170. package/dist/esm/lib/utils/texture-formats.js.map +1 -0
  171. package/dist/esm/lib/utils/version.js +2 -0
  172. package/dist/esm/lib/utils/version.js.map +1 -0
  173. package/dist/esm/libs/README.md +9 -0
  174. package/dist/esm/libs/basis_encoder.js +21 -0
  175. package/dist/esm/libs/basis_encoder.wasm +0 -0
  176. package/dist/esm/libs/basis_transcoder.js +22 -0
  177. package/dist/esm/libs/basis_transcoder.wasm +0 -0
  178. package/dist/esm/libs/crunch.js +136 -0
  179. package/dist/esm/npy-loader.js +22 -0
  180. package/dist/esm/npy-loader.js.map +1 -0
  181. package/dist/esm/types.js +2 -0
  182. package/dist/esm/types.js.map +1 -0
  183. package/dist/esm/workers/basis-nodejs-worker.js +5 -0
  184. package/dist/esm/workers/basis-nodejs-worker.js.map +1 -0
  185. package/dist/esm/workers/basis-worker.js +4 -0
  186. package/dist/esm/workers/basis-worker.js.map +1 -0
  187. package/dist/esm/workers/compressed-texture-worker.js +4 -0
  188. package/dist/esm/workers/compressed-texture-worker.js.map +1 -0
  189. package/dist/esm/workers/crunch-worker.js +9 -0
  190. package/dist/esm/workers/crunch-worker.js.map +1 -0
  191. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js +31 -0
  192. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -0
  193. package/dist/esm/workers/ktx2-basis-writer-worker.js +31 -0
  194. package/dist/esm/workers/ktx2-basis-writer-worker.js.map +1 -0
  195. package/dist/esm/workers/npy-worker.js +4 -0
  196. package/dist/esm/workers/npy-worker.js.map +1 -0
  197. package/dist/index.d.ts +30 -0
  198. package/dist/index.d.ts.map +1 -0
  199. package/dist/index.js +53 -14
  200. package/dist/ktx2-basis-writer-nodejs-worker.js +65949 -0
  201. package/dist/ktx2-basis-writer-nodejs.d.ts +3 -0
  202. package/dist/ktx2-basis-writer-nodejs.d.ts.map +1 -0
  203. package/dist/ktx2-basis-writer-nodejs.js +7 -0
  204. package/dist/ktx2-basis-writer-worker.js +343 -0
  205. package/dist/ktx2-basis-writer.d.ts +16 -0
  206. package/dist/ktx2-basis-writer.d.ts.map +1 -0
  207. package/dist/ktx2-basis-writer.js +26 -0
  208. package/dist/lib/encoders/encode-ktx.d.ts +2 -0
  209. package/dist/lib/encoders/encode-ktx.d.ts.map +1 -0
  210. package/dist/lib/encoders/encode-ktx.js +9 -5
  211. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts +10 -0
  212. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts.map +1 -0
  213. package/dist/lib/encoders/encode-ktx2-basis-texture.js +40 -34
  214. package/dist/lib/encoders/encode-texture.d.ts +3 -0
  215. package/dist/lib/encoders/encode-texture.d.ts.map +1 -0
  216. package/dist/lib/encoders/encode-texture.js +26 -14
  217. package/dist/lib/gl-extensions.d.ts +61 -0
  218. package/dist/lib/gl-extensions.d.ts.map +1 -0
  219. package/dist/lib/gl-extensions.js +72 -0
  220. package/dist/lib/parsers/basis-module-loader.d.ts +13 -0
  221. package/dist/lib/parsers/basis-module-loader.d.ts.map +1 -0
  222. package/dist/lib/parsers/basis-module-loader.js +100 -76
  223. package/dist/lib/parsers/crunch-module-loader.d.ts +7 -0
  224. package/dist/lib/parsers/crunch-module-loader.d.ts.map +1 -0
  225. package/dist/lib/parsers/crunch-module-loader.js +30 -18
  226. package/dist/lib/parsers/parse-basis.d.ts +18 -0
  227. package/dist/lib/parsers/parse-basis.d.ts.map +1 -0
  228. package/dist/lib/parsers/parse-basis.js +225 -240
  229. package/dist/lib/parsers/parse-compressed-texture.d.ts +8 -0
  230. package/dist/lib/parsers/parse-compressed-texture.d.ts.map +1 -0
  231. package/dist/lib/parsers/parse-compressed-texture.js +25 -18
  232. package/dist/lib/parsers/parse-crunch.d.ts +9 -0
  233. package/dist/lib/parsers/parse-crunch.d.ts.map +1 -0
  234. package/dist/lib/parsers/parse-crunch.js +97 -82
  235. package/dist/lib/parsers/parse-dds.d.ts +28 -0
  236. package/dist/lib/parsers/parse-dds.d.ts.map +1 -0
  237. package/dist/lib/parsers/parse-dds.js +93 -63
  238. package/dist/lib/parsers/parse-ktx.d.ts +4 -0
  239. package/dist/lib/parsers/parse-ktx.d.ts.map +1 -0
  240. package/dist/lib/parsers/parse-ktx.js +44 -23
  241. package/dist/lib/parsers/parse-npy.d.ts +15 -0
  242. package/dist/lib/parsers/parse-npy.d.ts.map +1 -0
  243. package/dist/lib/parsers/parse-npy.js +76 -71
  244. package/dist/lib/parsers/parse-pvr.d.ts +15 -0
  245. package/dist/lib/parsers/parse-pvr.d.ts.map +1 -0
  246. package/dist/lib/parsers/parse-pvr.js +212 -133
  247. package/dist/lib/texture-api/async-deep-map.d.ts +5 -0
  248. package/dist/lib/texture-api/async-deep-map.d.ts.map +1 -0
  249. package/dist/lib/texture-api/async-deep-map.js +35 -33
  250. package/dist/lib/texture-api/deep-load.d.ts +5 -0
  251. package/dist/lib/texture-api/deep-load.d.ts.map +1 -0
  252. package/dist/lib/texture-api/deep-load.js +14 -8
  253. package/dist/lib/texture-api/generate-url.d.ts +3 -0
  254. package/dist/lib/texture-api/generate-url.d.ts.map +1 -0
  255. package/dist/lib/texture-api/generate-url.js +16 -13
  256. package/dist/lib/texture-api/load-image-array.d.ts +4 -0
  257. package/dist/lib/texture-api/load-image-array.d.ts.map +1 -0
  258. package/dist/lib/texture-api/load-image-array.js +19 -18
  259. package/dist/lib/texture-api/load-image-cube.d.ts +12 -0
  260. package/dist/lib/texture-api/load-image-cube.d.ts.map +1 -0
  261. package/dist/lib/texture-api/load-image-cube.js +39 -55
  262. package/dist/lib/texture-api/load-image.d.ts +8 -0
  263. package/dist/lib/texture-api/load-image.d.ts.map +1 -0
  264. package/dist/lib/texture-api/load-image.js +38 -43
  265. package/dist/lib/texture-api/texture-api-types.d.ts +10 -0
  266. package/dist/lib/texture-api/texture-api-types.d.ts.map +1 -0
  267. package/dist/lib/texture-api/texture-api-types.js +3 -2
  268. package/dist/lib/utils/extract-mipmap-images.d.ts +20 -0
  269. package/dist/lib/utils/extract-mipmap-images.d.ts.map +1 -0
  270. package/dist/lib/utils/extract-mipmap-images.js +45 -36
  271. package/dist/lib/utils/ktx-format-helper.d.ts +9 -0
  272. package/dist/lib/utils/ktx-format-helper.d.ts.map +1 -0
  273. package/dist/lib/utils/ktx-format-helper.js +122 -70
  274. package/dist/lib/utils/texture-formats.d.ts +8 -0
  275. package/dist/lib/utils/texture-formats.d.ts.map +1 -0
  276. package/dist/lib/utils/texture-formats.js +42 -30
  277. package/dist/lib/utils/version.d.ts +2 -0
  278. package/dist/lib/utils/version.d.ts.map +1 -0
  279. package/dist/lib/utils/version.js +8 -2
  280. package/dist/libs/README.md +2 -2
  281. package/dist/libs/basis_encoder.js +19 -20
  282. package/dist/libs/basis_encoder.wasm +0 -0
  283. package/dist/libs/basis_transcoder.js +13 -12
  284. package/dist/libs/basis_transcoder.wasm +0 -0
  285. package/dist/libs/crunch.js +1 -0
  286. package/dist/npy-loader.d.ts +14 -0
  287. package/dist/npy-loader.d.ts.map +1 -0
  288. package/dist/npy-loader.js +28 -20
  289. package/dist/npy-worker.js +60 -31
  290. package/dist/types.d.ts +1 -0
  291. package/dist/types.d.ts.map +1 -0
  292. package/dist/types.js +1 -2
  293. package/dist/workers/basis-nodejs-worker.d.ts +2 -0
  294. package/dist/workers/basis-nodejs-worker.d.ts.map +1 -0
  295. package/dist/workers/basis-nodejs-worker.js +6 -0
  296. package/dist/workers/basis-worker.d.ts +2 -0
  297. package/dist/workers/basis-worker.d.ts.map +1 -0
  298. package/dist/workers/basis-worker.js +5 -4
  299. package/dist/workers/compressed-texture-worker.d.ts +2 -0
  300. package/dist/workers/compressed-texture-worker.d.ts.map +1 -0
  301. package/dist/workers/compressed-texture-worker.js +5 -4
  302. package/dist/workers/crunch-worker.d.ts +21 -0
  303. package/dist/workers/crunch-worker.d.ts.map +1 -0
  304. package/dist/workers/crunch-worker.js +13 -7
  305. package/dist/workers/ktx2-basis-writer-nodejs-worker.d.ts +2 -0
  306. package/dist/workers/ktx2-basis-writer-nodejs-worker.d.ts.map +1 -0
  307. package/dist/workers/ktx2-basis-writer-nodejs-worker.js +26 -0
  308. package/dist/workers/ktx2-basis-writer-worker.d.ts +2 -0
  309. package/dist/workers/ktx2-basis-writer-worker.d.ts.map +1 -0
  310. package/dist/workers/ktx2-basis-writer-worker.js +26 -0
  311. package/dist/workers/npy-worker.d.ts +2 -0
  312. package/dist/workers/npy-worker.d.ts.map +1 -0
  313. package/dist/workers/npy-worker.js +5 -4
  314. package/package.json +21 -14
  315. package/src/basis-loader.ts +8 -8
  316. package/src/compressed-texture-loader.ts +1 -1
  317. package/src/compressed-texture-writer.ts +21 -3
  318. package/src/index.ts +21 -3
  319. package/src/ktx2-basis-writer-nodejs.ts +4 -0
  320. package/src/{ktx2-basis-universal-texture-writer.ts → ktx2-basis-writer.ts} +14 -3
  321. package/src/lib/encoders/encode-ktx2-basis-texture.ts +2 -2
  322. package/src/lib/encoders/encode-texture.ts +7 -6
  323. package/src/lib/{gl-constants.ts → gl-extensions.ts} +1 -1
  324. package/src/lib/parsers/crunch-module-loader.ts +1 -1
  325. package/src/lib/parsers/{parse-basis.js → parse-basis.ts} +101 -45
  326. package/src/lib/parsers/parse-compressed-texture.ts +1 -1
  327. package/src/lib/parsers/parse-crunch.ts +16 -15
  328. package/src/lib/parsers/parse-dds.ts +8 -8
  329. package/src/lib/parsers/parse-ktx.ts +2 -1
  330. package/src/lib/parsers/parse-npy.ts +53 -30
  331. package/src/lib/parsers/parse-pvr.ts +72 -29
  332. package/src/lib/utils/extract-mipmap-images.ts +9 -1
  333. package/src/lib/utils/ktx-format-helper.ts +67 -67
  334. package/src/lib/utils/texture-formats.ts +1 -1
  335. package/src/libs/README.md +2 -2
  336. package/src/libs/basis_encoder.js +19 -20
  337. package/src/libs/basis_encoder.wasm +0 -0
  338. package/src/libs/basis_transcoder.js +13 -12
  339. package/src/libs/basis_transcoder.wasm +0 -0
  340. package/src/libs/crunch.js +1 -0
  341. package/src/npy-loader.ts +7 -7
  342. package/src/types.ts +0 -30
  343. package/src/workers/basis-nodejs-worker.ts +5 -0
  344. package/src/workers/ktx2-basis-writer-nodejs-worker.ts +25 -0
  345. package/src/workers/ktx2-basis-writer-worker.ts +25 -0
  346. package/dist/basis-loader.js.map +0 -1
  347. package/dist/bundle.js.map +0 -1
  348. package/dist/compressed-texture-loader.js.map +0 -1
  349. package/dist/compressed-texture-writer.js.map +0 -1
  350. package/dist/crunch-loader.js.map +0 -1
  351. package/dist/index.js.map +0 -1
  352. package/dist/ktx2-basis-universal-texture-writer.js.map +0 -1
  353. package/dist/lib/encoders/encode-ktx.js.map +0 -1
  354. package/dist/lib/encoders/encode-ktx2-basis-texture.js.map +0 -1
  355. package/dist/lib/encoders/encode-texture.js.map +0 -1
  356. package/dist/lib/gl-constants.js.map +0 -1
  357. package/dist/lib/parsers/basis-module-loader.js.map +0 -1
  358. package/dist/lib/parsers/crunch-module-loader.js.map +0 -1
  359. package/dist/lib/parsers/parse-basis.js.map +0 -1
  360. package/dist/lib/parsers/parse-compressed-texture.js.map +0 -1
  361. package/dist/lib/parsers/parse-crunch.js.map +0 -1
  362. package/dist/lib/parsers/parse-dds.js.map +0 -1
  363. package/dist/lib/parsers/parse-ktx.js.map +0 -1
  364. package/dist/lib/parsers/parse-npy.js.map +0 -1
  365. package/dist/lib/parsers/parse-pvr.js.map +0 -1
  366. package/dist/lib/texture-api/async-deep-map.js.map +0 -1
  367. package/dist/lib/texture-api/deep-load.js.map +0 -1
  368. package/dist/lib/texture-api/generate-url.js.map +0 -1
  369. package/dist/lib/texture-api/load-image-array.js.map +0 -1
  370. package/dist/lib/texture-api/load-image-cube.js.map +0 -1
  371. package/dist/lib/texture-api/load-image.js.map +0 -1
  372. package/dist/lib/texture-api/texture-api-types.js.map +0 -1
  373. package/dist/lib/utils/extract-mipmap-images.js.map +0 -1
  374. package/dist/lib/utils/ktx-format-helper.js.map +0 -1
  375. package/dist/lib/utils/texture-formats.js.map +0 -1
  376. package/dist/lib/utils/version.js.map +0 -1
  377. package/dist/npy-loader.js.map +0 -1
  378. package/dist/types.js.map +0 -1
  379. package/dist/workers/basis-worker.js.map +0 -1
  380. package/dist/workers/compressed-texture-worker.js.map +0 -1
  381. package/dist/workers/crunch-worker.js.map +0 -1
  382. package/dist/workers/npy-worker.js.map +0 -1
  383. package/src/lib/parsers/parse-ktx.js +0 -45
  384. package/src/lib/parsers/parse-npy.js +0 -96
@@ -0,0 +1,2195 @@
1
+ (() => {
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
9
+ var __esm = (fn, res) => function __init() {
10
+ return fn && (res = (0, fn[Object.keys(fn)[0]])(fn = 0)), res;
11
+ };
12
+ var __commonJS = (cb, mod) => function __require() {
13
+ return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
14
+ };
15
+ var __export = (target, all) => {
16
+ __markAsModule(target);
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __reExport = (target, module, desc) => {
21
+ if (module && typeof module === "object" || typeof module === "function") {
22
+ for (let key of __getOwnPropNames(module))
23
+ if (!__hasOwnProp.call(target, key) && key !== "default")
24
+ __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
25
+ }
26
+ return target;
27
+ };
28
+ var __toModule = (module) => {
29
+ return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
30
+ };
31
+
32
+ // ../loader-utils/src/lib/env-utils/assert.ts
33
+ function assert(condition, message) {
34
+ if (!condition) {
35
+ throw new Error(message || "loader assertion failed.");
36
+ }
37
+ }
38
+ var init_assert = __esm({
39
+ "../loader-utils/src/lib/env-utils/assert.ts"() {
40
+ }
41
+ });
42
+
43
+ // ../loader-utils/src/lib/env-utils/globals.ts
44
+ var globals, self_, window_, global_, document_, isBrowser, matches, nodeVersion;
45
+ var init_globals = __esm({
46
+ "../loader-utils/src/lib/env-utils/globals.ts"() {
47
+ globals = {
48
+ self: typeof self !== "undefined" && self,
49
+ window: typeof window !== "undefined" && window,
50
+ global: typeof global !== "undefined" && global,
51
+ document: typeof document !== "undefined" && document
52
+ };
53
+ self_ = globals.self || globals.window || globals.global || {};
54
+ window_ = globals.window || globals.self || globals.global || {};
55
+ global_ = globals.global || globals.self || globals.window || {};
56
+ document_ = globals.document || {};
57
+ isBrowser = Boolean(typeof process !== "object" || String(process) !== "[object process]" || process.browser);
58
+ matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
59
+ nodeVersion = matches && parseFloat(matches[1]) || 0;
60
+ }
61
+ });
62
+
63
+ // ../worker-utils/src/lib/env-utils/version.ts
64
+ var DEFAULT_VERSION, VERSION;
65
+ var init_version = __esm({
66
+ "../worker-utils/src/lib/env-utils/version.ts"() {
67
+ DEFAULT_VERSION = "beta";
68
+ VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : DEFAULT_VERSION;
69
+ if (typeof __VERSION__ === "undefined") {
70
+ console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
71
+ }
72
+ }
73
+ });
74
+
75
+ // ../worker-utils/src/lib/env-utils/assert.ts
76
+ function assert2(condition, message) {
77
+ if (!condition) {
78
+ throw new Error(message || "loaders.gl assertion failed.");
79
+ }
80
+ }
81
+ var init_assert2 = __esm({
82
+ "../worker-utils/src/lib/env-utils/assert.ts"() {
83
+ }
84
+ });
85
+
86
+ // ../worker-utils/src/lib/env-utils/globals.ts
87
+ var globals2, self_2, window_2, global_2, document_2, isBrowser2, isWorker, isMobile, matches2, nodeVersion2;
88
+ var init_globals2 = __esm({
89
+ "../worker-utils/src/lib/env-utils/globals.ts"() {
90
+ globals2 = {
91
+ self: typeof self !== "undefined" && self,
92
+ window: typeof window !== "undefined" && window,
93
+ global: typeof global !== "undefined" && global,
94
+ document: typeof document !== "undefined" && document
95
+ };
96
+ self_2 = globals2.self || globals2.window || globals2.global || {};
97
+ window_2 = globals2.window || globals2.self || globals2.global || {};
98
+ global_2 = globals2.global || globals2.self || globals2.window || {};
99
+ document_2 = globals2.document || {};
100
+ isBrowser2 = typeof process !== "object" || String(process) !== "[object process]" || process.browser;
101
+ isWorker = typeof importScripts === "function";
102
+ isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
103
+ matches2 = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
104
+ nodeVersion2 = matches2 && parseFloat(matches2[1]) || 0;
105
+ }
106
+ });
107
+
108
+ // (disabled):../worker-utils/src/lib/node/require-utils.node
109
+ var require_require_utils = __commonJS({
110
+ "(disabled):../worker-utils/src/lib/node/require-utils.node"() {
111
+ }
112
+ });
113
+
114
+ // ../worker-utils/src/lib/library-utils/library-utils.ts
115
+ async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
116
+ if (moduleName) {
117
+ libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);
118
+ }
119
+ loadLibraryPromises[libraryUrl] = loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);
120
+ return await loadLibraryPromises[libraryUrl];
121
+ }
122
+ function getLibraryUrl(library, moduleName, options) {
123
+ if (library.startsWith("http")) {
124
+ return library;
125
+ }
126
+ const modules = options.modules || {};
127
+ if (modules[library]) {
128
+ return modules[library];
129
+ }
130
+ if (!isBrowser2) {
131
+ return `modules/${moduleName}/dist/libs/${library}`;
132
+ }
133
+ if (options.CDN) {
134
+ assert2(options.CDN.startsWith("http"));
135
+ return `${options.CDN}/${moduleName}@${VERSION2}/dist/libs/${library}`;
136
+ }
137
+ if (isWorker) {
138
+ return `../src/libs/${library}`;
139
+ }
140
+ return `modules/${moduleName}/src/libs/${library}`;
141
+ }
142
+ async function loadLibraryFromFile(libraryUrl) {
143
+ if (libraryUrl.endsWith("wasm")) {
144
+ const response2 = await fetch(libraryUrl);
145
+ return await response2.arrayBuffer();
146
+ }
147
+ if (!isBrowser2) {
148
+ try {
149
+ return node && node.requireFromFile && await node.requireFromFile(libraryUrl);
150
+ } catch {
151
+ return null;
152
+ }
153
+ }
154
+ if (isWorker) {
155
+ return importScripts(libraryUrl);
156
+ }
157
+ const response = await fetch(libraryUrl);
158
+ const scriptSource = await response.text();
159
+ return loadLibraryFromString(scriptSource, libraryUrl);
160
+ }
161
+ function loadLibraryFromString(scriptSource, id) {
162
+ if (!isBrowser2) {
163
+ return node.requireFromString && node.requireFromString(scriptSource, id);
164
+ }
165
+ if (isWorker) {
166
+ eval.call(global_2, scriptSource);
167
+ return null;
168
+ }
169
+ const script = document.createElement("script");
170
+ script.id = id;
171
+ try {
172
+ script.appendChild(document.createTextNode(scriptSource));
173
+ } catch (e2) {
174
+ script.text = scriptSource;
175
+ }
176
+ document.body.appendChild(script);
177
+ return null;
178
+ }
179
+ var node, LATEST, VERSION2, loadLibraryPromises;
180
+ var init_library_utils = __esm({
181
+ "../worker-utils/src/lib/library-utils/library-utils.ts"() {
182
+ init_globals2();
183
+ node = __toModule(require_require_utils());
184
+ init_assert2();
185
+ init_version();
186
+ LATEST = "beta";
187
+ VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
188
+ loadLibraryPromises = {};
189
+ }
190
+ });
191
+
192
+ // (disabled):../worker-utils/src/lib/process-utils/child-process-proxy
193
+ var init_child_process_proxy = __esm({
194
+ "(disabled):../worker-utils/src/lib/process-utils/child-process-proxy"() {
195
+ }
196
+ });
197
+
198
+ // ../worker-utils/src/index.ts
199
+ var init_src = __esm({
200
+ "../worker-utils/src/index.ts"() {
201
+ init_globals2();
202
+ init_library_utils();
203
+ init_child_process_proxy();
204
+ }
205
+ });
206
+
207
+ // ../loader-utils/src/lib/path-utils/file-aliases.ts
208
+ function resolvePath(filename) {
209
+ for (const alias in fileAliases) {
210
+ if (filename.startsWith(alias)) {
211
+ const replacement = fileAliases[alias];
212
+ filename = filename.replace(alias, replacement);
213
+ }
214
+ }
215
+ if (!filename.startsWith("http://") && !filename.startsWith("https://")) {
216
+ filename = `${pathPrefix}${filename}`;
217
+ }
218
+ return filename;
219
+ }
220
+ var pathPrefix, fileAliases;
221
+ var init_file_aliases = __esm({
222
+ "../loader-utils/src/lib/path-utils/file-aliases.ts"() {
223
+ pathPrefix = "";
224
+ fileAliases = {};
225
+ }
226
+ });
227
+
228
+ // ../loader-utils/src/index.ts
229
+ var init_src2 = __esm({
230
+ "../loader-utils/src/index.ts"() {
231
+ init_assert();
232
+ init_globals();
233
+ init_file_aliases();
234
+ }
235
+ });
236
+
237
+ // src/lib/utils/version.ts
238
+ var VERSION3;
239
+ var init_version2 = __esm({
240
+ "src/lib/utils/version.ts"() {
241
+ VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
242
+ }
243
+ });
244
+
245
+ // src/lib/parsers/basis-module-loader.ts
246
+ async function loadBasisTrascoderModule(options) {
247
+ const modules = options.modules || {};
248
+ if (modules.basis) {
249
+ return modules.basis;
250
+ }
251
+ loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);
252
+ return await loadBasisTranscoderPromise;
253
+ }
254
+ async function loadBasisTrascoder(options) {
255
+ let BASIS = null;
256
+ let wasmBinary = null;
257
+ [BASIS, wasmBinary] = await Promise.all([
258
+ await loadLibrary("basis_transcoder.js", "textures", options),
259
+ await loadLibrary("basis_transcoder.wasm", "textures", options)
260
+ ]);
261
+ BASIS = BASIS || globalThis.BASIS;
262
+ return await initializeBasisTrascoderModule(BASIS, wasmBinary);
263
+ }
264
+ function initializeBasisTrascoderModule(BasisModule, wasmBinary) {
265
+ const options = {};
266
+ if (wasmBinary) {
267
+ options.wasmBinary = wasmBinary;
268
+ }
269
+ return new Promise((resolve) => {
270
+ BasisModule(options).then((module) => {
271
+ const { BasisFile, initializeBasis } = module;
272
+ initializeBasis();
273
+ resolve({ BasisFile });
274
+ });
275
+ });
276
+ }
277
+ async function loadBasisEncoderModule(options) {
278
+ const modules = options.modules || {};
279
+ if (modules.basisEncoder) {
280
+ return modules.basisEncoder;
281
+ }
282
+ loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);
283
+ return await loadBasisEncoderPromise;
284
+ }
285
+ async function loadBasisEncoder(options) {
286
+ let BASIS_ENCODER = null;
287
+ let wasmBinary = null;
288
+ [BASIS_ENCODER, wasmBinary] = await Promise.all([
289
+ await loadLibrary(BASIS_CDN_ENCODER_JS, "textures", options),
290
+ await loadLibrary(BASIS_CDN_ENCODER_WASM, "textures", options)
291
+ ]);
292
+ BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;
293
+ return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);
294
+ }
295
+ function initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {
296
+ const options = {};
297
+ if (wasmBinary) {
298
+ options.wasmBinary = wasmBinary;
299
+ }
300
+ return new Promise((resolve) => {
301
+ BasisEncoderModule(options).then((module) => {
302
+ const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;
303
+ initializeBasis();
304
+ resolve({ BasisFile, KTX2File, BasisEncoder });
305
+ });
306
+ });
307
+ }
308
+ var VERSION4, BASIS_CDN_ENCODER_WASM, BASIS_CDN_ENCODER_JS, loadBasisTranscoderPromise, loadBasisEncoderPromise;
309
+ var init_basis_module_loader = __esm({
310
+ "src/lib/parsers/basis-module-loader.ts"() {
311
+ init_src();
312
+ VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
313
+ BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
314
+ BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
315
+ }
316
+ });
317
+
318
+ // src/lib/gl-extensions.ts
319
+ var GL_EXTENSIONS_CONSTANTS;
320
+ var init_gl_extensions = __esm({
321
+ "src/lib/gl-extensions.ts"() {
322
+ GL_EXTENSIONS_CONSTANTS = {
323
+ COMPRESSED_RGB_S3TC_DXT1_EXT: 33776,
324
+ COMPRESSED_RGBA_S3TC_DXT1_EXT: 33777,
325
+ COMPRESSED_RGBA_S3TC_DXT3_EXT: 33778,
326
+ COMPRESSED_RGBA_S3TC_DXT5_EXT: 33779,
327
+ COMPRESSED_R11_EAC: 37488,
328
+ COMPRESSED_SIGNED_R11_EAC: 37489,
329
+ COMPRESSED_RG11_EAC: 37490,
330
+ COMPRESSED_SIGNED_RG11_EAC: 37491,
331
+ COMPRESSED_RGB8_ETC2: 37492,
332
+ COMPRESSED_RGBA8_ETC2_EAC: 37493,
333
+ COMPRESSED_SRGB8_ETC2: 37494,
334
+ COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 37495,
335
+ COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37496,
336
+ COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37497,
337
+ COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 35840,
338
+ COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 35842,
339
+ COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 35841,
340
+ COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 35843,
341
+ COMPRESSED_RGB_ETC1_WEBGL: 36196,
342
+ COMPRESSED_RGB_ATC_WEBGL: 35986,
343
+ COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 35987,
344
+ COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 34798,
345
+ COMPRESSED_RGBA_ASTC_4X4_KHR: 37808,
346
+ COMPRESSED_RGBA_ASTC_5X4_KHR: 37809,
347
+ COMPRESSED_RGBA_ASTC_5X5_KHR: 37810,
348
+ COMPRESSED_RGBA_ASTC_6X5_KHR: 37811,
349
+ COMPRESSED_RGBA_ASTC_6X6_KHR: 37812,
350
+ COMPRESSED_RGBA_ASTC_8X5_KHR: 37813,
351
+ COMPRESSED_RGBA_ASTC_8X6_KHR: 37814,
352
+ COMPRESSED_RGBA_ASTC_8X8_KHR: 37815,
353
+ COMPRESSED_RGBA_ASTC_10X5_KHR: 37816,
354
+ COMPRESSED_RGBA_ASTC_10X6_KHR: 37817,
355
+ COMPRESSED_RGBA_ASTC_10X8_KHR: 37818,
356
+ COMPRESSED_RGBA_ASTC_10X10_KHR: 37819,
357
+ COMPRESSED_RGBA_ASTC_12X10_KHR: 37820,
358
+ COMPRESSED_RGBA_ASTC_12X12_KHR: 37821,
359
+ COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 37840,
360
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 37841,
361
+ COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 37842,
362
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 37843,
363
+ COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 37844,
364
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 37845,
365
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 37846,
366
+ COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 37847,
367
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 37848,
368
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 37849,
369
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 37850,
370
+ COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 37851,
371
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 37852,
372
+ COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 37853,
373
+ COMPRESSED_RED_RGTC1_EXT: 36283,
374
+ COMPRESSED_SIGNED_RED_RGTC1_EXT: 36284,
375
+ COMPRESSED_RED_GREEN_RGTC2_EXT: 36285,
376
+ COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 36286,
377
+ COMPRESSED_SRGB_S3TC_DXT1_EXT: 35916,
378
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 35917,
379
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 35918,
380
+ COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 35919
381
+ };
382
+ }
383
+ });
384
+
385
+ // src/lib/utils/texture-formats.ts
386
+ function getSupportedGPUTextureFormats(gl) {
387
+ if (!formats) {
388
+ gl = gl || getWebGLContext() || void 0;
389
+ formats = new Set();
390
+ for (const prefix of BROWSER_PREFIXES) {
391
+ for (const extension in WEBGL_EXTENSIONS) {
392
+ if (gl && gl.getExtension(`${prefix}${extension}`)) {
393
+ const gpuTextureFormat = WEBGL_EXTENSIONS[extension];
394
+ formats.add(gpuTextureFormat);
395
+ }
396
+ }
397
+ }
398
+ }
399
+ return formats;
400
+ }
401
+ function getWebGLContext() {
402
+ try {
403
+ const canvas = document.createElement("canvas");
404
+ return canvas.getContext("webgl");
405
+ } catch (error) {
406
+ return null;
407
+ }
408
+ }
409
+ var BROWSER_PREFIXES, WEBGL_EXTENSIONS, formats;
410
+ var init_texture_formats = __esm({
411
+ "src/lib/utils/texture-formats.ts"() {
412
+ BROWSER_PREFIXES = ["", "WEBKIT_", "MOZ_"];
413
+ WEBGL_EXTENSIONS = {
414
+ WEBGL_compressed_texture_s3tc: "dxt",
415
+ WEBGL_compressed_texture_s3tc_srgb: "dxt-srgb",
416
+ WEBGL_compressed_texture_etc1: "etc1",
417
+ WEBGL_compressed_texture_etc: "etc2",
418
+ WEBGL_compressed_texture_pvrtc: "pvrtc",
419
+ WEBGL_compressed_texture_atc: "atc",
420
+ WEBGL_compressed_texture_astc: "astc",
421
+ EXT_texture_compression_rgtc: "rgtc"
422
+ };
423
+ formats = null;
424
+ }
425
+ });
426
+
427
+ // ../../node_modules/ktx-parse/dist/ktx-parse.modern.js
428
+ function _(t2) {
429
+ return typeof TextDecoder != "undefined" ? new TextDecoder().decode(t2) : Buffer.from(t2).toString("utf8");
430
+ }
431
+ function p(t2) {
432
+ const n2 = new Uint8Array(t2.buffer, t2.byteOffset, e.length);
433
+ if (n2[0] !== e[0] || n2[1] !== e[1] || n2[2] !== e[2] || n2[3] !== e[3] || n2[4] !== e[4] || n2[5] !== e[5] || n2[6] !== e[6] || n2[7] !== e[7] || n2[8] !== e[8] || n2[9] !== e[9] || n2[10] !== e[10] || n2[11] !== e[11])
434
+ throw new Error("Missing KTX 2.0 identifier.");
435
+ const i2 = new U(), s2 = 17 * Uint32Array.BYTES_PER_ELEMENT, a3 = new c(t2, e.length, s2, true);
436
+ i2.vkFormat = a3._nextUint32(), i2.typeSize = a3._nextUint32(), i2.pixelWidth = a3._nextUint32(), i2.pixelHeight = a3._nextUint32(), i2.pixelDepth = a3._nextUint32(), i2.layerCount = a3._nextUint32(), i2.faceCount = a3._nextUint32();
437
+ const r2 = a3._nextUint32();
438
+ i2.supercompressionScheme = a3._nextUint32();
439
+ const o2 = a3._nextUint32(), l2 = a3._nextUint32(), f2 = a3._nextUint32(), h = a3._nextUint32(), g = a3._nextUint64(), p2 = a3._nextUint64(), x = new c(t2, e.length + s2, 3 * r2 * 8, true);
440
+ for (let e2 = 0; e2 < r2; e2++)
441
+ i2.levels.push({ levelData: new Uint8Array(t2.buffer, t2.byteOffset + x._nextUint64(), x._nextUint64()), uncompressedByteLength: x._nextUint64() });
442
+ const u = new c(t2, o2, l2, true), y = { vendorId: u._skip(4)._nextUint16(), descriptorType: u._nextUint16(), versionNumber: u._nextUint16(), descriptorBlockSize: u._nextUint16(), colorModel: u._nextUint8(), colorPrimaries: u._nextUint8(), transferFunction: u._nextUint8(), flags: u._nextUint8(), texelBlockDimension: { x: u._nextUint8() + 1, y: u._nextUint8() + 1, z: u._nextUint8() + 1, w: u._nextUint8() + 1 }, bytesPlane: [u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8()], samples: [] }, D = (y.descriptorBlockSize / 4 - 6) / 4;
443
+ for (let t3 = 0; t3 < D; t3++)
444
+ y.samples[t3] = { bitOffset: u._nextUint16(), bitLength: u._nextUint8(), channelID: u._nextUint8(), samplePosition: [u._nextUint8(), u._nextUint8(), u._nextUint8(), u._nextUint8()], sampleLower: u._nextUint32(), sampleUpper: u._nextUint32() };
445
+ i2.dataFormatDescriptor.length = 0, i2.dataFormatDescriptor.push(y);
446
+ const b2 = new c(t2, f2, h, true);
447
+ for (; b2._offset < h; ) {
448
+ const t3 = b2._nextUint32(), e2 = b2._scan(t3), n3 = _(e2), s3 = b2._scan(t3 - e2.byteLength);
449
+ i2.keyValue[n3] = n3.match(/^ktx/i) ? _(s3) : s3, t3 % 4 && b2._skip(4 - t3 % 4);
450
+ }
451
+ if (p2 <= 0)
452
+ return i2;
453
+ const d = new c(t2, g, p2, true), B = d._nextUint16(), w = d._nextUint16(), A = d._nextUint32(), S = d._nextUint32(), m = d._nextUint32(), L = d._nextUint32(), I = [];
454
+ for (let t3 = 0; t3 < r2; t3++)
455
+ I.push({ imageFlags: d._nextUint32(), rgbSliceByteOffset: d._nextUint32(), rgbSliceByteLength: d._nextUint32(), alphaSliceByteOffset: d._nextUint32(), alphaSliceByteLength: d._nextUint32() });
456
+ const R = g + d._offset, E = R + A, T = E + S, O = T + m, P = new Uint8Array(t2.buffer, t2.byteOffset + R, A), C = new Uint8Array(t2.buffer, t2.byteOffset + E, S), F = new Uint8Array(t2.buffer, t2.byteOffset + T, m), G = new Uint8Array(t2.buffer, t2.byteOffset + O, L);
457
+ return i2.globalData = { endpointCount: B, selectorCount: w, imageDescs: I, endpointsData: P, selectorsData: C, tablesData: F, extendedData: G }, i2;
458
+ }
459
+ var t, e, n, i, s, a, r, o, l, f, U, c;
460
+ var init_ktx_parse_modern = __esm({
461
+ "../../node_modules/ktx-parse/dist/ktx-parse.modern.js"() {
462
+ t = new Uint8Array([0]);
463
+ e = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
464
+ !function(t2) {
465
+ t2[t2.NONE = 0] = "NONE", t2[t2.BASISLZ = 1] = "BASISLZ", t2[t2.ZSTD = 2] = "ZSTD", t2[t2.ZLIB = 3] = "ZLIB";
466
+ }(n || (n = {})), function(t2) {
467
+ t2[t2.BASICFORMAT = 0] = "BASICFORMAT";
468
+ }(i || (i = {})), function(t2) {
469
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.ETC1S = 163] = "ETC1S", t2[t2.UASTC = 166] = "UASTC";
470
+ }(s || (s = {})), function(t2) {
471
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.SRGB = 1] = "SRGB";
472
+ }(a || (a = {})), function(t2) {
473
+ t2[t2.UNSPECIFIED = 0] = "UNSPECIFIED", t2[t2.LINEAR = 1] = "LINEAR", t2[t2.SRGB = 2] = "SRGB", t2[t2.ITU = 3] = "ITU", t2[t2.NTSC = 4] = "NTSC", t2[t2.SLOG = 5] = "SLOG", t2[t2.SLOG2 = 6] = "SLOG2";
474
+ }(r || (r = {})), function(t2) {
475
+ t2[t2.ALPHA_STRAIGHT = 0] = "ALPHA_STRAIGHT", t2[t2.ALPHA_PREMULTIPLIED = 1] = "ALPHA_PREMULTIPLIED";
476
+ }(o || (o = {})), function(t2) {
477
+ t2[t2.RGB = 0] = "RGB", t2[t2.RRR = 3] = "RRR", t2[t2.GGG = 4] = "GGG", t2[t2.AAA = 15] = "AAA";
478
+ }(l || (l = {})), function(t2) {
479
+ t2[t2.RGB = 0] = "RGB", t2[t2.RGBA = 3] = "RGBA", t2[t2.RRR = 4] = "RRR", t2[t2.RRRG = 5] = "RRRG";
480
+ }(f || (f = {}));
481
+ U = class {
482
+ constructor() {
483
+ this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = n.NONE, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: i.BASICFORMAT, versionNumber: 2, descriptorBlockSize: 40, colorModel: s.UNSPECIFIED, colorPrimaries: a.SRGB, transferFunction: a.SRGB, flags: o.ALPHA_STRAIGHT, texelBlockDimension: { x: 4, y: 4, z: 1, w: 1 }, bytesPlane: [], samples: [] }], this.keyValue = {}, this.globalData = null;
484
+ }
485
+ };
486
+ c = class {
487
+ constructor(t2, e2, n2, i2) {
488
+ this._dataView = new DataView(t2.buffer, t2.byteOffset + e2, n2), this._littleEndian = i2, this._offset = 0;
489
+ }
490
+ _nextUint8() {
491
+ const t2 = this._dataView.getUint8(this._offset);
492
+ return this._offset += 1, t2;
493
+ }
494
+ _nextUint16() {
495
+ const t2 = this._dataView.getUint16(this._offset, this._littleEndian);
496
+ return this._offset += 2, t2;
497
+ }
498
+ _nextUint32() {
499
+ const t2 = this._dataView.getUint32(this._offset, this._littleEndian);
500
+ return this._offset += 4, t2;
501
+ }
502
+ _nextUint64() {
503
+ const t2 = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian);
504
+ return this._offset += 8, t2;
505
+ }
506
+ _skip(t2) {
507
+ return this._offset += t2, this;
508
+ }
509
+ _scan(t2, e2 = 0) {
510
+ const n2 = this._offset;
511
+ let i2 = 0;
512
+ for (; this._dataView.getUint8(this._offset) !== e2 && i2 < t2; )
513
+ i2++, this._offset++;
514
+ return i2 < t2 && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + n2, i2);
515
+ }
516
+ };
517
+ }
518
+ });
519
+
520
+ // src/lib/utils/extract-mipmap-images.ts
521
+ function extractMipmapImages(data, options) {
522
+ const images = new Array(options.mipMapLevels);
523
+ let levelWidth = options.width;
524
+ let levelHeight = options.height;
525
+ let offset = 0;
526
+ for (let i2 = 0; i2 < options.mipMapLevels; ++i2) {
527
+ const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i2);
528
+ const levelData = getLevelData(data, i2, offset, levelSize);
529
+ images[i2] = {
530
+ compressed: true,
531
+ format: options.internalFormat,
532
+ data: levelData,
533
+ width: levelWidth,
534
+ height: levelHeight,
535
+ levelSize
536
+ };
537
+ levelWidth = Math.max(1, levelWidth >> 1);
538
+ levelHeight = Math.max(1, levelHeight >> 1);
539
+ offset += levelSize;
540
+ }
541
+ return images;
542
+ }
543
+ function getLevelData(data, index, offset, levelSize) {
544
+ if (!Array.isArray(data)) {
545
+ return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);
546
+ }
547
+ return data[index].levelData;
548
+ }
549
+ function getLevelSize(options, levelWidth, levelHeight, data, index) {
550
+ if (!Array.isArray(data)) {
551
+ return options.sizeFunction(levelWidth, levelHeight);
552
+ }
553
+ return options.sizeFunction(data[index]);
554
+ }
555
+ var init_extract_mipmap_images = __esm({
556
+ "src/lib/utils/extract-mipmap-images.ts"() {
557
+ }
558
+ });
559
+
560
+ // src/lib/utils/ktx-format-helper.ts
561
+ function mapVkFormatToWebGL(vkFormat) {
562
+ return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];
563
+ }
564
+ var VULKAN_TO_WEBGL_FORMAT_MAP;
565
+ var init_ktx_format_helper = __esm({
566
+ "src/lib/utils/ktx-format-helper.ts"() {
567
+ init_gl_extensions();
568
+ VULKAN_TO_WEBGL_FORMAT_MAP = {
569
+ 131: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
570
+ 132: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_S3TC_DXT1_EXT,
571
+ 133: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT1_EXT,
572
+ 134: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
573
+ 135: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
574
+ 136: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
575
+ 137: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
576
+ 138: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
577
+ 139: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_RGTC1_EXT,
578
+ 140: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_RGTC1_EXT,
579
+ 141: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_GREEN_RGTC2_EXT,
580
+ 142: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,
581
+ 147: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2,
582
+ 148: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ETC2,
583
+ 149: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
584
+ 150: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
585
+ 151: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC,
586
+ 152: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
587
+ 153: GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC,
588
+ 154: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_R11_EAC,
589
+ 155: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC,
590
+ 156: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RG11_EAC,
591
+ 157: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,
592
+ 158: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
593
+ 159: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,
594
+ 160: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,
595
+ 161: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,
596
+ 162: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
597
+ 163: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,
598
+ 164: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
599
+ 165: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,
600
+ 166: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
601
+ 167: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,
602
+ 168: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
603
+ 169: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,
604
+ 170: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
605
+ 171: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,
606
+ 172: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
607
+ 173: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,
608
+ 174: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
609
+ 175: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,
610
+ 176: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
611
+ 177: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,
612
+ 178: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
613
+ 179: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,
614
+ 180: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
615
+ 181: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,
616
+ 182: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
617
+ 183: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR,
618
+ 184: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
619
+ 1000054e3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
620
+ 1000054001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
621
+ 1000066e3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,
622
+ 1000066001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,
623
+ 1000066002: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,
624
+ 1000066003: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,
625
+ 1000066004: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,
626
+ 1000066005: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,
627
+ 1000066006: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,
628
+ 1000066007: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,
629
+ 1000066008: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,
630
+ 1000066009: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,
631
+ 1000066010: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,
632
+ 1000066011: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,
633
+ 1000066012: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,
634
+ 1000066013: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR
635
+ };
636
+ }
637
+ });
638
+
639
+ // src/lib/parsers/parse-ktx.ts
640
+ function isKTX(data) {
641
+ const id = new Uint8Array(data);
642
+ const notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];
643
+ return !notKTX;
644
+ }
645
+ function parseKTX(arrayBuffer) {
646
+ const uint8Array = new Uint8Array(arrayBuffer);
647
+ const ktx = p(uint8Array);
648
+ const mipMapLevels = Math.max(1, ktx.levels.length);
649
+ const width = ktx.pixelWidth;
650
+ const height = ktx.pixelHeight;
651
+ const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);
652
+ return extractMipmapImages(ktx.levels, {
653
+ mipMapLevels,
654
+ width,
655
+ height,
656
+ sizeFunction: (level) => level.uncompressedByteLength,
657
+ internalFormat
658
+ });
659
+ }
660
+ var KTX2_ID;
661
+ var init_parse_ktx = __esm({
662
+ "src/lib/parsers/parse-ktx.ts"() {
663
+ init_ktx_parse_modern();
664
+ init_extract_mipmap_images();
665
+ init_ktx_format_helper();
666
+ KTX2_ID = [
667
+ 171,
668
+ 75,
669
+ 84,
670
+ 88,
671
+ 32,
672
+ 50,
673
+ 48,
674
+ 187,
675
+ 13,
676
+ 10,
677
+ 26,
678
+ 10
679
+ ];
680
+ }
681
+ });
682
+
683
+ // src/lib/parsers/parse-basis.ts
684
+ async function parseBasis(data, options) {
685
+ if (options.basis.containerFormat === "auto") {
686
+ if (isKTX(data)) {
687
+ const fileConstructors = await loadBasisEncoderModule(options);
688
+ return parseKTX2File(fileConstructors.KTX2File, data, options);
689
+ }
690
+ const { BasisFile } = await loadBasisTrascoderModule(options);
691
+ return parseBasisFile(BasisFile, data, options);
692
+ }
693
+ switch (options.basis.module) {
694
+ case "encoder":
695
+ const fileConstructors = await loadBasisEncoderModule(options);
696
+ switch (options.basis.containerFormat) {
697
+ case "ktx2":
698
+ return parseKTX2File(fileConstructors.KTX2File, data, options);
699
+ case "basis":
700
+ default:
701
+ return parseBasisFile(fileConstructors.BasisFile, data, options);
702
+ }
703
+ case "transcoder":
704
+ default:
705
+ const { BasisFile } = await loadBasisTrascoderModule(options);
706
+ return parseBasisFile(BasisFile, data, options);
707
+ }
708
+ }
709
+ function parseBasisFile(BasisFile, data, options) {
710
+ const basisFile = new BasisFile(new Uint8Array(data));
711
+ try {
712
+ if (!basisFile.startTranscoding()) {
713
+ throw new Error("Failed to start basis transcoding");
714
+ }
715
+ const imageCount = basisFile.getNumImages();
716
+ const images = [];
717
+ for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {
718
+ const levelsCount = basisFile.getNumLevels(imageIndex);
719
+ const levels = [];
720
+ for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
721
+ levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
722
+ }
723
+ images.push(levels);
724
+ }
725
+ return images;
726
+ } finally {
727
+ basisFile.close();
728
+ basisFile.delete();
729
+ }
730
+ }
731
+ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
732
+ const width = basisFile.getImageWidth(imageIndex, levelIndex);
733
+ const height = basisFile.getImageHeight(imageIndex, levelIndex);
734
+ const hasAlpha = basisFile.getHasAlpha();
735
+ const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);
736
+ const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
737
+ const decodedData = new Uint8Array(decodedSize);
738
+ if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
739
+ throw new Error("failed to start Basis transcoding");
740
+ }
741
+ return {
742
+ width,
743
+ height,
744
+ data: decodedData,
745
+ compressed,
746
+ format,
747
+ hasAlpha
748
+ };
749
+ }
750
+ function parseKTX2File(KTX2File, data, options) {
751
+ const ktx2File = new KTX2File(new Uint8Array(data));
752
+ try {
753
+ if (!ktx2File.startTranscoding()) {
754
+ throw new Error("failed to start KTX2 transcoding");
755
+ }
756
+ const levelsCount = ktx2File.getLevels();
757
+ const levels = [];
758
+ for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
759
+ levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
760
+ break;
761
+ }
762
+ return [levels];
763
+ } finally {
764
+ ktx2File.close();
765
+ ktx2File.delete();
766
+ }
767
+ }
768
+ function transcodeKTX2Image(ktx2File, levelIndex, options) {
769
+ const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);
770
+ const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);
771
+ const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
772
+ const decodedData = new Uint8Array(decodedSize);
773
+ if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
774
+ throw new Error("Failed to transcode KTX2 image");
775
+ }
776
+ return {
777
+ width,
778
+ height,
779
+ data: decodedData,
780
+ compressed,
781
+ levelSize: decodedSize,
782
+ hasAlpha: alphaFlag,
783
+ format
784
+ };
785
+ }
786
+ function getBasisOptions(options, hasAlpha) {
787
+ let format = options && options.basis && options.basis.format;
788
+ if (format === "auto") {
789
+ format = selectSupportedBasisFormat();
790
+ }
791
+ if (typeof format === "object") {
792
+ format = hasAlpha ? format.alpha : format.noAlpha;
793
+ }
794
+ format = format.toLowerCase();
795
+ return OutputFormat[format];
796
+ }
797
+ function selectSupportedBasisFormat() {
798
+ const supportedFormats = getSupportedGPUTextureFormats();
799
+ if (supportedFormats.has("astc")) {
800
+ return "astc-4x4";
801
+ } else if (supportedFormats.has("dxt")) {
802
+ return {
803
+ alpha: "bc3",
804
+ noAlpha: "bc1"
805
+ };
806
+ } else if (supportedFormats.has("pvrtc")) {
807
+ return {
808
+ alpha: "pvrtc1-4-rgba",
809
+ noAlpha: "pvrtc1-4-rgb"
810
+ };
811
+ } else if (supportedFormats.has("etc1")) {
812
+ return "etc1";
813
+ } else if (supportedFormats.has("etc2")) {
814
+ return "etc2";
815
+ }
816
+ return "rgb565";
817
+ }
818
+ var OutputFormat;
819
+ var init_parse_basis = __esm({
820
+ "src/lib/parsers/parse-basis.ts"() {
821
+ init_basis_module_loader();
822
+ init_gl_extensions();
823
+ init_texture_formats();
824
+ init_parse_ktx();
825
+ OutputFormat = {
826
+ etc1: {
827
+ basisFormat: 0,
828
+ compressed: true,
829
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL
830
+ },
831
+ etc2: { basisFormat: 1, compressed: true },
832
+ bc1: {
833
+ basisFormat: 2,
834
+ compressed: true,
835
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT
836
+ },
837
+ bc3: {
838
+ basisFormat: 3,
839
+ compressed: true,
840
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT
841
+ },
842
+ bc4: { basisFormat: 4, compressed: true },
843
+ bc5: { basisFormat: 5, compressed: true },
844
+ "bc7-m6-opaque-only": { basisFormat: 6, compressed: true },
845
+ "bc7-m5": { basisFormat: 7, compressed: true },
846
+ "pvrtc1-4-rgb": {
847
+ basisFormat: 8,
848
+ compressed: true,
849
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
850
+ },
851
+ "pvrtc1-4-rgba": {
852
+ basisFormat: 9,
853
+ compressed: true,
854
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
855
+ },
856
+ "astc-4x4": {
857
+ basisFormat: 10,
858
+ compressed: true,
859
+ format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR
860
+ },
861
+ "atc-rgb": { basisFormat: 11, compressed: true },
862
+ "atc-rgba-interpolated-alpha": { basisFormat: 12, compressed: true },
863
+ rgba32: { basisFormat: 13, compressed: false },
864
+ rgb565: { basisFormat: 14, compressed: false },
865
+ bgr565: { basisFormat: 15, compressed: false },
866
+ rgba4444: { basisFormat: 16, compressed: false }
867
+ };
868
+ }
869
+ });
870
+
871
+ // src/basis-loader.ts
872
+ var BasisWorkerLoader, BasisLoader;
873
+ var init_basis_loader = __esm({
874
+ "src/basis-loader.ts"() {
875
+ init_src();
876
+ init_version2();
877
+ init_parse_basis();
878
+ BasisWorkerLoader = {
879
+ name: "Basis",
880
+ id: isBrowser2 ? "basis" : "basis-nodejs",
881
+ module: "textures",
882
+ version: VERSION3,
883
+ worker: true,
884
+ extensions: ["basis", "ktx2"],
885
+ mimeTypes: ["application/octet-stream", "image/ktx2"],
886
+ tests: ["sB"],
887
+ binary: true,
888
+ options: {
889
+ basis: {
890
+ format: "auto",
891
+ libraryPath: "libs/",
892
+ containerFormat: "auto",
893
+ module: "transcoder"
894
+ }
895
+ }
896
+ };
897
+ BasisLoader = {
898
+ ...BasisWorkerLoader,
899
+ parse: parseBasis
900
+ };
901
+ }
902
+ });
903
+
904
+ // src/lib/parsers/parse-dds.ts
905
+ function isDDS(data) {
906
+ const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
907
+ const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
908
+ return magic === DDS_CONSTANTS.MAGIC_NUMBER;
909
+ }
910
+ function parseDDS(data) {
911
+ const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
912
+ const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
913
+ assert(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), "DDS: Unsupported format, must contain a FourCC code");
914
+ const fourCC = int32ToFourCC(pixelFormatNumber);
915
+ const internalFormat = DDS_PIXEL_FORMATS[fourCC];
916
+ const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
917
+ assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);
918
+ let mipMapLevels = 1;
919
+ if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
920
+ mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
921
+ }
922
+ const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
923
+ const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
924
+ const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
925
+ const image = new Uint8Array(data, dataOffset);
926
+ return extractMipmapImages(image, {
927
+ mipMapLevels,
928
+ width,
929
+ height,
930
+ sizeFunction,
931
+ internalFormat
932
+ });
933
+ }
934
+ function getDxt1LevelSize(width, height) {
935
+ return (width + 3 >> 2) * (height + 3 >> 2) * 8;
936
+ }
937
+ function getDxtXLevelSize(width, height) {
938
+ return (width + 3 >> 2) * (height + 3 >> 2) * 16;
939
+ }
940
+ function int32ToFourCC(value) {
941
+ return String.fromCharCode(value & 255, value >> 8 & 255, value >> 16 & 255, value >> 24 & 255);
942
+ }
943
+ var DDS_CONSTANTS, DDS_PIXEL_FORMATS, getATCLevelSize, getATCALevelSize, getATCILevelSize, DDS_SIZE_FUNCTIONS;
944
+ var init_parse_dds = __esm({
945
+ "src/lib/parsers/parse-dds.ts"() {
946
+ init_src2();
947
+ init_gl_extensions();
948
+ init_extract_mipmap_images();
949
+ DDS_CONSTANTS = {
950
+ MAGIC_NUMBER: 542327876,
951
+ HEADER_LENGTH: 31,
952
+ MAGIC_NUMBER_INDEX: 0,
953
+ HEADER_SIZE_INDEX: 1,
954
+ HEADER_FLAGS_INDEX: 2,
955
+ HEADER_HEIGHT_INDEX: 3,
956
+ HEADER_WIDTH_INDEX: 4,
957
+ MIPMAPCOUNT_INDEX: 7,
958
+ HEADER_PF_FLAGS_INDEX: 20,
959
+ HEADER_PF_FOURCC_INDEX: 21,
960
+ DDSD_MIPMAPCOUNT: 131072,
961
+ DDPF_FOURCC: 4
962
+ };
963
+ DDS_PIXEL_FORMATS = {
964
+ DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
965
+ DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
966
+ DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
967
+ "ATC ": GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,
968
+ ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
969
+ ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL
970
+ };
971
+ getATCLevelSize = getDxt1LevelSize;
972
+ getATCALevelSize = getDxtXLevelSize;
973
+ getATCILevelSize = getDxtXLevelSize;
974
+ DDS_SIZE_FUNCTIONS = {
975
+ DXT1: getDxt1LevelSize,
976
+ DXT3: getDxtXLevelSize,
977
+ DXT5: getDxtXLevelSize,
978
+ "ATC ": getATCLevelSize,
979
+ ATCA: getATCALevelSize,
980
+ ATCI: getATCILevelSize
981
+ };
982
+ }
983
+ });
984
+
985
+ // src/lib/parsers/parse-pvr.ts
986
+ function isPVR(data) {
987
+ const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
988
+ const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];
989
+ return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;
990
+ }
991
+ function parsePVR(data) {
992
+ const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
993
+ const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];
994
+ const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];
995
+ const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];
996
+ const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];
997
+ const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];
998
+ const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];
999
+ const width = header[PVR_CONSTANTS.WIDTH_INDEX];
1000
+ const height = header[PVR_CONSTANTS.HEIGHT_INDEX];
1001
+ const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];
1002
+ const image = new Uint8Array(data, dataOffset);
1003
+ return extractMipmapImages(image, {
1004
+ mipMapLevels,
1005
+ width,
1006
+ height,
1007
+ sizeFunction,
1008
+ internalFormat
1009
+ });
1010
+ }
1011
+ function pvrtc2bppSize(width, height) {
1012
+ width = Math.max(width, 16);
1013
+ height = Math.max(height, 8);
1014
+ return width * height / 4;
1015
+ }
1016
+ function pvrtc4bppSize(width, height) {
1017
+ width = Math.max(width, 8);
1018
+ height = Math.max(height, 8);
1019
+ return width * height / 2;
1020
+ }
1021
+ function dxtEtcSmallSize(width, height) {
1022
+ return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;
1023
+ }
1024
+ function dxtEtcAstcBigSize(width, height) {
1025
+ return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;
1026
+ }
1027
+ function atc5x4Size(width, height) {
1028
+ return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;
1029
+ }
1030
+ function atc5x5Size(width, height) {
1031
+ return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;
1032
+ }
1033
+ function atc6x5Size(width, height) {
1034
+ return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;
1035
+ }
1036
+ function atc6x6Size(width, height) {
1037
+ return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;
1038
+ }
1039
+ function atc8x5Size(width, height) {
1040
+ return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;
1041
+ }
1042
+ function atc8x6Size(width, height) {
1043
+ return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;
1044
+ }
1045
+ function atc8x8Size(width, height) {
1046
+ return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;
1047
+ }
1048
+ function atc10x5Size(width, height) {
1049
+ return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;
1050
+ }
1051
+ function atc10x6Size(width, height) {
1052
+ return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;
1053
+ }
1054
+ function atc10x8Size(width, height) {
1055
+ return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;
1056
+ }
1057
+ function atc10x10Size(width, height) {
1058
+ return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;
1059
+ }
1060
+ function atc12x10Size(width, height) {
1061
+ return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;
1062
+ }
1063
+ function atc12x12Size(width, height) {
1064
+ return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;
1065
+ }
1066
+ var PVR_CONSTANTS, PVR_PIXEL_FORMATS, PVR_SIZE_FUNCTIONS;
1067
+ var init_parse_pvr = __esm({
1068
+ "src/lib/parsers/parse-pvr.ts"() {
1069
+ init_gl_extensions();
1070
+ init_extract_mipmap_images();
1071
+ PVR_CONSTANTS = {
1072
+ MAGIC_NUMBER: 55727696,
1073
+ MAGIC_NUMBER_EXTRA: 1347834371,
1074
+ HEADER_LENGTH: 13,
1075
+ HEADER_SIZE: 52,
1076
+ MAGIC_NUMBER_INDEX: 0,
1077
+ PIXEL_FORMAT_INDEX: 2,
1078
+ COLOUR_SPACE_INDEX: 4,
1079
+ HEIGHT_INDEX: 6,
1080
+ WIDTH_INDEX: 7,
1081
+ MIPMAPCOUNT_INDEX: 11,
1082
+ METADATA_SIZE_INDEX: 12
1083
+ };
1084
+ PVR_PIXEL_FORMATS = {
1085
+ 0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],
1086
+ 1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],
1087
+ 2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],
1088
+ 3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],
1089
+ 6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],
1090
+ 7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],
1091
+ 9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],
1092
+ 11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],
1093
+ 22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],
1094
+ 23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],
1095
+ 24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],
1096
+ 25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],
1097
+ 26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],
1098
+ 27: [
1099
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,
1100
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR
1101
+ ],
1102
+ 28: [
1103
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,
1104
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR
1105
+ ],
1106
+ 29: [
1107
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,
1108
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR
1109
+ ],
1110
+ 30: [
1111
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,
1112
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR
1113
+ ],
1114
+ 31: [
1115
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,
1116
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR
1117
+ ],
1118
+ 32: [
1119
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,
1120
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR
1121
+ ],
1122
+ 33: [
1123
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,
1124
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR
1125
+ ],
1126
+ 34: [
1127
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,
1128
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR
1129
+ ],
1130
+ 35: [
1131
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,
1132
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR
1133
+ ],
1134
+ 36: [
1135
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,
1136
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR
1137
+ ],
1138
+ 37: [
1139
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,
1140
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR
1141
+ ],
1142
+ 38: [
1143
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,
1144
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR
1145
+ ],
1146
+ 39: [
1147
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,
1148
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR
1149
+ ],
1150
+ 40: [
1151
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,
1152
+ GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR
1153
+ ]
1154
+ };
1155
+ PVR_SIZE_FUNCTIONS = {
1156
+ 0: pvrtc2bppSize,
1157
+ 1: pvrtc2bppSize,
1158
+ 2: pvrtc4bppSize,
1159
+ 3: pvrtc4bppSize,
1160
+ 6: dxtEtcSmallSize,
1161
+ 7: dxtEtcSmallSize,
1162
+ 9: dxtEtcAstcBigSize,
1163
+ 11: dxtEtcAstcBigSize,
1164
+ 22: dxtEtcSmallSize,
1165
+ 23: dxtEtcAstcBigSize,
1166
+ 24: dxtEtcSmallSize,
1167
+ 25: dxtEtcSmallSize,
1168
+ 26: dxtEtcAstcBigSize,
1169
+ 27: dxtEtcAstcBigSize,
1170
+ 28: atc5x4Size,
1171
+ 29: atc5x5Size,
1172
+ 30: atc6x5Size,
1173
+ 31: atc6x6Size,
1174
+ 32: atc8x5Size,
1175
+ 33: atc8x6Size,
1176
+ 34: atc8x8Size,
1177
+ 35: atc10x5Size,
1178
+ 36: atc10x6Size,
1179
+ 37: atc10x8Size,
1180
+ 38: atc10x10Size,
1181
+ 39: atc12x10Size,
1182
+ 40: atc12x12Size
1183
+ };
1184
+ }
1185
+ });
1186
+
1187
+ // src/lib/parsers/parse-compressed-texture.ts
1188
+ function parseCompressedTexture(data) {
1189
+ if (isKTX(data)) {
1190
+ return parseKTX(data);
1191
+ }
1192
+ if (isDDS(data)) {
1193
+ return parseDDS(data);
1194
+ }
1195
+ if (isPVR(data)) {
1196
+ return parsePVR(data);
1197
+ }
1198
+ throw new Error("Texture container format not recognized");
1199
+ }
1200
+ var init_parse_compressed_texture = __esm({
1201
+ "src/lib/parsers/parse-compressed-texture.ts"() {
1202
+ init_parse_ktx();
1203
+ init_parse_dds();
1204
+ init_parse_pvr();
1205
+ }
1206
+ });
1207
+
1208
+ // src/compressed-texture-loader.ts
1209
+ var DEFAULT_TEXTURE_LOADER_OPTIONS, CompressedTextureWorkerLoader, CompressedTextureLoader;
1210
+ var init_compressed_texture_loader = __esm({
1211
+ "src/compressed-texture-loader.ts"() {
1212
+ init_version2();
1213
+ init_parse_compressed_texture();
1214
+ init_parse_basis();
1215
+ DEFAULT_TEXTURE_LOADER_OPTIONS = {
1216
+ "compressed-texture": {
1217
+ libraryPath: "libs/",
1218
+ useBasis: false
1219
+ }
1220
+ };
1221
+ CompressedTextureWorkerLoader = {
1222
+ name: "Texture Containers",
1223
+ id: "compressed-texture",
1224
+ module: "textures",
1225
+ version: VERSION3,
1226
+ worker: true,
1227
+ extensions: [
1228
+ "ktx",
1229
+ "ktx2",
1230
+ "dds",
1231
+ "pvr"
1232
+ ],
1233
+ mimeTypes: [
1234
+ "image/ktx2",
1235
+ "image/ktx",
1236
+ "image/vnd-ms.dds",
1237
+ "image/x-dds",
1238
+ "application/octet-stream"
1239
+ ],
1240
+ binary: true,
1241
+ options: DEFAULT_TEXTURE_LOADER_OPTIONS
1242
+ };
1243
+ CompressedTextureLoader = {
1244
+ ...CompressedTextureWorkerLoader,
1245
+ parse: async (arrayBuffer, options) => {
1246
+ if (options["compressed-texture"].useBasis) {
1247
+ options.basis = {
1248
+ format: {
1249
+ alpha: "BC3",
1250
+ noAlpha: "BC1"
1251
+ },
1252
+ ...options.basis,
1253
+ containerFormat: "ktx2",
1254
+ module: "encoder"
1255
+ };
1256
+ return (await parseBasis(arrayBuffer, options))[0];
1257
+ }
1258
+ return parseCompressedTexture(arrayBuffer);
1259
+ }
1260
+ };
1261
+ }
1262
+ });
1263
+
1264
+ // src/crunch-loader.ts
1265
+ var CrunchLoader;
1266
+ var init_crunch_loader = __esm({
1267
+ "src/crunch-loader.ts"() {
1268
+ init_version2();
1269
+ CrunchLoader = {
1270
+ id: "crunch",
1271
+ name: "Crunch",
1272
+ module: "textures",
1273
+ version: VERSION3,
1274
+ worker: true,
1275
+ extensions: ["crn"],
1276
+ mimeTypes: ["image/crn", "image/x-crn", "application/octet-stream"],
1277
+ binary: true,
1278
+ options: {
1279
+ crunch: {
1280
+ libraryPath: "libs/"
1281
+ }
1282
+ }
1283
+ };
1284
+ }
1285
+ });
1286
+
1287
+ // src/lib/parsers/parse-npy.ts
1288
+ function parseNPY(arrayBuffer, options) {
1289
+ const view = new DataView(arrayBuffer);
1290
+ const { header, headerEndOffset } = parseHeader(view);
1291
+ const numpyType = header.descr;
1292
+ const ArrayType = DTYPES[numpyType.slice(1, 3)];
1293
+ if (!ArrayType) {
1294
+ throw new Error(`Unimplemented type ${numpyType}`);
1295
+ }
1296
+ const nArrayElements = header.shape?.reduce((a3, b2) => a3 * b2);
1297
+ const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
1298
+ if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {
1299
+ throw new Error("Buffer overflow");
1300
+ }
1301
+ const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
1302
+ if (numpyType[0] === ">" && LITTLE_ENDIAN_OS || numpyType[0] === "<" && !LITTLE_ENDIAN_OS) {
1303
+ throw new Error("Incorrect endianness");
1304
+ }
1305
+ return {
1306
+ data,
1307
+ header
1308
+ };
1309
+ }
1310
+ function parseHeader(view) {
1311
+ const majorVersion = view.getUint8(6);
1312
+ let offset = 8;
1313
+ let headerLength;
1314
+ if (majorVersion >= 2) {
1315
+ headerLength = view.getUint32(offset, true);
1316
+ offset += 4;
1317
+ } else {
1318
+ headerLength = view.getUint16(offset, true);
1319
+ offset += 2;
1320
+ }
1321
+ const encoding = majorVersion <= 2 ? "latin1" : "utf-8";
1322
+ const decoder = new TextDecoder(encoding);
1323
+ const headerArray = new Uint8Array(view.buffer, offset, headerLength);
1324
+ const headerText = decoder.decode(headerArray);
1325
+ offset += headerLength;
1326
+ const header = JSON.parse(headerText.replace(/'/g, '"').replace("False", "false").replace("(", "[").replace(/,*\),*/g, "]"));
1327
+ return { header, headerEndOffset: offset };
1328
+ }
1329
+ var a2, b, isLittleEndian, LITTLE_ENDIAN_OS, DTYPES;
1330
+ var init_parse_npy = __esm({
1331
+ "src/lib/parsers/parse-npy.ts"() {
1332
+ a2 = new Uint32Array([305419896]);
1333
+ b = new Uint8Array(a2.buffer, a2.byteOffset, a2.byteLength);
1334
+ isLittleEndian = !(b[0] === 18);
1335
+ LITTLE_ENDIAN_OS = isLittleEndian;
1336
+ DTYPES = {
1337
+ u1: Uint8Array,
1338
+ i1: Int8Array,
1339
+ u2: Uint16Array,
1340
+ i2: Int16Array,
1341
+ u4: Uint32Array,
1342
+ i4: Int32Array,
1343
+ f4: Float32Array,
1344
+ f8: Float64Array
1345
+ };
1346
+ }
1347
+ });
1348
+
1349
+ // src/npy-loader.ts
1350
+ var NPY_MAGIC_NUMBER, NPYWorkerLoader, NPYLoader;
1351
+ var init_npy_loader = __esm({
1352
+ "src/npy-loader.ts"() {
1353
+ init_version2();
1354
+ init_parse_npy();
1355
+ NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);
1356
+ NPYWorkerLoader = {
1357
+ name: "NPY",
1358
+ id: "npy",
1359
+ module: "textures",
1360
+ version: VERSION3,
1361
+ worker: true,
1362
+ extensions: ["npy"],
1363
+ mimeTypes: [],
1364
+ tests: [NPY_MAGIC_NUMBER.buffer],
1365
+ options: {
1366
+ npy: {}
1367
+ }
1368
+ };
1369
+ NPYLoader = {
1370
+ ...NPYWorkerLoader,
1371
+ parseSync: parseNPY,
1372
+ parse: async (arrayBuffer, options) => parseNPY(arrayBuffer, options)
1373
+ };
1374
+ }
1375
+ });
1376
+
1377
+ // src/lib/encoders/encode-texture.ts
1378
+ async function encodeImageURLToCompressedTextureURL(inputUrl, outputUrl, options) {
1379
+ const args = [
1380
+ "texture-compressor",
1381
+ "--type",
1382
+ "s3tc",
1383
+ "--compression",
1384
+ "DXT1",
1385
+ "--quality",
1386
+ "normal",
1387
+ "--input",
1388
+ inputUrl,
1389
+ "--output",
1390
+ outputUrl
1391
+ ];
1392
+ const childProcess = new import_child_process_proxy.default();
1393
+ await childProcess.start({
1394
+ command: "npx",
1395
+ arguments: args,
1396
+ spawn: options
1397
+ });
1398
+ return outputUrl;
1399
+ }
1400
+ var init_encode_texture = __esm({
1401
+ "src/lib/encoders/encode-texture.ts"() {
1402
+ init_src();
1403
+ }
1404
+ });
1405
+
1406
+ // src/compressed-texture-writer.ts
1407
+ var CompressedTextureWriter;
1408
+ var init_compressed_texture_writer = __esm({
1409
+ "src/compressed-texture-writer.ts"() {
1410
+ init_version2();
1411
+ init_encode_texture();
1412
+ CompressedTextureWriter = {
1413
+ name: "DDS Texture Container",
1414
+ id: "dds",
1415
+ module: "textures",
1416
+ version: VERSION3,
1417
+ extensions: ["dds"],
1418
+ options: {
1419
+ texture: {
1420
+ format: "auto",
1421
+ compression: "auto",
1422
+ quality: "auto",
1423
+ mipmap: false,
1424
+ flipY: false,
1425
+ toolFlags: ""
1426
+ }
1427
+ },
1428
+ encodeURLtoURL: encodeImageURLToCompressedTextureURL
1429
+ };
1430
+ }
1431
+ });
1432
+
1433
+ // src/lib/encoders/encode-ktx2-basis-texture.ts
1434
+ async function encodeKTX2BasisTexture(image, options = {}) {
1435
+ const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options;
1436
+ const { BasisEncoder } = await loadBasisEncoderModule(options);
1437
+ const basisEncoder = new BasisEncoder();
1438
+ try {
1439
+ const basisFileData = new Uint8Array(image.width * image.height * 4);
1440
+ basisEncoder.setCreateKTX2File(true);
1441
+ basisEncoder.setKTX2UASTCSupercompression(true);
1442
+ basisEncoder.setKTX2SRGBTransferFunc(true);
1443
+ basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);
1444
+ basisEncoder.setPerceptual(useSRGB);
1445
+ basisEncoder.setMipSRGB(useSRGB);
1446
+ basisEncoder.setQualityLevel(qualityLevel);
1447
+ basisEncoder.setUASTC(encodeUASTC);
1448
+ basisEncoder.setMipGen(mipmaps);
1449
+ const numOutputBytes = basisEncoder.encode(basisFileData);
1450
+ const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;
1451
+ return actualKTX2FileData;
1452
+ } catch (error) {
1453
+ console.error("Basis Universal Supercompressed GPU Texture encoder Error: ", error);
1454
+ throw error;
1455
+ } finally {
1456
+ basisEncoder.delete();
1457
+ }
1458
+ }
1459
+ var init_encode_ktx2_basis_texture = __esm({
1460
+ "src/lib/encoders/encode-ktx2-basis-texture.ts"() {
1461
+ init_basis_module_loader();
1462
+ }
1463
+ });
1464
+
1465
+ // src/ktx2-basis-writer.ts
1466
+ var KTX2BasisWriter;
1467
+ var init_ktx2_basis_writer = __esm({
1468
+ "src/ktx2-basis-writer.ts"() {
1469
+ init_version2();
1470
+ init_encode_ktx2_basis_texture();
1471
+ KTX2BasisWriter = {
1472
+ name: "Basis Universal Supercompressed GPU Texture",
1473
+ id: "ktx2-basis-writer",
1474
+ module: "textures",
1475
+ version: VERSION3,
1476
+ extensions: ["ktx2"],
1477
+ options: {
1478
+ useSRGB: false,
1479
+ qualityLevel: 10,
1480
+ encodeUASTC: false,
1481
+ mipmaps: false
1482
+ },
1483
+ encode: encodeKTX2BasisTexture
1484
+ };
1485
+ }
1486
+ });
1487
+
1488
+ // ../images/src/lib/utils/version.ts
1489
+ var VERSION5;
1490
+ var init_version3 = __esm({
1491
+ "../images/src/lib/utils/version.ts"() {
1492
+ VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
1493
+ }
1494
+ });
1495
+
1496
+ // ../images/src/lib/category-api/image-type.ts
1497
+ function isImageTypeSupported(type) {
1498
+ switch (type) {
1499
+ case "auto":
1500
+ return IMAGE_BITMAP_SUPPORTED || IMAGE_SUPPORTED || DATA_SUPPORTED;
1501
+ case "imagebitmap":
1502
+ return IMAGE_BITMAP_SUPPORTED;
1503
+ case "image":
1504
+ return IMAGE_SUPPORTED;
1505
+ case "data":
1506
+ return DATA_SUPPORTED;
1507
+ default:
1508
+ throw new Error(`@loaders.gl/images: image ${type} not supported in this environment`);
1509
+ }
1510
+ }
1511
+ function getDefaultImageType() {
1512
+ if (IMAGE_BITMAP_SUPPORTED) {
1513
+ return "imagebitmap";
1514
+ }
1515
+ if (IMAGE_SUPPORTED) {
1516
+ return "image";
1517
+ }
1518
+ if (DATA_SUPPORTED) {
1519
+ return "data";
1520
+ }
1521
+ throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js");
1522
+ }
1523
+ var _parseImageNode, IMAGE_SUPPORTED, IMAGE_BITMAP_SUPPORTED, NODE_IMAGE_SUPPORTED, DATA_SUPPORTED;
1524
+ var init_image_type = __esm({
1525
+ "../images/src/lib/category-api/image-type.ts"() {
1526
+ init_src2();
1527
+ ({ _parseImageNode } = globalThis);
1528
+ IMAGE_SUPPORTED = typeof Image !== "undefined";
1529
+ IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== "undefined";
1530
+ NODE_IMAGE_SUPPORTED = Boolean(_parseImageNode);
1531
+ DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;
1532
+ }
1533
+ });
1534
+
1535
+ // ../images/src/lib/category-api/parsed-image-api.ts
1536
+ function getImageType(image) {
1537
+ const format = getImageTypeOrNull(image);
1538
+ if (!format) {
1539
+ throw new Error("Not an image");
1540
+ }
1541
+ return format;
1542
+ }
1543
+ function getImageSize(image) {
1544
+ return getImageData(image);
1545
+ }
1546
+ function getImageData(image) {
1547
+ switch (getImageType(image)) {
1548
+ case "data":
1549
+ return image;
1550
+ case "image":
1551
+ case "imagebitmap":
1552
+ const canvas = document.createElement("canvas");
1553
+ const context = canvas.getContext("2d");
1554
+ if (!context) {
1555
+ throw new Error("getImageData");
1556
+ }
1557
+ canvas.width = image.width;
1558
+ canvas.height = image.height;
1559
+ context.drawImage(image, 0, 0);
1560
+ return context.getImageData(0, 0, image.width, image.height);
1561
+ default:
1562
+ throw new Error("getImageData");
1563
+ }
1564
+ }
1565
+ function getImageTypeOrNull(image) {
1566
+ if (typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) {
1567
+ return "imagebitmap";
1568
+ }
1569
+ if (typeof Image !== "undefined" && image instanceof Image) {
1570
+ return "image";
1571
+ }
1572
+ if (image && typeof image === "object" && image.data && image.width && image.height) {
1573
+ return "data";
1574
+ }
1575
+ return null;
1576
+ }
1577
+ var init_parsed_image_api = __esm({
1578
+ "../images/src/lib/category-api/parsed-image-api.ts"() {
1579
+ }
1580
+ });
1581
+
1582
+ // ../images/src/lib/parsers/svg-utils.ts
1583
+ function isSVG(url) {
1584
+ return url && (SVG_DATA_URL_PATTERN.test(url) || SVG_URL_PATTERN.test(url));
1585
+ }
1586
+ function getBlobOrSVGDataUrl(arrayBuffer, url) {
1587
+ if (isSVG(url)) {
1588
+ const textDecoder = new TextDecoder();
1589
+ let xmlText = textDecoder.decode(arrayBuffer);
1590
+ try {
1591
+ if (typeof unescape === "function" && typeof encodeURIComponent === "function") {
1592
+ xmlText = unescape(encodeURIComponent(xmlText));
1593
+ }
1594
+ } catch (error) {
1595
+ throw new Error(error.message);
1596
+ }
1597
+ const src = `data:image/svg+xml;base64,${btoa(xmlText)}`;
1598
+ return src;
1599
+ }
1600
+ return getBlob(arrayBuffer, url);
1601
+ }
1602
+ function getBlob(arrayBuffer, url) {
1603
+ if (isSVG(url)) {
1604
+ throw new Error("SVG cannot be parsed directly to imagebitmap");
1605
+ }
1606
+ return new Blob([new Uint8Array(arrayBuffer)]);
1607
+ }
1608
+ var SVG_DATA_URL_PATTERN, SVG_URL_PATTERN;
1609
+ var init_svg_utils = __esm({
1610
+ "../images/src/lib/parsers/svg-utils.ts"() {
1611
+ SVG_DATA_URL_PATTERN = /^data:image\/svg\+xml/;
1612
+ SVG_URL_PATTERN = /\.svg((\?|#).*)?$/;
1613
+ }
1614
+ });
1615
+
1616
+ // ../images/src/lib/parsers/parse-to-image.ts
1617
+ async function parseToImage(arrayBuffer, options, url) {
1618
+ const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);
1619
+ const URL = self.URL || self.webkitURL;
1620
+ const objectUrl = typeof blobOrDataUrl !== "string" && URL.createObjectURL(blobOrDataUrl);
1621
+ try {
1622
+ return await loadToImage(objectUrl || blobOrDataUrl, options);
1623
+ } finally {
1624
+ if (objectUrl) {
1625
+ URL.revokeObjectURL(objectUrl);
1626
+ }
1627
+ }
1628
+ }
1629
+ async function loadToImage(url, options) {
1630
+ const image = new Image();
1631
+ image.src = url;
1632
+ if (options.image && options.image.decode && image.decode) {
1633
+ await image.decode();
1634
+ return image;
1635
+ }
1636
+ return await new Promise((resolve, reject) => {
1637
+ try {
1638
+ image.onload = () => resolve(image);
1639
+ image.onerror = (err) => reject(new Error(`Could not load image ${url}: ${err}`));
1640
+ } catch (error) {
1641
+ reject(error);
1642
+ }
1643
+ });
1644
+ }
1645
+ var init_parse_to_image = __esm({
1646
+ "../images/src/lib/parsers/parse-to-image.ts"() {
1647
+ init_svg_utils();
1648
+ }
1649
+ });
1650
+
1651
+ // ../images/src/lib/parsers/parse-to-image-bitmap.ts
1652
+ async function parseToImageBitmap(arrayBuffer, options, url) {
1653
+ let blob;
1654
+ if (isSVG(url)) {
1655
+ const image = await parseToImage(arrayBuffer, options, url);
1656
+ blob = image;
1657
+ } else {
1658
+ blob = getBlob(arrayBuffer, url);
1659
+ }
1660
+ const imagebitmapOptions = options && options.imagebitmap;
1661
+ return await safeCreateImageBitmap(blob, imagebitmapOptions);
1662
+ }
1663
+ async function safeCreateImageBitmap(blob, imagebitmapOptions = null) {
1664
+ if (isEmptyObject(imagebitmapOptions) || !imagebitmapOptionsSupported) {
1665
+ imagebitmapOptions = null;
1666
+ }
1667
+ if (imagebitmapOptions) {
1668
+ try {
1669
+ return await createImageBitmap(blob, imagebitmapOptions);
1670
+ } catch (error) {
1671
+ console.warn(error);
1672
+ imagebitmapOptionsSupported = false;
1673
+ }
1674
+ }
1675
+ return await createImageBitmap(blob);
1676
+ }
1677
+ function isEmptyObject(object) {
1678
+ for (const key in object || EMPTY_OBJECT) {
1679
+ return false;
1680
+ }
1681
+ return true;
1682
+ }
1683
+ var EMPTY_OBJECT, imagebitmapOptionsSupported;
1684
+ var init_parse_to_image_bitmap = __esm({
1685
+ "../images/src/lib/parsers/parse-to-image-bitmap.ts"() {
1686
+ init_svg_utils();
1687
+ init_parse_to_image();
1688
+ EMPTY_OBJECT = {};
1689
+ imagebitmapOptionsSupported = true;
1690
+ }
1691
+ });
1692
+
1693
+ // ../images/src/lib/category-api/parse-isobmff-binary.ts
1694
+ function getISOBMFFMediaType(buffer) {
1695
+ if (!checkString(buffer, "ftyp", 4)) {
1696
+ return null;
1697
+ }
1698
+ if ((buffer[8] & 96) === 0) {
1699
+ return null;
1700
+ }
1701
+ return decodeMajorBrand(buffer);
1702
+ }
1703
+ function decodeMajorBrand(buffer) {
1704
+ const brandMajor = getUTF8String(buffer, 8, 12).replace("\0", " ").trim();
1705
+ switch (brandMajor) {
1706
+ case "avif":
1707
+ case "avis":
1708
+ return { extension: "avif", mimeType: "image/avif" };
1709
+ default:
1710
+ return null;
1711
+ }
1712
+ }
1713
+ function getUTF8String(array, start, end) {
1714
+ return String.fromCharCode(...array.slice(start, end));
1715
+ }
1716
+ function stringToBytes(string) {
1717
+ return [...string].map((character) => character.charCodeAt(0));
1718
+ }
1719
+ function checkString(buffer, header, offset = 0) {
1720
+ const headerBytes = stringToBytes(header);
1721
+ for (let i2 = 0; i2 < headerBytes.length; ++i2) {
1722
+ if (headerBytes[i2] !== buffer[i2 + offset]) {
1723
+ return false;
1724
+ }
1725
+ }
1726
+ return true;
1727
+ }
1728
+ var init_parse_isobmff_binary = __esm({
1729
+ "../images/src/lib/category-api/parse-isobmff-binary.ts"() {
1730
+ }
1731
+ });
1732
+
1733
+ // ../images/src/lib/category-api/binary-image-api.ts
1734
+ function getBinaryImageMetadata(binaryData) {
1735
+ const dataView = toDataView(binaryData);
1736
+ return getPngMetadata(dataView) || getJpegMetadata(dataView) || getGifMetadata(dataView) || getBmpMetadata(dataView) || getISOBMFFMetadata(dataView);
1737
+ }
1738
+ function getISOBMFFMetadata(binaryData) {
1739
+ const buffer = new Uint8Array(binaryData instanceof DataView ? binaryData.buffer : binaryData);
1740
+ const mediaType = getISOBMFFMediaType(buffer);
1741
+ if (!mediaType) {
1742
+ return null;
1743
+ }
1744
+ return {
1745
+ mimeType: mediaType.mimeType,
1746
+ width: 0,
1747
+ height: 0
1748
+ };
1749
+ }
1750
+ function getPngMetadata(binaryData) {
1751
+ const dataView = toDataView(binaryData);
1752
+ const isPng = dataView.byteLength >= 24 && dataView.getUint32(0, BIG_ENDIAN) === 2303741511;
1753
+ if (!isPng) {
1754
+ return null;
1755
+ }
1756
+ return {
1757
+ mimeType: "image/png",
1758
+ width: dataView.getUint32(16, BIG_ENDIAN),
1759
+ height: dataView.getUint32(20, BIG_ENDIAN)
1760
+ };
1761
+ }
1762
+ function getGifMetadata(binaryData) {
1763
+ const dataView = toDataView(binaryData);
1764
+ const isGif = dataView.byteLength >= 10 && dataView.getUint32(0, BIG_ENDIAN) === 1195984440;
1765
+ if (!isGif) {
1766
+ return null;
1767
+ }
1768
+ return {
1769
+ mimeType: "image/gif",
1770
+ width: dataView.getUint16(6, LITTLE_ENDIAN),
1771
+ height: dataView.getUint16(8, LITTLE_ENDIAN)
1772
+ };
1773
+ }
1774
+ function getBmpMetadata(binaryData) {
1775
+ const dataView = toDataView(binaryData);
1776
+ const isBmp = dataView.byteLength >= 14 && dataView.getUint16(0, BIG_ENDIAN) === 16973 && dataView.getUint32(2, LITTLE_ENDIAN) === dataView.byteLength;
1777
+ if (!isBmp) {
1778
+ return null;
1779
+ }
1780
+ return {
1781
+ mimeType: "image/bmp",
1782
+ width: dataView.getUint32(18, LITTLE_ENDIAN),
1783
+ height: dataView.getUint32(22, LITTLE_ENDIAN)
1784
+ };
1785
+ }
1786
+ function getJpegMetadata(binaryData) {
1787
+ const dataView = toDataView(binaryData);
1788
+ const isJpeg = dataView.byteLength >= 3 && dataView.getUint16(0, BIG_ENDIAN) === 65496 && dataView.getUint8(2) === 255;
1789
+ if (!isJpeg) {
1790
+ return null;
1791
+ }
1792
+ const { tableMarkers, sofMarkers } = getJpegMarkers();
1793
+ let i2 = 2;
1794
+ while (i2 + 9 < dataView.byteLength) {
1795
+ const marker = dataView.getUint16(i2, BIG_ENDIAN);
1796
+ if (sofMarkers.has(marker)) {
1797
+ return {
1798
+ mimeType: "image/jpeg",
1799
+ height: dataView.getUint16(i2 + 5, BIG_ENDIAN),
1800
+ width: dataView.getUint16(i2 + 7, BIG_ENDIAN)
1801
+ };
1802
+ }
1803
+ if (!tableMarkers.has(marker)) {
1804
+ return null;
1805
+ }
1806
+ i2 += 2;
1807
+ i2 += dataView.getUint16(i2, BIG_ENDIAN);
1808
+ }
1809
+ return null;
1810
+ }
1811
+ function getJpegMarkers() {
1812
+ const tableMarkers = new Set([65499, 65476, 65484, 65501, 65534]);
1813
+ for (let i2 = 65504; i2 < 65520; ++i2) {
1814
+ tableMarkers.add(i2);
1815
+ }
1816
+ const sofMarkers = new Set([
1817
+ 65472,
1818
+ 65473,
1819
+ 65474,
1820
+ 65475,
1821
+ 65477,
1822
+ 65478,
1823
+ 65479,
1824
+ 65481,
1825
+ 65482,
1826
+ 65483,
1827
+ 65485,
1828
+ 65486,
1829
+ 65487,
1830
+ 65502
1831
+ ]);
1832
+ return { tableMarkers, sofMarkers };
1833
+ }
1834
+ function toDataView(data) {
1835
+ if (data instanceof DataView) {
1836
+ return data;
1837
+ }
1838
+ if (ArrayBuffer.isView(data)) {
1839
+ return new DataView(data.buffer);
1840
+ }
1841
+ if (data instanceof ArrayBuffer) {
1842
+ return new DataView(data);
1843
+ }
1844
+ throw new Error("toDataView");
1845
+ }
1846
+ var BIG_ENDIAN, LITTLE_ENDIAN;
1847
+ var init_binary_image_api = __esm({
1848
+ "../images/src/lib/category-api/binary-image-api.ts"() {
1849
+ init_parse_isobmff_binary();
1850
+ BIG_ENDIAN = false;
1851
+ LITTLE_ENDIAN = true;
1852
+ }
1853
+ });
1854
+
1855
+ // ../images/src/lib/parsers/parse-to-node-image.ts
1856
+ async function parseToNodeImage(arrayBuffer, options) {
1857
+ const { mimeType } = getBinaryImageMetadata(arrayBuffer) || {};
1858
+ const _parseImageNode2 = globalThis._parseImageNode;
1859
+ assert(_parseImageNode2);
1860
+ return await _parseImageNode2(arrayBuffer, mimeType);
1861
+ }
1862
+ var init_parse_to_node_image = __esm({
1863
+ "../images/src/lib/parsers/parse-to-node-image.ts"() {
1864
+ init_src2();
1865
+ init_binary_image_api();
1866
+ }
1867
+ });
1868
+
1869
+ // ../images/src/lib/parsers/parse-image.ts
1870
+ async function parseImage(arrayBuffer, options, context) {
1871
+ options = options || {};
1872
+ const imageOptions = options.image || {};
1873
+ const imageType = imageOptions.type || "auto";
1874
+ const { url } = context || {};
1875
+ const loadType = getLoadableImageType(imageType);
1876
+ let image;
1877
+ switch (loadType) {
1878
+ case "imagebitmap":
1879
+ image = await parseToImageBitmap(arrayBuffer, options, url);
1880
+ break;
1881
+ case "image":
1882
+ image = await parseToImage(arrayBuffer, options, url);
1883
+ break;
1884
+ case "data":
1885
+ image = await parseToNodeImage(arrayBuffer, options);
1886
+ break;
1887
+ default:
1888
+ assert(false);
1889
+ }
1890
+ if (imageType === "data") {
1891
+ image = getImageData(image);
1892
+ }
1893
+ return image;
1894
+ }
1895
+ function getLoadableImageType(type) {
1896
+ switch (type) {
1897
+ case "auto":
1898
+ case "data":
1899
+ return getDefaultImageType();
1900
+ default:
1901
+ isImageTypeSupported(type);
1902
+ return type;
1903
+ }
1904
+ }
1905
+ var init_parse_image = __esm({
1906
+ "../images/src/lib/parsers/parse-image.ts"() {
1907
+ init_src2();
1908
+ init_image_type();
1909
+ init_parsed_image_api();
1910
+ init_parse_to_image();
1911
+ init_parse_to_image_bitmap();
1912
+ init_parse_to_node_image();
1913
+ }
1914
+ });
1915
+
1916
+ // ../images/src/image-loader.ts
1917
+ var EXTENSIONS, MIME_TYPES, DEFAULT_IMAGE_LOADER_OPTIONS, ImageLoader;
1918
+ var init_image_loader = __esm({
1919
+ "../images/src/image-loader.ts"() {
1920
+ init_version3();
1921
+ init_parse_image();
1922
+ init_binary_image_api();
1923
+ EXTENSIONS = ["png", "jpg", "jpeg", "gif", "webp", "bmp", "ico", "svg", "avif"];
1924
+ MIME_TYPES = [
1925
+ "image/png",
1926
+ "image/jpeg",
1927
+ "image/gif",
1928
+ "image/webp",
1929
+ "image/avif",
1930
+ "image/bmp",
1931
+ "image/vnd.microsoft.icon",
1932
+ "image/svg+xml"
1933
+ ];
1934
+ DEFAULT_IMAGE_LOADER_OPTIONS = {
1935
+ image: {
1936
+ type: "auto",
1937
+ decode: true
1938
+ }
1939
+ };
1940
+ ImageLoader = {
1941
+ id: "image",
1942
+ module: "images",
1943
+ name: "Images",
1944
+ version: VERSION5,
1945
+ mimeTypes: MIME_TYPES,
1946
+ extensions: EXTENSIONS,
1947
+ parse: parseImage,
1948
+ tests: [(arrayBuffer) => Boolean(getBinaryImageMetadata(new DataView(arrayBuffer)))],
1949
+ options: DEFAULT_IMAGE_LOADER_OPTIONS
1950
+ };
1951
+ }
1952
+ });
1953
+
1954
+ // ../images/src/index.ts
1955
+ var init_src3 = __esm({
1956
+ "../images/src/index.ts"() {
1957
+ init_image_loader();
1958
+ init_parsed_image_api();
1959
+ }
1960
+ });
1961
+
1962
+ // src/lib/texture-api/generate-url.ts
1963
+ function generateUrl(getUrl, options, urlOptions) {
1964
+ let url = typeof getUrl === "function" ? getUrl({ ...options, ...urlOptions }) : getUrl;
1965
+ const baseUrl = options.baseUrl;
1966
+ if (baseUrl) {
1967
+ url = baseUrl[baseUrl.length - 1] === "/" ? `${baseUrl}${url}` : `${baseUrl}/${url}`;
1968
+ }
1969
+ return resolvePath(url);
1970
+ }
1971
+ var init_generate_url = __esm({
1972
+ "src/lib/texture-api/generate-url.ts"() {
1973
+ init_src2();
1974
+ }
1975
+ });
1976
+
1977
+ // src/lib/texture-api/async-deep-map.ts
1978
+ async function asyncDeepMap(tree, func, options = {}) {
1979
+ return await mapSubtree(tree, func, options);
1980
+ }
1981
+ async function mapSubtree(object, func, options) {
1982
+ if (Array.isArray(object)) {
1983
+ return await mapArray(object, func, options);
1984
+ }
1985
+ if (isObject(object)) {
1986
+ return await mapObject(object, func, options);
1987
+ }
1988
+ const url = object;
1989
+ return await func(url, options);
1990
+ }
1991
+ async function mapObject(object, func, options) {
1992
+ const promises = [];
1993
+ const values = {};
1994
+ for (const key in object) {
1995
+ const url = object[key];
1996
+ const promise = mapSubtree(url, func, options).then((value) => {
1997
+ values[key] = value;
1998
+ });
1999
+ promises.push(promise);
2000
+ }
2001
+ await Promise.all(promises);
2002
+ return values;
2003
+ }
2004
+ async function mapArray(urlArray, func, options = {}) {
2005
+ const promises = urlArray.map((url) => mapSubtree(url, func, options));
2006
+ return await Promise.all(promises);
2007
+ }
2008
+ var isObject;
2009
+ var init_async_deep_map = __esm({
2010
+ "src/lib/texture-api/async-deep-map.ts"() {
2011
+ isObject = (value) => value && typeof value === "object";
2012
+ }
2013
+ });
2014
+
2015
+ // src/lib/texture-api/deep-load.ts
2016
+ async function deepLoad(urlTree, load, options) {
2017
+ return await asyncDeepMap(urlTree, (url) => shallowLoad(url, load, options));
2018
+ }
2019
+ async function shallowLoad(url, load, options) {
2020
+ const response = await fetch(url, options.fetch);
2021
+ const arrayBuffer = await response.arrayBuffer();
2022
+ return await load(arrayBuffer, options);
2023
+ }
2024
+ var init_deep_load = __esm({
2025
+ "src/lib/texture-api/deep-load.ts"() {
2026
+ init_async_deep_map();
2027
+ }
2028
+ });
2029
+
2030
+ // src/lib/texture-api/load-image.ts
2031
+ async function loadImageTexture(getUrl, options = {}) {
2032
+ const imageUrls = await getImageUrls(getUrl, options);
2033
+ return await deepLoad(imageUrls, ImageLoader.parse, options);
2034
+ }
2035
+ async function getImageUrls(getUrl, options, urlOptions = {}) {
2036
+ const mipLevels = options && options.image && options.image.mipLevels || 0;
2037
+ return mipLevels !== 0 ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) : generateUrl(getUrl, options, urlOptions);
2038
+ }
2039
+ async function getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) {
2040
+ const urls = [];
2041
+ if (mipLevels === "auto") {
2042
+ const url = generateUrl(getUrl, options, { ...urlOptions, lod: 0 });
2043
+ const image = await shallowLoad(url, ImageLoader.parse, options);
2044
+ const { width, height } = getImageSize(image);
2045
+ mipLevels = getMipLevels({ width, height });
2046
+ urls.push(url);
2047
+ }
2048
+ assert(mipLevels > 0);
2049
+ for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {
2050
+ const url = generateUrl(getUrl, options, { ...urlOptions, lod: mipLevel });
2051
+ urls.push(url);
2052
+ }
2053
+ return urls;
2054
+ }
2055
+ function getMipLevels(size) {
2056
+ return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));
2057
+ }
2058
+ var init_load_image = __esm({
2059
+ "src/lib/texture-api/load-image.ts"() {
2060
+ init_src2();
2061
+ init_src3();
2062
+ init_generate_url();
2063
+ init_deep_load();
2064
+ }
2065
+ });
2066
+
2067
+ // src/lib/texture-api/load-image-array.ts
2068
+ async function loadImageTextureArray(count, getUrl, options = {}) {
2069
+ const imageUrls = await getImageArrayUrls(count, getUrl, options);
2070
+ return await deepLoad(imageUrls, ImageLoader.parse, options);
2071
+ }
2072
+ async function getImageArrayUrls(count, getUrl, options = {}) {
2073
+ const promises = [];
2074
+ for (let index = 0; index < count; index++) {
2075
+ const promise = getImageUrls(getUrl, options, { index });
2076
+ promises.push(promise);
2077
+ }
2078
+ return await Promise.all(promises);
2079
+ }
2080
+ var init_load_image_array = __esm({
2081
+ "src/lib/texture-api/load-image-array.ts"() {
2082
+ init_src3();
2083
+ init_load_image();
2084
+ init_deep_load();
2085
+ }
2086
+ });
2087
+
2088
+ // src/lib/texture-api/load-image-cube.ts
2089
+ async function getImageCubeUrls(getUrl, options) {
2090
+ const urls = {};
2091
+ const promises = [];
2092
+ let index = 0;
2093
+ for (let i2 = 0; i2 < CUBE_FACES.length; ++i2) {
2094
+ const face = CUBE_FACES[index];
2095
+ const promise = getImageUrls(getUrl, options, { ...face, index: index++ }).then((url) => {
2096
+ urls[face.face] = url;
2097
+ });
2098
+ promises.push(promise);
2099
+ }
2100
+ await Promise.all(promises);
2101
+ return urls;
2102
+ }
2103
+ async function loadImageTextureCube(getUrl, options = {}) {
2104
+ const urls = await getImageCubeUrls(getUrl, options);
2105
+ return await deepLoad(urls, ImageLoader.parse, options);
2106
+ }
2107
+ var GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, CUBE_FACES;
2108
+ var init_load_image_cube = __esm({
2109
+ "src/lib/texture-api/load-image-cube.ts"() {
2110
+ init_src3();
2111
+ init_load_image();
2112
+ init_deep_load();
2113
+ GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069;
2114
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070;
2115
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071;
2116
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072;
2117
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073;
2118
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074;
2119
+ CUBE_FACES = [
2120
+ { face: GL_TEXTURE_CUBE_MAP_POSITIVE_X, direction: "right", axis: "x", sign: "positive" },
2121
+ { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X, direction: "left", axis: "x", sign: "negative" },
2122
+ { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, direction: "top", axis: "y", sign: "positive" },
2123
+ { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, direction: "bottom", axis: "y", sign: "negative" },
2124
+ { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z, direction: "front", axis: "z", sign: "positive" },
2125
+ { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, direction: "back", axis: "z", sign: "negative" }
2126
+ ];
2127
+ }
2128
+ });
2129
+
2130
+ // src/index.ts
2131
+ var src_exports = {};
2132
+ __export(src_exports, {
2133
+ BasisLoader: () => BasisLoader,
2134
+ BasisWorkerLoader: () => BasisWorkerLoader,
2135
+ CompressedTextureLoader: () => CompressedTextureLoader,
2136
+ CompressedTextureWorkerLoader: () => CompressedTextureWorkerLoader,
2137
+ CompressedTextureWriter: () => CompressedTextureWriter,
2138
+ CrunchLoader: () => CrunchLoader,
2139
+ CrunchWorkerLoader: () => CrunchLoader,
2140
+ GL_EXTENSIONS_CONSTANTS: () => GL_EXTENSIONS_CONSTANTS,
2141
+ KTX2BasisWriter: () => KTX2BasisWriter,
2142
+ KTX2BasisWriterWorker: () => KTX2BasisWriterWorker,
2143
+ NPYLoader: () => NPYLoader,
2144
+ NPYWorkerLoader: () => NPYWorkerLoader,
2145
+ getSupportedGPUTextureFormats: () => getSupportedGPUTextureFormats,
2146
+ loadImageTexture: () => loadImageTexture,
2147
+ loadImageTextureArray: () => loadImageTextureArray,
2148
+ loadImageTextureCube: () => loadImageTextureCube,
2149
+ selectSupportedBasisFormat: () => selectSupportedBasisFormat
2150
+ });
2151
+ var KTX2BasisWriterWorker;
2152
+ var init_src4 = __esm({
2153
+ "src/index.ts"() {
2154
+ init_src2();
2155
+ init_version2();
2156
+ init_basis_loader();
2157
+ init_compressed_texture_loader();
2158
+ init_crunch_loader();
2159
+ init_npy_loader();
2160
+ init_compressed_texture_writer();
2161
+ init_ktx2_basis_writer();
2162
+ init_load_image();
2163
+ init_load_image_array();
2164
+ init_load_image_cube();
2165
+ init_gl_extensions();
2166
+ init_parse_basis();
2167
+ init_texture_formats();
2168
+ init_crunch_loader();
2169
+ KTX2BasisWriterWorker = {
2170
+ name: "Basis Universal Supercompressed GPU Texture",
2171
+ id: isBrowser ? "ktx2-basis-writer" : "ktx2-basis-writer-nodejs",
2172
+ module: "textures",
2173
+ version: VERSION3,
2174
+ extensions: ["ktx2"],
2175
+ worker: true,
2176
+ options: {
2177
+ useSRGB: false,
2178
+ qualityLevel: 10,
2179
+ encodeUASTC: false,
2180
+ mipmaps: false
2181
+ }
2182
+ };
2183
+ }
2184
+ });
2185
+
2186
+ // src/bundle.ts
2187
+ var require_bundle = __commonJS({
2188
+ "src/bundle.ts"(exports, module) {
2189
+ var moduleExports = (init_src4(), src_exports);
2190
+ globalThis.loaders = globalThis.loaders || {};
2191
+ module.exports = Object.assign(globalThis.loaders, moduleExports);
2192
+ }
2193
+ });
2194
+ require_bundle();
2195
+ })();