@carbonenginejs/runtime-resource 0.1.0

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 (372) hide show
  1. package/FORMAT-PROVENANCE.md +135 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE +29 -0
  4. package/README.md +241 -0
  5. package/dist/CjsMotherLode.js +56 -0
  6. package/dist/CjsMotherLode.js.map +1 -0
  7. package/dist/CjsResMan.js +740 -0
  8. package/dist/CjsResMan.js.map +1 -0
  9. package/dist/CjsResManQueue.js +214 -0
  10. package/dist/CjsResManQueue.js.map +1 -0
  11. package/dist/CjsResource.js +366 -0
  12. package/dist/CjsResource.js.map +1 -0
  13. package/dist/CjsResourceSource.js +59 -0
  14. package/dist/CjsResourceSource.js.map +1 -0
  15. package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -0
  16. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  17. package/dist/format/CjsFormat.js +178 -0
  18. package/dist/format/CjsFormat.js.map +1 -0
  19. package/dist/format/CjsResourceProbe.js +269 -0
  20. package/dist/format/CjsResourceProbe.js.map +1 -0
  21. package/dist/format/payloadContract.js +173 -0
  22. package/dist/format/payloadContract.js.map +1 -0
  23. package/dist/formats/black/CjsBlackFormat.js +272 -0
  24. package/dist/formats/black/CjsBlackFormat.js.map +1 -0
  25. package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -0
  26. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -0
  27. package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -0
  28. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -0
  29. package/dist/formats/black/core/CjsBlackReader.js +760 -0
  30. package/dist/formats/black/core/CjsBlackReader.js.map +1 -0
  31. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -0
  32. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -0
  33. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -0
  34. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +1 -0
  35. package/dist/formats/black/core/blackConstants.js +7 -0
  36. package/dist/formats/black/core/blackConstants.js.map +1 -0
  37. package/dist/formats/black/core/blackDefinitions.js +10 -0
  38. package/dist/formats/black/core/blackDefinitions.js.map +1 -0
  39. package/dist/formats/black/core/blackEnums.js +6 -0
  40. package/dist/formats/black/core/blackEnums.js.map +1 -0
  41. package/dist/formats/black/core/blackSchema.js +3 -0
  42. package/dist/formats/black/core/blackSchema.js.map +1 -0
  43. package/dist/formats/black/core/blackVersion.js +22 -0
  44. package/dist/formats/black/core/blackVersion.js.map +1 -0
  45. package/dist/formats/black/core/helpers.js +182 -0
  46. package/dist/formats/black/core/helpers.js.map +1 -0
  47. package/dist/formats/black/core/schema.js +4 -0
  48. package/dist/formats/black/core/schema.js.map +1 -0
  49. package/dist/formats/black/index.js +2 -0
  50. package/dist/formats/black/index.js.map +1 -0
  51. package/dist/formats/bnk/CjsBnkFormat.js +245 -0
  52. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -0
  53. package/dist/formats/bnk/core/helpers.js +354 -0
  54. package/dist/formats/bnk/core/helpers.js.map +1 -0
  55. package/dist/formats/bnk/core/soundbanksInfo.js +246 -0
  56. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -0
  57. package/dist/formats/bnk/index.js +3 -0
  58. package/dist/formats/bnk/index.js.map +1 -0
  59. package/dist/formats/cmf/CjsCmfFormat.js +491 -0
  60. package/dist/formats/cmf/CjsCmfFormat.js.map +1 -0
  61. package/dist/formats/cmf/core/binary.js +118 -0
  62. package/dist/formats/cmf/core/binary.js.map +1 -0
  63. package/dist/formats/cmf/core/buffers.js +233 -0
  64. package/dist/formats/cmf/core/buffers.js.map +1 -0
  65. package/dist/formats/cmf/core/constants.js +47 -0
  66. package/dist/formats/cmf/core/constants.js.map +1 -0
  67. package/dist/formats/cmf/core/gr2Anim.js +453 -0
  68. package/dist/formats/cmf/core/gr2Anim.js.map +1 -0
  69. package/dist/formats/cmf/core/helpers.js +287 -0
  70. package/dist/formats/cmf/core/helpers.js.map +1 -0
  71. package/dist/formats/cmf/core/pack.js +276 -0
  72. package/dist/formats/cmf/core/pack.js.map +1 -0
  73. package/dist/formats/cmf/core/schema.js +364 -0
  74. package/dist/formats/cmf/core/schema.js.map +1 -0
  75. package/dist/formats/cmf/core/shared.js +268 -0
  76. package/dist/formats/cmf/core/shared.js.map +1 -0
  77. package/dist/formats/cmf/core/writer.js +517 -0
  78. package/dist/formats/cmf/core/writer.js.map +1 -0
  79. package/dist/formats/cmf/index.js +2 -0
  80. package/dist/formats/cmf/index.js.map +1 -0
  81. package/dist/formats/dds/CjsDdsFormat.js +187 -0
  82. package/dist/formats/dds/CjsDdsFormat.js.map +1 -0
  83. package/dist/formats/dds/core/helpers.js +812 -0
  84. package/dist/formats/dds/core/helpers.js.map +1 -0
  85. package/dist/formats/dds/index.js +2 -0
  86. package/dist/formats/dds/index.js.map +1 -0
  87. package/dist/formats/fbx/CjsFbxFormat.js +260 -0
  88. package/dist/formats/fbx/CjsFbxFormat.js.map +1 -0
  89. package/dist/formats/fbx/core/helpers.js +3901 -0
  90. package/dist/formats/fbx/core/helpers.js.map +1 -0
  91. package/dist/formats/fbx/index.js +2 -0
  92. package/dist/formats/fbx/index.js.map +1 -0
  93. package/dist/formats/flac/CjsFlacFormat.js +81 -0
  94. package/dist/formats/flac/CjsFlacFormat.js.map +1 -0
  95. package/dist/formats/flac/core/helpers.js +295 -0
  96. package/dist/formats/flac/core/helpers.js.map +1 -0
  97. package/dist/formats/flac/index.js +2 -0
  98. package/dist/formats/flac/index.js.map +1 -0
  99. package/dist/formats/gif/CjsGifFormat.js +81 -0
  100. package/dist/formats/gif/CjsGifFormat.js.map +1 -0
  101. package/dist/formats/gif/core/helpers.js +360 -0
  102. package/dist/formats/gif/core/helpers.js.map +1 -0
  103. package/dist/formats/gif/index.js +2 -0
  104. package/dist/formats/gif/index.js.map +1 -0
  105. package/dist/formats/gltf/CjsGltfFormat.js +284 -0
  106. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -0
  107. package/dist/formats/gltf/core/helpers.js +292 -0
  108. package/dist/formats/gltf/core/helpers.js.map +1 -0
  109. package/dist/formats/gltf/core/json.js +79 -0
  110. package/dist/formats/gltf/core/json.js.map +1 -0
  111. package/dist/formats/gltf/core/parser.js +666 -0
  112. package/dist/formats/gltf/core/parser.js.map +1 -0
  113. package/dist/formats/gltf/core/targets.js +163 -0
  114. package/dist/formats/gltf/core/targets.js.map +1 -0
  115. package/dist/formats/gltf/index.js +2 -0
  116. package/dist/formats/gltf/index.js.map +1 -0
  117. package/dist/formats/index.js +23 -0
  118. package/dist/formats/index.js.map +1 -0
  119. package/dist/formats/jpeg/CjsJpegFormat.js +200 -0
  120. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -0
  121. package/dist/formats/jpeg/core/helpers.js +350 -0
  122. package/dist/formats/jpeg/core/helpers.js.map +1 -0
  123. package/dist/formats/jpeg/core/jpeg.js +377 -0
  124. package/dist/formats/jpeg/core/jpeg.js.map +1 -0
  125. package/dist/formats/jpeg/index.js +2 -0
  126. package/dist/formats/jpeg/index.js.map +1 -0
  127. package/dist/formats/mp3/CjsMp3Format.js +186 -0
  128. package/dist/formats/mp3/CjsMp3Format.js.map +1 -0
  129. package/dist/formats/mp3/core/helpers.js +338 -0
  130. package/dist/formats/mp3/core/helpers.js.map +1 -0
  131. package/dist/formats/mp3/index.js +2 -0
  132. package/dist/formats/mp3/index.js.map +1 -0
  133. package/dist/formats/mp4/CjsMp4Format.js +185 -0
  134. package/dist/formats/mp4/CjsMp4Format.js.map +1 -0
  135. package/dist/formats/mp4/core/helpers.js +449 -0
  136. package/dist/formats/mp4/core/helpers.js.map +1 -0
  137. package/dist/formats/mp4/index.js +2 -0
  138. package/dist/formats/mp4/index.js.map +1 -0
  139. package/dist/formats/obj/CjsObjFormat.js +247 -0
  140. package/dist/formats/obj/CjsObjFormat.js.map +1 -0
  141. package/dist/formats/obj/core/helpers.js +573 -0
  142. package/dist/formats/obj/core/helpers.js.map +1 -0
  143. package/dist/formats/obj/core/json.js +64 -0
  144. package/dist/formats/obj/core/json.js.map +1 -0
  145. package/dist/formats/obj/core/parser.js +321 -0
  146. package/dist/formats/obj/core/parser.js.map +1 -0
  147. package/dist/formats/obj/index.js +2 -0
  148. package/dist/formats/obj/index.js.map +1 -0
  149. package/dist/formats/ogg/CjsOggFormat.js +82 -0
  150. package/dist/formats/ogg/CjsOggFormat.js.map +1 -0
  151. package/dist/formats/ogg/core/helpers.js +387 -0
  152. package/dist/formats/ogg/core/helpers.js.map +1 -0
  153. package/dist/formats/ogg/core/imdct.js +178 -0
  154. package/dist/formats/ogg/core/imdct.js.map +1 -0
  155. package/dist/formats/ogg/core/vorbis.js +999 -0
  156. package/dist/formats/ogg/core/vorbis.js.map +1 -0
  157. package/dist/formats/ogg/index.js +2 -0
  158. package/dist/formats/ogg/index.js.map +1 -0
  159. package/dist/formats/png/CjsPngFormat.js +189 -0
  160. package/dist/formats/png/CjsPngFormat.js.map +1 -0
  161. package/dist/formats/png/core/helpers.js +583 -0
  162. package/dist/formats/png/core/helpers.js.map +1 -0
  163. package/dist/formats/png/index.js +2 -0
  164. package/dist/formats/png/index.js.map +1 -0
  165. package/dist/formats/red/CjsRedFormat.js +247 -0
  166. package/dist/formats/red/CjsRedFormat.js.map +1 -0
  167. package/dist/formats/red/core/CjsRedReader.js +201 -0
  168. package/dist/formats/red/core/CjsRedReader.js.map +1 -0
  169. package/dist/formats/red/core/blackDefinitions.js +3 -0
  170. package/dist/formats/red/core/blackDefinitions.js.map +1 -0
  171. package/dist/formats/red/core/helpers.js +136 -0
  172. package/dist/formats/red/core/helpers.js.map +1 -0
  173. package/dist/formats/red/core/redGraph.js +68 -0
  174. package/dist/formats/red/core/redGraph.js.map +1 -0
  175. package/dist/formats/red/core/schema.js +4 -0
  176. package/dist/formats/red/core/schema.js.map +1 -0
  177. package/dist/formats/red/index.js +2 -0
  178. package/dist/formats/red/index.js.map +1 -0
  179. package/dist/formats/stl/CjsStlFormat.js +304 -0
  180. package/dist/formats/stl/CjsStlFormat.js.map +1 -0
  181. package/dist/formats/stl/core/helpers.js +257 -0
  182. package/dist/formats/stl/core/helpers.js.map +1 -0
  183. package/dist/formats/stl/core/json.js +51 -0
  184. package/dist/formats/stl/core/json.js.map +1 -0
  185. package/dist/formats/stl/core/stl.js +544 -0
  186. package/dist/formats/stl/core/stl.js.map +1 -0
  187. package/dist/formats/stl/core/targets.js +163 -0
  188. package/dist/formats/stl/core/targets.js.map +1 -0
  189. package/dist/formats/stl/index.js +2 -0
  190. package/dist/formats/stl/index.js.map +1 -0
  191. package/dist/formats/tga/CjsTgaFormat.js +186 -0
  192. package/dist/formats/tga/CjsTgaFormat.js.map +1 -0
  193. package/dist/formats/tga/core/helpers.js +446 -0
  194. package/dist/formats/tga/core/helpers.js.map +1 -0
  195. package/dist/formats/tga/index.js +2 -0
  196. package/dist/formats/tga/index.js.map +1 -0
  197. package/dist/formats/wav/CjsWavFormat.js +186 -0
  198. package/dist/formats/wav/CjsWavFormat.js.map +1 -0
  199. package/dist/formats/wav/core/helpers.js +328 -0
  200. package/dist/formats/wav/core/helpers.js.map +1 -0
  201. package/dist/formats/wav/index.js +2 -0
  202. package/dist/formats/wav/index.js.map +1 -0
  203. package/dist/formats/webm/CjsWebmFormat.js +185 -0
  204. package/dist/formats/webm/CjsWebmFormat.js.map +1 -0
  205. package/dist/formats/webm/core/helpers.js +537 -0
  206. package/dist/formats/webm/core/helpers.js.map +1 -0
  207. package/dist/formats/webm/index.js +2 -0
  208. package/dist/formats/webm/index.js.map +1 -0
  209. package/dist/formats/webp/CjsWebpFormat.js +80 -0
  210. package/dist/formats/webp/CjsWebpFormat.js.map +1 -0
  211. package/dist/formats/webp/core/helpers.js +214 -0
  212. package/dist/formats/webp/core/helpers.js.map +1 -0
  213. package/dist/formats/webp/index.js +2 -0
  214. package/dist/formats/webp/index.js.map +1 -0
  215. package/dist/formats/wem/CjsWemFormat.js +197 -0
  216. package/dist/formats/wem/CjsWemFormat.js.map +1 -0
  217. package/dist/formats/wem/core/bitStream.js +259 -0
  218. package/dist/formats/wem/core/bitStream.js.map +1 -0
  219. package/dist/formats/wem/core/codebookLibrary.js +164 -0
  220. package/dist/formats/wem/core/codebookLibrary.js.map +1 -0
  221. package/dist/formats/wem/core/helpers.js +336 -0
  222. package/dist/formats/wem/core/helpers.js.map +1 -0
  223. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -0
  224. package/dist/formats/wem/core/packedCodebooksAotuv603.js.map +1 -0
  225. package/dist/formats/wem/core/wemToOgg.js +485 -0
  226. package/dist/formats/wem/core/wemToOgg.js.map +1 -0
  227. package/dist/formats/wem/index.js +2 -0
  228. package/dist/formats/wem/index.js.map +1 -0
  229. package/dist/formats/yaml/CjsYamlFormat.js +77 -0
  230. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -0
  231. package/dist/formats/yaml/core/CjsYamlReader.js +304 -0
  232. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -0
  233. package/dist/formats/yaml/core/helpers.js +160 -0
  234. package/dist/formats/yaml/core/helpers.js.map +1 -0
  235. package/dist/formats/yaml/index.js +2 -0
  236. package/dist/formats/yaml/index.js.map +1 -0
  237. package/dist/generated/resources/AudioGeometryResData.js +47 -0
  238. package/dist/generated/resources/AudioGeometryResData.js.map +1 -0
  239. package/dist/generated/resources/CmfVertexReader.js +46 -0
  240. package/dist/generated/resources/CmfVertexReader.js.map +1 -0
  241. package/dist/generated/resources/GStateBindingCallbackData.js +31 -0
  242. package/dist/generated/resources/GStateBindingCallbackData.js.map +1 -0
  243. package/dist/generated/resources/MeshDecalData.js +37 -0
  244. package/dist/generated/resources/MeshDecalData.js.map +1 -0
  245. package/dist/generated/resources/MeshDecalLodData.js +34 -0
  246. package/dist/generated/resources/MeshDecalLodData.js.map +1 -0
  247. package/dist/generated/resources/Tr2AsyncSave.js +46 -0
  248. package/dist/generated/resources/Tr2AsyncSave.js.map +1 -0
  249. package/dist/generated/resources/Tr2CmfContents.js +37 -0
  250. package/dist/generated/resources/Tr2CmfContents.js.map +1 -0
  251. package/dist/generated/resources/Tr2GrannyIntersectionResult.js +58 -0
  252. package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +1 -0
  253. package/dist/generated/resources/Tr2LoadPrepareFence.js +37 -0
  254. package/dist/generated/resources/Tr2LoadPrepareFence.js.map +1 -0
  255. package/dist/generated/resources/Tr2MaterialArea.js +34 -0
  256. package/dist/generated/resources/Tr2MaterialArea.js.map +1 -0
  257. package/dist/generated/resources/Tr2MaterialMesh.js +31 -0
  258. package/dist/generated/resources/Tr2MaterialMesh.js.map +1 -0
  259. package/dist/generated/resources/Tr2MaterialRes.js +34 -0
  260. package/dist/generated/resources/Tr2MaterialRes.js.map +1 -0
  261. package/dist/generated/resources/Tr2ShaderPermutation.js +43 -0
  262. package/dist/generated/resources/Tr2ShaderPermutation.js.map +1 -0
  263. package/dist/generated/resources/Tr2TextureLodManager.js +60 -0
  264. package/dist/generated/resources/Tr2TextureLodManager.js.map +1 -0
  265. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js +37 -0
  266. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
  267. package/dist/generated/resources/Tr2TexturePackChannel.js +37 -0
  268. package/dist/generated/resources/Tr2TexturePackChannel.js.map +1 -0
  269. package/dist/generated/resources/Tr2TexturePipeline.js +44 -0
  270. package/dist/generated/resources/Tr2TexturePipeline.js.map +1 -0
  271. package/dist/generated/resources/Tr2TexturePipelineParams.js +34 -0
  272. package/dist/generated/resources/Tr2TexturePipelineParams.js.map +1 -0
  273. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js +40 -0
  274. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
  275. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js +34 -0
  276. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  277. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js +31 -0
  278. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
  279. package/dist/generated/resources/Tr2TexturePipelineStepPack.js +43 -0
  280. package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +1 -0
  281. package/dist/generated/resources/TriGeometryResAreaData.js +59 -0
  282. package/dist/generated/resources/TriGeometryResAreaData.js.map +1 -0
  283. package/dist/generated/resources/TriGeometryResJointData.js +38 -0
  284. package/dist/generated/resources/TriGeometryResJointData.js.map +1 -0
  285. package/dist/generated/resources/TriGeometryResLodData.js +88 -0
  286. package/dist/generated/resources/TriGeometryResLodData.js.map +1 -0
  287. package/dist/generated/resources/TriGeometryResMeshData.js +63 -0
  288. package/dist/generated/resources/TriGeometryResMeshData.js.map +1 -0
  289. package/dist/generated/resources/TriGeometryResSkeletonData.js +34 -0
  290. package/dist/generated/resources/TriGeometryResSkeletonData.js.map +1 -0
  291. package/dist/generated/resources/TriJointBinding.js +38 -0
  292. package/dist/generated/resources/TriJointBinding.js.map +1 -0
  293. package/dist/generated/resources/TriMorphTargetGeometryConstants.js +46 -0
  294. package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +1 -0
  295. package/dist/generated/resources/TriRtGeometryConstants.js +88 -0
  296. package/dist/generated/resources/TriRtGeometryConstants.js.map +1 -0
  297. package/dist/generated/resources/enums.js +18 -0
  298. package/dist/generated/resources/enums.js.map +1 -0
  299. package/dist/generated/resources/index.js +32 -0
  300. package/dist/generated/resources/index.js.map +1 -0
  301. package/dist/index.js +52 -0
  302. package/dist/index.js.map +1 -0
  303. package/dist/resourcePath.js +18 -0
  304. package/dist/resourcePath.js.map +1 -0
  305. package/dist/resourceStates.js +9 -0
  306. package/dist/resourceStates.js.map +1 -0
  307. package/dist/resources/Tr2EffectRes.js +71 -0
  308. package/dist/resources/Tr2EffectRes.js.map +1 -0
  309. package/dist/resources/Tr2GrannyStateRes.js +44 -0
  310. package/dist/resources/Tr2GrannyStateRes.js.map +1 -0
  311. package/dist/resources/Tr2ImageRes.js +114 -0
  312. package/dist/resources/Tr2ImageRes.js.map +1 -0
  313. package/dist/resources/Tr2LightProfileRes.js +40 -0
  314. package/dist/resources/Tr2LightProfileRes.js.map +1 -0
  315. package/dist/resources/TriGeometryRes.js +216 -0
  316. package/dist/resources/TriGeometryRes.js.map +1 -0
  317. package/dist/resources/TriGrannyRes.js +43 -0
  318. package/dist/resources/TriGrannyRes.js.map +1 -0
  319. package/dist/resources/TriTextureRes.js +304 -0
  320. package/dist/resources/TriTextureRes.js.map +1 -0
  321. package/dist/resources/resourceBoundary.js +47 -0
  322. package/dist/resources/resourceBoundary.js.map +1 -0
  323. package/dist/texture/CjsTextureArrayRes.js +406 -0
  324. package/dist/texture/CjsTextureArrayRes.js.map +1 -0
  325. package/dist/texture/CjsTextureParameterProxy.js +133 -0
  326. package/dist/texture/CjsTextureParameterProxy.js.map +1 -0
  327. package/format-notices/black/LICENSE +21 -0
  328. package/format-notices/black/NOTICE +47 -0
  329. package/format-notices/bnk/LICENSE +21 -0
  330. package/format-notices/bnk/NOTICE +17 -0
  331. package/format-notices/cmf/LICENSE +21 -0
  332. package/format-notices/cmf/NOTICE +36 -0
  333. package/format-notices/dds/LICENSE +21 -0
  334. package/format-notices/dds/NOTICE +14 -0
  335. package/format-notices/fbx/LICENSE +21 -0
  336. package/format-notices/fbx/NOTICE +14 -0
  337. package/format-notices/flac/LICENSE +21 -0
  338. package/format-notices/flac/NOTICE +14 -0
  339. package/format-notices/gif/LICENSE +21 -0
  340. package/format-notices/gif/NOTICE +14 -0
  341. package/format-notices/gltf/LICENSE +21 -0
  342. package/format-notices/gltf/NOTICE +27 -0
  343. package/format-notices/jpeg/LICENSE +21 -0
  344. package/format-notices/jpeg/NOTICE +14 -0
  345. package/format-notices/mp3/LICENSE +21 -0
  346. package/format-notices/mp3/NOTICE +14 -0
  347. package/format-notices/mp4/LICENSE +21 -0
  348. package/format-notices/mp4/NOTICE +14 -0
  349. package/format-notices/obj/LICENSE +21 -0
  350. package/format-notices/obj/NOTICE +26 -0
  351. package/format-notices/ogg/LICENSE +21 -0
  352. package/format-notices/ogg/NOTICE +28 -0
  353. package/format-notices/png/LICENSE +21 -0
  354. package/format-notices/png/NOTICE +14 -0
  355. package/format-notices/red/LICENSE +21 -0
  356. package/format-notices/red/NOTICE +31 -0
  357. package/format-notices/stl/LICENSE +21 -0
  358. package/format-notices/stl/NOTICE +21 -0
  359. package/format-notices/tga/LICENSE +21 -0
  360. package/format-notices/tga/NOTICE +14 -0
  361. package/format-notices/wav/LICENSE +21 -0
  362. package/format-notices/wav/NOTICE +14 -0
  363. package/format-notices/webm/LICENSE +21 -0
  364. package/format-notices/webm/NOTICE +14 -0
  365. package/format-notices/webp/LICENSE +21 -0
  366. package/format-notices/webp/NOTICE +14 -0
  367. package/format-notices/wem/LICENSE +57 -0
  368. package/format-notices/wem/NOTICE +33 -0
  369. package/format-notices/yaml/LICENSE +21 -0
  370. package/format-notices/yaml/NOTICE +44 -0
  371. package/package.json +51 -0
  372. package/resource-lifecycle.md +487 -0
