@loaders.gl/scene 5.0.0-beta.1 → 5.0.0-beta.2

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 (437) hide show
  1. package/DRACO-README.md +15 -0
  2. package/README.md +7 -1
  3. package/THIRD-PARTY-NOTICES.md +4 -1
  4. package/dist/dist.dev.js +5708 -4937
  5. package/dist/dist.min.js +24 -24
  6. package/dist/draco/bundled.cjs +37 -0
  7. package/dist/draco/bundled.cjs.map +7 -0
  8. package/dist/draco/bundled.d.ts +6 -0
  9. package/dist/draco/bundled.d.ts.map +1 -0
  10. package/dist/draco/bundled.js +7 -0
  11. package/dist/draco/bundled.js.map +1 -0
  12. package/dist/draco/draco-format.cjs +41 -0
  13. package/dist/draco/draco-format.cjs.map +7 -0
  14. package/dist/draco/draco-format.d.ts +15 -0
  15. package/dist/draco/draco-format.d.ts.map +1 -0
  16. package/dist/draco/draco-format.js +18 -0
  17. package/dist/draco/draco-format.js.map +1 -0
  18. package/dist/draco/draco-javascript-loader-with-parser.cjs +44 -0
  19. package/dist/draco/draco-javascript-loader-with-parser.cjs.map +7 -0
  20. package/dist/draco/draco-javascript-loader-with-parser.d.ts +34 -0
  21. package/dist/draco/draco-javascript-loader-with-parser.d.ts.map +1 -0
  22. package/dist/draco/draco-javascript-loader-with-parser.js +14 -0
  23. package/dist/draco/draco-javascript-loader-with-parser.js.map +1 -0
  24. package/dist/draco/draco-libraries.cjs +61 -0
  25. package/dist/draco/draco-libraries.cjs.map +7 -0
  26. package/dist/draco/draco-libraries.d.ts +28 -0
  27. package/dist/draco/draco-libraries.d.ts.map +1 -0
  28. package/dist/draco/draco-libraries.js +33 -0
  29. package/dist/draco/draco-libraries.js.map +1 -0
  30. package/dist/draco/draco-library-options.cjs +80 -0
  31. package/dist/draco/draco-library-options.cjs.map +7 -0
  32. package/dist/draco/draco-library-options.d.ts +16 -0
  33. package/dist/draco/draco-library-options.d.ts.map +1 -0
  34. package/dist/draco/draco-library-options.js +52 -0
  35. package/dist/draco/draco-library-options.js.map +1 -0
  36. package/dist/draco/draco-loader-options.cjs +37 -0
  37. package/dist/draco/draco-loader-options.cjs.map +7 -0
  38. package/dist/draco/draco-loader-options.d.ts +27 -0
  39. package/dist/draco/draco-loader-options.d.ts.map +1 -0
  40. package/dist/draco/draco-loader-options.js +12 -0
  41. package/dist/draco/draco-loader-options.js.map +1 -0
  42. package/dist/draco/draco-loader-types.cjs +88 -0
  43. package/dist/draco/draco-loader-types.cjs.map +7 -0
  44. package/dist/draco/draco-loader-types.d.ts +69 -0
  45. package/dist/draco/draco-loader-types.d.ts.map +1 -0
  46. package/dist/draco/draco-loader-types.js +54 -0
  47. package/dist/draco/draco-loader-types.js.map +1 -0
  48. package/dist/draco/draco-loader.cjs +51 -0
  49. package/dist/draco/draco-loader.cjs.map +7 -0
  50. package/dist/draco/draco-loader.d.ts +39 -0
  51. package/dist/draco/draco-loader.d.ts.map +1 -0
  52. package/dist/draco/draco-loader.js +22 -0
  53. package/dist/draco/draco-loader.js.map +1 -0
  54. package/dist/draco/draco-wasm-loader-with-parser.cjs +48 -0
  55. package/dist/draco/draco-wasm-loader-with-parser.cjs.map +7 -0
  56. package/dist/draco/draco-wasm-loader-with-parser.d.ts +34 -0
  57. package/dist/draco/draco-wasm-loader-with-parser.d.ts.map +1 -0
  58. package/dist/draco/draco-wasm-loader-with-parser.js +14 -0
  59. package/dist/draco/draco-wasm-loader-with-parser.js.map +1 -0
  60. package/dist/draco/draco-writer.cjs +183 -0
  61. package/dist/draco/draco-writer.cjs.map +7 -0
  62. package/dist/draco/draco-writer.d.ts +97 -0
  63. package/dist/draco/draco-writer.d.ts.map +1 -0
  64. package/dist/draco/draco-writer.js +166 -0
  65. package/dist/draco/draco-writer.js.map +1 -0
  66. package/dist/draco/draco3d/draco3d-types.cjs +76 -0
  67. package/dist/draco/draco3d/draco3d-types.cjs.map +7 -0
  68. package/dist/draco/draco3d/draco3d-types.d.ts +303 -0
  69. package/dist/draco/draco3d/draco3d-types.d.ts.map +1 -0
  70. package/dist/draco/draco3d/draco3d-types.js +47 -0
  71. package/dist/draco/draco3d/draco3d-types.js.map +1 -0
  72. package/dist/draco/draco3d-loader-with-parser.cjs +50 -0
  73. package/dist/draco/draco3d-loader-with-parser.cjs.map +7 -0
  74. package/dist/draco/draco3d-loader-with-parser.d.ts +34 -0
  75. package/dist/draco/draco3d-loader-with-parser.d.ts.map +1 -0
  76. package/dist/draco/draco3d-loader-with-parser.js +21 -0
  77. package/dist/draco/draco3d-loader-with-parser.js.map +1 -0
  78. package/dist/draco/index.cjs +54 -0
  79. package/dist/draco/index.cjs.map +7 -0
  80. package/dist/draco/index.d.ts +13 -0
  81. package/dist/draco/index.d.ts.map +1 -0
  82. package/dist/draco/index.js +13 -0
  83. package/dist/draco/index.js.map +1 -0
  84. package/dist/draco/lib/draco-builder.cjs +660 -0
  85. package/dist/draco/lib/draco-builder.cjs.map +7 -0
  86. package/dist/draco/lib/draco-builder.d.ts +175 -0
  87. package/dist/draco/lib/draco-builder.d.ts.map +1 -0
  88. package/dist/draco/lib/draco-builder.js +612 -0
  89. package/dist/draco/lib/draco-builder.js.map +1 -0
  90. package/dist/draco/lib/draco-library-loader.cjs +47 -0
  91. package/dist/draco/lib/draco-library-loader.cjs.map +7 -0
  92. package/dist/draco/lib/draco-library-loader.d.ts +5 -0
  93. package/dist/draco/lib/draco-library-loader.d.ts.map +1 -0
  94. package/dist/draco/lib/draco-library-loader.js +23 -0
  95. package/dist/draco/lib/draco-library-loader.js.map +1 -0
  96. package/dist/draco/lib/draco-module-loader.cjs +281 -0
  97. package/dist/draco/lib/draco-module-loader.cjs.map +7 -0
  98. package/dist/draco/lib/draco-module-loader.d.ts +25 -0
  99. package/dist/draco/lib/draco-module-loader.d.ts.map +1 -0
  100. package/dist/draco/lib/draco-module-loader.js +220 -0
  101. package/dist/draco/lib/draco-module-loader.js.map +1 -0
  102. package/dist/draco/lib/draco-parser.cjs +598 -0
  103. package/dist/draco/lib/draco-parser.cjs.map +7 -0
  104. package/dist/draco/lib/draco-parser.d.ts +142 -0
  105. package/dist/draco/lib/draco-parser.d.ts.map +1 -0
  106. package/dist/draco/lib/draco-parser.js +595 -0
  107. package/dist/draco/lib/draco-parser.js.map +1 -0
  108. package/dist/draco/lib/draco-types.cjs +19 -0
  109. package/dist/draco/lib/draco-types.cjs.map +7 -0
  110. package/dist/draco/lib/draco-types.d.ts +59 -0
  111. package/dist/draco/lib/draco-types.d.ts.map +1 -0
  112. package/dist/draco/lib/draco-types.js +5 -0
  113. package/dist/draco/lib/draco-types.js.map +1 -0
  114. package/dist/draco/lib/parse-draco.cjs +59 -0
  115. package/dist/draco/lib/parse-draco.cjs.map +7 -0
  116. package/dist/draco/lib/parse-draco.d.ts +22 -0
  117. package/dist/draco/lib/parse-draco.d.ts.map +1 -0
  118. package/dist/draco/lib/parse-draco.js +32 -0
  119. package/dist/draco/lib/parse-draco.js.map +1 -0
  120. package/dist/draco/lib/utils/get-draco-schema.cjs +74 -0
  121. package/dist/draco/lib/utils/get-draco-schema.cjs.map +7 -0
  122. package/dist/draco/lib/utils/get-draco-schema.d.ts +7 -0
  123. package/dist/draco/lib/utils/get-draco-schema.d.ts.map +1 -0
  124. package/dist/draco/lib/utils/get-draco-schema.js +45 -0
  125. package/dist/draco/lib/utils/get-draco-schema.js.map +1 -0
  126. package/dist/draco/lib/utils/version.cjs +31 -0
  127. package/dist/draco/lib/utils/version.cjs.map +7 -0
  128. package/dist/draco/lib/utils/version.d.ts +2 -0
  129. package/dist/draco/lib/utils/version.d.ts.map +1 -0
  130. package/dist/draco/lib/utils/version.js +8 -0
  131. package/dist/draco/lib/utils/version.js.map +1 -0
  132. package/dist/draco/unbundled.cjs +33 -0
  133. package/dist/draco/unbundled.cjs.map +7 -0
  134. package/dist/draco/unbundled.d.ts +3 -0
  135. package/dist/draco/unbundled.d.ts.map +1 -0
  136. package/dist/draco/unbundled.js +5 -0
  137. package/dist/draco/unbundled.js.map +1 -0
  138. package/dist/draco/workers/draco-worker-node.cjs +8 -0
  139. package/dist/draco/workers/draco-worker-node.cjs.map +7 -0
  140. package/dist/draco/workers/draco-worker-node.d.ts +2 -0
  141. package/dist/draco/workers/draco-worker-node.d.ts.map +1 -0
  142. package/dist/draco/workers/draco-worker-node.js +9 -0
  143. package/dist/draco/workers/draco-worker-node.js.map +1 -0
  144. package/dist/draco/workers/draco-worker.cjs +7 -0
  145. package/dist/draco/workers/draco-worker.cjs.map +7 -0
  146. package/dist/draco/workers/draco-worker.d.ts +2 -0
  147. package/dist/draco/workers/draco-worker.d.ts.map +1 -0
  148. package/dist/draco/workers/draco-worker.js +7 -0
  149. package/dist/draco/workers/draco-worker.js.map +1 -0
  150. package/dist/draco/workers/draco-writer-worker-node.cjs +11 -0
  151. package/dist/draco/workers/draco-writer-worker-node.cjs.map +7 -0
  152. package/dist/draco/workers/draco-writer-worker-node.d.cts +2 -0
  153. package/dist/draco/workers/draco-writer-worker-node.d.cts.map +1 -0
  154. package/dist/draco/workers/draco-writer-worker-node.d.ts +2 -0
  155. package/dist/draco/workers/draco-writer-worker-node.d.ts.map +1 -0
  156. package/dist/draco/workers/draco-writer-worker-node.js +9 -0
  157. package/dist/draco/workers/draco-writer-worker-node.js.map +1 -0
  158. package/dist/draco/workers/draco-writer-worker.cjs +10 -0
  159. package/dist/draco/workers/draco-writer-worker.cjs.map +7 -0
  160. package/dist/draco/workers/draco-writer-worker.d.ts +2 -0
  161. package/dist/draco/workers/draco-writer-worker.d.ts.map +1 -0
  162. package/dist/draco/workers/draco-writer-worker.js +7 -0
  163. package/dist/draco/workers/draco-writer-worker.js.map +1 -0
  164. package/dist/draco-javascript-loader.cjs +25 -0
  165. package/dist/draco-javascript-loader.cjs.map +7 -0
  166. package/dist/draco-javascript-loader.d.ts +2 -0
  167. package/dist/draco-javascript-loader.d.ts.map +1 -0
  168. package/dist/draco-javascript-loader.js +3 -0
  169. package/dist/draco-javascript-loader.js.map +1 -0
  170. package/dist/draco-library-options.cjs +36 -0
  171. package/dist/draco-library-options.cjs.map +7 -0
  172. package/dist/draco-library-options.d.ts +3 -0
  173. package/dist/draco-library-options.d.ts.map +1 -0
  174. package/dist/draco-library-options.js +4 -0
  175. package/dist/draco-library-options.js.map +1 -0
  176. package/dist/draco-loader-types.cjs +25 -0
  177. package/dist/draco-loader-types.cjs.map +7 -0
  178. package/dist/draco-loader-types.d.ts +2 -0
  179. package/dist/draco-loader-types.d.ts.map +1 -0
  180. package/dist/draco-loader-types.js +3 -0
  181. package/dist/draco-loader-types.js.map +1 -0
  182. package/dist/draco-loader.cjs +25 -0
  183. package/dist/draco-loader.cjs.map +7 -0
  184. package/dist/draco-loader.d.ts +2 -0
  185. package/dist/draco-loader.d.ts.map +1 -0
  186. package/dist/draco-loader.js +3 -0
  187. package/dist/draco-loader.js.map +1 -0
  188. package/dist/draco-wasm-loader.cjs +25 -0
  189. package/dist/draco-wasm-loader.cjs.map +7 -0
  190. package/dist/draco-wasm-loader.d.ts +2 -0
  191. package/dist/draco-wasm-loader.d.ts.map +1 -0
  192. package/dist/draco-wasm-loader.js +3 -0
  193. package/dist/draco-wasm-loader.js.map +1 -0
  194. package/dist/draco-worker-node.js +28279 -0
  195. package/dist/draco-worker-node.js.map +7 -0
  196. package/dist/draco-worker.js +18145 -0
  197. package/dist/draco-worker.js.map +7 -0
  198. package/dist/draco-writer-worker-node.cjs +27521 -0
  199. package/dist/draco-writer-worker-node.cjs.map +7 -0
  200. package/dist/draco-writer-worker.js +17339 -0
  201. package/dist/draco-writer-worker.js.map +7 -0
  202. package/dist/draco-writer.cjs +25 -0
  203. package/dist/draco-writer.cjs.map +7 -0
  204. package/dist/draco-writer.d.ts +2 -0
  205. package/dist/draco-writer.d.ts.map +1 -0
  206. package/dist/draco-writer.js +3 -0
  207. package/dist/draco-writer.js.map +1 -0
  208. package/dist/draco3d-loader.cjs +25 -0
  209. package/dist/draco3d-loader.cjs.map +7 -0
  210. package/dist/draco3d-loader.d.ts +2 -0
  211. package/dist/draco3d-loader.d.ts.map +1 -0
  212. package/dist/draco3d-loader.js +3 -0
  213. package/dist/draco3d-loader.js.map +1 -0
  214. package/dist/glb-loader-types.cjs +61 -0
  215. package/dist/glb-loader-types.cjs.map +7 -0
  216. package/dist/glb-loader-types.d.ts +2 -0
  217. package/dist/glb-loader-types.d.ts.map +1 -0
  218. package/dist/glb-loader-types.js +2 -0
  219. package/dist/glb-loader-types.js.map +1 -0
  220. package/dist/glb-loader.cjs +48 -0
  221. package/dist/glb-loader.cjs.map +7 -0
  222. package/dist/glb-loader.d.ts +2 -0
  223. package/dist/glb-loader.d.ts.map +1 -0
  224. package/dist/glb-loader.js +2 -0
  225. package/dist/glb-loader.js.map +1 -0
  226. package/dist/glb-writer.cjs +53 -0
  227. package/dist/glb-writer.cjs.map +7 -0
  228. package/dist/glb-writer.d.ts +2 -0
  229. package/dist/glb-writer.d.ts.map +1 -0
  230. package/dist/glb-writer.js +2 -0
  231. package/dist/glb-writer.js.map +1 -0
  232. package/dist/gltf/glb-loader-types.cjs +1 -1
  233. package/dist/gltf/glb-loader-types.cjs.map +2 -2
  234. package/dist/gltf/glb-loader-types.d.ts +2 -2
  235. package/dist/gltf/glb-loader-types.js +1 -1
  236. package/dist/gltf/glb-loader-types.js.map +1 -1
  237. package/dist/gltf/gltf-loader-types.cjs +1 -1
  238. package/dist/gltf/gltf-loader-types.cjs.map +2 -2
  239. package/dist/gltf/gltf-loader-types.d.ts +5 -5
  240. package/dist/gltf/gltf-loader-types.d.ts.map +1 -1
  241. package/dist/gltf/gltf-loader-types.js +1 -1
  242. package/dist/gltf/gltf-loader-types.js.map +1 -1
  243. package/dist/gltf/gltf-loader.cjs.map +1 -1
  244. package/dist/gltf/gltf-loader.d.ts +4 -4
  245. package/dist/gltf/gltf-loader.d.ts.map +1 -1
  246. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs +12 -2
  247. package/dist/gltf/lib/encoders/encode-gltf-draco.cjs.map +2 -2
  248. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts +1 -1
  249. package/dist/gltf/lib/encoders/encode-gltf-draco.d.ts.map +1 -1
  250. package/dist/gltf/lib/encoders/encode-gltf-draco.js +1 -1
  251. package/dist/gltf/lib/encoders/encode-gltf-draco.js.map +1 -1
  252. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs +2 -2
  253. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.cjs.map +2 -2
  254. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
  255. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js +1 -1
  256. package/dist/gltf/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  257. package/dist/gltf/lib/parsers/parse-gltf.cjs +2 -2
  258. package/dist/gltf/lib/parsers/parse-gltf.cjs.map +3 -3
  259. package/dist/gltf/lib/parsers/parse-gltf.js +5 -5
  260. package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
  261. package/dist/gltf/lib/types/gltf-zod-schema.d.ts +1 -1
  262. package/dist/gltf/lib/utils/version.cjs +1 -1
  263. package/dist/gltf/lib/utils/version.js +1 -1
  264. package/dist/gltf-loader-types.cjs +73 -0
  265. package/dist/gltf-loader-types.cjs.map +7 -0
  266. package/dist/gltf-loader-types.d.ts +2 -0
  267. package/dist/gltf-loader-types.d.ts.map +1 -0
  268. package/dist/gltf-loader-types.js +2 -0
  269. package/dist/gltf-loader-types.js.map +1 -0
  270. package/dist/gltf-loader.cjs +48 -0
  271. package/dist/gltf-loader.cjs.map +7 -0
  272. package/dist/gltf-loader.d.ts +2 -0
  273. package/dist/gltf-loader.d.ts.map +1 -0
  274. package/dist/gltf-loader.js +2 -0
  275. package/dist/gltf-loader.js.map +1 -0
  276. package/dist/gltf-source.cjs +238 -0
  277. package/dist/gltf-source.cjs.map +7 -0
  278. package/dist/gltf-source.d.ts +2 -0
  279. package/dist/gltf-source.d.ts.map +1 -0
  280. package/dist/gltf-source.js +2 -0
  281. package/dist/gltf-source.js.map +1 -0
  282. package/dist/gltf-writer.cjs +69 -0
  283. package/dist/gltf-writer.cjs.map +7 -0
  284. package/dist/gltf-writer.d.ts +2 -0
  285. package/dist/gltf-writer.d.ts.map +1 -0
  286. package/dist/gltf-writer.js +2 -0
  287. package/dist/gltf-writer.js.map +1 -0
  288. package/dist/index.cjs +13 -0
  289. package/dist/index.cjs.map +2 -2
  290. package/dist/index.d.ts +4 -0
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +3 -0
  293. package/dist/index.js.map +1 -1
  294. package/dist/libs/DRACO-LICENSE +252 -0
  295. package/dist/libs/README.md +20 -0
  296. package/dist/libs/draco_decoder.js +34 -0
  297. package/dist/libs/draco_decoder.mjs +37 -0
  298. package/dist/libs/draco_decoder.wasm +0 -0
  299. package/dist/libs/draco_decoder_gltf.wasm +0 -0
  300. package/dist/libs/draco_encoder.js +98 -0
  301. package/dist/libs/draco_encoder.mjs +101 -0
  302. package/dist/libs/draco_encoder.wasm +0 -0
  303. package/dist/libs/draco_wasm_wrapper.js +117 -0
  304. package/dist/libs/draco_wasm_wrapper.mjs +120 -0
  305. package/dist/libs/draco_wasm_wrapper_gltf.js +116 -0
  306. package/dist/libs/draco_wasm_wrapper_gltf.mjs +119 -0
  307. package/dist/mtl-loader-types.cjs +64 -0
  308. package/dist/mtl-loader-types.cjs.map +7 -0
  309. package/dist/mtl-loader-types.d.ts +2 -0
  310. package/dist/mtl-loader-types.d.ts.map +1 -0
  311. package/dist/mtl-loader-types.js +2 -0
  312. package/dist/mtl-loader-types.js.map +1 -0
  313. package/dist/mtl-loader.cjs +47 -0
  314. package/dist/mtl-loader.cjs.map +7 -0
  315. package/dist/mtl-loader.d.ts +2 -0
  316. package/dist/mtl-loader.d.ts.map +1 -0
  317. package/dist/mtl-loader.js +2 -0
  318. package/dist/mtl-loader.js.map +1 -0
  319. package/dist/obj/mtl-loader-types.cjs +2 -2
  320. package/dist/obj/mtl-loader-types.cjs.map +2 -2
  321. package/dist/obj/mtl-loader-types.d.ts +2 -2
  322. package/dist/obj/mtl-loader-types.js +2 -2
  323. package/dist/obj/mtl-loader-types.js.map +1 -1
  324. package/dist/obj/mtl-loader.cjs +1 -1
  325. package/dist/obj/mtl-loader.cjs.map +2 -2
  326. package/dist/obj/mtl-loader.js +1 -1
  327. package/dist/obj/mtl-loader.js.map +1 -1
  328. package/dist/obj/obj-loader-types.cjs +2 -2
  329. package/dist/obj/obj-loader-types.cjs.map +2 -2
  330. package/dist/obj/obj-loader-types.js +2 -2
  331. package/dist/obj/obj-loader-types.js.map +1 -1
  332. package/dist/obj/obj-writer.cjs +1 -1
  333. package/dist/obj/obj-writer.js +1 -1
  334. package/dist/obj-loader-types.cjs +71 -0
  335. package/dist/obj-loader-types.cjs.map +7 -0
  336. package/dist/obj-loader-types.d.ts +2 -0
  337. package/dist/obj-loader-types.d.ts.map +1 -0
  338. package/dist/obj-loader-types.js +2 -0
  339. package/dist/obj-loader-types.js.map +1 -0
  340. package/dist/obj-loader.cjs +163 -0
  341. package/dist/obj-loader.cjs.map +7 -0
  342. package/dist/obj-loader.d.ts +2 -0
  343. package/dist/obj-loader.d.ts.map +1 -0
  344. package/dist/obj-loader.js +2 -0
  345. package/dist/obj-loader.js.map +1 -0
  346. package/dist/obj-worker.js +204 -71
  347. package/dist/obj-writer.cjs +167 -0
  348. package/dist/obj-writer.cjs.map +7 -0
  349. package/dist/obj-writer.d.ts +2 -0
  350. package/dist/obj-writer.d.ts.map +1 -0
  351. package/dist/obj-writer.js +2 -0
  352. package/dist/obj-writer.js.map +1 -0
  353. package/dist/usd/usd-loader-types.cjs +2 -2
  354. package/dist/usd/usd-loader-types.cjs.map +2 -2
  355. package/dist/usd/usd-loader-types.js +2 -2
  356. package/dist/usd/usd-loader-types.js.map +1 -1
  357. package/dist/usd-loader-types.cjs +69 -0
  358. package/dist/usd-loader-types.cjs.map +7 -0
  359. package/dist/usd-loader-types.d.ts +2 -0
  360. package/dist/usd-loader-types.d.ts.map +1 -0
  361. package/dist/usd-loader-types.js +2 -0
  362. package/dist/usd-loader-types.js.map +1 -0
  363. package/dist/usd-loader.cjs +43 -0
  364. package/dist/usd-loader.cjs.map +7 -0
  365. package/dist/usd-loader.d.ts +2 -0
  366. package/dist/usd-loader.d.ts.map +1 -0
  367. package/dist/usd-loader.js +2 -0
  368. package/dist/usd-loader.js.map +1 -0
  369. package/package.json +130 -71
  370. package/src/draco/bundled.ts +10 -0
  371. package/src/draco/draco-format.ts +20 -0
  372. package/src/draco/draco-javascript-loader-with-parser.ts +26 -0
  373. package/src/draco/draco-libraries.ts +35 -0
  374. package/src/draco/draco-library-options.ts +76 -0
  375. package/src/draco/draco-loader-options.ts +33 -0
  376. package/src/draco/draco-loader-types.ts +78 -0
  377. package/src/draco/draco-loader.ts +45 -0
  378. package/src/draco/draco-wasm-loader-with-parser.ts +31 -0
  379. package/src/draco/draco-writer.ts +252 -0
  380. package/src/draco/draco3d/draco3d-types.ts +498 -0
  381. package/src/draco/draco3d-loader-with-parser.ts +34 -0
  382. package/src/draco/index.ts +46 -0
  383. package/src/draco/lib/draco-builder.ts +935 -0
  384. package/src/draco/lib/draco-library-loader.ts +38 -0
  385. package/src/draco/lib/draco-module-loader.ts +370 -0
  386. package/src/draco/lib/draco-parser.ts +776 -0
  387. package/src/draco/lib/draco-types.ts +72 -0
  388. package/src/draco/lib/parse-draco.ts +51 -0
  389. package/src/draco/lib/utils/get-draco-schema.ts +65 -0
  390. package/src/draco/lib/utils/version.ts +8 -0
  391. package/src/draco/libs/DRACO-LICENSE +252 -0
  392. package/src/draco/libs/README.md +20 -0
  393. package/src/draco/libs/draco_decoder.js +34 -0
  394. package/src/draco/libs/draco_decoder.wasm +0 -0
  395. package/src/draco/libs/draco_decoder_gltf.wasm +0 -0
  396. package/src/draco/libs/draco_encoder.js +98 -0
  397. package/src/draco/libs/draco_encoder.wasm +0 -0
  398. package/src/draco/libs/draco_wasm_wrapper.js +117 -0
  399. package/src/draco/libs/draco_wasm_wrapper_gltf.js +116 -0
  400. package/src/draco/unbundled.ts +6 -0
  401. package/src/draco/workers/draco-worker-node.ts +10 -0
  402. package/src/draco/workers/draco-worker.ts +8 -0
  403. package/src/draco/workers/draco-writer-worker-node.cjs +21 -0
  404. package/src/draco/workers/draco-writer-worker-node.ts +13 -0
  405. package/src/draco/workers/draco-writer-worker.ts +11 -0
  406. package/src/draco-javascript-loader.ts +2 -0
  407. package/src/draco-library-options.ts +6 -0
  408. package/src/draco-loader-types.ts +2 -0
  409. package/src/draco-loader.ts +2 -0
  410. package/src/draco-wasm-loader.ts +2 -0
  411. package/src/draco-writer.ts +2 -0
  412. package/src/draco3d-loader.ts +2 -0
  413. package/src/glb-loader-types.ts +1 -0
  414. package/src/glb-loader.ts +1 -0
  415. package/src/glb-writer.ts +1 -0
  416. package/src/gltf/glb-loader-types.ts +1 -1
  417. package/src/gltf/gltf-loader-types.ts +5 -5
  418. package/src/gltf/gltf-loader.ts +4 -4
  419. package/src/gltf/lib/encoders/encode-gltf-draco.ts +2 -2
  420. package/src/gltf/lib/extensions/KHR_draco_mesh_compression.ts +2 -1
  421. package/src/gltf/lib/parsers/parse-gltf.ts +5 -5
  422. package/src/gltf-loader-types.ts +1 -0
  423. package/src/gltf-loader.ts +1 -0
  424. package/src/gltf-source.ts +1 -0
  425. package/src/gltf-writer.ts +1 -0
  426. package/src/index.ts +5 -0
  427. package/src/mtl-loader-types.ts +1 -0
  428. package/src/mtl-loader.ts +1 -0
  429. package/src/obj/mtl-loader-types.ts +1 -1
  430. package/src/obj/mtl-loader.ts +1 -1
  431. package/src/obj/obj-loader-types.ts +1 -1
  432. package/src/obj-loader-types.ts +1 -0
  433. package/src/obj-loader.ts +1 -0
  434. package/src/obj-writer.ts +1 -0
  435. package/src/usd/usd-loader-types.ts +1 -1
  436. package/src/usd-loader-types.ts +1 -0
  437. package/src/usd-loader.ts +1 -0
