@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,7 +1,42 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {GLTFWithBuffers} from '../types/gltf-types';
4
+ import type {ParseGLTFOptions} from '../parsers/parse-gltf';
5
+
6
+ import type {
7
+ GLTF,
8
+ GLTFAccessor,
9
+ GLTFBufferView,
10
+ GLTFCamera,
11
+ GLTFImage,
12
+ GLTFMaterial,
13
+ GLTFMesh,
14
+ GLTFNode,
15
+ GLTFSampler,
16
+ GLTFScene,
17
+ GLTFSkin,
18
+ GLTFTexture
19
+ } from '../types/gltf-json-schema';
20
+
21
+ import type {
22
+ GLTFPostprocessed,
23
+ GLTFAccessorPostprocessed,
24
+ GLTFBufferPostprocessed,
25
+ GLTFBufferViewPostprocessed,
26
+ GLTFCameraPostprocessed,
27
+ GLTFImagePostprocessed,
28
+ GLTFMaterialPostprocessed,
29
+ GLTFMeshPostprocessed,
30
+ GLTFNodePostprocessed,
31
+ GLTFSamplerPostprocessed,
32
+ GLTFScenePostprocessed,
33
+ GLTFSkinPostprocessed,
34
+ GLTFTexturePostprocessed,
35
+ GLTFMeshPrimitivePostprocessed
36
+ } from '../types/gltf-postprocessed-schema';
37
+
1
38
  import {assert} from '../utils/assert';
2
39
  import {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';
3
- import {BufferView} from '../types/gltf-json-schema';
4
- import {BufferView as BufferViewPostprocessed} from '../types/gltf-postprocessed-schema';
5
40
 
6
41
  // This is a post processor for loaded glTF files
7
42
  // The goal is to make the loaded data easier to use in WebGL applications
@@ -54,13 +89,20 @@ const SAMPLER_PARAMETER_GLTF_TO_GL = {
54
89
 
55
90
  // When undefined, a sampler with repeat wrapping and auto filtering should be used.
56
91
  // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture
57
- const DEFAULT_SAMPLER = {
92
+ const DEFAULT_SAMPLER_PARAMETERS = {
58
93
  [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,
59
94
  [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,
60
95
  [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,
61
96
  [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT
62
97
  };
63
98
 
99
+ function makeDefaultSampler(): GLTFSamplerPostprocessed {
100
+ return {
101
+ id: 'default-sampler',
102
+ parameters: DEFAULT_SAMPLER_PARAMETERS
103
+ };
104
+ }
105
+
64
106
  function getBytesFromComponentType(componentType) {
65
107
  return BYTES[componentType];
66
108
  }
@@ -71,142 +113,172 @@ function getSizeFromAccessorType(type) {
71
113
 
72
114
  class GLTFPostProcessor {
73
115
  baseUri: string = '';
74
- json: Record<string, any> = {};
75
- buffers: [] = [];
76
- images: [] = [];
77
-
78
- postProcess(gltf, options = {}) {
79
- const {json, buffers = [], images = [], baseUri = ''} = gltf;
116
+ // @ts-expect-error
117
+ jsonUnprocessed: GLTF;
118
+ // @ts-expect-error
119
+ json: GLTFPostprocessed;
120
+ buffers: {
121
+ arrayBuffer: ArrayBuffer;
122
+ byteOffset: number;
123
+ byteLength: number;
124
+ }[] = [];
125
+ images: any[] = [];
126
+
127
+ postProcess(gltf: GLTFWithBuffers, options = {}) {
128
+ const {json, buffers = [], images = []} = gltf;
129
+ // @ts-expect-error
130
+ const {baseUri = ''} = gltf;
80
131
  assert(json);
81
132
 
82
133
  this.baseUri = baseUri;
83
- this.json = json;
84
134
  this.buffers = buffers;
85
135
  this.images = images;
136
+ this.jsonUnprocessed = json;
86
137
 
87
- this._resolveTree(this.json, options);
138
+ this.json = this._resolveTree(gltf.json, options);
88
139
 
89
140
  return this.json;
90
141
  }
91
142
 
92
143
  // Convert indexed glTF structure into tree structure
93
144
  // cross-link index resolution, enum lookup, convenience calculations
94
- // eslint-disable-next-line complexity
95
- _resolveTree(json, options = {}) {
96
- if (json.bufferViews) {
97
- json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));
145
+ // eslint-disable-next-line complexity, max-statements
146
+ _resolveTree(gltf: GLTF, options = {}): GLTFPostprocessed {
147
+ // @ts-expect-error
148
+ const json: GLTFPostprocessed = {...gltf};
149
+ this.json = json;
150
+
151
+ if (gltf.bufferViews) {
152
+ json.bufferViews = gltf.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));
98
153
  }
99
- if (json.images) {
100
- json.images = json.images.map((image, i) => this._resolveImage(image, i));
154
+ if (gltf.images) {
155
+ json.images = gltf.images.map((image, i) => this._resolveImage(image, i));
101
156
  }
102
- if (json.samplers) {
103
- json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));
157
+ if (gltf.samplers) {
158
+ json.samplers = gltf.samplers.map((sampler, i) => this._resolveSampler(sampler, i));
104
159
  }
105
- if (json.textures) {
106
- json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));
160
+ if (gltf.textures) {
161
+ json.textures = gltf.textures.map((texture, i) => this._resolveTexture(texture, i));
107
162
  }
108
- if (json.accessors) {
109
- json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));
163
+ if (gltf.accessors) {
164
+ json.accessors = gltf.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));
110
165
  }
111
- if (json.materials) {
112
- json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));
166
+ if (gltf.materials) {
167
+ json.materials = gltf.materials.map((material, i) => this._resolveMaterial(material, i));
113
168
  }
114
- if (json.meshes) {
115
- json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));
169
+ if (gltf.meshes) {
170
+ json.meshes = gltf.meshes.map((mesh, i) => this._resolveMesh(mesh, i));
116
171
  }
117
- if (json.nodes) {
118
- json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));
172
+ if (gltf.nodes) {
173
+ json.nodes = gltf.nodes.map((node, i) => this._resolveNode(node, i));
174
+ json.nodes = json.nodes.map((node, i) => this._resolveNodeChildren(node));
119
175
  }
120
- if (json.skins) {
121
- json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));
176
+ if (gltf.skins) {
177
+ json.skins = gltf.skins.map((skin, i) => this._resolveSkin(skin, i));
122
178
  }
123
- if (json.scenes) {
124
- json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));
179
+ if (gltf.scenes) {
180
+ json.scenes = gltf.scenes.map((scene, i) => this._resolveScene(scene, i));
125
181
  }