@@ -0,0 +1,517 @@
1
+ import { MeshoptEncoder } from 'meshoptimizer/encoder';
2
+ import { STRUCT_SIZE, FILE_SIGNATURE, FILE_VERSION, SectionType, SectionCompression, MeshTopology, AnimationChannelTargetType, Interpolation, ElementType, Usage } from './constants.js';
3
+ import { crc32 } from './binary.js';
4
+
5
+ /**
6
+ * Binary CMF v1 writer.
7
+ *
8
+ * Mirrors CarbonEngine's `cmf::BuildFile`: the object graph is flattened into
9
+ * the Data section as structs with self-relative tagged span offsets
10
+ * (depth-first in member order, 8-byte chunk alignment, identical leaf chunks
11
+ * deduplicated), GPU buffers referenced by BufferViews become one section
12
+ * each (remapped to section indices in first-encounter order, meshoptimizer
13
+ * compressed by default), optional metadata flattens into a trailing section,
14
+ * and the header CRC covers everything after the crc32 field.
15
+ */
16
+
17
+ const textEncoder = new TextEncoder();
18
+ let encoderReady = false;
19
+ MeshoptEncoder.ready.then(() => {
20
+ encoderReady = true;
21
+ });
22
+ function writeError(message) {
23
+ const error = new Error(`CMF write: ${message}`);
24
+ error.code = "CJS_FORMAT_WRITE_ERROR";
25
+ return error;
26
+ }
27
+ function enumValue(names, value, label) {
28
+ if (typeof value === "number") return value;
29
+ const index = names.indexOf(value);
30
+ if (index >= 0) return index;
31
+ const unknown = /^Unknown\((\d+)\)$/u.exec(String(value ?? ""));
32
+ if (unknown) return Number(unknown[1]);
33
+ throw writeError(`unknown ${label} value ${JSON.stringify(value)}`);
34
+ }
35
+
36
+ /**
37
+ * Growable little-endian struct buffer with tagged span support.
38
+ */
39
+ class Flattener {
40
+ #bytes = new Uint8Array(1024);
41
+ #view = new DataView(this.#bytes.buffer);
42
+ #chunkCache = new Map();
43
+ size = 0;
44
+ #ensure(capacity) {
45
+ if (capacity <= this.#bytes.length) return;
46
+ let next = this.#bytes.length * 2;
47
+ while (next < capacity) next *= 2;
48
+ const grown = new Uint8Array(next);
49
+ grown.set(this.#bytes.subarray(0, this.size));
50
+ this.#bytes = grown;
51
+ this.#view = new DataView(grown.buffer);
52
+ }
53
+ reserve(byteLength) {
54
+ const offset = this.size;
55
+ this.#ensure(offset + byteLength);
56
+ this.#bytes.fill(0, offset, offset + byteLength);
57
+ this.size = offset + byteLength;
58
+ return offset;
59
+ }
60
+ reserveAligned(byteLength, alignment = 8) {
61
+ const padded = Math.ceil(this.size / alignment) * alignment;
62
+ this.#ensure(padded);
63
+ this.#bytes.fill(0, this.size, padded);
64
+ this.size = padded;
65
+ return this.reserve(byteLength);
66
+ }
67
+ u8(offset, value) {
68
+ this.#view.setUint8(offset, value);
69
+ }
70
+ u16(offset, value) {
71
+ this.#view.setUint16(offset, value, true);
72
+ }
73
+ u32(offset, value) {
74
+ this.#view.setUint32(offset, value >>> 0, true);
75
+ }
76
+ f32(offset, value) {
77
+ this.#view.setFloat32(offset, value || 0, true);
78
+ }
79
+ i64(offset, value) {
80
+ this.#view.setBigInt64(offset, BigInt(value), true);
81
+ }
82
+ u64(offset, value) {
83
+ this.#view.setBigUint64(offset, BigInt(value), true);
84
+ }
85
+ setBytes(offset, bytes) {
86
+ this.#bytes.set(bytes, offset);
87
+ }
88
+
89
+ /**
90
+ * Write a span field and append its element chunk.
91
+ *
92
+ * `writeElement(flattener, offset, element)` may itself append nested
93
+ * chunks; leaf chunks (`dedup: true`) are shared when byte-identical,
94
+ * matching the reference writer.
95
+ */
96
+ span(fieldOffset, elements, elementSize, writeElement, {
97
+ dedup = false
98
+ } = {}) {
99
+ const count = elements ? elements.length : 0;
100
+ const byteSize = count * elementSize;
101
+ if (byteSize === 0) {
102
+ // tagged self-relative offset of 0 keeps span pointers valid
103
+ this.i64(fieldOffset, 1);
104
+ this.u64(fieldOffset + 8, 0);
105
+ return;
106
+ }
107
+ if (dedup) {
108
+ const scratch = new Flattener();
109
+ const scratchOffset = scratch.reserve(byteSize);
110
+ for (let i = 0; i < count; i++) writeElement(scratch, scratchOffset + i * elementSize, elements[i]);
111
+ const chunk = scratch.bytes();
112
+ const key = chunkKey(chunk);
113
+ const cached = this.#chunkCache.get(key);
114
+ if (cached !== undefined && bytesEqual(this.#bytes, cached, chunk)) {
115
+ this.i64(fieldOffset, cached - fieldOffset | 1);
116
+ this.u64(fieldOffset + 8, byteSize);
117
+ return;
118
+ }
119
+ const chunkOffset = this.reserveAligned(byteSize);
120
+ this.setBytes(chunkOffset, chunk);
121
+ this.#chunkCache.set(key, chunkOffset);
122
+ this.i64(fieldOffset, chunkOffset - fieldOffset | 1);
123
+ this.u64(fieldOffset + 8, byteSize);
124
+ return;
125
+ }
126
+ const chunkOffset = this.reserveAligned(byteSize);
127
+ this.i64(fieldOffset, chunkOffset - fieldOffset | 1);
128
+ this.u64(fieldOffset + 8, byteSize);
129
+ for (let i = 0; i < count; i++) writeElement(this, chunkOffset + i * elementSize, elements[i]);
130
+ }
131
+ string(fieldOffset, value) {
132
+ const encoded = textEncoder.encode(value || "");
133
+ this.span(fieldOffset, encoded, 1, (buffer, offset, byte) => buffer.u8(offset, byte), {
134
+ dedup: true
135
+ });
136
+ }
137
+ bytes() {
138
+ return this.#bytes.slice(0, this.size);
139
+ }
140
+ }
141
+ function chunkKey(bytes) {
142
+ let hash = 2166136261 >>> 0;
143
+ for (let i = 0; i < bytes.length; i++) {
144
+ hash = Math.imul(hash, 16777619) >>> 0;
145
+ hash = (hash ^ bytes[i]) >>> 0;
146
+ }
147
+ return `${bytes.length}:${hash}`;
148
+ }
149
+ function bytesEqual(target, offset, chunk) {
150
+ for (let i = 0; i < chunk.length; i++) {
151
+ if (target[offset + i] !== chunk[i]) return false;
152
+ }
153
+ return true;
154
+ }
155
+ function writeBounds(buffer, offset, bounds) {
156
+ const min = bounds?.min || [0, 0, 0];
157
+ const max = bounds?.max || [0, 0, 0];
158
+ for (let i = 0; i < 3; i++) buffer.f32(offset + i * 4, min[i]);
159
+ for (let i = 0; i < 3; i++) buffer.f32(offset + 12 + i * 4, max[i]);
160
+ }
161
+ function writeBufferView(buffer, offset, view, remap) {
162
+ const size = view?.size || 0;
163
+ const index = view?.index || 0;
164
+ buffer.u32(offset, size === 0 ? index : remap.get(index) ?? index);
165
+ buffer.u32(offset + 4, view?.offset || 0);
166
+ buffer.u32(offset + 8, size);
167
+ buffer.u32(offset + 12, view?.stride || 0);
168
+ }
169
+ function writeVertexElement(buffer, offset, element) {
170
+ buffer.u8(offset, enumValue(Usage, element.usage, "vertex usage"));
171
+ buffer.u8(offset + 1, element.usageIndex || 0);
172
+ buffer.u8(offset + 2, enumValue(ElementType, element.type, "element type"));
173
+ buffer.u8(offset + 3, element.elementCount || 0);
174
+ buffer.u32(offset + 4, element.offset || 0);
175
+ }
176
+ function writeData(buffer, offset, graph, remap) {
177
+ const writeMesh = (target, meshOffset, mesh) => {
178
+ target.string(meshOffset, mesh.name);
179
+ target.span(meshOffset + 16, mesh.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, {
180
+ dedup: true
181
+ });
182
+ target.span(meshOffset + 32, mesh.lods || [], STRUCT_SIZE.MeshLod, (lodTarget, lodOffset, lod) => {
183
+ writeBufferView(lodTarget, lodOffset, lod.vb, remap);
184
+ writeBufferView(lodTarget, lodOffset + 16, lod.ib, remap);
185
+ lodTarget.span(lodOffset + 32, lod.areas || [], STRUCT_SIZE.LodMeshArea, (areaTarget, areaOffset, area) => {
186
+ areaTarget.u32(areaOffset, area.firstElement || 0);
187
+ areaTarget.u32(areaOffset + 4, area.elementCount || 0);
188
+ }, {
189
+ dedup: true
190
+ });
191
+ lodTarget.span(lodOffset + 48, lod.morphTargets || [], STRUCT_SIZE.LodMorphTarget, (morphTarget, morphOffset, morph) => {
192
+ writeBufferView(morphTarget, morphOffset, morph.vb, remap);
193
+ });
194
+ lodTarget.u32(lodOffset + 64, lod.threshold ?? 0xffffffff);
195
+ });
196
+ target.span(meshOffset + 48, mesh.areas || [], STRUCT_SIZE.MeshArea, (areaTarget, areaOffset, area) => {
197
+ areaTarget.string(areaOffset, area.name);
198
+ writeBounds(areaTarget, areaOffset + 16, area.bounds);
199
+ areaTarget.span(areaOffset + 40, area.bones || [], 2, (boneTarget, boneOffset, bone) => boneTarget.u16(boneOffset, bone), {
200
+ dedup: true
201
+ });
202
+ areaTarget.u8(areaOffset + 56, area.affectedByBones ? 1 : 0);
203
+ areaTarget.u8(areaOffset + 57, area.affectedByMorphTargets ? 1 : 0);
204
+ });
205
+ target.span(meshOffset + 64, mesh.boneBindings || [], STRUCT_SIZE.BoneBinding, (bindingTarget, bindingOffset, binding) => {
206
+ bindingTarget.string(bindingOffset, binding.name);
207
+ writeBounds(bindingTarget, bindingOffset + 16, binding.bounds);
208
+ });
209
+ target.span(meshOffset + 80, mesh.morphTargets?.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, {
210
+ dedup: true
211
+ });
212
+ target.span(meshOffset + 96, mesh.morphTargets?.targets || [], STRUCT_SIZE.MorphTarget, (morphTarget, morphOffset, morph) => {
213
+ morphTarget.string(morphOffset, morph.name);
214
+ morphTarget.f32(morphOffset + 16, morph.maxDisplacement || 0);
215
+ });
216
+ target.span(meshOffset + 112, mesh.uvDensities || [], 4, (densityTarget, densityOffset, value) => densityTarget.f32(densityOffset, value), {
217
+ dedup: true
218
+ });
219
+ writeBounds(target, meshOffset + 128, mesh.bounds);
220
+ const occlusion = mesh.audioOcclusionMesh || {};
221
+ target.span(meshOffset + 152, occlusion.vertices || [], 12, (vertexTarget, vertexOffset, vertex) => {
222
+ for (let i = 0; i < 3; i++) vertexTarget.f32(vertexOffset + i * 4, vertex[i]);
223
+ }, {
224
+ dedup: true
225
+ });
226
+ target.span(meshOffset + 168, occlusion.indices || [], 2, (indexTarget, indexOffset, index) => indexTarget.u16(indexOffset, index), {
227
+ dedup: true
228
+ });
229
+ writeBounds(target, meshOffset + 184, occlusion.bounds);
230
+ target.u8(meshOffset + 208, enumValue(MeshTopology, mesh.topology ?? "TriangleList", "topology"));
231
+ target.u8(meshOffset + 209, mesh.skeleton === null || mesh.skeleton === undefined ? 0xff : mesh.skeleton);
232
+ };
233
+ const writeSkeleton = (target, skeletonOffset, skeleton) => {
234
+ if ((skeleton.bones || []).some(bone => typeof bone !== "string")) {
235
+ throw writeError("skeleton bones must be name strings; GR2-shaped skeletons need conversion (use writeShared) before writing");
236
+ }
237
+ target.string(skeletonOffset, skeleton.name);
238
+ target.span(skeletonOffset + 16, skeleton.bones || [], 16, (boneTarget, boneOffset, bone) => boneTarget.string(boneOffset, bone));
239
+ target.span(skeletonOffset + 32, skeleton.parents || [], 4, (parentTarget, parentOffset, parent) => parentTarget.u32(parentOffset, parent), {
240
+ dedup: true
241
+ });
242
+ target.span(skeletonOffset + 48, skeleton.restTransforms || [], STRUCT_SIZE.Transform, (transformTarget, transformOffset, transform) => {
243
+ const position = transform.position || [0, 0, 0];
244
+ const rotation = transform.rotation || [0, 0, 0, 1];
245
+ const scale = transform.scale || [1, 1, 1];
246
+ for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + i * 4, position[i]);
247
+ for (let i = 0; i < 4; i++) transformTarget.f32(transformOffset + 12 + i * 4, rotation[i]);
248
+ for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + 28 + i * 4, scale[i]);
249
+ }, {
250
+ dedup: true
251
+ });
252
+ target.span(skeletonOffset + 64, skeleton.invBindTransforms || [], 64, (matrixTarget, matrixOffset, matrix) => {
253
+ for (let i = 0; i < 16; i++) matrixTarget.f32(matrixOffset + i * 4, matrix[i]);
254
+ }, {
255
+ dedup: true
256
+ });
257
+ target.span(skeletonOffset + 80, skeleton.boneMasks || [], STRUCT_SIZE.BoneMask, (maskTarget, maskOffset, mask) => {
258
+ maskTarget.string(maskOffset, mask.name);
259
+ maskTarget.span(maskOffset + 16, mask.weights || [], STRUCT_SIZE.BoneWeight, (weightTarget, weightOffset, weight) => {
260
+ weightTarget.u32(weightOffset, weight.index || 0);
261
+ weightTarget.f32(weightOffset + 4, weight.weight ?? 1);
262
+ }, {
263
+ dedup: true
264
+ });
265
+ });
266
+ };
267
+ const writeAnimation = (target, animationOffset, animation) => {
268
+ target.string(animationOffset, animation.name);
269
+ target.span(animationOffset + 16, animation.channels || [], STRUCT_SIZE.AnimationChannel, (channelTarget, channelOffset, channel) => {
270
+ channelTarget.string(channelOffset, channel.target);
271
+ channelTarget.u8(channelOffset + 16, enumValue(AnimationChannelTargetType, channel.targetType, "channel target type"));
272
+ channelTarget.u32(channelOffset + 20, channel.curveIndex || 0);
273
+ });
274
+ target.span(animationOffset + 32, animation.curves || [], STRUCT_SIZE.AnimationCurve, (curveTarget, curveOffset, curve) => {
275
+ curveTarget.u8(curveOffset, curve.valueDimension || 0);
276
+ curveTarget.u8(curveOffset + 1, enumValue(Interpolation, curve.interpolation, "interpolation"));
277
+ curveTarget.u8(curveOffset + 2, enumValue(ElementType, curve.knotType, "knot type"));
278
+ curveTarget.u8(curveOffset + 3, enumValue(ElementType, curve.valueType, "value type"));
279
+ curveTarget.u32(curveOffset + 4, curve.knotCount || 0);
280
+ curveTarget.span(curveOffset + 8, curve.knots || [], 1, (knotTarget, knotOffset, knot) => knotTarget.u8(knotOffset, knot), {
281
+ dedup: true
282
+ });
283
+ curveTarget.span(curveOffset + 24, curve.values || [], 1, (valueTarget, valueOffset, value) => valueTarget.u8(valueOffset, value), {
284
+ dedup: true
285
+ });
286
+ });
287
+ target.f32(animationOffset + 48, animation.duration || 0);
288
+ };
289
+ buffer.span(offset, graph.meshes || [], STRUCT_SIZE.Mesh, writeMesh);
290
+ buffer.span(offset + 16, graph.skeletons || [], STRUCT_SIZE.Skeleton, writeSkeleton);
291
+ buffer.span(offset + 32, graph.animations || [], STRUCT_SIZE.Animation, writeAnimation);
292
+ }
293
+
294
+ /**
295
+ * Collect BufferView usage in reference-writer order and decide per-buffer
296
+ * compression (conflicting stride/kind across views falls back to None).
297
+ */
298
+ function collectBufferRecords(graph, compress) {
299
+ const records = [];
300
+ const recordsByIndex = new Map();
301
+ const visit = (view, compression) => {
302
+ if (!view || !view.size) return;
303
+ const existing = recordsByIndex.get(view.index);
304
+ if (!existing) {
305
+ const record = {
306
+ index: view.index,
307
+ stride: view.stride || 0,
308
+ compression: compress ? compression : "None"
309
+ };
310
+ records.push(record);
311
+ recordsByIndex.set(view.index, record);
312
+ } else if (existing.stride !== (view.stride || 0) || (compress ? compression : "None") !== existing.compression) {
313
+ existing.stride = 0;
314
+ existing.compression = "None";
315
+ }
316
+ };
317
+ for (const mesh of graph.meshes || []) {
318
+ for (const lod of mesh.lods || []) {
319
+ visit(lod.vb, "MeshOptimizerVertexBuffer");
320
+ visit(lod.ib, "MeshOptimizerIndexBuffer");
321
+ for (const morph of lod.morphTargets || []) {
322
+ visit(morph.vb, "MeshOptimizerVertexBuffer");
323
+ }
324
+ }
325
+ }
326
+ return records;
327
+ }
328
+ function resolveBufferBytes(graph, record) {
329
+ const buffers = graph.buffers || [];
330
+ const entry = buffers.find?.(buffer => buffer && buffer.index === record.index) ?? buffers[record.index];
331
+ const data = entry?.data ?? (entry instanceof Uint8Array ? entry : null);
332
+ if (!data) {
333
+ throw writeError(`no buffer data supplied for BufferView index ${record.index}`);
334
+ }
335
+ return data instanceof Uint8Array ? data : new Uint8Array(data);
336
+ }
337
+ function compressBuffer(bytes, record) {
338
+ if (record.compression === "None" || bytes.byteLength === 0) {
339
+ return {
340
+ data: bytes,
341
+ compression: "None",
342
+ gpuAlignment: record.stride
343
+ };
344
+ }
345
+ if (!encoderReady) {
346
+ throw writeError("compressed output requires writeAsync/WriteAsync so meshoptimizer can initialize (or pass compress: false)");
347
+ }
348
+ if (record.compression === "MeshOptimizerVertexBuffer") {
349
+ if (record.stride === 0 || bytes.byteLength % record.stride !== 0) {
350
+ return {
351
+ data: bytes,
352
+ compression: "None",
353
+ gpuAlignment: record.stride
354
+ };
355
+ }
356
+ const count = bytes.byteLength / record.stride;
357
+ const data = MeshoptEncoder.encodeVertexBuffer(bytes, count, record.stride);
358
+ return {
359
+ data,
360
+ compression: "MeshOptimizerVertexBuffer",
361
+ gpuAlignment: record.stride
362
+ };
363
+ }
364
+
365
+ // index buffers: meshopt encodes triangle lists of u32; u16 sources widen
366
+ const stride = record.stride;
367
+ if (stride !== 2 && stride !== 4 || bytes.byteLength % stride !== 0) {
368
+ return {
369
+ data: bytes,
370
+ compression: "None",
371
+ gpuAlignment: stride
372
+ };
373
+ }
374
+ const count = bytes.byteLength / stride;
375
+ if (count % 3 !== 0) {
376
+ return {
377
+ data: bytes,
378
+ compression: "None",
379
+ gpuAlignment: stride
380
+ };
381
+ }
382
+ let source = bytes;
383
+ if (stride === 2) {
384
+ const wide = new Uint32Array(count);
385
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
386
+ for (let i = 0; i < count; i++) wide[i] = view.getUint16(i * 2, true);
387
+ source = new Uint8Array(wide.buffer);
388
+ }
389
+ const data = MeshoptEncoder.encodeIndexBuffer(source, count, 4);
390
+ return {
391
+ data,
392
+ compression: "MeshOptimizerIndexBuffer",
393
+ gpuAlignment: stride
394
+ };
395
+ }
396
+
397
+ /**
398
+ * Serialize a CMF-native graph into .cmf bytes.
399
+ *
400
+ * @param {object} graph Native graph: `{ meshes, skeletons, animations, metadata?, buffers? }`
401
+ * where `buffers` supplies uncompressed GPU bytes for each BufferView
402
+ * `index` (as `{ index, data }` entries or an index-keyed array).
403
+ * @param {object} [options] `compress` (default false for the sync writer)
404
+ * enables meshoptimizer vertex/index compression.
405
+ * @returns {Uint8Array} Complete .cmf file bytes.
406
+ */
407
+ function writeCmf(graph, options = {}) {
408
+ if (!graph || typeof graph !== "object") {
409
+ throw writeError("input graph must be an object");
410
+ }
411
+ const compress = options.compress === true;
412
+ const records = collectBufferRecords(graph, compress);
413
+ const compressed = records.map(record => {
414
+ const bytes = resolveBufferBytes(graph, record);
415
+ return {
416
+ record,
417
+ ...compressBuffer(bytes, record),
418
+ uncompressedSize: bytes.byteLength
419
+ };
420
+ });
421
+ const remap = new Map(records.map((record, position) => [record.index, position + 1]));
422
+ const data = new Flattener();
423
+ data.reserve(STRUCT_SIZE.Data);
424
+ writeData(data, 0, graph, remap);
425
+ const dataBytes = data.bytes();
426
+ let metadataBytes = null;
427
+ if (graph.metadata && (graph.metadata.entries || []).length) {
428
+ const metadata = new Flattener();
429
+ metadata.reserve(STRUCT_SIZE.Metadata);
430
+ metadata.span(0, graph.metadata.entries, STRUCT_SIZE.MetadataEntry, (target, offset, entry) => {
431
+ target.string(offset, entry.key);
432
+ target.string(offset + 16, entry.value);
433
+ });
434
+ metadataBytes = metadata.bytes();
435
+ }
436
+ const sections = [{
437
+ type: "Data",
438
+ compression: "None",
439
+ gpuAlignment: 0,
440
+ compressedSize: dataBytes.byteLength,
441
+ uncompressedSize: dataBytes.byteLength,
442
+ data: dataBytes
443
+ }];
444
+ for (const entry of compressed) {
445
+ sections.push({
446
+ type: "GpuBuffer",
447
+ compression: entry.compression,
448
+ gpuAlignment: entry.gpuAlignment,
449
+ compressedSize: entry.data.byteLength,
450
+ uncompressedSize: entry.uncompressedSize,
451
+ data: entry.data
452
+ });
453
+ }
454
+ if (metadataBytes) {
455
+ sections.push({
456
+ type: "Metadata",
457
+ compression: "None",
458
+ gpuAlignment: 0,
459
+ compressedSize: metadataBytes.byteLength,
460
+ uncompressedSize: metadataBytes.byteLength,
461
+ data: metadataBytes
462
+ });
463
+ }
464
+ const header = new Flattener();
465
+ header.reserve(STRUCT_SIZE.Header);
466
+ header.u32(0, FILE_SIGNATURE);
467
+ header.u32(4, FILE_VERSION);
468
+ header.span(16, sections, STRUCT_SIZE.Section, () => {});
469
+ const headerSize = header.size;
470
+ header.u32(8, headerSize);
471
+ let offset = headerSize;
472
+ const sectionOffsets = sections.map(section => {
473
+ offset = Math.ceil(offset / 8) * 8;
474
+ const sectionOffset = offset;
475
+ offset += section.compressedSize;
476
+ return sectionOffset;
477
+ });
478
+ const sectionsChunk = headerSize - sections.length * STRUCT_SIZE.Section;
479
+ sections.forEach((section, index) => {
480
+ const base = sectionsChunk + index * STRUCT_SIZE.Section;
481
+ header.u32(base, sectionOffsets[index]);
482
+ header.u32(base + 4, section.compressedSize);
483
+ header.u32(base + 8, section.uncompressedSize);
484
+ header.u16(base + 12, section.gpuAlignment || 0);
485
+ header.u8(base + 14, enumValue(SectionType, section.type, "section type"));
486
+ header.u8(base + 15, enumValue(SectionCompression, section.compression, "section compression"));
487
+ });
488
+ const total = offset;
489
+ const file = new Uint8Array(total);
490
+ file.set(header.bytes(), 0);
491
+ sections.forEach((section, index) => {
492
+ file.set(section.data, sectionOffsets[index]);
493
+ });
494
+ const checksum = crc32(file, 16, file.byteLength);
495
+ new DataView(file.buffer).setUint32(12, checksum, true);
496
+ return file;
497
+ }
498
+
499
+ /**
500
+ * Serialize a CMF-native graph asynchronously with compression enabled by
501
+ * default (awaits meshoptimizer encoder initialization).
502
+ *
503
+ * @param {object} graph Native graph (see `writeCmf`).
504
+ * @param {object} [options] `compress` defaults to true.
505
+ * @returns {Promise<Uint8Array>} Complete .cmf file bytes.
506
+ */
507
+ async function writeCmfAsync(graph, options = {}) {
508
+ await MeshoptEncoder.ready;
509
+ encoderReady = true;
510
+ return writeCmf(graph, {
511
+ ...options,
512
+ compress: options.compress !== false
513
+ });
514
+ }
515
+
516
+ export { writeCmf, writeCmfAsync };
517
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sources":["../../../../../src/formats/cmf/core/writer.js"],"sourcesContent":["import { MeshoptEncoder } from \"meshoptimizer/encoder\";\nimport {\n AnimationChannelTargetType,\n ElementType,\n FILE_SIGNATURE,\n FILE_VERSION,\n Interpolation,\n MeshTopology,\n STRUCT_SIZE,\n SectionCompression,\n SectionType,\n Usage\n} from \"./constants.js\";\nimport { crc32 } from \"./binary.js\";\n\n/**\n * Binary CMF v1 writer.\n *\n * Mirrors CarbonEngine's `cmf::BuildFile`: the object graph is flattened into\n * the Data section as structs with self-relative tagged span offsets\n * (depth-first in member order, 8-byte chunk alignment, identical leaf chunks\n * deduplicated), GPU buffers referenced by BufferViews become one section\n * each (remapped to section indices in first-encounter order, meshoptimizer\n * compressed by default), optional metadata flattens into a trailing section,\n * and the header CRC covers everything after the crc32 field.\n */\n\nconst textEncoder = new TextEncoder();\n\nlet encoderReady = false;\nMeshoptEncoder.ready.then(() => { encoderReady = true; });\n\nfunction writeError(message)\n{\n const error = new Error(`CMF write: ${message}`);\n error.code = \"CJS_FORMAT_WRITE_ERROR\";\n return error;\n}\n\nfunction enumValue(names, value, label)\n{\n if (typeof value === \"number\") return value;\n const index = names.indexOf(value);\n if (index >= 0) return index;\n const unknown = /^Unknown\\((\\d+)\\)$/u.exec(String(value ?? \"\"));\n if (unknown) return Number(unknown[1]);\n throw writeError(`unknown ${label} value ${JSON.stringify(value)}`);\n}\n\n/**\n * Growable little-endian struct buffer with tagged span support.\n */\nclass Flattener\n{\n #bytes = new Uint8Array(1024);\n #view = new DataView(this.#bytes.buffer);\n #chunkCache = new Map();\n size = 0;\n\n #ensure(capacity)\n {\n if (capacity <= this.#bytes.length) return;\n let next = this.#bytes.length * 2;\n while (next < capacity) next *= 2;\n const grown = new Uint8Array(next);\n grown.set(this.#bytes.subarray(0, this.size));\n this.#bytes = grown;\n this.#view = new DataView(grown.buffer);\n }\n\n reserve(byteLength)\n {\n const offset = this.size;\n this.#ensure(offset + byteLength);\n this.#bytes.fill(0, offset, offset + byteLength);\n this.size = offset + byteLength;\n return offset;\n }\n\n reserveAligned(byteLength, alignment = 8)\n {\n const padded = Math.ceil(this.size / alignment) * alignment;\n this.#ensure(padded);\n this.#bytes.fill(0, this.size, padded);\n this.size = padded;\n return this.reserve(byteLength);\n }\n\n u8(offset, value) { this.#view.setUint8(offset, value); }\n u16(offset, value) { this.#view.setUint16(offset, value, true); }\n u32(offset, value) { this.#view.setUint32(offset, value >>> 0, true); }\n f32(offset, value) { this.#view.setFloat32(offset, value || 0, true); }\n i64(offset, value) { this.#view.setBigInt64(offset, BigInt(value), true); }\n u64(offset, value) { this.#view.setBigUint64(offset, BigInt(value), true); }\n\n setBytes(offset, bytes)\n {\n this.#bytes.set(bytes, offset);\n }\n\n /**\n * Write a span field and append its element chunk.\n *\n * `writeElement(flattener, offset, element)` may itself append nested\n * chunks; leaf chunks (`dedup: true`) are shared when byte-identical,\n * matching the reference writer.\n */\n span(fieldOffset, elements, elementSize, writeElement, { dedup = false } = {})\n {\n const count = elements ? elements.length : 0;\n const byteSize = count * elementSize;\n if (byteSize === 0)\n {\n // tagged self-relative offset of 0 keeps span pointers valid\n this.i64(fieldOffset, 1);\n this.u64(fieldOffset + 8, 0);\n return;\n }\n\n if (dedup)\n {\n const scratch = new Flattener();\n const scratchOffset = scratch.reserve(byteSize);\n for (let i = 0; i < count; i++) writeElement(scratch, scratchOffset + i * elementSize, elements[i]);\n const chunk = scratch.bytes();\n const key = chunkKey(chunk);\n const cached = this.#chunkCache.get(key);\n if (cached !== undefined && bytesEqual(this.#bytes, cached, chunk))\n {\n this.i64(fieldOffset, ((cached - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n const chunkOffset = this.reserveAligned(byteSize);\n this.setBytes(chunkOffset, chunk);\n this.#chunkCache.set(key, chunkOffset);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n\n const chunkOffset = this.reserveAligned(byteSize);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n for (let i = 0; i < count; i++) writeElement(this, chunkOffset + i * elementSize, elements[i]);\n }\n\n string(fieldOffset, value)\n {\n const encoded = textEncoder.encode(value || \"\");\n this.span(fieldOffset, encoded, 1, (buffer, offset, byte) => buffer.u8(offset, byte), { dedup: true });\n }\n\n bytes()\n {\n return this.#bytes.slice(0, this.size);\n }\n}\n\nfunction chunkKey(bytes)\n{\n let hash = 2166136261 >>> 0;\n for (let i = 0; i < bytes.length; i++)\n {\n hash = Math.imul(hash, 16777619) >>> 0;\n hash = (hash ^ bytes[i]) >>> 0;\n }\n return `${bytes.length}:${hash}`;\n}\n\nfunction bytesEqual(target, offset, chunk)\n{\n for (let i = 0; i < chunk.length; i++)\n {\n if (target[offset + i] !== chunk[i]) return false;\n }\n return true;\n}\n\nfunction writeBounds(buffer, offset, bounds)\n{\n const min = bounds?.min || [ 0, 0, 0 ];\n const max = bounds?.max || [ 0, 0, 0 ];\n for (let i = 0; i < 3; i++) buffer.f32(offset + i * 4, min[i]);\n for (let i = 0; i < 3; i++) buffer.f32(offset + 12 + i * 4, max[i]);\n}\n\nfunction writeBufferView(buffer, offset, view, remap)\n{\n const size = view?.size || 0;\n const index = view?.index || 0;\n buffer.u32(offset, size === 0 ? index : (remap.get(index) ?? index));\n buffer.u32(offset + 4, view?.offset || 0);\n buffer.u32(offset + 8, size);\n buffer.u32(offset + 12, view?.stride || 0);\n}\n\nfunction writeVertexElement(buffer, offset, element)\n{\n buffer.u8(offset, enumValue(Usage, element.usage, \"vertex usage\"));\n buffer.u8(offset + 1, element.usageIndex || 0);\n buffer.u8(offset + 2, enumValue(ElementType, element.type, \"element type\"));\n buffer.u8(offset + 3, element.elementCount || 0);\n buffer.u32(offset + 4, element.offset || 0);\n}\n\nfunction writeData(buffer, offset, graph, remap)\n{\n const writeMesh = (target, meshOffset, mesh) =>\n {\n target.string(meshOffset, mesh.name);\n target.span(meshOffset + 16, mesh.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 32, mesh.lods || [], STRUCT_SIZE.MeshLod, (lodTarget, lodOffset, lod) =>\n {\n writeBufferView(lodTarget, lodOffset, lod.vb, remap);\n writeBufferView(lodTarget, lodOffset + 16, lod.ib, remap);\n lodTarget.span(lodOffset + 32, lod.areas || [], STRUCT_SIZE.LodMeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.u32(areaOffset, area.firstElement || 0);\n areaTarget.u32(areaOffset + 4, area.elementCount || 0);\n }, { dedup: true });\n lodTarget.span(lodOffset + 48, lod.morphTargets || [], STRUCT_SIZE.LodMorphTarget, (morphTarget, morphOffset, morph) =>\n {\n writeBufferView(morphTarget, morphOffset, morph.vb, remap);\n });\n lodTarget.u32(lodOffset + 64, lod.threshold ?? 0xffffffff);\n });\n target.span(meshOffset + 48, mesh.areas || [], STRUCT_SIZE.MeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.string(areaOffset, area.name);\n writeBounds(areaTarget, areaOffset + 16, area.bounds);\n areaTarget.span(areaOffset + 40, area.bones || [], 2, (boneTarget, boneOffset, bone) => boneTarget.u16(boneOffset, bone), { dedup: true });\n areaTarget.u8(areaOffset + 56, area.affectedByBones ? 1 : 0);\n areaTarget.u8(areaOffset + 57, area.affectedByMorphTargets ? 1 : 0);\n });\n target.span(meshOffset + 64, mesh.boneBindings || [], STRUCT_SIZE.BoneBinding, (bindingTarget, bindingOffset, binding) =>\n {\n bindingTarget.string(bindingOffset, binding.name);\n writeBounds(bindingTarget, bindingOffset + 16, binding.bounds);\n });\n target.span(meshOffset + 80, mesh.morphTargets?.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 96, mesh.morphTargets?.targets || [], STRUCT_SIZE.MorphTarget, (morphTarget, morphOffset, morph) =>\n {\n morphTarget.string(morphOffset, morph.name);\n morphTarget.f32(morphOffset + 16, morph.maxDisplacement || 0);\n });\n target.span(meshOffset + 112, mesh.uvDensities || [], 4, (densityTarget, densityOffset, value) => densityTarget.f32(densityOffset, value), { dedup: true });\n writeBounds(target, meshOffset + 128, mesh.bounds);\n const occlusion = mesh.audioOcclusionMesh || {};\n target.span(meshOffset + 152, occlusion.vertices || [], 12, (vertexTarget, vertexOffset, vertex) =>\n {\n for (let i = 0; i < 3; i++) vertexTarget.f32(vertexOffset + i * 4, vertex[i]);\n }, { dedup: true });\n target.span(meshOffset + 168, occlusion.indices || [], 2, (indexTarget, indexOffset, index) => indexTarget.u16(indexOffset, index), { dedup: true });\n writeBounds(target, meshOffset + 184, occlusion.bounds);\n target.u8(meshOffset + 208, enumValue(MeshTopology, mesh.topology ?? \"TriangleList\", \"topology\"));\n target.u8(meshOffset + 209, mesh.skeleton === null || mesh.skeleton === undefined ? 0xff : mesh.skeleton);\n };\n\n const writeSkeleton = (target, skeletonOffset, skeleton) =>\n {\n if ((skeleton.bones || []).some((bone) => typeof bone !== \"string\"))\n {\n throw writeError(\n \"skeleton bones must be name strings; GR2-shaped skeletons need conversion (use writeShared) before writing\"\n );\n }\n target.string(skeletonOffset, skeleton.name);\n target.span(skeletonOffset + 16, skeleton.bones || [], 16, (boneTarget, boneOffset, bone) => boneTarget.string(boneOffset, bone));\n target.span(skeletonOffset + 32, skeleton.parents || [], 4, (parentTarget, parentOffset, parent) => parentTarget.u32(parentOffset, parent), { dedup: true });\n target.span(skeletonOffset + 48, skeleton.restTransforms || [], STRUCT_SIZE.Transform, (transformTarget, transformOffset, transform) =>\n {\n const position = transform.position || [ 0, 0, 0 ];\n const rotation = transform.rotation || [ 0, 0, 0, 1 ];\n const scale = transform.scale || [ 1, 1, 1 ];\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + i * 4, position[i]);\n for (let i = 0; i < 4; i++) transformTarget.f32(transformOffset + 12 + i * 4, rotation[i]);\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + 28 + i * 4, scale[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 64, skeleton.invBindTransforms || [], 64, (matrixTarget, matrixOffset, matrix) =>\n {\n for (let i = 0; i < 16; i++) matrixTarget.f32(matrixOffset + i * 4, matrix[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 80, skeleton.boneMasks || [], STRUCT_SIZE.BoneMask, (maskTarget, maskOffset, mask) =>\n {\n maskTarget.string(maskOffset, mask.name);\n maskTarget.span(maskOffset + 16, mask.weights || [], STRUCT_SIZE.BoneWeight, (weightTarget, weightOffset, weight) =>\n {\n weightTarget.u32(weightOffset, weight.index || 0);\n weightTarget.f32(weightOffset + 4, weight.weight ?? 1);\n }, { dedup: true });\n });\n };\n\n const writeAnimation = (target, animationOffset, animation) =>\n {\n target.string(animationOffset, animation.name);\n target.span(animationOffset + 16, animation.channels || [], STRUCT_SIZE.AnimationChannel, (channelTarget, channelOffset, channel) =>\n {\n channelTarget.string(channelOffset, channel.target);\n channelTarget.u8(channelOffset + 16, enumValue(AnimationChannelTargetType, channel.targetType, \"channel target type\"));\n channelTarget.u32(channelOffset + 20, channel.curveIndex || 0);\n });\n target.span(animationOffset + 32, animation.curves || [], STRUCT_SIZE.AnimationCurve, (curveTarget, curveOffset, curve) =>\n {\n curveTarget.u8(curveOffset, curve.valueDimension || 0);\n curveTarget.u8(curveOffset + 1, enumValue(Interpolation, curve.interpolation, \"interpolation\"));\n curveTarget.u8(curveOffset + 2, enumValue(ElementType, curve.knotType, \"knot type\"));\n curveTarget.u8(curveOffset + 3, enumValue(ElementType, curve.valueType, \"value type\"));\n curveTarget.u32(curveOffset + 4, curve.knotCount || 0);\n curveTarget.span(curveOffset + 8, curve.knots || [], 1, (knotTarget, knotOffset, knot) => knotTarget.u8(knotOffset, knot), { dedup: true });\n curveTarget.span(curveOffset + 24, curve.values || [], 1, (valueTarget, valueOffset, value) => valueTarget.u8(valueOffset, value), { dedup: true });\n });\n target.f32(animationOffset + 48, animation.duration || 0);\n };\n\n buffer.span(offset, graph.meshes || [], STRUCT_SIZE.Mesh, writeMesh);\n buffer.span(offset + 16, graph.skeletons || [], STRUCT_SIZE.Skeleton, writeSkeleton);\n buffer.span(offset + 32, graph.animations || [], STRUCT_SIZE.Animation, writeAnimation);\n}\n\n/**\n * Collect BufferView usage in reference-writer order and decide per-buffer\n * compression (conflicting stride/kind across views falls back to None).\n */\nfunction collectBufferRecords(graph, compress)\n{\n const records = [];\n const recordsByIndex = new Map();\n const visit = (view, compression) =>\n {\n if (!view || !view.size) return;\n const existing = recordsByIndex.get(view.index);\n if (!existing)\n {\n const record = {\n index: view.index,\n stride: view.stride || 0,\n compression: compress ? compression : \"None\"\n };\n records.push(record);\n recordsByIndex.set(view.index, record);\n }\n else if (existing.stride !== (view.stride || 0) || (compress ? compression : \"None\") !== existing.compression)\n {\n existing.stride = 0;\n existing.compression = \"None\";\n }\n };\n\n for (const mesh of graph.meshes || [])\n {\n for (const lod of mesh.lods || [])\n {\n visit(lod.vb, \"MeshOptimizerVertexBuffer\");\n visit(lod.ib, \"MeshOptimizerIndexBuffer\");\n for (const morph of lod.morphTargets || [])\n {\n visit(morph.vb, \"MeshOptimizerVertexBuffer\");\n }\n }\n }\n return records;\n}\n\nfunction resolveBufferBytes(graph, record)\n{\n const buffers = graph.buffers || [];\n const entry = buffers.find?.((buffer) => buffer && buffer.index === record.index) ?? buffers[record.index];\n const data = entry?.data ?? (entry instanceof Uint8Array ? entry : null);\n if (!data)\n {\n throw writeError(`no buffer data supplied for BufferView index ${record.index}`);\n }\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\nfunction compressBuffer(bytes, record)\n{\n if (record.compression === \"None\" || bytes.byteLength === 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n if (!encoderReady)\n {\n throw writeError(\"compressed output requires writeAsync/WriteAsync so meshoptimizer can initialize (or pass compress: false)\");\n }\n\n if (record.compression === \"MeshOptimizerVertexBuffer\")\n {\n if (record.stride === 0 || bytes.byteLength % record.stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n const count = bytes.byteLength / record.stride;\n const data = MeshoptEncoder.encodeVertexBuffer(bytes, count, record.stride);\n return { data, compression: \"MeshOptimizerVertexBuffer\", gpuAlignment: record.stride };\n }\n\n // index buffers: meshopt encodes triangle lists of u32; u16 sources widen\n const stride = record.stride;\n if ((stride !== 2 && stride !== 4) || bytes.byteLength % stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n const count = bytes.byteLength / stride;\n if (count % 3 !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n let source = bytes;\n if (stride === 2)\n {\n const wide = new Uint32Array(count);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let i = 0; i < count; i++) wide[i] = view.getUint16(i * 2, true);\n source = new Uint8Array(wide.buffer);\n }\n const data = MeshoptEncoder.encodeIndexBuffer(source, count, 4);\n return { data, compression: \"MeshOptimizerIndexBuffer\", gpuAlignment: stride };\n}\n\n/**\n * Serialize a CMF-native graph into .cmf bytes.\n *\n * @param {object} graph Native graph: `{ meshes, skeletons, animations, metadata?, buffers? }`\n * where `buffers` supplies uncompressed GPU bytes for each BufferView\n * `index` (as `{ index, data }` entries or an index-keyed array).\n * @param {object} [options] `compress` (default false for the sync writer)\n * enables meshoptimizer vertex/index compression.\n * @returns {Uint8Array} Complete .cmf file bytes.\n */\nexport function writeCmf(graph, options = {})\n{\n if (!graph || typeof graph !== \"object\")\n {\n throw writeError(\"input graph must be an object\");\n }\n const compress = options.compress === true;\n\n const records = collectBufferRecords(graph, compress);\n const compressed = records.map((record) =>\n {\n const bytes = resolveBufferBytes(graph, record);\n return { record, ...compressBuffer(bytes, record), uncompressedSize: bytes.byteLength };\n });\n const remap = new Map(records.map((record, position) => [ record.index, position + 1 ]));\n\n const data = new Flattener();\n data.reserve(STRUCT_SIZE.Data);\n writeData(data, 0, graph, remap);\n const dataBytes = data.bytes();\n\n let metadataBytes = null;\n if (graph.metadata && (graph.metadata.entries || []).length)\n {\n const metadata = new Flattener();\n metadata.reserve(STRUCT_SIZE.Metadata);\n metadata.span(0, graph.metadata.entries, STRUCT_SIZE.MetadataEntry, (target, offset, entry) =>\n {\n target.string(offset, entry.key);\n target.string(offset + 16, entry.value);\n });\n metadataBytes = metadata.bytes();\n }\n\n const sections = [\n { type: \"Data\", compression: \"None\", gpuAlignment: 0, compressedSize: dataBytes.byteLength, uncompressedSize: dataBytes.byteLength, data: dataBytes }\n ];\n for (const entry of compressed)\n {\n sections.push({\n type: \"GpuBuffer\",\n compression: entry.compression,\n gpuAlignment: entry.gpuAlignment,\n compressedSize: entry.data.byteLength,\n uncompressedSize: entry.uncompressedSize,\n data: entry.data\n });\n }\n if (metadataBytes)\n {\n sections.push({ type: \"Metadata\", compression: \"None\", gpuAlignment: 0, compressedSize: metadataBytes.byteLength, uncompressedSize: metadataBytes.byteLength, data: metadataBytes });\n }\n\n const header = new Flattener();\n header.reserve(STRUCT_SIZE.Header);\n header.u32(0, FILE_SIGNATURE);\n header.u32(4, FILE_VERSION);\n header.span(16, sections, STRUCT_SIZE.Section, () => {});\n const headerSize = header.size;\n header.u32(8, headerSize);\n\n let offset = headerSize;\n const sectionOffsets = sections.map((section) =>\n {\n offset = Math.ceil(offset / 8) * 8;\n const sectionOffset = offset;\n offset += section.compressedSize;\n return sectionOffset;\n });\n\n const sectionsChunk = headerSize - sections.length * STRUCT_SIZE.Section;\n sections.forEach((section, index) =>\n {\n const base = sectionsChunk + index * STRUCT_SIZE.Section;\n header.u32(base, sectionOffsets[index]);\n header.u32(base + 4, section.compressedSize);\n header.u32(base + 8, section.uncompressedSize);\n header.u16(base + 12, section.gpuAlignment || 0);\n header.u8(base + 14, enumValue(SectionType, section.type, \"section type\"));\n header.u8(base + 15, enumValue(SectionCompression, section.compression, \"section compression\"));\n });\n\n const total = offset;\n const file = new Uint8Array(total);\n file.set(header.bytes(), 0);\n sections.forEach((section, index) =>\n {\n file.set(section.data, sectionOffsets[index]);\n });\n\n const checksum = crc32(file, 16, file.byteLength);\n new DataView(file.buffer).setUint32(12, checksum, true);\n return file;\n}\n\n/**\n * Serialize a CMF-native graph asynchronously with compression enabled by\n * default (awaits meshoptimizer encoder initialization).\n *\n * @param {object} graph Native graph (see `writeCmf`).\n * @param {object} [options] `compress` defaults to true.\n * @returns {Promise<Uint8Array>} Complete .cmf file bytes.\n */\nexport async function writeCmfAsync(graph, options = {})\n{\n await MeshoptEncoder.ready;\n encoderReady = true;\n return writeCmf(graph, { ...options, compress: options.compress !== false });\n}\n"],"names":["textEncoder","TextEncoder","encoderReady","MeshoptEncoder","ready","then","writeError","message","error","Error","code","enumValue","names","value","label","index","indexOf","unknown","exec","String","Number","JSON","stringify","Flattener","Uint8Array","DataView","buffer","Map","size","#ensure","capacity","length","next","grown","set","subarray","reserve","byteLength","offset","fill","reserveAligned","alignment","padded","Math","ceil","u8","setUint8","u16","setUint16","u32","setUint32","f32","setFloat32","i64","setBigInt64","BigInt","u64","setBigUint64","setBytes","bytes","span","fieldOffset","elements","elementSize","writeElement","dedup","count","byteSize","scratch","scratchOffset","i","chunk","key","chunkKey","cached","get","undefined","bytesEqual","chunkOffset","string","encoded","encode","byte","slice","hash","imul","target","writeBounds","bounds","min","max","writeBufferView","view","remap","stride","writeVertexElement","element","Usage","usage","usageIndex","ElementType","type","elementCount","writeData","graph","writeMesh","meshOffset","mesh","name","decl","STRUCT_SIZE","VertexElement","lods","MeshLod","lodTarget","lodOffset","lod","vb","ib","areas","LodMeshArea","areaTarget","areaOffset","area","firstElement","morphTargets","LodMorphTarget","morphTarget","morphOffset","morph","threshold","MeshArea","bones","boneTarget","boneOffset","bone","affectedByBones","affectedByMorphTargets","boneBindings","BoneBinding","bindingTarget","bindingOffset","binding","targets","MorphTarget","maxDisplacement","uvDensities","densityTarget","densityOffset","occlusion","audioOcclusionMesh","vertices","vertexTarget","vertexOffset","vertex","indices","indexTarget","indexOffset","MeshTopology","topology","skeleton","writeSkeleton","skeletonOffset","some","parents","parentTarget","parentOffset","parent","restTransforms","Transform","transformTarget","transformOffset","transform","position","rotation","scale","invBindTransforms","matrixTarget","matrixOffset","matrix","boneMasks","BoneMask","maskTarget","maskOffset","mask","weights","BoneWeight","weightTarget","weightOffset","weight","writeAnimation","animationOffset","animation","channels","AnimationChannel","channelTarget","channelOffset","channel","AnimationChannelTargetType","targetType","curveIndex","curves","AnimationCurve","curveTarget","curveOffset","curve","valueDimension","Interpolation","interpolation","knotType","valueType","knotCount","knots","knotTarget","knotOffset","knot","values","valueTarget","valueOffset","duration","meshes","Mesh","skeletons","Skeleton","animations","Animation","collectBufferRecords","compress","records","recordsByIndex","visit","compression","existing","record","push","resolveBufferBytes","buffers","entry","find","data","compressBuffer","gpuAlignment","encodeVertexBuffer","source","wide","Uint32Array","byteOffset","getUint16","encodeIndexBuffer","writeCmf","options","compressed","map","uncompressedSize","Data","dataBytes","metadataBytes","metadata","entries","Metadata","MetadataEntry","sections","compressedSize","header","Header","FILE_SIGNATURE","FILE_VERSION","Section","headerSize","sectionOffsets","section","sectionOffset","sectionsChunk","forEach","base","SectionType","SectionCompression","total","file","checksum","crc32","writeCmfAsync"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { CjsCmfFormat, CjsCmfFormat as default } from './CjsCmfFormat.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}