@loaders.gl/gltf 4.0.0-alpha.5 → 4.0.0-alpha.7

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 (315) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +3545 -2445
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/glb-loader.js +56 -0
  6. package/dist/es5/glb-loader.js.map +1 -0
  7. package/dist/es5/glb-writer.js +34 -0
  8. package/dist/es5/glb-writer.js.map +1 -0
  9. package/dist/es5/gltf-loader.js +81 -0
  10. package/dist/es5/gltf-loader.js.map +1 -0
  11. package/dist/es5/gltf-writer.js +35 -0
  12. package/dist/es5/gltf-writer.js.map +1 -0
  13. package/dist/es5/index.js +55 -0
  14. package/dist/es5/index.js.map +1 -0
  15. package/dist/es5/lib/api/gltf-extensions.js +109 -0
  16. package/dist/es5/lib/api/gltf-extensions.js.map +1 -0
  17. package/dist/es5/lib/api/gltf-scenegraph.js +595 -0
  18. package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -0
  19. package/dist/es5/lib/api/normalize-gltf-v1.js +331 -0
  20. package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -0
  21. package/dist/es5/lib/api/post-process-gltf.js +470 -0
  22. package/dist/es5/lib/api/post-process-gltf.js.map +1 -0
  23. package/dist/es5/lib/encoders/encode-glb.js +61 -0
  24. package/dist/es5/lib/encoders/encode-glb.js.map +1 -0
  25. package/dist/es5/lib/encoders/encode-gltf.js +20 -0
  26. package/dist/es5/lib/encoders/encode-gltf.js.map +1 -0
  27. package/dist/es5/lib/extensions/EXT_meshopt_compression.js +94 -0
  28. package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -0
  29. package/dist/es5/lib/extensions/EXT_texture_webp.js +43 -0
  30. package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -0
  31. package/dist/es5/lib/extensions/KHR_binary_gltf.js +39 -0
  32. package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -0
  33. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +247 -0
  34. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
  35. package/dist/es5/lib/extensions/KHR_texture_basisu.js +36 -0
  36. package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -0
  37. package/dist/es5/lib/extensions/KHR_texture_transform.js +230 -0
  38. package/dist/es5/lib/extensions/KHR_texture_transform.js.map +1 -0
  39. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +103 -0
  40. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
  41. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +99 -0
  42. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  43. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +76 -0
  44. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  45. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +113 -0
  46. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  47. package/dist/es5/lib/gltf-utils/get-typed-array.js +23 -0
  48. package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -0
  49. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +68 -0
  50. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
  51. package/dist/es5/lib/gltf-utils/gltf-constants.js +48 -0
  52. package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -0
  53. package/dist/es5/lib/gltf-utils/gltf-utils.js +86 -0
  54. package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -0
  55. package/dist/es5/lib/gltf-utils/resolve-url.js +18 -0
  56. package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -0
  57. package/dist/es5/lib/parsers/parse-glb.js +120 -0
  58. package/dist/es5/lib/parsers/parse-glb.js.map +1 -0
  59. package/dist/es5/lib/parsers/parse-gltf.js +283 -0
  60. package/dist/es5/lib/parsers/parse-gltf.js.map +1 -0
  61. package/dist/es5/lib/types/glb-types.js +2 -0
  62. package/dist/es5/lib/types/glb-types.js.map +1 -0
  63. package/dist/es5/lib/types/gltf-json-schema.js +2 -0
  64. package/dist/es5/lib/types/gltf-json-schema.js.map +1 -0
  65. package/dist/es5/lib/types/gltf-postprocessed-schema.js +2 -0
  66. package/dist/es5/lib/types/gltf-postprocessed-schema.js.map +1 -0
  67. package/dist/es5/lib/types/gltf-types.js +2 -0
  68. package/dist/es5/lib/types/gltf-types.js.map +1 -0
  69. package/dist/es5/lib/utils/assert.js +12 -0
  70. package/dist/es5/lib/utils/assert.js.map +1 -0
  71. package/dist/es5/lib/utils/version.js +9 -0
  72. package/dist/es5/lib/utils/version.js.map +1 -0
  73. package/dist/es5/meshopt/meshopt-decoder.js +215 -0
  74. package/dist/es5/meshopt/meshopt-decoder.js.map +1 -0
  75. package/dist/es5/webp/webp.js +83 -0
  76. package/dist/es5/webp/webp.js.map +1 -0
  77. package/dist/esm/bundle.js +4 -0
  78. package/dist/esm/bundle.js.map +1 -0
  79. package/dist/esm/glb-loader.js +31 -0
  80. package/dist/esm/glb-loader.js.map +1 -0
  81. package/dist/esm/glb-writer.js +27 -0
  82. package/dist/esm/glb-writer.js.map +1 -0
  83. package/dist/esm/gltf-loader.js +51 -0
  84. package/dist/esm/gltf-loader.js.map +1 -0
  85. package/dist/esm/gltf-writer.js +28 -0
  86. package/dist/esm/gltf-writer.js.map +1 -0
  87. package/dist/esm/index.js +8 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/lib/api/gltf-extensions.js +35 -0
  90. package/dist/esm/lib/api/gltf-extensions.js.map +1 -0
  91. package/dist/esm/lib/api/gltf-scenegraph.js +452 -0
  92. package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -0
  93. package/dist/esm/lib/api/normalize-gltf-v1.js +204 -0
  94. package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -0
  95. package/dist/esm/lib/api/post-process-gltf.js +396 -0
  96. package/dist/esm/lib/api/post-process-gltf.js.map +1 -0
  97. package/dist/esm/lib/encoders/encode-glb.js +54 -0
  98. package/dist/esm/lib/encoders/encode-glb.js.map +1 -0
  99. package/dist/esm/lib/encoders/encode-gltf.js +14 -0
  100. package/dist/esm/lib/encoders/encode-gltf.js.map +1 -0
  101. package/dist/esm/lib/extensions/EXT_meshopt_compression.js +41 -0
  102. package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -0
  103. package/dist/esm/lib/extensions/EXT_texture_webp.js +25 -0
  104. package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -0
  105. package/dist/esm/lib/extensions/KHR_binary_gltf.js +21 -0
  106. package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +1 -0
  107. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +111 -0
  108. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
  109. package/dist/esm/lib/extensions/KHR_texture_basisu.js +18 -0
  110. package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -0
  111. package/dist/esm/lib/extensions/KHR_texture_transform.js +182 -0
  112. package/dist/esm/lib/extensions/KHR_texture_transform.js.map +1 -0
  113. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +77 -0
  114. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
  115. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js +42 -0
  116. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  117. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js +33 -0
  118. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  119. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js +61 -0
  120. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  121. package/dist/esm/lib/gltf-utils/get-typed-array.js +16 -0
  122. package/dist/esm/lib/gltf-utils/get-typed-array.js.map +1 -0
  123. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js +62 -0
  124. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
  125. package/dist/esm/lib/gltf-utils/gltf-constants.js +37 -0
  126. package/dist/esm/lib/gltf-utils/gltf-constants.js.map +1 -0
  127. package/dist/esm/lib/gltf-utils/gltf-utils.js +74 -0
  128. package/dist/esm/lib/gltf-utils/gltf-utils.js.map +1 -0
  129. package/dist/esm/lib/gltf-utils/resolve-url.js +12 -0
  130. package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -0
  131. package/dist/esm/lib/parsers/parse-glb.js +114 -0
  132. package/dist/esm/lib/parsers/parse-glb.js.map +1 -0
  133. package/dist/esm/lib/parsers/parse-gltf.js +155 -0
  134. package/dist/esm/lib/parsers/parse-gltf.js.map +1 -0
  135. package/dist/esm/lib/types/glb-types.js +2 -0
  136. package/dist/esm/lib/types/glb-types.js.map +1 -0
  137. package/dist/esm/lib/types/gltf-json-schema.js +2 -0
  138. package/dist/esm/lib/types/gltf-json-schema.js.map +1 -0
  139. package/dist/esm/lib/types/gltf-postprocessed-schema.js +2 -0
  140. package/dist/esm/lib/types/gltf-postprocessed-schema.js.map +1 -0
  141. package/dist/esm/lib/types/gltf-types.js +2 -0
  142. package/dist/esm/lib/types/gltf-types.js.map +1 -0
  143. package/dist/esm/lib/utils/assert.js +6 -0
  144. package/dist/esm/lib/utils/assert.js.map +1 -0
  145. package/dist/esm/lib/utils/version.js +2 -0
  146. package/dist/esm/lib/utils/version.js.map +1 -0
  147. package/dist/esm/meshopt/meshopt-decoder.js +91 -0
  148. package/dist/esm/meshopt/meshopt-decoder.js.map +1 -0
  149. package/dist/esm/meshopt/meshopt-encoder.ts.disabled +409 -0
  150. package/dist/esm/webp/webp.js +25 -0
  151. package/dist/esm/webp/webp.js.map +1 -0
  152. package/dist/glb-loader.d.ts +5 -4
  153. package/dist/glb-loader.d.ts.map +1 -1
  154. package/dist/glb-loader.js +30 -28
  155. package/dist/glb-writer.d.ts +7 -16
  156. package/dist/glb-writer.d.ts.map +1 -1
  157. package/dist/glb-writer.js +32 -26
  158. package/dist/gltf-loader.d.ts +7 -6
  159. package/dist/gltf-loader.d.ts.map +1 -1
  160. package/dist/gltf-loader.js +46 -43
  161. package/dist/gltf-writer.d.ts +2 -2
  162. package/dist/gltf-writer.d.ts.map +1 -1
  163. package/dist/gltf-writer.js +29 -26
  164. package/dist/index.d.ts +8 -4
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +28 -7
  167. package/dist/lib/api/gltf-extensions.d.ts +7 -2
  168. package/dist/lib/api/gltf-extensions.d.ts.map +1 -1
  169. package/dist/lib/api/gltf-extensions.js +79 -31
  170. package/dist/lib/api/gltf-scenegraph.d.ts +10 -14
  171. package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
  172. package/dist/lib/api/gltf-scenegraph.js +577 -513
  173. package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -1
  174. package/dist/lib/api/normalize-gltf-v1.js +278 -229
  175. package/dist/lib/api/post-process-gltf.d.ts +4 -1
  176. package/dist/lib/api/post-process-gltf.d.ts.map +1 -1
  177. package/dist/lib/api/post-process-gltf.js +385 -374
  178. package/dist/lib/encoders/encode-glb.d.ts +14 -1
  179. package/dist/lib/encoders/encode-glb.d.ts.map +1 -1
  180. package/dist/lib/encoders/encode-glb.js +67 -58
  181. package/dist/lib/encoders/encode-gltf.d.ts +18 -0
  182. package/dist/lib/encoders/encode-gltf.d.ts.map +1 -1
  183. package/dist/lib/encoders/encode-gltf.js +30 -12
  184. package/dist/lib/extensions/EXT_meshopt_compression.d.ts +1 -4
  185. package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -1
  186. package/dist/lib/extensions/EXT_meshopt_compression.js +35 -50
  187. package/dist/lib/extensions/EXT_texture_webp.d.ts +1 -1
  188. package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
  189. package/dist/lib/extensions/EXT_texture_webp.js +32 -28
  190. package/dist/lib/extensions/KHR_binary_gltf.d.ts +1 -1
  191. package/dist/lib/extensions/KHR_binary_gltf.d.ts.map +1 -1
  192. package/dist/lib/extensions/KHR_binary_gltf.js +36 -23
  193. package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +1 -1
  194. package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
  195. package/dist/lib/extensions/KHR_draco_mesh_compression.js +123 -111
  196. package/dist/lib/extensions/KHR_texture_basisu.d.ts +1 -1
  197. package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -1
  198. package/dist/lib/extensions/KHR_texture_basisu.js +26 -19
  199. package/dist/lib/extensions/KHR_texture_transform.d.ts +13 -0
  200. package/dist/lib/extensions/KHR_texture_transform.d.ts.map +1 -0
  201. package/dist/lib/extensions/KHR_texture_transform.js +227 -0
  202. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +6 -0
  203. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
  204. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +115 -0
  205. package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts +1 -1
  206. package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -1
  207. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +54 -44
  208. package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts +1 -1
  209. package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -1
  210. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +39 -32
  211. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +1 -1
  212. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -1
  213. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +73 -62
  214. package/dist/lib/gltf-utils/get-typed-array.js +39 -14
  215. package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts +1 -1
  216. package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -1
  217. package/dist/lib/gltf-utils/gltf-attribute-utils.js +65 -65
  218. package/dist/lib/gltf-utils/gltf-constants.d.ts +17 -0
  219. package/dist/lib/gltf-utils/gltf-constants.d.ts.map +1 -1
  220. package/dist/lib/gltf-utils/gltf-constants.js +38 -32
  221. package/dist/lib/gltf-utils/gltf-utils.d.ts +7 -0
  222. package/dist/lib/gltf-utils/gltf-utils.d.ts.map +1 -1
  223. package/dist/lib/gltf-utils/gltf-utils.js +79 -45
  224. package/dist/lib/gltf-utils/resolve-url.js +17 -15
  225. package/dist/lib/parsers/parse-glb.d.ts +15 -3
  226. package/dist/lib/parsers/parse-glb.d.ts.map +1 -1
  227. package/dist/lib/parsers/parse-glb.js +143 -105
  228. package/dist/lib/parsers/parse-gltf.d.ts +8 -4
  229. package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
  230. package/dist/lib/parsers/parse-gltf.js +166 -154
  231. package/dist/lib/types/glb-types.d.ts +3 -3
  232. package/dist/lib/types/glb-types.d.ts.map +1 -1
  233. package/dist/lib/types/glb-types.js +2 -2
  234. package/dist/lib/types/gltf-json-schema.d.ts +530 -132
  235. package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
  236. package/dist/lib/types/gltf-json-schema.js +4 -2
  237. package/dist/lib/types/gltf-postprocessed-schema.d.ts +175 -210
  238. package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -1
  239. package/dist/lib/types/gltf-postprocessed-schema.js +4 -2
  240. package/dist/lib/types/gltf-types.d.ts +22 -7
  241. package/dist/lib/types/gltf-types.d.ts.map +1 -1
  242. package/dist/lib/types/gltf-types.js +3 -2
  243. package/dist/lib/utils/assert.js +11 -5
  244. package/dist/lib/utils/version.js +7 -2
  245. package/dist/meshopt/meshopt-decoder.js +97 -82
  246. package/dist/webp/webp.d.ts +1 -1
  247. package/dist/webp/webp.d.ts.map +1 -1
  248. package/dist/webp/webp.js +32 -23
  249. package/package.json +9 -8
  250. package/src/glb-loader.ts +4 -4
  251. package/src/glb-writer.ts +11 -3
  252. package/src/gltf-loader.ts +12 -8
  253. package/src/gltf-writer.ts +2 -2
  254. package/src/index.ts +34 -6
  255. package/src/lib/api/gltf-extensions.ts +14 -3
  256. package/src/lib/api/gltf-scenegraph.ts +61 -34
  257. package/src/lib/api/normalize-gltf-v1.ts +2 -1
  258. package/src/lib/api/post-process-gltf.ts +275 -150
  259. package/src/lib/encoders/encode-glb.ts +21 -4
  260. package/src/lib/encoders/encode-gltf.ts +19 -10
  261. package/src/lib/extensions/EXT_meshopt_compression.ts +16 -25
  262. package/src/lib/extensions/EXT_texture_webp.ts +5 -4
  263. package/src/lib/extensions/KHR_binary_gltf.ts +3 -3
  264. package/src/lib/extensions/KHR_draco_mesh_compression.ts +8 -8
  265. package/src/lib/extensions/KHR_texture_basisu.ts +4 -3
  266. package/src/lib/extensions/KHR_texture_transform.ts +308 -0
  267. package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +163 -0
  268. package/src/lib/extensions/deprecated/KHR_lights_punctual.ts +2 -2
  269. package/src/lib/extensions/deprecated/KHR_materials_unlit.ts +5 -5
  270. package/src/lib/extensions/deprecated/KHR_techniques_webgl.ts +3 -2
  271. package/src/lib/gltf-utils/gltf-attribute-utils.ts +1 -1
  272. package/src/lib/gltf-utils/gltf-constants.ts +2 -2
  273. package/src/lib/gltf-utils/gltf-utils.ts +31 -0
  274. package/src/lib/parsers/parse-glb.ts +50 -24
  275. package/src/lib/parsers/parse-gltf.ts +32 -17
  276. package/src/lib/types/glb-types.ts +1 -1
  277. package/src/lib/types/gltf-json-schema.ts +582 -126
  278. package/src/lib/types/gltf-postprocessed-schema.ts +289 -212
  279. package/src/lib/types/gltf-types.ts +41 -44
  280. package/dist/bundle.js.map +0 -1
  281. package/dist/glb-loader.js.map +0 -1
  282. package/dist/glb-writer.js.map +0 -1
  283. package/dist/gltf-loader.js.map +0 -1
  284. package/dist/gltf-writer.js.map +0 -1
  285. package/dist/index.js.map +0 -1
  286. package/dist/lib/api/gltf-extensions.js.map +0 -1
  287. package/dist/lib/api/gltf-scenegraph.js.map +0 -1
  288. package/dist/lib/api/normalize-gltf-v1.js.map +0 -1
  289. package/dist/lib/api/post-process-gltf.js.map +0 -1
  290. package/dist/lib/encoders/encode-glb.js.map +0 -1
  291. package/dist/lib/encoders/encode-gltf.js.map +0 -1
  292. package/dist/lib/extensions/EXT_meshopt_compression.js.map +0 -1
  293. package/dist/lib/extensions/EXT_texture_webp.js.map +0 -1
  294. package/dist/lib/extensions/KHR_binary_gltf.js.map +0 -1
  295. package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +0 -1
  296. package/dist/lib/extensions/KHR_texture_basisu.js.map +0 -1
  297. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +0 -1
  298. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +0 -1
  299. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +0 -1
  300. package/dist/lib/gltf-utils/get-typed-array.js.map +0 -1
  301. package/dist/lib/gltf-utils/gltf-attribute-utils.js.map +0 -1
  302. package/dist/lib/gltf-utils/gltf-constants.js.map +0 -1
  303. package/dist/lib/gltf-utils/gltf-utils.js.map +0 -1
  304. package/dist/lib/gltf-utils/resolve-url.js.map +0 -1
  305. package/dist/lib/parsers/parse-glb.js.map +0 -1
  306. package/dist/lib/parsers/parse-gltf.js.map +0 -1
  307. package/dist/lib/types/glb-types.js.map +0 -1
  308. package/dist/lib/types/gltf-json-schema.js.map +0 -1
  309. package/dist/lib/types/gltf-postprocessed-schema.js.map +0 -1
  310. package/dist/lib/types/gltf-types.js.map +0 -1
  311. package/dist/lib/utils/assert.js.map +0 -1
  312. package/dist/lib/utils/version.js.map +0 -1
  313. package/dist/meshopt/meshopt-decoder.js.map +0 -1
  314. package/dist/webp/webp.js.map +0 -1
  315. /package/dist/{meshopt → es5/meshopt}/meshopt-encoder.ts.disabled +0 -0