126
- if (json.scene !== undefined) {
182
+ if (typeof this.json.scene === 'number' && json.scenes) {
127
183
  json.scene = json.scenes[this.json.scene];
128
184
  }
185
+
186
+ return json;
129
187
  }
130
188
 
131
- getScene(index) {
132
- return this._get('scenes', index);
189
+ getScene(index: number): GLTFScenePostprocessed {
190
+ return this._get(this.json.scenes, index);
133
191
  }
134
192
 
135
- getNode(index) {
136
- return this._get('nodes', index);
193
+ getNode(index: number): GLTFNodePostprocessed {
194
+ return this._get(this.json.nodes, index);
137
195
  }
138
196
 
139
- getSkin(index) {
140
- return this._get('skins', index);
197
+ getSkin(index: number): GLTFSkinPostprocessed {
198
+ return this._get(this.json.skins, index);
141
199
  }
142
200
 
143
- getMesh(index) {
144
- return this._get('meshes', index);
201
+ getMesh(index: number): GLTFMeshPostprocessed {
202
+ return this._get(this.json.meshes, index);
145
203
  }
146
204
 
147
- getMaterial(index) {
148
- return this._get('materials', index);
205
+ getMaterial(index: number): GLTFMaterialPostprocessed {
206
+ return this._get(this.json.materials, index);
149
207
  }
150
208
 
151
- getAccessor(index) {
152
- return this._get('accessors', index);
209
+ getAccessor(index: number): GLTFAccessorPostprocessed {
210
+ return this._get(this.json.accessors, index);
153
211
  }
154
212
 
155
- getCamera(index) {
156
- return null; // TODO: fix this
213
+ getCamera(index: number): GLTFCameraPostprocessed {
214
+ return this._get(this.json.cameras, index);
157
215
  }
158
216
 
159
- getTexture(index) {
160
- return this._get('textures', index);
217
+ getTexture(index: number): GLTFTexturePostprocessed {
218
+ return this._get(this.json.textures, index);
161
219
  }
162
220
 
163
- getSampler(index) {
164
- return this._get('samplers', index);
221
+ getSampler(index: number): GLTFSamplerPostprocessed {
222
+ return this._get(this.json.samplers, index);
165
223
  }
166
224
 
167
- getImage(index) {
168
- return this._get('images', index);
225
+ getImage(index: number): GLTFImagePostprocessed {
226
+ return this._get(this.json.images, index);
169
227
  }
170
228
 
171
- getBufferView(index) {
172
- return this._get('bufferViews', index);
229
+ getBufferView(index: number): GLTFBufferViewPostprocessed {
230
+ return this._get(this.json.bufferViews, index);
173
231
  }
174
232
 
175
- getBuffer(index) {
176
- return this._get('buffers', index);
233
+ getBuffer(index: number): GLTFBufferPostprocessed {
234
+ return this._get(this.json.buffers, index);
177
235
  }
178
236
 
179
- _get(array, index) {
237
+ _get<T>(array: T[] | undefined, index: number): T {
180
238
  // check if already resolved
181
239
  if (typeof index === 'object') {
182
240
  return index;
183
241
  }
184
- const object = this.json[array] && this.json[array][index];
242
+ const object = array && array[index];
185
243
  if (!object) {
186
244
  console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line
187
245
  }
188
- return object;
246
+ return object as T;
189
247
  }
190
248
 
191
249
  // PARSING HELPERS
192
250
 
193
- _resolveScene(scene, index) {
194
- // scene = {...scene};
195
- scene.id = scene.id || `scene-${index}`;
196
- scene.nodes = (scene.nodes || []).map((node) => this.getNode(node));
197
- return scene;
251
+ _resolveScene(scene: GLTFScene, index: number): GLTFScenePostprocessed {
252
+ return {
253
+ ...scene,
254
+ // @ts-ignore
255
+ id: scene.id || `scene-${index}`,
256
+ nodes: (scene.nodes || []).map((node) => this.getNode(node))
257
+ };
198
258
  }
199
259
 
200
- _resolveNode(node, index) {
201
- // node = {...node};
202
- node.id = node.id || `node-${index}`;
203
- if (node.children) {
204
- node.children = node.children.map((child) => this.getNode(child));
260
+ _resolveNode(gltfNode: GLTFNode, index: number): GLTFNodePostprocessed {
261
+ // @ts-expect-error
262
+ const node: GLTFNodePostprocessed = {
263
+ ...gltfNode,
264
+ // @ts-expect-error id could already be present, glTF standard does not prevent it
265
+ id: gltfNode?.id || `node-${index}`
266
+ };
267
+ if (gltfNode.mesh !== undefined) {
268
+ node.mesh = this.getMesh(gltfNode.mesh);
269
+ }
270
+ if (gltfNode.camera !== undefined) {
271
+ node.camera = this.getCamera(gltfNode.camera);
205
272
  }
206
- if (node.mesh !== undefined) {
207
- node.mesh = this.getMesh(node.mesh);
208
- } else if (node.meshes !== undefined && node.meshes.length) {
209
- node.mesh = node.meshes.reduce(
273
+ if (gltfNode.skin !== undefined) {
274
+ node.skin = this.getSkin(gltfNode.skin);
275
+ }
276
+
277
+ // TODO deprecated - Delete in v4.0?
278
+ // @ts-expect-error node.meshes does not seem to be part of the GLTF standard
279
+ if (gltfNode.meshes !== undefined && gltfNode.meshes.length) {
280
+ // @ts-expect-error
281
+ node.mesh = gltfNode.meshes.reduce(
210
282
  (accum, meshIndex) => {
211
283
  const mesh = this.getMesh(meshIndex);
212
284
  accum.id = mesh.id;
@@ -216,38 +288,54 @@ class GLTFPostProcessor {
216
288
  {primitives: []}
217
289
  );
218
290
  }
219
- if (node.camera !== undefined) {
220
- node.camera = this.getCamera(node.camera);
221
- }
222
- if (node.skin !== undefined) {
223
- node.skin = this.getSkin(node.skin);
291
+
292
+ return node;
293
+ }
294
+
295
+ _resolveNodeChildren(node: GLTFNodePostprocessed): GLTFNodePostprocessed {
296
+ if (node.children) {
297
+ // @ts-expect-error node.children are numbers at this stage
298
+ node.children = node.children.map((child) => this.getNode(child));
224
299
  }
225
300
  return node;
226
301
  }
227
302
 
228
- _resolveSkin(skin, index) {
229
- // skin = {...skin};
230
- skin.id = skin.id || `skin-${index}`;
231
- skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);
232
- return skin;
303
+ _resolveSkin(gltfSkin: GLTFSkin, index: number): GLTFSkinPostprocessed {
304
+ const inverseBindMatrices =
305
+ typeof gltfSkin.inverseBindMatrices === 'number'
306
+ ? this.getAccessor(gltfSkin.inverseBindMatrices)
307
+ : undefined;
308
+
309
+ return {
310
+ ...gltfSkin,
311
+ id: gltfSkin.id || `skin-${index}`,
312
+ inverseBindMatrices
313
+ };
233
314
  }
234
315
 
235
- _resolveMesh(mesh, index) {
236
- // mesh = {...mesh};
237
- mesh.id = mesh.id || `mesh-${index}`;
238
- if (mesh.primitives) {
239
- mesh.primitives = mesh.primitives.map((primitive) => {
240
- primitive = {...primitive};
241
- const attributes = primitive.attributes;
242
- primitive.attributes = {};
316
+ _resolveMesh(gltfMesh: GLTFMesh, index: number): GLTFMeshPostprocessed {
317
+ const mesh: GLTFMeshPostprocessed = {
318
+ ...gltfMesh,
319
+ id: gltfMesh.id || `mesh-${index}`,
320
+ primitives: []
321
+ };
322
+ if (gltfMesh.primitives) {
323
+ mesh.primitives = gltfMesh.primitives.map((gltfPrimitive) => {
324
+ const primitive: GLTFMeshPrimitivePostprocessed = {
325
+ ...gltfPrimitive,
326
+ attributes: {},
327
+ indices: undefined,
328
+ material: undefined
329
+ };
330
+ const attributes = gltfPrimitive.attributes;
243
331
  for (const attribute in attributes) {
244
332
  primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);
245
333
  }
246
- if (primitive.indices !== undefined) {
247
- primitive.indices = this.getAccessor(primitive.indices);
334
+ if (gltfPrimitive.indices !== undefined) {
335
+ primitive.indices = this.getAccessor(gltfPrimitive.indices);
248
336
  }
249
- if (primitive.material !== undefined) {
250
- primitive.material = this.getMaterial(primitive.material);
337
+ if (gltfPrimitive.material !== undefined) {
338
+ primitive.material = this.getMaterial(gltfPrimitive.material);
251
339
  }
252
340
  return primitive;
253
341
  });
@@ -255,23 +343,27 @@ class GLTFPostProcessor {
255
343
  return mesh;
256
344
  }
257
345
 
258
- _resolveMaterial(material, index) {
259
- // material = {...material};
260
- material.id = material.id || `material-${index}`;
346
+ _resolveMaterial(gltfMaterial: GLTFMaterial, index: number): GLTFMaterialPostprocessed {
347
+ // @ts-expect-error
348
+ const material: GLTFMaterialPostprocessed = {
349
+ ...gltfMaterial,
350
+ // @ts-expect-error
351
+ id: gltfMaterial.id || `material-${index}`
352
+ };
261
353
  if (material.normalTexture) {
262
354
  material.normalTexture = {...material.normalTexture};
263
355
  material.normalTexture.texture = this.getTexture(material.normalTexture.index);
264
356
  }
265
357
  if (material.occlusionTexture) {
266
- material.occlustionTexture = {...material.occlustionTexture};
358
+ material.occlusionTexture = {...material.occlusionTexture};
267
359
  material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);
268
360
  }
269
361
  if (material.emissiveTexture) {
270
- material.emmisiveTexture = {...material.emmisiveTexture};
362
+ material.emissiveTexture = {...material.emissiveTexture};
271
363
  material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);
272
364
  }
273
365
  if (!material.emissiveFactor) {
274
- material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];
366
+ material.emissiveFactor = material.emissiveTexture ? [1, 1, 1] : [0, 0, 0];
275
367
  }
276
368
 
277
369
  if (material.pbrMetallicRoughness) {
@@ -289,19 +381,28 @@ class GLTFPostProcessor {
289
381
  return material;
290
382
  }
291
383
 
292
- _resolveAccessor(accessor, index) {
293
- // accessor = {...accessor};
294
- accessor.id = accessor.id || `accessor-${index}`;
295
- if (accessor.bufferView !== undefined) {
384
+ _resolveAccessor(gltfAccessor: GLTFAccessor, index: number): GLTFAccessorPostprocessed {
385
+ // Look up enums
386
+ const bytesPerComponent = getBytesFromComponentType(gltfAccessor.componentType);
387
+ const components = getSizeFromAccessorType(gltfAccessor.type);
388
+ const bytesPerElement = bytesPerComponent * components;
389
+
390
+ const accessor: GLTFAccessorPostprocessed = {
391
+ ...gltfAccessor,
392
+ // @ts-expect-error
393
+ id: gltfAccessor.id || `accessor-${index}`,
394
+ bytesPerComponent,
395
+ components,
396
+ bytesPerElement,
397
+ value: undefined!,
398
+ bufferView: undefined!,
399
+ sparse: undefined!
400
+ };
401
+ if (gltfAccessor.bufferView !== undefined) {
296
402
  // Draco encoded meshes don't have bufferView
297
- accessor.bufferView = this.getBufferView(accessor.bufferView);
403
+ accessor.bufferView = this.getBufferView(gltfAccessor.bufferView);
298
404
  }
299
405
 
300
- // Look up enums
301
- accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);
302
- accessor.components = getSizeFromAccessorType(accessor.type);
303
- accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;
304
-
305
406
  // Create TypedArray for the accessor
306
407
  // Note: The canonical way to instantiate is to ignore this array and create
307
408
  // WebGLBuffer's using the bufferViews.
@@ -336,7 +437,13 @@ class GLTFPostProcessor {
336
437
  * @param count
337
438
  * @returns
338
439
  */
339
- _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {
440
+ _getValueFromInterleavedBuffer(
441
+ buffer,
442
+ byteOffset: number,
443
+ byteStride: number,
444
+ bytesPerElement: number,
445
+ count: number
446
+ ): ArrayBufferLike {
340
447
  const result = new Uint8Array(count * bytesPerElement);
341
448
  for (let i = 0; i < count; i++) {
342
449
  const elementOffset = byteOffset + i * byteStride;
@@ -348,19 +455,27 @@ class GLTFPostProcessor {
348
455
  return result.buffer;
349
456
  }
350
457
 
351
- _resolveTexture(texture, index) {
352
- // texture = {...texture};
353
- texture.id = texture.id || `texture-${index}`;
354
- texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;
355
- texture.source = this.getImage(texture.source);
356
- return texture;
458
+ _resolveTexture(gltfTexture: GLTFTexture, index: number): GLTFTexturePostprocessed {
459
+ return {
460
+ ...gltfTexture,
461
+ // @ts-expect-error id could already be present, glTF standard does not prevent it
462
+ id: gltfTexture.id || `texture-${index}`,
463
+ sampler:
464
+ typeof gltfTexture.sampler === 'number'
465
+ ? this.getSampler(gltfTexture.sampler)
466
+ : makeDefaultSampler(),
467
+ source: typeof gltfTexture.source === 'number' ? this.getImage(gltfTexture.source) : undefined
468
+ };
357
469
  }
358
470
 
359
- _resolveSampler(sampler, index) {
360
- // sampler = {...sampler};
361
- sampler.id = sampler.id || `sampler-${index}`;
471
+ _resolveSampler(gltfSampler: GLTFSampler, index: number): GLTFSamplerPostprocessed {
472
+ const sampler: GLTFSamplerPostprocessed = {
473
+ // @ts-expect-error id could already be present, glTF standard does not prevent it
474
+ id: gltfSampler.id || `sampler-${index}`,
475
+ ...gltfSampler,
476
+ parameters: {}
477
+ };
362
478
  // Map textual parameters to GL parameter values
363
- sampler.parameters = {};
364
479
  for (const key in sampler) {
365
480
  const glEnum = this._enumSamplerParameter(key);
366
481
  if (glEnum !== undefined) {
@@ -370,16 +485,19 @@ class GLTFPostProcessor {
370
485
  return sampler;
371
486
  }
372
487
 
373
- _enumSamplerParameter(key) {
488
+ _enumSamplerParameter(key: string): number {
374
489
  return SAMPLER_PARAMETER_GLTF_TO_GL[key];
375
490
  }
376
491
 
377
- _resolveImage(image, index) {
378
- // image = {...image};
379
- image.id = image.id || `image-${index}`;
380
- if (image.bufferView !== undefined) {
381
- image.bufferView = this.getBufferView(image.bufferView);
382
- }
492
+ _resolveImage(gltfImage: GLTFImage, index: number): GLTFImagePostprocessed {
493
+ const image: GLTFImagePostprocessed = {
494
+ ...gltfImage,
495
+ // @ts-expect-error id could already be present, glTF standard does not prevent it
496
+ id: gltfImage.id || `image-${index}`,
497
+ image: null!,
498
+ bufferView:
499
+ gltfImage.bufferView !== undefined ? this.getBufferView(gltfImage.bufferView) : undefined
500
+ };
383
501
 
384
502
  // Check if image has been preloaded by the GLTFLoader
385
503
  // If so, link it into the JSON and drop the URI
@@ -391,30 +509,34 @@ class GLTFPostProcessor {
391
509
  return image;
392
510
  }
393
511
 
394
- _resolveBufferView(bufferView: BufferView, index: number): BufferViewPostprocessed {
395
- // bufferView = {...bufferView};
396
- const bufferIndex = bufferView.buffer;
397
- const result: BufferViewPostprocessed = {
398
- id: `bufferView-${index}`,
399
- ...bufferView,
400
- buffer: this.buffers[bufferIndex]
401
- };
402
-
403
- // @ts-expect-error
512
+ _resolveBufferView(gltfBufferView: GLTFBufferView, index: number): GLTFBufferViewPostprocessed {
513
+ const bufferIndex = gltfBufferView.buffer;
404
514
  const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;
405
- // @ts-expect-error
515
+ // Add offset of buffer, then offset of buffer view
406
516
  let byteOffset = this.buffers[bufferIndex].byteOffset || 0;
407
-
408
- if ('byteOffset' in bufferView) {
409
- byteOffset += bufferView.byteOffset;
517
+ if (gltfBufferView.byteOffset) {
518
+ byteOffset += gltfBufferView.byteOffset;
410
519
  }
411
520
 
412
- result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
413
- return result;
521
+ const bufferView: GLTFBufferViewPostprocessed = {
522
+ // // @ts-expect-error id could already be present, glTF standard does not prevent it
523
+ id: `bufferView-${index}`,
524
+ ...gltfBufferView,
525
+ // ...this.buffers[bufferIndex],
526
+ buffer: this.buffers[bufferIndex],
527
+ data: new Uint8Array(arrayBuffer, byteOffset, gltfBufferView.byteLength)
528
+ };
529
+
530
+ return bufferView;
414
531
  }
415
532
 
416
- _resolveCamera(camera, index) {
417
- camera.id = camera.id || `camera-${index}`;
533
+ _resolveCamera(gltfCamera: GLTFCamera, index): GLTFCameraPostprocessed {
534
+ const camera: GLTFCameraPostprocessed = {
535
+ ...gltfCamera,
536
+ // @ts-expect-error id could already be present, glTF standard does not prevent it
537
+ id: gltfCamera.id || `camera-${index}`
538
+ };
539
+
418
540
  // TODO - create 4x4 matrices
419
541
  if (camera.perspective) {
420
542
  // camera.matrix = createPerspectiveMatrix(camera.perspective);
@@ -426,6 +548,9 @@ class GLTFPostProcessor {
426
548
  }
427
549
  }
428
550
 
429
- export function postProcessGLTF(gltf, options?) {
551
+ export function postProcessGLTF(
552
+ gltf: GLTFWithBuffers,
553
+ options?: ParseGLTFOptions
554
+ ): GLTFPostprocessed {
430
555
  return new GLTFPostProcessor().postProcess(gltf, options);
431
556
  }
@@ -3,6 +3,7 @@ import {
3
3
  copyPaddedStringToDataView,
4
4
  copyPaddedArrayBufferToDataView
5
5
  } from '@loaders.gl/loader-utils';
6
+ // import type {GLB} from '../types/glb-types';
6
7
 
7
8
  const MAGIC_glTF = 0x46546c67; // glTF in ASCII
8
9
  const MAGIC_JSON = 0x4e4f534a; // JSON in ASCII
@@ -10,10 +11,26 @@ const MAGIC_BIN = 0x004e4942; // BIN\0 in ASCII
10
11
 
11
12
  const LE = true; // Binary GLTF is little endian.
12
13
 
13
- // Encode the full GLB buffer with header etc
14
- // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#
15
- // glb-file-format-specification
16
- export default function encodeGLBSync(glb, dataView, byteOffset = 0, options = {}) {
14
+ export type GLBEncodeOptions = {};
15
+
16
+ /**
17
+ * Encode the full GLB buffer with header etc
18
+ *
19
+ * @param glb
20
+ * @param dataView - if `null`, does not encode but just calculates length
21
+ * @param byteOffset
22
+ * @param options
23
+ * @returns
24
+ *
25
+ * @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification
26
+ * @todo type GLB argument
27
+ */
28
+ export function encodeGLBSync(
29
+ glb,
30
+ dataView: DataView | null,
31
+ byteOffset = 0,
32
+ options: GLBEncodeOptions = {}
33
+ ) {
17
34
  const {magic = MAGIC_glTF, version = 2, json = {}, binary} = glb;
18
35
 
19
36
  const byteOffsetStart = byteOffset;
@@ -1,15 +1,24 @@
1
- import encodeGLBSync from './encode-glb';
1
+ import {encodeGLBSync} from './encode-glb';
2
2
 
3
- // Encode the full glTF file as a binary GLB file
4
- // Returns an ArrayBuffer that represents the complete GLB image that can be saved to file
5
- //
6
- // TODO - Does not support encoding to non-GLB versions of glTF format
7
- // - Encode as a textual JSON file with binary data in base64 data URLs.
8
- // - Encode as a JSON with all images (and buffers?) in separate binary files
9
- //
10
- // glb-file-format-specification
11
- // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#
3
+ export type GLTFEncodeOptions = Record<string, any>;
12
4
 
5
+ /**
6
+ * Encode the full glTF file as a binary GLB file
7
+ * Returns an ArrayBuffer that represents the complete GLB image that can be saved to file
8
+ *
9
+ * @todo - Does not support encoding to non-GLB versions of glTF format. Other formats
10
+ * - Encode as a textual JSON file with binary data in base64 data URLs.
11
+ * - Encode as a JSON with all images (and buffers?) in separate binary files
12
+ *
13
+ * glb-file-format-specification
14
+ * @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#
15
+ *
16
+ * @param gltf
17
+ * @param arrayBuffer
18
+ * @param byteOffset
19
+ * @param options
20
+ * @returns
21
+ */
13
22
  export function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {
14
23
  convertBuffersToBase64(gltf);
15
24