@@ -0,0 +1,660 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/draco/lib/draco-builder.ts
21
+ var draco_builder_exports = {};
22
+ __export(draco_builder_exports, {
23
+ default: () => DracoBuilder
24
+ });
25
+ module.exports = __toCommonJS(draco_builder_exports);
26
+ var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
27
+ POSITION: "POSITION",
28
+ NORMAL: "NORMAL",
29
+ COLOR_0: "COLOR",
30
+ TEXCOORD_0: "TEX_COORD"
31
+ };
32
+ var noop = () => {
33
+ };
34
+ var DracoBuilder = class {
35
+ draco;
36
+ dracoEncoder;
37
+ dracoMeshBuilder;
38
+ dracoMetadataBuilder;
39
+ log = noop;
40
+ // draco - the draco decoder, either import `draco3d` or load dynamically
41
+ constructor(draco) {
42
+ this.draco = draco;
43
+ this.dracoEncoder = new this.draco.Encoder();
44
+ this.dracoMeshBuilder = new this.draco.MeshBuilder();
45
+ this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
46
+ }
47
+ destroy() {
48
+ this.destroyEncodedObject(this.dracoMeshBuilder);
49
+ this.destroyEncodedObject(this.dracoEncoder);
50
+ this.destroyEncodedObject(this.dracoMetadataBuilder);
51
+ }
52
+ // TBD - when does this need to be called?
53
+ destroyEncodedObject(object) {
54
+ if (object) {
55
+ this.draco.destroy(object);
56
+ }
57
+ }
58
+ /**
59
+ * Encode mesh or point cloud
60
+ * @param mesh =({})
61
+ * @param options
62
+ */
63
+ encodeSync(mesh, options = {}) {
64
+ return this._encodeSync(mesh, options, false).data;
65
+ }
66
+ /** Encodes a mesh or point cloud and returns native encoding diagnostics. */
67
+ encodeSyncWithReport(mesh, options = {}) {
68
+ return this._encodeSync(mesh, options, true);
69
+ }
70
+ /** Shared implementation for ordinary encoding and report-producing encoding. */
71
+ _encodeSync(mesh, options, trackEncodedProperties) {
72
+ options = applyDracoEncodingPreset(options);
73
+ this.log = options.log || noop;
74
+ return options.pointcloud ? this._encodePointCloud(mesh, options, trackEncodedProperties) : this._encodeMesh(mesh, options, trackEncodedProperties);
75
+ }
76
+ // PRIVATE
77
+ _getAttributesFromMesh(mesh) {
78
+ return {
79
+ ...mesh.indices ? { indices: mesh.indices } : {},
80
+ ...mesh.attributes
81
+ };
82
+ }
83
+ _encodePointCloud(pointcloud, options, trackEncodedProperties) {
84
+ const dracoPointCloud = new this.draco.PointCloud();
85
+ const dracoData = new this.draco.DracoInt8Array();
86
+ let expertEncoder = null;
87
+ try {
88
+ if (options.metadata) {
89
+ this._addGeometryMetadata(dracoPointCloud, options.metadata);
90
+ }
91
+ const attributes = this._getAttributesFromMesh(pointcloud);
92
+ const attributeInfo = this._createDracoPointCloud(dracoPointCloud, attributes, options);
93
+ const useExpertEncoder = hasAttributeQuantization(options);
94
+ let encodedLen;
95
+ let activeEncoder;
96
+ if (useExpertEncoder) {
97
+ expertEncoder = new this.draco.ExpertEncoder(dracoPointCloud);
98
+ this._setExpertOptions(expertEncoder, attributeInfo, options);
99
+ activeEncoder = expertEncoder;
100
+ if (trackEncodedProperties) {
101
+ activeEncoder.SetTrackEncodedProperties(true);
102
+ }
103
+ encodedLen = expertEncoder.EncodeToDracoBuffer(
104
+ options.deduplicateValues ?? false,
105
+ dracoData
106
+ );
107
+ } else {
108
+ this._setOptions(options);
109
+ activeEncoder = this.dracoEncoder;
110
+ if (trackEncodedProperties) {
111
+ activeEncoder.SetTrackEncodedProperties(true);
112
+ }
113
+ encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(
114
+ dracoPointCloud,
115
+ options.deduplicateValues ?? false,
116
+ dracoData
117
+ );
118
+ }
119
+ if (!(encodedLen > 0)) {
120
+ throw new Error("Draco encoding failed.");
121
+ }
122
+ this.log(`DRACO encoded ${dracoPointCloud.num_points()} points
123
+ with ${dracoPointCloud.num_attributes()} attributes into ${encodedLen} bytes`);
124
+ const data = dracoInt8ArrayToArrayBuffer(dracoData);
125
+ return {
126
+ data,
127
+ report: this._getEncodingReport(
128
+ "point-cloud",
129
+ data.byteLength,
130
+ dracoPointCloud,
131
+ activeEncoder,
132
+ attributeInfo,
133
+ options,
134
+ trackEncodedProperties
135
+ )
136
+ };
137
+ } finally {
138
+ this.destroyEncodedObject(expertEncoder);
139
+ this.destroyEncodedObject(dracoData);
140
+ this.destroyEncodedObject(dracoPointCloud);
141
+ }
142
+ }
143
+ _encodeMesh(mesh, options, trackEncodedProperties) {
144
+ const dracoMesh = new this.draco.Mesh();
145
+ const dracoData = new this.draco.DracoInt8Array();
146
+ let expertEncoder = null;
147
+ try {
148
+ if (options.metadata) {
149
+ this._addGeometryMetadata(dracoMesh, options.metadata);
150
+ }
151
+ const attributes = this._getAttributesFromMesh(mesh);
152
+ const attributeInfo = this._createDracoMesh(dracoMesh, attributes, options);
153
+ const useExpertEncoder = hasAttributeQuantization(options);
154
+ let encodedLen;
155
+ let activeEncoder;
156
+ if (useExpertEncoder) {
157
+ expertEncoder = new this.draco.ExpertEncoder(dracoMesh);
158
+ this._setExpertOptions(expertEncoder, attributeInfo, options);
159
+ activeEncoder = expertEncoder;
160
+ if (trackEncodedProperties) {
161
+ activeEncoder.SetTrackEncodedProperties(true);
162
+ }
163
+ encodedLen = expertEncoder.EncodeToDracoBuffer(false, dracoData);
164
+ } else {
165
+ this._setOptions(options);
166
+ activeEncoder = this.dracoEncoder;
167
+ if (trackEncodedProperties) {
168
+ activeEncoder.SetTrackEncodedProperties(true);
169
+ }
170
+ encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
171
+ }
172
+ if (encodedLen <= 0) {
173
+ throw new Error("Draco encoding failed.");
174
+ }
175
+ this.log(`DRACO encoded ${dracoMesh.num_points()} points
176
+ with ${dracoMesh.num_attributes()} attributes into ${encodedLen} bytes`);
177
+ const data = dracoInt8ArrayToArrayBuffer(dracoData);
178
+ return {
179
+ data,
180
+ report: this._getEncodingReport(
181
+ "mesh",
182
+ data.byteLength,
183
+ dracoMesh,
184
+ activeEncoder,
185
+ attributeInfo,
186
+ options,
187
+ trackEncodedProperties
188
+ )
189
+ };
190
+ } finally {
191
+ this.destroyEncodedObject(expertEncoder);
192
+ this.destroyEncodedObject(dracoData);
193
+ this.destroyEncodedObject(dracoMesh);
194
+ }
195
+ }
196
+ /** Applies encoder speed, method, and quantization options. */
197
+ _setOptions(options) {
198
+ if (options.speed) {
199
+ this.dracoEncoder.SetSpeedOptions(...options.speed);
200
+ }
201
+ if (options.method) {
202
+ const dracoMethod = this.draco[options.method];
203
+ this.dracoEncoder.SetEncodingMethod(dracoMethod);
204
+ }
205
+ if (options.quantization) {
206
+ for (const attribute in options.quantization) {
207
+ const attributeType = attribute;
208
+ const bits = options.quantization[attributeType];
209
+ if (bits !== void 0) {
210
+ validateQuantizationBits(attributeType, bits, attributeType);
211
+ this.dracoEncoder.SetAttributeQuantization(this.draco[attributeType], bits);
212
+ }
213
+ }
214
+ }
215
+ }
216
+ /** Applies common options and per-attribute quantization to an expert encoder. */
217
+ _setExpertOptions(expertEncoder, attributes, options) {
218
+ if (options.speed) {
219
+ expertEncoder.SetSpeedOptions(...options.speed);
220
+ }
221
+ if (options.method) {
222
+ expertEncoder.SetEncodingMethod(this.draco[options.method]);
223
+ }
224
+ const quantization = this._getAttributeQuantization(attributes, options);
225
+ for (const [attributeName, setting] of quantization) {
226
+ const attribute = attributes[attributeName];
227
+ if (typeof setting === "number") {
228
+ expertEncoder.SetAttributeQuantization(attribute.attributeId, setting);
229
+ } else {
230
+ expertEncoder.SetAttributeExplicitQuantization(
231
+ attribute.attributeId,
232
+ setting.bits,
233
+ attribute.componentCount,
234
+ setting.origin,
235
+ setting.range
236
+ );
237
+ }
238
+ }
239
+ }
240
+ /** Resolves category and exact quantization settings for every encoded attribute. */
241
+ _getAttributeQuantization(attributes, options) {
242
+ const categoryQuantization = /* @__PURE__ */ new Map();
243
+ for (const attributeType of Object.keys(options.quantization || {})) {
244
+ const bits = options.quantization?.[attributeType];
245
+ if (bits !== void 0) {
246
+ validateQuantizationBits(attributeType, bits, attributeType);
247
+ categoryQuantization.set(this.draco[attributeType], bits);
248
+ }
249
+ }
250
+ const quantization = /* @__PURE__ */ new Map();
251
+ for (const [attributeName, attribute] of Object.entries(attributes)) {
252
+ const bits = categoryQuantization.get(attribute.attributeType);
253
+ if (bits !== void 0) {
254
+ quantization.set(attributeName, bits);
255
+ }
256
+ }
257
+ for (const [attributeName, setting] of Object.entries(options.attributeQuantization || {})) {
258
+ const attribute = attributes[attributeName];
259
+ if (!attribute) {
260
+ throw new Error(`DracoWriter: quantized attribute "${attributeName}" does not exist`);
261
+ }
262
+ if (typeof setting === "number") {
263
+ validateQuantizationBits(attributeName, setting, attribute.attributeTypeName);
264
+ } else {
265
+ if (attribute.attributeTypeName === "NORMAL") {
266
+ throw new Error(
267
+ `DracoWriter: explicit quantization transforms are not supported for NORMAL attribute "${attributeName}"`
268
+ );
269
+ }
270
+ validateExplicitQuantization(
271
+ attributeName,
272
+ attributes[attributeName].componentCount,
273
+ setting
274
+ );
275
+ }
276
+ quantization.set(attributeName, setting);
277
+ }
278
+ for (const attributeName of quantization.keys()) {
279
+ if (!attributes[attributeName].supportsQuantization) {
280
+ throw new Error(
281
+ `DracoWriter: quantization for "${attributeName}" requires floating-point attribute data`
282
+ );
283
+ }
284
+ }
285
+ return quantization;
286
+ }
287
+ /** Builds public diagnostics for a completed native encoding. */
288
+ _getEncodingReport(geometryType, byteLength, geometry, encoder, attributes, options, trackEncodedProperties) {
289
+ const quantization = this._getAttributeQuantization(attributes, options);
290
+ const attributeReports = {};
291
+ for (const [attributeName, attribute] of Object.entries(attributes)) {
292
+ attributeReports[attributeName] = {
293
+ id: attribute.attributeId,
294
+ type: attribute.attributeTypeName,
295
+ componentCount: attribute.componentCount,
296
+ ...quantization.has(attributeName) ? { quantization: quantization.get(attributeName) } : {}
297
+ };
298
+ }
299
+ return {
300
+ geometryType,
301
+ byteLength,
302
+ pointCount: trackEncodedProperties ? encoder.GetNumberOfEncodedPoints() : geometry.num_points(),
303
+ faceCount: trackEncodedProperties ? encoder.GetNumberOfEncodedFaces() : geometryType === "mesh" ? typeof geometry.num_faces === "function" ? geometry.num_faces() : 0 : 0,
304
+ attributeCount: geometry.num_attributes(),
305
+ ...options.method ? { method: options.method } : {},
306
+ ...options.speed ? { speed: options.speed } : {},
307
+ attributes: attributeReports
308
+ };
309
+ }
310
+ /**
311
+ * @param {Mesh} dracoMesh
312
+ * @param {object} attributes
313
+ * @returns {Mesh}
314
+ */
315
+ _createDracoMesh(dracoMesh, attributes, options) {
316
+ const optionalMetadata = options.attributesMetadata || {};
317
+ const attributeInfo = {};
318
+ const vertexCount = this._getVertexCount(attributes, options);
319
+ for (const [attributeName, attribute] of Object.entries(attributes)) {
320
+ const uniqueId = this._addAttributeToMesh(
321
+ dracoMesh,
322
+ attributeName,
323
+ attribute,
324
+ vertexCount,
325
+ options
326
+ );
327
+ if (uniqueId !== -1) {
328
+ const attributeValue = getAttributeValue(attribute);
329
+ const attributeType = this._getDracoAttributeType(
330
+ attributeName,
331
+ options.attributeTypes
332
+ );
333
+ attributeInfo[attributeName] = {
334
+ attributeId: uniqueId,
335
+ attributeType,
336
+ attributeTypeName: getDracoAttributeTypeName(this.draco, attributeType),
337
+ componentCount: getAttributeSize(attribute, attributeValue.length / vertexCount),
338
+ supportsQuantization: attributeValue instanceof Float32Array
339
+ };
340
+ this._addAttributeMetadata(dracoMesh, uniqueId, {
341
+ [options.attributeNameEntry || "name"]: attributeName,
342
+ ...optionalMetadata[attributeName] || {}
343
+ });
344
+ }
345
+ }
346
+ return attributeInfo;
347
+ }
348
+ /**
349
+ * @param {} dracoPointCloud
350
+ * @param {object} attributes
351
+ */
352
+ _createDracoPointCloud(dracoPointCloud, attributes, options) {
353
+ const optionalMetadata = options.attributesMetadata || {};
354
+ const attributeInfo = {};
355
+ const vertexCount = this._getVertexCount(attributes, options);
356
+ for (const [attributeName, attribute] of Object.entries(attributes)) {
357
+ const uniqueId = this._addAttributeToMesh(
358
+ dracoPointCloud,
359
+ attributeName,
360
+ attribute,
361
+ vertexCount,
362
+ options
363
+ );
364
+ if (uniqueId !== -1) {
365
+ const attributeValue = getAttributeValue(attribute);
366
+ const attributeType = this._getDracoAttributeType(
367
+ attributeName,
368
+ options.attributeTypes
369
+ );
370
+ attributeInfo[attributeName] = {
371
+ attributeId: uniqueId,
372
+ attributeType,
373
+ attributeTypeName: getDracoAttributeTypeName(this.draco, attributeType),
374
+ componentCount: getAttributeSize(attribute, attributeValue.length / vertexCount),
375
+ supportsQuantization: attributeValue instanceof Float32Array
376
+ };
377
+ this._addAttributeMetadata(dracoPointCloud, uniqueId, {
378
+ [options.attributeNameEntry || "name"]: attributeName,
379
+ ...optionalMetadata[attributeName] || {}
380
+ });
381
+ }
382
+ }
383
+ return attributeInfo;
384
+ }
385
+ /**
386
+ * @param mesh
387
+ * @param attributeName
388
+ * @param attribute
389
+ * @param vertexCount
390
+ */
391
+ _addAttributeToMesh(mesh, attributeName, attribute, vertexCount, options = {}) {
392
+ const attributeValue = getAttributeValue(attribute);
393
+ if (!attributeValue) {
394
+ throw new Error(`DracoWriter: attribute "${attributeName}" must contain a typed array`);
395
+ }
396
+ const type = this._getDracoAttributeType(attributeName, options.attributeTypes);
397
+ const size = getAttributeSize(attribute, attributeValue.length / vertexCount);
398
+ if (type === "indices") {
399
+ if (attributeValue.length % 3 !== 0) {
400
+ throw new Error("DracoWriter: triangle indices length must be divisible by 3");
401
+ }
402
+ validateIndices(attributeValue, vertexCount);
403
+ const numFaces = attributeValue.length / 3;
404
+ this.log(`Adding attribute ${attributeName}, size ${numFaces}`);
405
+ const indices = attributeValue instanceof Uint16Array || attributeValue instanceof Uint32Array ? attributeValue : Uint32Array.from(attributeValue);
406
+ this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, indices);
407
+ return -1;
408
+ }
409
+ if (!Number.isInteger(size) || size <= 0 || attributeValue.length !== vertexCount * size) {
410
+ throw new Error(
411
+ `DracoWriter: attribute "${attributeName}" has ${attributeValue.length} values, expected ${vertexCount * size}`
412
+ );
413
+ }
414
+ this.log(`Adding attribute ${attributeName}, size ${size}`);
415
+ const builder = this.dracoMeshBuilder;
416
+ let uniqueAttributeId = -1;
417
+ if (attributeValue instanceof Int8Array) {
418
+ uniqueAttributeId = builder.AddInt8Attribute(mesh, type, vertexCount, size, attributeValue);
419
+ } else if (attributeValue instanceof Int16Array) {
420
+ uniqueAttributeId = builder.AddInt16Attribute(mesh, type, vertexCount, size, attributeValue);
421
+ } else if (attributeValue instanceof Int32Array) {
422
+ uniqueAttributeId = builder.AddInt32Attribute(mesh, type, vertexCount, size, attributeValue);
423
+ } else if (attributeValue instanceof Uint8Array) {
424
+ uniqueAttributeId = builder.AddUInt8Attribute(mesh, type, vertexCount, size, attributeValue);
425
+ } else if (attributeValue instanceof Uint8ClampedArray) {
426
+ const uint8Value = new Uint8Array(
427
+ attributeValue.buffer,
428
+ attributeValue.byteOffset,
429
+ attributeValue.byteLength
430
+ );
431
+ uniqueAttributeId = builder.AddUInt8Attribute(mesh, type, vertexCount, size, uint8Value);
432
+ } else if (attributeValue instanceof Uint16Array) {
433
+ uniqueAttributeId = builder.AddUInt16Attribute(mesh, type, vertexCount, size, attributeValue);
434
+ } else if (attributeValue instanceof Uint32Array) {
435
+ uniqueAttributeId = builder.AddUInt32Attribute(mesh, type, vertexCount, size, attributeValue);
436
+ } else if (attributeValue instanceof Float32Array) {
437
+ uniqueAttributeId = builder.AddFloatAttribute(mesh, type, vertexCount, size, attributeValue);
438
+ } else {
439
+ throw new Error(
440
+ `DracoWriter: attribute "${attributeName}" uses unsupported ${attributeValue.constructor.name}`
441
+ );
442
+ }
443
+ if (!ArrayBuffer.isView(attribute) && attribute.normalized !== void 0) {
444
+ builder.SetNormalizedFlagForAttribute(mesh, uniqueAttributeId, attribute.normalized);
445
+ }
446
+ return uniqueAttributeId;
447
+ }
448
+ /**
449
+ * DRACO can compress attributes of know type better
450
+ * @param attributeName
451
+ */
452
+ _getDracoAttributeType(attributeName, attributeTypes = {}) {
453
+ if (attributeName.toLowerCase() === "indices") {
454
+ return "indices";
455
+ }
456
+ const explicitType = attributeTypes[attributeName];
457
+ if (explicitType) {
458
+ return this.draco[explicitType];
459
+ }
460
+ const gltfAttributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName];
461
+ if (gltfAttributeName) {
462
+ return this.draco[gltfAttributeName];
463
+ }
464
+ switch (attributeName.toLowerCase()) {
465
+ case "position":
466
+ case "positions":
467
+ case "vertices":
468
+ return this.draco.POSITION;
469
+ case "normal":
470
+ case "normals":
471
+ return this.draco.NORMAL;
472
+ case "color":
473
+ case "colors":
474
+ return this.draco.COLOR;
475
+ case "texcoord":
476
+ case "texcoords":
477
+ return this.draco.TEX_COORD;
478
+ default:
479
+ if (/^color_\d+$/i.test(attributeName)) {
480
+ return this.draco.COLOR;
481
+ }
482
+ if (/^texcoord_\d+$/i.test(attributeName)) {
483
+ return this.draco.TEX_COORD;
484
+ }
485
+ return this.draco.GENERIC;
486
+ }
487
+ }
488
+ /** Returns the common vertex count after validating the required position attribute. */
489
+ _getVertexCount(attributes, options) {
490
+ const positions = this._getPositionAttribute(attributes, options.attributeTypes);
491
+ const positionValues = positions && getAttributeValue(positions);
492
+ if (!positions || !positionValues) {
493
+ throw new Error("DracoWriter: POSITION attribute is required");
494
+ }
495
+ const size = getAttributeSize(positions, 3);
496
+ if (!Number.isInteger(size) || size <= 0 || positionValues.length % size !== 0) {
497
+ throw new Error("DracoWriter: POSITION attribute has an invalid size or value count");
498
+ }
499
+ return positionValues.length / size;
500
+ }
501
+ _getPositionAttribute(attributes, attributeTypes = {}) {
502
+ for (const attributeName in attributes) {
503
+ const attribute = attributes[attributeName];
504
+ const dracoType = this._getDracoAttributeType(attributeName, attributeTypes);
505
+ if (dracoType === this.draco.POSITION && getAttributeValue(attribute)) {
506
+ return attribute;
507
+ }
508
+ }
509
+ return null;
510
+ }
511
+ /**
512
+ * Add metadata for the geometry.
513
+ * @param dracoGeometry - WASM Draco Object
514
+ * @param metadata
515
+ */
516
+ _addGeometryMetadata(dracoGeometry, metadata) {
517
+ const dracoMetadata = new this.draco.Metadata();
518
+ this._populateDracoMetadata(dracoMetadata, metadata);
519
+ this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
520
+ }
521
+ /**
522
+ * Add metadata for an attribute to geometry.
523
+ * @param dracoGeometry - WASM Draco Object
524
+ * @param uniqueAttributeId
525
+ * @param metadata
526
+ */
527
+ _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
528
+ const dracoAttributeMetadata = new this.draco.Metadata();
529
+ this._populateDracoMetadata(dracoAttributeMetadata, metadata);
530
+ this.dracoMeshBuilder.SetMetadataForAttribute(
531
+ dracoGeometry,
532
+ uniqueAttributeId,
533
+ dracoAttributeMetadata
534
+ );
535
+ }
536
+ /**
537
+ * Add contents of object or map to a WASM Draco Metadata Object
538
+ * @param dracoMetadata - WASM Draco Object
539
+ * @param metadata
540
+ */
541
+ _populateDracoMetadata(dracoMetadata, metadata) {
542
+ for (const [key, value] of getEntries(metadata)) {
543
+ switch (typeof value) {
544
+ case "number":
545
+ if (Math.trunc(value) === value) {
546
+ this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);
547
+ } else {
548
+ this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
549
+ }
550
+ break;
551
+ case "object":
552
+ if (value instanceof Int32Array) {
553
+ this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
554
+ }
555
+ break;
556
+ case "string":
557
+ default:
558
+ this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
559
+ }
560
+ }
561
+ }
562
+ };
563
+ function dracoInt8ArrayToArrayBuffer(dracoData) {
564
+ const byteLength = dracoData.size();
565
+ const outputBuffer = new ArrayBuffer(byteLength);
566
+ const outputData = new Int8Array(outputBuffer);
567
+ for (let i = 0; i < byteLength; ++i) {
568
+ outputData[i] = dracoData.GetValue(i);
569
+ }
570
+ return outputBuffer;
571
+ }
572
+ function getEntries(container) {
573
+ return container instanceof Map ? container.entries() : Object.entries(container);
574
+ }
575
+ function getAttributeValue(attribute) {
576
+ if (ArrayBuffer.isView(attribute)) {
577
+ return attribute;
578
+ }
579
+ if (attribute && typeof attribute === "object" && "value" in attribute && ArrayBuffer.isView(attribute.value)) {
580
+ return attribute.value;
581
+ }
582
+ return null;
583
+ }
584
+ function getAttributeSize(attribute, inferredSize) {
585
+ return ArrayBuffer.isView(attribute) ? inferredSize : attribute.size;
586
+ }
587
+ function validateIndices(indices, vertexCount) {
588
+ for (const index of indices) {
589
+ if (!Number.isInteger(index) || index < 0 || index >= vertexCount) {
590
+ throw new Error(
591
+ `DracoWriter: triangle index ${index} is outside vertex range 0-${vertexCount - 1}`
592
+ );
593
+ }
594
+ }
595
+ }
596
+ function hasAttributeQuantization(options) {
597
+ return Boolean(
598
+ options.attributeQuantization && Object.keys(options.attributeQuantization).length
599
+ );
600
+ }
601
+ function validateQuantizationBits(attributeName, bits, attributeType) {
602
+ if (!Number.isInteger(bits) || bits < 1 || bits > 30) {
603
+ throw new Error(
604
+ `DracoWriter: quantization bits for "${attributeName}" must be an integer from 1 to 30`
605
+ );
606
+ }
607
+ if (attributeType === "NORMAL" && (bits < 2 || bits > 29)) {
608
+ throw new Error(
609
+ `DracoWriter: quantization bits for NORMAL attribute "${attributeName}" must be an integer from 2 to 29`
610
+ );
611
+ }
612
+ }
613
+ function validateExplicitQuantization(attributeName, componentCount, quantization) {
614
+ validateQuantizationBits(attributeName, quantization.bits);
615
+ if (!Array.isArray(quantization.origin) || quantization.origin.length !== componentCount) {
616
+ throw new Error(
617
+ `DracoWriter: quantization origin for "${attributeName}" must contain ${componentCount} values`
618
+ );
619
+ }
620
+ if (!quantization.origin.every(Number.isFinite)) {
621
+ throw new Error(`DracoWriter: quantization origin for "${attributeName}" must be finite`);
622
+ }
623
+ if (!Number.isFinite(quantization.range) || quantization.range <= 0) {
624
+ throw new Error(`DracoWriter: quantization range for "${attributeName}" must be positive`);
625
+ }
626
+ }
627
+ function getDracoAttributeTypeName(draco, attributeType) {
628
+ for (const name of ["POSITION", "NORMAL", "COLOR", "TEX_COORD", "GENERIC"]) {
629
+ if (draco[name] === attributeType) {
630
+ return name;
631
+ }
632
+ }
633
+ return "GENERIC";
634
+ }
635
+ function applyDracoEncodingPreset(options) {
636
+ const presetOptions = {
637
+ gltf: {
638
+ method: "MESH_EDGEBREAKER_ENCODING",
639
+ speed: [5, 5],
640
+ quantization: { POSITION: 14, NORMAL: 10, TEX_COORD: 12 }
641
+ },
642
+ webgpu: {
643
+ method: "MESH_SEQUENTIAL_ENCODING",
644
+ speed: [5, 5],
645
+ quantization: { POSITION: 14, NORMAL: 10, TEX_COORD: 12 }
646
+ },
647
+ balanced: {
648
+ method: "MESH_EDGEBREAKER_ENCODING",
649
+ speed: [5, 5],
650
+ quantization: { POSITION: 12, NORMAL: 10, TEX_COORD: 10 }
651
+ }
652
+ };
653
+ const preset = options.preset ? presetOptions[options.preset] : {};
654
+ return {
655
+ ...preset,
656
+ ...options,
657
+ quantization: { ...preset.quantization, ...options.quantization }
658
+ };
659
+ }
660
+ //# sourceMappingURL=draco-builder.cjs.map