@@ -1,515 +1,579 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { getBinaryImageMetadata } from '@loaders.gl/images';
3
- import { padToNBytes, copyToArray } from '@loaders.gl/loader-utils';
4
- import { assert } from '../utils/assert';
5
- import { getAccessorArrayTypeAndLength, getAccessorTypeFromSize, getComponentTypeFromArray } from '../gltf-utils/gltf-utils';
6
- const DEFAULT_GLTF_JSON = {
7
- asset: {
8
- version: '2.0',
9
- generator: 'loaders.gl'
10
- },
11
- buffers: []
12
- };
13
- export default class GLTFScenegraph {
14
- constructor(gltf) {
15
- _defineProperty(this, "gltf", void 0);
16
-
17
- _defineProperty(this, "sourceBuffers", void 0);
18
-
19
- _defineProperty(this, "byteLength", void 0);
20
-
21
- this.gltf = gltf || {
22
- json: { ...DEFAULT_GLTF_JSON
23
- },
24
- buffers: []
1
+ "use strict";
2
+ // loaders.gl, MIT license
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GLTFScenegraph = void 0;
5
+ const images_1 = require("@loaders.gl/images");
6
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
7
+ const assert_1 = require("../utils/assert");
8
+ const gltf_utils_1 = require("../gltf-utils/gltf-utils");
9
+ function makeDefaultGLTFJson() {
10
+ return {
11
+ asset: {
12
+ version: '2.0',
13
+ generator: 'loaders.gl'
14
+ },
15
+ buffers: [],
16
+ extensions: {},
17
+ extensionsRequired: [],
18
+ extensionsUsed: []
25
19
  };
26
- this.sourceBuffers = [];
27
- this.byteLength = 0;
28
-
29
- if (this.gltf.buffers && this.gltf.buffers[0]) {
30
- this.byteLength = this.gltf.buffers[0].byteLength;
31
- this.sourceBuffers = [this.gltf.buffers[0]];
32
- }
33
- }
34
-
35
- get json() {
36
- return this.gltf.json;
37
- }
38
-
39
- getApplicationData(key) {
40
- const data = this.json[key];
41
- return data;
42
- }
43
-
44
- getExtraData(key) {
45
- const extras = this.json.extras || {};
46
- return extras[key];
47
- }
48
-
49
- getExtension(extensionName) {
50
- const isExtension = this.getUsedExtensions().find(name => name === extensionName);
51
- const extensions = this.json.extensions || {};
52
- return isExtension ? extensions[extensionName] || true : null;
53
- }
54
-
55
- getRequiredExtension(extensionName) {
56
- const isRequired = this.getRequiredExtensions().find(name => name === extensionName);
57
- return isRequired ? this.getExtension(extensionName) : null;
58
- }
59
-
60
- getRequiredExtensions() {
61
- return this.json.extensionsRequired || [];
62
- }
63
-
64
- getUsedExtensions() {
65
- return this.json.extensionsUsed || [];
66
- }
67
-
68
- getObjectExtension(object, extensionName) {
69
- const extensions = object.extensions || {};
70
- return extensions[extensionName];
71
- }
72
-
73
- getScene(index) {
74
- return this.getObject('scenes', index);
75
- }
76
-
77
- getNode(index) {
78
- return this.getObject('nodes', index);
79
- }
80
-
81
- getSkin(index) {
82
- return this.getObject('skins', index);
83
- }
84
-
85
- getMesh(index) {
86
- return this.getObject('meshes', index);
87
- }
88
-
89
- getMaterial(index) {
90
- return this.getObject('materials', index);
91
- }
92
-
93
- getAccessor(index) {
94
- return this.getObject('accessors', index);
95
- }
96
-
97
- getTexture(index) {
98
- return this.getObject('textures', index);
99
- }
100
-
101
- getSampler(index) {
102
- return this.getObject('samplers', index);
103
- }
104
-
105
- getImage(index) {
106
- return this.getObject('images', index);
107
- }
108
-
109
- getBufferView(index) {
110
- return this.getObject('bufferViews', index);
111
- }
112
-
113
- getBuffer(index) {
114
- return this.getObject('buffers', index);
115
- }
116
-
117
- getObject(array, index) {
118
- if (typeof index === 'object') {
119
- return index;
120
- }
121
-
122
- const object = this.json[array] && this.json[array][index];
123
-
124
- if (!object) {
125
- throw new Error("glTF file error: Could not find ".concat(array, "[").concat(index, "]"));
126
- }
127
-
128
- return object;
129
- }
130
-
131
- getTypedArrayForBufferView(bufferView) {
132
- bufferView = this.getBufferView(bufferView);
133
- const bufferIndex = bufferView.buffer;
134
- const binChunk = this.gltf.buffers[bufferIndex];
135
- assert(binChunk);
136
- const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;
137
- return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);
138
- }
139
-
140
- getTypedArrayForAccessor(accessor) {
141
- accessor = this.getAccessor(accessor);
142
- const bufferView = this.getBufferView(accessor.bufferView);
143
- const buffer = this.getBuffer(bufferView.buffer);
144
- const arrayBuffer = buffer.data;
145
- const {
146
- ArrayType,
147
- length
148
- } = getAccessorArrayTypeAndLength(accessor, bufferView);
149
- const byteOffset = bufferView.byteOffset + accessor.byteOffset;
150
- return new ArrayType(arrayBuffer, byteOffset, length);
151
- }
152
-
153
- getTypedArrayForImageData(image) {
154
- image = this.getAccessor(image);
155
- const bufferView = this.getBufferView(image.bufferView);
156
- const buffer = this.getBuffer(bufferView.buffer);
157
- const arrayBuffer = buffer.data;
158
- const byteOffset = bufferView.byteOffset || 0;
159
- return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
160
- }
161
-
162
- addApplicationData(key, data) {
163
- this.json[key] = data;
164
- return this;
165
- }
166
-
167
- addExtraData(key, data) {
168
- this.json.extras = this.json.extras || {};
169
- this.json.extras[key] = data;
170
- return this;
171
- }
172
-
173
- addObjectExtension(object, extensionName, data) {
174
- object.extensions = object.extensions || {};
175
- object.extensions[extensionName] = data;
176
- this.registerUsedExtension(extensionName);
177
- return this;
178
- }
179
-
180
- setObjectExtension(object, extensionName, data) {
181
- const extensions = object.extensions || {};
182
- extensions[extensionName] = data;
183
- }
184
-
185
- removeObjectExtension(object, extensionName) {
186
- const extensions = object.extensions || {};
187
- const extension = extensions[extensionName];
188
- delete extensions[extensionName];
189
- return extension;
190
- }
191
-
192
- addExtension(extensionName, extensionData = {}) {
193
- assert(extensionData);
194
- this.json.extensions = this.json.extensions || {};
195
- this.json.extensions[extensionName] = extensionData;
196
- this.registerUsedExtension(extensionName);
197
- return extensionData;
198
- }
199
-
200
- addRequiredExtension(extensionName, extensionData = {}) {
201
- assert(extensionData);
202
- this.addExtension(extensionName, extensionData);
203
- this.registerRequiredExtension(extensionName);
204
- return extensionData;
205
- }
206
-
207
- registerUsedExtension(extensionName) {
208
- this.json.extensionsUsed = this.json.extensionsUsed || [];
209
-
210
- if (!this.json.extensionsUsed.find(ext => ext === extensionName)) {
211
- this.json.extensionsUsed.push(extensionName);
212
- }
213
- }
214
-
215
- registerRequiredExtension(extensionName) {
216
- this.registerUsedExtension(extensionName);
217
- this.json.extensionsRequired = this.json.extensionsRequired || [];
218
-
219
- if (!this.json.extensionsRequired.find(ext => ext === extensionName)) {
220
- this.json.extensionsRequired.push(extensionName);
221
- }
222
- }
223
-
224
- removeExtension(extensionName) {
225
- if (this.json.extensionsRequired) {
226
- this._removeStringFromArray(this.json.extensionsRequired, extensionName);
227
- }
228
-
229
- if (this.json.extensionsUsed) {
230
- this._removeStringFromArray(this.json.extensionsUsed, extensionName);
231
- }
232
-
233
- if (this.json.extensions) {
234
- delete this.json.extensions[extensionName];
235
- }
236
- }
237
-
238
- setDefaultScene(sceneIndex) {
239
- this.json.scene = sceneIndex;
240
- }
241
-
242
- addScene(scene) {
243
- const {
244
- nodeIndices
245
- } = scene;
246
- this.json.scenes = this.json.scenes || [];
247
- this.json.scenes.push({
248
- nodes: nodeIndices
249
- });
250
- return this.json.scenes.length - 1;
251
- }
252
-
253
- addNode(node) {
254
- const {
255
- meshIndex,
256
- matrix
257
- } = node;
258
- this.json.nodes = this.json.nodes || [];
259
- const nodeData = {
260
- mesh: meshIndex
261
- };
262
-
263
- if (matrix) {
264
- nodeData.matrix = matrix;
265
- }
266
-
267
- this.json.nodes.push(nodeData);
268
- return this.json.nodes.length - 1;
269
- }
270
-
271
- addMesh(mesh) {
272
- const {
273
- attributes,
274
- indices,
275
- material,
276
- mode = 4
277
- } = mesh;
278
-
279
- const accessors = this._addAttributes(attributes);
280
-
281
- const glTFMesh = {
282
- primitives: [{
283
- attributes: accessors,
284
- mode
285
- }]
286
- };
287
-
288
- if (indices) {
289
- const indicesAccessor = this._addIndices(indices);
290
-
291
- glTFMesh.primitives[0].indices = indicesAccessor;
292
- }
293
-
294
- if (Number.isFinite(material)) {
295
- glTFMesh.primitives[0].material = material;
296
- }
297
-
298
- this.json.meshes = this.json.meshes || [];
299
- this.json.meshes.push(glTFMesh);
300
- return this.json.meshes.length - 1;
301
- }
302
-
303
- addPointCloud(attributes) {
304
- const accessorIndices = this._addAttributes(attributes);
305
-
306
- const glTFMesh = {
307
- primitives: [{
308
- attributes: accessorIndices,
309
- mode: 0
310
- }]
311
- };
312
- this.json.meshes = this.json.meshes || [];
313
- this.json.meshes.push(glTFMesh);
314
- return this.json.meshes.length - 1;
315
- }
316
-
317
- addImage(imageData, mimeTypeOpt) {
318
- const metadata = getBinaryImageMetadata(imageData);
319
- const mimeType = mimeTypeOpt || (metadata === null || metadata === void 0 ? void 0 : metadata.mimeType);
320
- const bufferViewIndex = this.addBufferView(imageData);
321
- const glTFImage = {
322
- bufferView: bufferViewIndex,
323
- mimeType
324
- };
325
- this.json.images = this.json.images || [];
326
- this.json.images.push(glTFImage);
327
- return this.json.images.length - 1;
328
- }
329
-
330
- addBufferView(buffer) {
331
- const byteLength = buffer.byteLength;
332
- assert(Number.isFinite(byteLength));
333
- this.sourceBuffers = this.sourceBuffers || [];
334
- this.sourceBuffers.push(buffer);
335
- const glTFBufferView = {
336
- buffer: 0,
337
- byteOffset: this.byteLength,
338
- byteLength
339
- };
340
- this.byteLength += padToNBytes(byteLength, 4);
341
- this.json.bufferViews = this.json.bufferViews || [];
342
- this.json.bufferViews.push(glTFBufferView);
343
- return this.json.bufferViews.length - 1;
344
- }
345
-
346
- addAccessor(bufferViewIndex, accessor) {
347
- const glTFAccessor = {
348
- bufferView: bufferViewIndex,
349
- type: getAccessorTypeFromSize(accessor.size),
350
- componentType: accessor.componentType,
351
- count: accessor.count,
352
- max: accessor.max,
353
- min: accessor.min
354
- };
355
- this.json.accessors = this.json.accessors || [];
356
- this.json.accessors.push(glTFAccessor);
357
- return this.json.accessors.length - 1;
358
- }
359
-
360
- addBinaryBuffer(sourceBuffer, accessor = {
361
- size: 3
362
- }) {
363
- const bufferViewIndex = this.addBufferView(sourceBuffer);
364
- let minMax = {
365
- min: accessor.min,
366
- max: accessor.max
367
- };
368
-
369
- if (!minMax.min || !minMax.max) {
370
- minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);
371
- }
372
-
373
- const accessorDefaults = {
374
- size: accessor.size,
375
- componentType: getComponentTypeFromArray(sourceBuffer),
376
- count: Math.round(sourceBuffer.length / accessor.size),
377
- min: minMax.min,
378
- max: minMax.max
379
- };
380
- return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));
381
- }
382
-
383
- addTexture(texture) {
384
- const {
385
- imageIndex
386
- } = texture;
387
- const glTFTexture = {
388
- source: imageIndex
389
- };
390
- this.json.textures = this.json.textures || [];
391
- this.json.textures.push(glTFTexture);
392
- return this.json.textures.length - 1;
393
- }
394
-
395
- addMaterial(pbrMaterialInfo) {
396
- this.json.materials = this.json.materials || [];
397
- this.json.materials.push(pbrMaterialInfo);
398
- return this.json.materials.length - 1;
399
- }
400
-
401
- createBinaryChunk() {
402
- var _this$json, _this$json$buffers;
403
-
404
- this.gltf.buffers = [];
405
- const totalByteLength = this.byteLength;
406
- const arrayBuffer = new ArrayBuffer(totalByteLength);
407
- const targetArray = new Uint8Array(arrayBuffer);
408
- let dstByteOffset = 0;
409
-
410
- for (const sourceBuffer of this.sourceBuffers || []) {
411
- dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);
412
- }
413
-
414
- if ((_this$json = this.json) !== null && _this$json !== void 0 && (_this$json$buffers = _this$json.buffers) !== null && _this$json$buffers !== void 0 && _this$json$buffers[0]) {
415
- this.json.buffers[0].byteLength = totalByteLength;
416
- } else {
417
- this.json.buffers = [{
418
- byteLength: totalByteLength
419
- }];
420
- }
421
-
422
- this.gltf.binary = arrayBuffer;
423
- this.sourceBuffers = [arrayBuffer];
424
- }
425
-
426
- _removeStringFromArray(array, string) {
427
- let found = true;
428
-
429
- while (found) {
430
- const index = array.indexOf(string);
431
-
432
- if (index > -1) {
433
- array.splice(index, 1);
434
- } else {
435
- found = false;
436
- }
437
- }
438
- }
439
-
440
- _addAttributes(attributes = {}) {
441
- const result = {};
442
-
443
- for (const attributeKey in attributes) {
444
- const attributeData = attributes[attributeKey];
445
-
446
- const attrName = this._getGltfAttributeName(attributeKey);
447
-
448
- const accessor = this.addBinaryBuffer(attributeData.value, attributeData);
449
- result[attrName] = accessor;
450
- }
451
-
452
- return result;
453
- }
454
-
455
- _addIndices(indices) {
456
- return this.addBinaryBuffer(indices, {
457
- size: 1
458
- });
459
- }
460
-
461
- _getGltfAttributeName(attributeName) {
462
- switch (attributeName.toLowerCase()) {
463
- case 'position':
464
- case 'positions':
465
- case 'vertices':
466
- return 'POSITION';
467
-
468
- case 'normal':
469
- case 'normals':
470
- return 'NORMAL';
471
-
472
- case 'color':
473
- case 'colors':
474
- return 'COLOR_0';
475
-
476
- case 'texcoord':
477
- case 'texcoords':
478
- return 'TEXCOORD_0';
479
-
480
- default:
481
- return attributeName;
482
- }
483
- }
484
-
485
- _getAccessorMinMax(buffer, size) {
486
- const result = {
487
- min: null,
488
- max: null
489
- };
490
-
491
- if (buffer.length < size) {
492
- return result;
493
- }
494
-
495
- result.min = [];
496
- result.max = [];
497
- const initValues = buffer.subarray(0, size);
498
-
499
- for (const value of initValues) {
500
- result.min.push(value);
501
- result.max.push(value);
502
- }
503
-
504
- for (let index = size; index < buffer.length; index += size) {
505
- for (let componentIndex = 0; componentIndex < size; componentIndex++) {
506
- result.min[0 + componentIndex] = Math.min(result.min[0 + componentIndex], buffer[index + componentIndex]);
507
- result.max[0 + componentIndex] = Math.max(result.max[0 + componentIndex], buffer[index + componentIndex]);
508
- }
509
- }
510
-
511
- return result;
512
- }
513
-
514
20
  }
515
- //# sourceMappingURL=gltf-scenegraph.js.map
21
+ /**
22
+ * Class for structured access to GLTF data
23
+ */
24
+ class GLTFScenegraph {
25
+ // TODO - why is this not GLTFWithBuffers - what happens to images?
26
+ constructor(gltf) {
27
+ // Declare locally so
28
+ this.gltf = {
29
+ json: gltf?.json || makeDefaultGLTFJson(),
30
+ buffers: gltf?.buffers || []
31
+ };
32
+ this.sourceBuffers = [];
33
+ this.byteLength = 0;
34
+ // Initialize buffers
35
+ if (this.gltf.buffers && this.gltf.buffers[0]) {
36
+ this.byteLength = this.gltf.buffers[0].byteLength;
37
+ this.sourceBuffers = [this.gltf.buffers[0]];
38
+ }
39
+ }
40
+ // Accessors
41
+ get json() {
42
+ return this.gltf.json;
43
+ }
44
+ getApplicationData(key) {
45
+ // TODO - Data is already unpacked by GLBParser
46
+ const data = this.json[key];
47
+ return data;
48
+ }
49
+ getExtraData(key) {
50
+ // TODO - Data is already unpacked by GLBParser
51
+ const extras = this.json.extras || {};
52
+ return extras[key];
53
+ }
54
+ hasExtension(extensionName) {
55
+ const isUsedExtension = this.getUsedExtensions().find((name) => name === extensionName);
56
+ const isRequiredExtension = this.getRequiredExtensions().find((name) => name === extensionName);
57
+ return typeof isUsedExtension === 'string' || typeof isRequiredExtension === 'string';
58
+ }
59
+ getExtension(extensionName) {
60
+ const isExtension = this.getUsedExtensions().find((name) => name === extensionName);
61
+ const extensions = this.json.extensions || {};
62
+ return isExtension ? extensions[extensionName] : null;
63
+ }
64
+ getRequiredExtension(extensionName) {
65
+ const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);
66
+ return isRequired ? this.getExtension(extensionName) : null;
67
+ }
68
+ getRequiredExtensions() {
69
+ return this.json.extensionsRequired || [];
70
+ }
71
+ getUsedExtensions() {
72
+ return this.json.extensionsUsed || [];
73
+ }
74
+ getRemovedExtensions() {
75
+ return (this.json.extensionsRemoved || []);
76
+ }
77
+ getObjectExtension(object, extensionName) {
78
+ const extensions = object.extensions || {};
79
+ return extensions[extensionName];
80
+ }
81
+ getScene(index) {
82
+ return this.getObject('scenes', index);
83
+ }
84
+ getNode(index) {
85
+ return this.getObject('nodes', index);
86
+ }
87
+ getSkin(index) {
88
+ return this.getObject('skins', index);
89
+ }
90
+ getMesh(index) {
91
+ return this.getObject('meshes', index);
92
+ }
93
+ getMaterial(index) {
94
+ return this.getObject('materials', index);
95
+ }
96
+ getAccessor(index) {
97
+ return this.getObject('accessors', index);
98
+ }
99
+ // getCamera(index: number): object | null {
100
+ // return null; // TODO: fix thi: object as null;
101
+ // }
102
+ getTexture(index) {
103
+ return this.getObject('textures', index);
104
+ }
105
+ getSampler(index) {
106
+ return this.getObject('samplers', index);
107
+ }
108
+ getImage(index) {
109
+ return this.getObject('images', index);
110
+ }
111
+ getBufferView(index) {
112
+ return this.getObject('bufferViews', index);
113
+ }
114
+ getBuffer(index) {
115
+ return this.getObject('buffers', index);
116
+ }
117
+ getObject(array, index) {
118
+ // check if already resolved
119
+ if (typeof index === 'object') {
120
+ return index;
121
+ }
122
+ const object = this.json[array] && this.json[array][index];
123
+ if (!object) {
124
+ throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line
125
+ }
126
+ return object;
127
+ }
128
+ /**
129
+ * Accepts buffer view index or buffer view object
130
+ * @returns a `Uint8Array`
131
+ */
132
+ getTypedArrayForBufferView(bufferView) {
133
+ bufferView = this.getBufferView(bufferView);
134
+ // @ts-ignore
135
+ const bufferIndex = bufferView.buffer;
136
+ // Get hold of the arrayBuffer
137
+ // const buffer = this.getBuffer(bufferIndex);
138
+ const binChunk = this.gltf.buffers[bufferIndex];
139
+ (0, assert_1.assert)(binChunk);
140
+ // @ts-ignore
141
+ const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;
142
+ // @ts-ignore
143
+ return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);
144
+ }
145
+ /** Accepts accessor index or accessor object
146
+ * @returns a typed array with type that matches the types
147
+ */
148
+ getTypedArrayForAccessor(accessor) {
149
+ // @ts-ignore
150
+ accessor = this.getAccessor(accessor);
151
+ // @ts-ignore
152
+ const bufferView = this.getBufferView(accessor.bufferView);
153
+ const buffer = this.getBuffer(bufferView.buffer);
154
+ // @ts-ignore
155
+ const arrayBuffer = buffer.data;
156
+ // Create a new typed array as a view into the combined buffer
157
+ const { ArrayType, length } = (0, gltf_utils_1.getAccessorArrayTypeAndLength)(accessor, bufferView);
158
+ // @ts-ignore
159
+ const byteOffset = bufferView.byteOffset + accessor.byteOffset;
160
+ return new ArrayType(arrayBuffer, byteOffset, length);
161
+ }
162
+ /** accepts accessor index or accessor object
163
+ * returns a `Uint8Array`
164
+ */
165
+ getTypedArrayForImageData(image) {
166
+ // @ts-ignore
167
+ image = this.getAccessor(image);
168
+ // @ts-ignore
169
+ const bufferView = this.getBufferView(image.bufferView);
170
+ const buffer = this.getBuffer(bufferView.buffer);
171
+ // @ts-ignore
172
+ const arrayBuffer = buffer.data;
173
+ const byteOffset = bufferView.byteOffset || 0;
174
+ return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
175
+ }
176
+ // MODIFERS
177
+ /**
178
+ * Add an extra application-defined key to the top-level data structure
179
+ */
180
+ addApplicationData(key, data) {
181
+ this.json[key] = data;
182
+ return this;
183
+ }
184
+ /**
185
+ * `extras` - Standard GLTF field for storing application specific data
186
+ */
187
+ addExtraData(key, data) {
188
+ this.json.extras = this.json.extras || {};
189
+ this.json.extras[key] = data;
190
+ return this;
191
+ }
192
+ addObjectExtension(object, extensionName, data) {
193
+ // @ts-ignore
194
+ object.extensions = object.extensions || {};
195
+ // TODO - clobber or merge?
196
+ // @ts-ignore
197
+ object.extensions[extensionName] = data;
198
+ this.registerUsedExtension(extensionName);
199
+ return this;
200
+ }
201
+ setObjectExtension(object, extensionName, data) {
202
+ const extensions = object.extensions || {};
203
+ extensions[extensionName] = data;
204
+ // TODO - add to usedExtensions...
205
+ }
206
+ removeObjectExtension(object, extensionName) {
207
+ const extensions = object?.extensions || {};
208
+ if (extensions[extensionName]) {
209
+ this.json.extensionsRemoved = this.json.extensionsRemoved || [];
210
+ const extensionsRemoved = this.json.extensionsRemoved;
211
+ if (!extensionsRemoved.includes(extensionName)) {
212
+ extensionsRemoved.push(extensionName);
213
+ }
214
+ }
215
+ delete extensions[extensionName];
216
+ }
217
+ /**
218
+ * Add to standard GLTF top level extension object, mark as used
219
+ */
220
+ addExtension(extensionName, extensionData = {}) {
221
+ (0, assert_1.assert)(extensionData);
222
+ this.json.extensions = this.json.extensions || {};
223
+ this.json.extensions[extensionName] = extensionData;
224
+ this.registerUsedExtension(extensionName);
225
+ return extensionData;
226
+ }
227
+ /**
228
+ * Standard GLTF top level extension object, mark as used and required
229
+ */
230
+ addRequiredExtension(extensionName, extensionData = {}) {
231
+ (0, assert_1.assert)(extensionData);
232
+ this.addExtension(extensionName, extensionData);
233
+ this.registerRequiredExtension(extensionName);
234
+ return extensionData;
235
+ }
236
+ /**
237
+ * Add extensionName to list of used extensions
238
+ */
239
+ registerUsedExtension(extensionName) {
240
+ this.json.extensionsUsed = this.json.extensionsUsed || [];
241
+ if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {
242
+ this.json.extensionsUsed.push(extensionName);
243
+ }
244
+ }
245
+ /**
246
+ * Add extensionName to list of required extensions
247
+ */
248
+ registerRequiredExtension(extensionName) {
249
+ this.registerUsedExtension(extensionName);
250
+ this.json.extensionsRequired = this.json.extensionsRequired || [];
251
+ if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {
252
+ this.json.extensionsRequired.push(extensionName);
253
+ }
254
+ }
255
+ /**
256
+ * Removes an extension from the top-level list
257
+ */
258
+ removeExtension(extensionName) {
259
+ if (this.json.extensions?.[extensionName]) {
260
+ this.json.extensionsRemoved = this.json.extensionsRemoved || [];
261
+ const extensionsRemoved = this.json.extensionsRemoved;
262
+ if (!extensionsRemoved.includes(extensionName)) {
263
+ extensionsRemoved.push(extensionName);
264
+ }
265
+ }
266
+ if (this.json.extensions) {
267
+ delete this.json.extensions[extensionName];
268
+ }
269
+ if (this.json.extensionsRequired) {
270
+ this._removeStringFromArray(this.json.extensionsRequired, extensionName);
271
+ }
272
+ if (this.json.extensionsUsed) {
273
+ this._removeStringFromArray(this.json.extensionsUsed, extensionName);
274
+ }
275
+ }
276
+ /**
277
+ * Set default scene which is to be displayed at load time
278
+ */
279
+ setDefaultScene(sceneIndex) {
280
+ this.json.scene = sceneIndex;
281
+ }
282
+ /**
283
+ * @todo: add more properties for scene initialization:
284
+ * name`, `extensions`, `extras`
285
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene
286
+ */
287
+ addScene(scene) {
288
+ const { nodeIndices } = scene;
289
+ this.json.scenes = this.json.scenes || [];
290
+ this.json.scenes.push({ nodes: nodeIndices });
291
+ return this.json.scenes.length - 1;
292
+ }
293
+ /**
294
+ * @todo: add more properties for node initialization:
295
+ * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`
296
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node
297
+ */
298
+ addNode(node) {
299
+ const { meshIndex, matrix } = node;
300
+ this.json.nodes = this.json.nodes || [];
301
+ const nodeData = { mesh: meshIndex };
302
+ if (matrix) {
303
+ // @ts-ignore
304
+ nodeData.matrix = matrix;
305
+ }
306
+ this.json.nodes.push(nodeData);
307
+ return this.json.nodes.length - 1;
308
+ }
309
+ /** Adds a mesh to the json part */
310
+ addMesh(mesh) {
311
+ const { attributes, indices, material, mode = 4 } = mesh;
312
+ const accessors = this._addAttributes(attributes);
313
+ const glTFMesh = {
314
+ primitives: [
315
+ {
316
+ attributes: accessors,
317
+ mode
318
+ }
319
+ ]
320
+ };
321
+ if (indices) {
322
+ const indicesAccessor = this._addIndices(indices);
323
+ // @ts-ignore
324
+ glTFMesh.primitives[0].indices = indicesAccessor;
325
+ }
326
+ if (Number.isFinite(material)) {
327
+ // @ts-ignore
328
+ glTFMesh.primitives[0].material = material;
329
+ }
330
+ this.json.meshes = this.json.meshes || [];
331
+ this.json.meshes.push(glTFMesh);
332
+ return this.json.meshes.length - 1;
333
+ }
334
+ addPointCloud(attributes) {
335
+ // @ts-ignore
336
+ const accessorIndices = this._addAttributes(attributes);
337
+ const glTFMesh = {
338
+ primitives: [
339
+ {
340
+ attributes: accessorIndices,
341
+ mode: 0 // GL.POINTS
342
+ }
343
+ ]
344
+ };
345
+ this.json.meshes = this.json.meshes || [];
346
+ this.json.meshes.push(glTFMesh);
347
+ return this.json.meshes.length - 1;
348
+ }
349
+ /**
350
+ * Adds a binary image. Builds glTF "JSON metadata" and saves buffer reference
351
+ * Buffer will be copied into BIN chunk during "pack"
352
+ * Currently encodes as glTF image
353
+ * @param imageData
354
+ * @param mimeType
355
+ */
356
+ addImage(imageData, mimeTypeOpt) {
357
+ // If image is referencing a bufferView instead of URI, mimeType must be defined:
358
+ // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images
359
+ // "a reference to a bufferView; in that case mimeType must be defined."
360
+ const metadata = (0, images_1.getBinaryImageMetadata)(imageData);
361
+ const mimeType = mimeTypeOpt || metadata?.mimeType;
362
+ const bufferViewIndex = this.addBufferView(imageData);
363
+ const glTFImage = {
364
+ bufferView: bufferViewIndex,
365
+ mimeType
366
+ };
367
+ this.json.images = this.json.images || [];
368
+ this.json.images.push(glTFImage);
369
+ return this.json.images.length - 1;
370
+ }
371
+ /**
372
+ * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index
373
+ * @param buffer
374
+ */
375
+ addBufferView(buffer) {
376
+ const byteLength = buffer.byteLength;
377
+ (0, assert_1.assert)(Number.isFinite(byteLength));
378
+ // Add this buffer to the list of buffers to be written to the body.
379
+ this.sourceBuffers = this.sourceBuffers || [];
380
+ this.sourceBuffers.push(buffer);
381
+ const glTFBufferView = {
382
+ buffer: 0,
383
+ // Write offset from the start of the binary body
384
+ byteOffset: this.byteLength,
385
+ byteLength
386
+ };
387
+ // We've now added the contents to the body, so update the total length
388
+ // Every sub-chunk needs to be 4-byte align ed
389
+ this.byteLength += (0, loader_utils_1.padToNBytes)(byteLength, 4);
390
+ // Add a bufferView indicating start and length of this binary sub-chunk
391
+ this.json.bufferViews = this.json.bufferViews || [];
392
+ this.json.bufferViews.push(glTFBufferView);
393
+ return this.json.bufferViews.length - 1;
394
+ }
395
+ /**
396
+ * Adds an accessor to a bufferView
397
+ * @param bufferViewIndex
398
+ * @param accessor
399
+ */
400
+ addAccessor(bufferViewIndex, accessor) {
401
+ const glTFAccessor = {
402
+ bufferView: bufferViewIndex,
403
+ // @ts-ignore
404
+ type: (0, gltf_utils_1.getAccessorTypeFromSize)(accessor.size),
405
+ // @ts-ignore
406
+ componentType: accessor.componentType,
407
+ // @ts-ignore
408
+ count: accessor.count,
409
+ // @ts-ignore
410
+ max: accessor.max,
411
+ // @ts-ignore
412
+ min: accessor.min
413
+ };
414
+ this.json.accessors = this.json.accessors || [];
415
+ this.json.accessors.push(glTFAccessor);
416
+ return this.json.accessors.length - 1;
417
+ }
418
+ /**
419
+ * Add a binary buffer. Builds glTF "JSON metadata" and saves buffer reference
420
+ * Buffer will be copied into BIN chunk during "pack"
421
+ * Currently encodes buffers as glTF accessors, but this could be optimized
422
+ * @param sourceBuffer
423
+ * @param accessor
424
+ */
425
+ addBinaryBuffer(sourceBuffer, accessor = { size: 3 }) {
426
+ const bufferViewIndex = this.addBufferView(sourceBuffer);
427
+ // @ts-ignore
428
+ let minMax = { min: accessor.min, max: accessor.max };
429
+ if (!minMax.min || !minMax.max) {
430
+ // @ts-ignore
431
+ minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);
432
+ }
433
+ const accessorDefaults = {
434
+ // @ts-ignore
435
+ size: accessor.size,
436
+ componentType: (0, gltf_utils_1.getComponentTypeFromArray)(sourceBuffer),
437
+ // @ts-ignore
438
+ count: Math.round(sourceBuffer.length / accessor.size),
439
+ min: minMax.min,
440
+ max: minMax.max
441
+ };
442
+ return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));
443
+ }
444
+ /**
445
+ * Adds a texture to the json part
446
+ * @todo: add more properties for texture initialization
447
+ * `sampler`, `name`, `extensions`, `extras`
448
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture
449
+ */
450
+ addTexture(texture) {
451
+ const { imageIndex } = texture;
452
+ const glTFTexture = {
453
+ source: imageIndex
454
+ };
455
+ this.json.textures = this.json.textures || [];
456
+ this.json.textures.push(glTFTexture);
457
+ return this.json.textures.length - 1;
458
+ }
459
+ /** Adds a material to the json part */
460
+ addMaterial(pbrMaterialInfo) {
461
+ this.json.materials = this.json.materials || [];
462
+ this.json.materials.push(pbrMaterialInfo);
463
+ return this.json.materials.length - 1;
464
+ }
465
+ /** Pack the binary chunk */
466
+ createBinaryChunk() {
467
+ // Encoder expects this array undefined or empty
468
+ this.gltf.buffers = [];
469
+ // Allocate total array
470
+ const totalByteLength = this.byteLength;
471
+ const arrayBuffer = new ArrayBuffer(totalByteLength);
472
+ const targetArray = new Uint8Array(arrayBuffer);
473
+ // Copy each array into
474
+ let dstByteOffset = 0;
475
+ for (const sourceBuffer of this.sourceBuffers || []) {
476
+ dstByteOffset = (0, loader_utils_1.copyToArray)(sourceBuffer, targetArray, dstByteOffset);
477
+ }
478
+ // Update the glTF BIN CHUNK byte length
479
+ if (this.json?.buffers?.[0]) {
480
+ this.json.buffers[0].byteLength = totalByteLength;
481
+ }
482
+ else {
483
+ this.json.buffers = [{ byteLength: totalByteLength }];
484
+ }
485
+ // Save generated arrayBuffer
486
+ this.gltf.binary = arrayBuffer;
487
+ // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk
488
+ this.sourceBuffers = [arrayBuffer];
489
+ }
490
+ // PRIVATE
491
+ _removeStringFromArray(array, string) {
492
+ let found = true;
493
+ while (found) {
494
+ const index = array.indexOf(string);
495
+ if (index > -1) {
496
+ array.splice(index, 1);
497
+ }
498
+ else {
499
+ found = false;
500
+ }
501
+ }
502
+ }
503
+ /**
504
+ * Add attributes to buffers and create `attributes` object which is part of `mesh`
505
+ */
506
+ _addAttributes(attributes = {}) {
507
+ const result = {};
508
+ for (const attributeKey in attributes) {
509
+ const attributeData = attributes[attributeKey];
510
+ const attrName = this._getGltfAttributeName(attributeKey);
511
+ const accessor = this.addBinaryBuffer(attributeData.value, attributeData);
512
+ result[attrName] = accessor;
513
+ }
514
+ return result;
515
+ }
516
+ /**
517
+ * Add indices to buffers
518
+ */
519
+ _addIndices(indices) {
520
+ return this.addBinaryBuffer(indices, { size: 1 });
521
+ }
522
+ /**
523
+ * Deduce gltf specific attribue name from input attribute name
524
+ */
525
+ _getGltfAttributeName(attributeName) {
526
+ switch (attributeName.toLowerCase()) {
527
+ case 'position':
528
+ case 'positions':
529
+ case 'vertices':
530
+ return 'POSITION';
531
+ case 'normal':
532
+ case 'normals':
533
+ return 'NORMAL';
534
+ case 'color':
535
+ case 'colors':
536
+ return 'COLOR_0';
537
+ case 'texcoord':
538
+ case 'texcoords':
539
+ return 'TEXCOORD_0';
540
+ default:
541
+ return attributeName;
542
+ }
543
+ }
544
+ /**
545
+ * Calculate `min` and `max` arrays of accessor according to spec:
546
+ * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor
547
+ */
548
+ _getAccessorMinMax(buffer, size) {
549
+ const result = { min: null, max: null };
550
+ if (buffer.length < size) {
551
+ return result;
552
+ }
553
+ // @ts-ignore
554
+ result.min = [];
555
+ // @ts-ignore
556
+ result.max = [];
557
+ const initValues = buffer.subarray(0, size);
558
+ for (const value of initValues) {
559
+ // @ts-ignore
560
+ result.min.push(value);
561
+ // @ts-ignore
562
+ result.max.push(value);
563
+ }
564
+ for (let index = size; index < buffer.length; index += size) {
565
+ for (let componentIndex = 0; componentIndex < size; componentIndex++) {
566
+ // @ts-ignore
567
+ result.min[0 + componentIndex] = Math.min(
568
+ // @ts-ignore
569
+ result.min[0 + componentIndex], buffer[index + componentIndex]);
570
+ // @ts-ignore
571
+ result.max[0 + componentIndex] = Math.max(
572
+ // @ts-ignore
573
+ result.max[0 + componentIndex], buffer[index + componentIndex]);
574
+ }
575
+ }
576
+ return result;
577
+ }
578
+ }
579
+ exports.GLTFScenegraph = GLTFScenegraph;