@carbonenginejs/runtime-resource 0.9.2 → 0.11.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 (544) hide show
  1. package/NOTICE +3 -2
  2. package/README.md +47 -6
  3. package/dist/CjsMotherLode.js +88 -88
  4. package/dist/CjsMotherLode.js.map +1 -1
  5. package/dist/CjsResMan.js +717 -228
  6. package/dist/CjsResMan.js.map +1 -1
  7. package/dist/CjsResManFetchProvider.js +94 -0
  8. package/dist/CjsResManFetchProvider.js.map +1 -0
  9. package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
  10. package/dist/CjsResManWorkQueue.js.map +1 -0
  11. package/dist/format/CjsBlueReader.js +89 -0
  12. package/dist/format/CjsBlueReader.js.map +1 -1
  13. package/dist/format/CjsFormat.js +42 -16
  14. package/dist/format/CjsFormat.js.map +1 -1
  15. package/dist/format/CjsReader.js +4 -0
  16. package/dist/format/CjsReader.js.map +1 -1
  17. package/dist/format/CjsResourceProbe.js +2 -0
  18. package/dist/format/CjsResourceProbe.js.map +1 -1
  19. package/dist/format/effect/effectPermutationGraph.js +257 -0
  20. package/dist/format/effect/effectPermutationGraph.js.map +1 -0
  21. package/dist/format/effect/effectReflectionPackage.js +636 -0
  22. package/dist/format/effect/effectReflectionPackage.js.map +1 -0
  23. package/dist/format/effect/sha256.js +114 -0
  24. package/dist/format/effect/sha256.js.map +1 -0
  25. package/dist/format/payloadContract.js +20 -0
  26. package/dist/format/payloadContract.js.map +1 -1
  27. package/dist/formats/black/CjsBlackFormat.js +15 -1
  28. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
  30. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  31. package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
  32. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  33. package/dist/formats/black/core/CjsBlackReader.js +125 -0
  34. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  35. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
  36. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  37. package/dist/formats/black/core/helpers.js +17 -0
  38. package/dist/formats/black/core/helpers.js.map +1 -1
  39. package/dist/formats/bnk/CjsBnkFormat.js +8 -0
  40. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  41. package/dist/formats/bnk/core/helpers.js +20 -0
  42. package/dist/formats/bnk/core/helpers.js.map +1 -1
  43. package/dist/formats/bnk/core/musicNodes.js +40 -3
  44. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  45. package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
  46. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  47. package/dist/formats/cmf/core/binary.js +71 -0
  48. package/dist/formats/cmf/core/binary.js.map +1 -1
  49. package/dist/formats/cmf/core/buffers.js +4 -0
  50. package/dist/formats/cmf/core/buffers.js.map +1 -1
  51. package/dist/formats/cmf/core/helpers.js +31 -0
  52. package/dist/formats/cmf/core/helpers.js.map +1 -1
  53. package/dist/formats/cmf/core/schema.js +10 -0
  54. package/dist/formats/cmf/core/schema.js.map +1 -1
  55. package/dist/formats/cmf/core/shared.js +9 -0
  56. package/dist/formats/cmf/core/shared.js.map +1 -1
  57. package/dist/formats/cmf/core/writer.js +54 -0
  58. package/dist/formats/cmf/core/writer.js.map +1 -1
  59. package/dist/formats/dds/core/bc6h.js +10 -0
  60. package/dist/formats/dds/core/bc6h.js.map +1 -1
  61. package/dist/formats/dds/core/bc7.js +16 -0
  62. package/dist/formats/dds/core/bc7.js.map +1 -1
  63. package/dist/formats/dds/core/helpers.js +47 -0
  64. package/dist/formats/dds/core/helpers.js.map +1 -1
  65. package/dist/formats/dxbc/CjsDxbcFormat.js +142 -0
  66. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -0
  67. package/dist/formats/dxbc/core/DxbcReader.js +266 -0
  68. package/dist/formats/dxbc/core/DxbcReader.js.map +1 -0
  69. package/dist/formats/dxbc/core/container.js +169 -0
  70. package/dist/formats/dxbc/core/container.js.map +1 -0
  71. package/dist/formats/dxbc/core/decoder.js +789 -0
  72. package/dist/formats/dxbc/core/decoder.js.map +1 -0
  73. package/dist/formats/dxbc/core/errors.js +19 -0
  74. package/dist/formats/dxbc/core/errors.js.map +1 -0
  75. package/dist/formats/dxbc/core/helpers.js +220 -0
  76. package/dist/formats/dxbc/core/helpers.js.map +1 -0
  77. package/dist/formats/dxbc/core/opcodes.js +45 -0
  78. package/dist/formats/dxbc/core/opcodes.js.map +1 -0
  79. package/dist/formats/dxbc/core/program.js +91 -0
  80. package/dist/formats/dxbc/core/program.js.map +1 -0
  81. package/dist/formats/dxbc/core/signature.js +172 -0
  82. package/dist/formats/dxbc/core/signature.js.map +1 -0
  83. package/dist/formats/dxbc/index.js +2 -0
  84. package/dist/formats/dxbc/index.js.map +1 -0
  85. package/dist/formats/fbx/core/helpers.js +21 -0
  86. package/dist/formats/fbx/core/helpers.js.map +1 -1
  87. package/dist/formats/flac/CjsFlacFormat.js +49 -0
  88. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  89. package/dist/formats/flac/core/helpers.js +20 -0
  90. package/dist/formats/flac/core/helpers.js.map +1 -1
  91. package/dist/formats/gif/CjsGifFormat.js +49 -0
  92. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  93. package/dist/formats/gif/core/helpers.js +20 -0
  94. package/dist/formats/gif/core/helpers.js.map +1 -1
  95. package/dist/formats/gltf/core/helpers.js +15 -0
  96. package/dist/formats/gltf/core/helpers.js.map +1 -1
  97. package/dist/formats/gltf/core/parser.js +13 -0
  98. package/dist/formats/gltf/core/parser.js.map +1 -1
  99. package/dist/formats/gltf/core/targets.js +10 -0
  100. package/dist/formats/gltf/core/targets.js.map +1 -1
  101. package/dist/formats/gr2/core/bitknit2.js +2 -0
  102. package/dist/formats/gr2/core/bitknit2.js.map +1 -1
  103. package/dist/formats/gr2/core/helpers.js +20 -0
  104. package/dist/formats/gr2/core/helpers.js.map +1 -1
  105. package/dist/formats/gr2/core/targets.js +10 -0
  106. package/dist/formats/gr2/core/targets.js.map +1 -1
  107. package/dist/formats/hlsl/CjsHlslFormat.js +254 -0
  108. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -0
  109. package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -0
  110. package/dist/formats/hlsl/core/HlslBinaryUtils.js.map +1 -0
  111. package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -0
  112. package/dist/formats/hlsl/core/HlslEffectReadError.js.map +1 -0
  113. package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -0
  114. package/dist/formats/hlsl/core/HlslEffectStateManager.js.map +1 -0
  115. package/dist/formats/hlsl/core/HlslReader.js +266 -0
  116. package/dist/formats/hlsl/core/HlslReader.js.map +1 -0
  117. package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -0
  118. package/dist/formats/hlsl/core/HlslRenderStateSetup.js.map +1 -0
  119. package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -0
  120. package/dist/formats/hlsl/core/HlslResourceSetDescription.js.map +1 -0
  121. package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -0
  122. package/dist/formats/hlsl/core/HlslShaderBytecode.js.map +1 -0
  123. package/dist/formats/hlsl/core/analysis.js +51 -0
  124. package/dist/formats/hlsl/core/analysis.js.map +1 -0
  125. package/dist/formats/hlsl/core/helpers.js +270 -0
  126. package/dist/formats/hlsl/core/helpers.js.map +1 -0
  127. package/dist/formats/hlsl/core/json.js +284 -0
  128. package/dist/formats/hlsl/core/json.js.map +1 -0
  129. package/dist/formats/hlsl/core/metadata.js +327 -0
  130. package/dist/formats/hlsl/core/metadata.js.map +1 -0
  131. package/dist/formats/hlsl/core/portableReflection.js +848 -0
  132. package/dist/formats/hlsl/core/portableReflection.js.map +1 -0
  133. package/dist/formats/hlsl/core/render-states.js +280 -0
  134. package/dist/formats/hlsl/core/render-states.js.map +1 -0
  135. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -0
  136. package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js.map +1 -0
  137. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +294 -0
  138. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -0
  139. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -0
  140. package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js.map +1 -0
  141. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -0
  142. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -0
  143. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -0
  144. package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js.map +1 -0
  145. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +742 -0
  146. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -0
  147. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -0
  148. package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js.map +1 -0
  149. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -0
  150. package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js.map +1 -0
  151. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -0
  152. package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js.map +1 -0
  153. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -0
  154. package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -0
  155. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -0
  156. package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js.map +1 -0
  157. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -0
  158. package/dist/formats/hlsl/core/tr2/shader/HlslPass.js.map +1 -0
  159. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -0
  160. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js.map +1 -0
  161. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -0
  162. package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js.map +1 -0
  163. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -0
  164. package/dist/formats/hlsl/core/tr2/shader/HlslShader.js.map +1 -0
  165. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -0
  166. package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js.map +1 -0
  167. package/dist/formats/hlsl/index.js +2 -0
  168. package/dist/formats/hlsl/index.js.map +1 -0
  169. package/dist/formats/hlsl/portable.js +2 -0
  170. package/dist/formats/hlsl/portable.js.map +1 -0
  171. package/dist/formats/index.js +4 -0
  172. package/dist/formats/index.js.map +1 -1
  173. package/dist/formats/jpeg/core/helpers.js +52 -0
  174. package/dist/formats/jpeg/core/helpers.js.map +1 -1
  175. package/dist/formats/jpeg/core/jpeg.js +93 -0
  176. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  177. package/dist/formats/mp3/core/helpers.js +37 -0
  178. package/dist/formats/mp3/core/helpers.js.map +1 -1
  179. package/dist/formats/mp4/core/helpers.js +35 -0
  180. package/dist/formats/mp4/core/helpers.js.map +1 -1
  181. package/dist/formats/ogg/CjsOggFormat.js +49 -0
  182. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  183. package/dist/formats/ogg/core/helpers.js +23 -0
  184. package/dist/formats/ogg/core/helpers.js.map +1 -1
  185. package/dist/formats/ogg/core/vorbis.js +13 -0
  186. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  187. package/dist/formats/png/core/helpers.js +52 -0
  188. package/dist/formats/png/core/helpers.js.map +1 -1
  189. package/dist/formats/red/CjsRedFormat.js +2 -0
  190. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  191. package/dist/formats/red/core/CjsRedReader.js +52 -0
  192. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  193. package/dist/formats/red/core/helpers.js +19 -0
  194. package/dist/formats/red/core/helpers.js.map +1 -1
  195. package/dist/formats/stl/core/stl.js +8 -0
  196. package/dist/formats/stl/core/stl.js.map +1 -1
  197. package/dist/formats/stl/core/targets.js +10 -0
  198. package/dist/formats/stl/core/targets.js.map +1 -1
  199. package/dist/formats/tga/core/helpers.js +47 -0
  200. package/dist/formats/tga/core/helpers.js.map +1 -1
  201. package/dist/formats/wav/core/helpers.js +37 -0
  202. package/dist/formats/wav/core/helpers.js.map +1 -1
  203. package/dist/formats/webgl/CjsWebglFormat.js +221 -0
  204. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -0
  205. package/dist/formats/webgl/core/cewg/CewgPackage.js +339 -0
  206. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -0
  207. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +104 -0
  208. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +1 -0
  209. package/dist/formats/webgl/core/cewg/binary.js +101 -0
  210. package/dist/formats/webgl/core/cewg/binary.js.map +1 -0
  211. package/dist/formats/webgl/core/cewgCompleteness.js +81 -0
  212. package/dist/formats/webgl/core/cewgCompleteness.js.map +1 -0
  213. package/dist/formats/webgl/core/effectPackage.js +789 -0
  214. package/dist/formats/webgl/core/effectPackage.js.map +1 -0
  215. package/dist/formats/webgl/core/effectPackageValidation.js +331 -0
  216. package/dist/formats/webgl/core/effectPackageValidation.js.map +1 -0
  217. package/dist/formats/webgl/core/errors.js +27 -0
  218. package/dist/formats/webgl/core/errors.js.map +1 -0
  219. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2678 -0
  220. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -0
  221. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -0
  222. package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +1 -0
  223. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +428 -0
  224. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -0
  225. package/dist/formats/webgl/core/helpers.js +306 -0
  226. package/dist/formats/webgl/core/helpers.js.map +1 -0
  227. package/dist/formats/webgl/index.js +2 -0
  228. package/dist/formats/webgl/index.js.map +1 -0
  229. package/dist/formats/webgpu/CjsWebgpuFormat.js +376 -0
  230. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -0
  231. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +415 -0
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +1 -0
  233. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +100 -0
  234. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +1 -0
  235. package/dist/formats/webgpu/core/cewgpu/binary.js +93 -0
  236. package/dist/formats/webgpu/core/cewgpu/binary.js.map +1 -0
  237. package/dist/formats/webgpu/core/cewgpu/tags.js +17 -0
  238. package/dist/formats/webgpu/core/cewgpu/tags.js.map +1 -0
  239. package/dist/formats/webgpu/core/effectAnalysis.js +82 -0
  240. package/dist/formats/webgpu/core/effectAnalysis.js.map +1 -0
  241. package/dist/formats/webgpu/core/effectBackendBodySet.js +305 -0
  242. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -0
  243. package/dist/formats/webgpu/core/effectPackageValidation.js +1078 -0
  244. package/dist/formats/webgpu/core/effectPackageValidation.js.map +1 -0
  245. package/dist/formats/webgpu/core/errors.js +20 -0
  246. package/dist/formats/webgpu/core/errors.js.map +1 -0
  247. package/dist/formats/webgpu/core/helpers.js +448 -0
  248. package/dist/formats/webgpu/core/helpers.js.map +1 -0
  249. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +223 -0
  250. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -0
  251. package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -0
  252. package/dist/formats/webgpu/core/ir/buildControlFlow.js.map +1 -0
  253. package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -0
  254. package/dist/formats/webgpu/core/ir/indexableTemps.js.map +1 -0
  255. package/dist/formats/webgpu/core/ir/inferValueTypes.js +454 -0
  256. package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -0
  257. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -0
  258. package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -0
  259. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -0
  260. package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js.map +1 -0
  261. package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -0
  262. package/dist/formats/webgpu/core/ir/sourceLanes.js.map +1 -0
  263. package/dist/formats/webgpu/core/packageEffect.js +300 -0
  264. package/dist/formats/webgpu/core/packageEffect.js.map +1 -0
  265. package/dist/formats/webgpu/core/packageEffectSelection.js +164 -0
  266. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -0
  267. package/dist/formats/webgpu/core/packageMetadata.js +8 -0
  268. package/dist/formats/webgpu/core/packageMetadata.js.map +1 -0
  269. package/dist/formats/webgpu/core/schema.js +4 -0
  270. package/dist/formats/webgpu/core/schema.js.map +1 -0
  271. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +275 -0
  272. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -0
  273. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +182 -0
  274. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -0
  275. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +324 -0
  276. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -0
  277. package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -0
  278. package/dist/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -0
  279. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -0
  280. package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js.map +1 -0
  281. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -0
  282. package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -0
  283. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +754 -0
  284. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -0
  285. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -0
  286. package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -0
  287. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -0
  288. package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -0
  289. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -0
  290. package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js.map +1 -0
  291. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -0
  292. package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js.map +1 -0
  293. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -0
  294. package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js.map +1 -0
  295. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -0
  296. package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js.map +1 -0
  297. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -0
  298. package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js.map +1 -0
  299. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -0
  300. package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js.map +1 -0
  301. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -0
  302. package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js.map +1 -0
  303. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -0
  304. package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js.map +1 -0
  305. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -0
  306. package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js.map +1 -0
  307. package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -0
  308. package/dist/formats/webgpu/core/wgsl/precisionControls.js.map +1 -0
  309. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +758 -0
  310. package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -0
  311. package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -0
  312. package/dist/formats/webgpu/core/wgsl/uniformity.js.map +1 -0
  313. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -0
  314. package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js.map +1 -0
  315. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -0
  316. package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js.map +1 -0
  317. package/dist/formats/webgpu/index.js +2 -0
  318. package/dist/formats/webgpu/index.js.map +1 -0
  319. package/dist/formats/webm/core/helpers.js +35 -0
  320. package/dist/formats/webm/core/helpers.js.map +1 -1
  321. package/dist/formats/webp/CjsWebpFormat.js +49 -0
  322. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  323. package/dist/formats/webp/core/helpers.js +23 -0
  324. package/dist/formats/webp/core/helpers.js.map +1 -1
  325. package/dist/formats/wem/CjsWemFormat.js +8 -0
  326. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  327. package/dist/formats/wem/core/bitStream.js +2 -0
  328. package/dist/formats/wem/core/bitStream.js.map +1 -1
  329. package/dist/formats/wem/core/helpers.js +20 -0
  330. package/dist/formats/wem/core/helpers.js.map +1 -1
  331. package/dist/formats/yaml/CjsYamlFormat.js +45 -0
  332. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  333. package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
  334. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  335. package/dist/formats/yaml/core/helpers.js +10 -0
  336. package/dist/formats/yaml/core/helpers.js.map +1 -1
  337. package/dist/index.js +56 -43
  338. package/dist/index.js.map +1 -1
  339. package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
  340. package/dist/resource/CjsResource.js.map +1 -0
  341. package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
  342. package/dist/resource/Tr2LightProfileRes.js.map +1 -0
  343. package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
  344. package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
  345. package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
  346. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
  347. package/dist/resource/audio/CjsAudioRes.js +213 -0
  348. package/dist/resource/audio/CjsAudioRes.js.map +1 -0
  349. package/dist/resource/audio/index.js +4 -0
  350. package/dist/resource/audio/index.js.map +1 -0
  351. package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
  352. package/dist/resource/geometry/MeshDecalData.js.map +1 -0
  353. package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
  354. package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
  355. package/dist/resource/geometry/TriGeometryRes.js +656 -0
  356. package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
  357. package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
  358. package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
  359. package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
  360. package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
  361. package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
  362. package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
  363. package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
  364. package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
  365. package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
  366. package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
  367. package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
  368. package/dist/resource/geometry/TriJointBinding.js.map +1 -0
  369. package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
  370. package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
  371. package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
  372. package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
  373. package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
  374. package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
  375. package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
  376. package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
  377. package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
  378. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
  379. package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
  380. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
  381. package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
  382. package/dist/resource/geometry/granny/enums.js.map +1 -0
  383. package/dist/resource/geometry/granny/index.js +6 -0
  384. package/dist/resource/geometry/granny/index.js.map +1 -0
  385. package/dist/resource/geometry/index.js +17 -0
  386. package/dist/resource/geometry/index.js.map +1 -0
  387. package/dist/resource/index.js +52 -0
  388. package/dist/resource/index.js.map +1 -0
  389. package/dist/resource/resourceBoundary.js +64 -0
  390. package/dist/resource/resourceBoundary.js.map +1 -0
  391. package/dist/resource/shader/Tr2EffectRes.js +429 -0
  392. package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
  393. package/dist/resource/shader/Tr2MaterialArea.js +34 -0
  394. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
  395. package/dist/resource/shader/Tr2MaterialMesh.js +30 -0
  396. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
  397. package/dist/resource/shader/Tr2MaterialRes.js +35 -0
  398. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
  399. package/dist/resource/shader/Tr2Shader.js +256 -0
  400. package/dist/resource/shader/Tr2Shader.js.map +1 -0
  401. package/dist/resource/shader/Tr2ShaderPermutation.js +47 -0
  402. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
  403. package/dist/resource/shader/index.js +17 -0
  404. package/dist/resource/shader/index.js.map +1 -0
  405. package/dist/resource/shader/portable.js +33 -0
  406. package/dist/resource/shader/portable.js.map +1 -0
  407. package/dist/resource/shader/reflection/Tr2EffectConstant.js +135 -0
  408. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
  409. package/dist/resource/shader/reflection/Tr2EffectDefine.js +28 -0
  410. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
  411. package/dist/resource/shader/reflection/Tr2EffectDescription.js +107 -0
  412. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
  413. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +145 -0
  414. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
  415. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +103 -0
  416. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
  417. package/dist/resource/shader/reflection/Tr2EffectResource.js +84 -0
  418. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
  419. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +239 -0
  420. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
  421. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +66 -0
  422. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
  423. package/dist/resource/shader/reflection/Tr2Pass.js +109 -0
  424. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
  425. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +75 -0
  426. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
  427. package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
  428. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
  429. package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
  430. package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
  431. package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
  432. package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
  433. package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
  434. package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
  435. package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
  436. package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
  437. package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
  438. package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
  439. package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
  440. package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
  441. package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
  442. package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
  443. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
  444. package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
  445. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
  446. package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  447. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
  448. package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  449. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
  450. package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
  451. package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
  452. package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
  453. package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
  454. package/dist/resource/texture/TriTextureRes.js.map +1 -0
  455. package/dist/resource/texture/index.js +15 -0
  456. package/dist/resource/texture/index.js.map +1 -0
  457. package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
  458. package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
  459. package/dist/worker/CjsResManMainThreadLoader.js +87 -0
  460. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
  461. package/dist/worker/CjsResManWorker.js +217 -0
  462. package/dist/worker/CjsResManWorker.js.map +1 -0
  463. package/dist/worker/CjsResManWorkerLoader.js +434 -0
  464. package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
  465. package/dist/worker/protocol.js +12 -0
  466. package/dist/worker/protocol.js.map +1 -0
  467. package/docs/README.md +16 -3
  468. package/docs/architecture.md +39 -16
  469. package/docs/concepts/resource-lifecycle.md +2 -1
  470. package/docs/formats/README.md +8 -0
  471. package/docs/formats/provenance.md +11 -3
  472. package/docs/reference/classes/README.md +6 -4
  473. package/docs/reference/classes/audio.md +30 -0
  474. package/docs/reference/classes/core.md +31 -11
  475. package/docs/reference/classes/formats.md +440 -0
  476. package/docs/reference/classes/resources.md +151 -41
  477. package/docs/reference/classes/texture.md +7 -7
  478. package/docs/reference/motherlode-cache.md +17 -0
  479. package/docs/reference/queues.md +9 -1
  480. package/docs/reference/workers.md +135 -0
  481. package/docs/roadmap.md +27 -1
  482. package/format-notices/dxbc/LICENSE +21 -0
  483. package/format-notices/dxbc/NOTICE +20 -0
  484. package/format-notices/hlsl/LICENSE +21 -0
  485. package/format-notices/hlsl/NOTICE +25 -0
  486. package/format-notices/webgl/LICENSE +21 -0
  487. package/format-notices/webgl/NOTICE +35 -0
  488. package/format-notices/webgpu/LICENSE +21 -0
  489. package/format-notices/webgpu/NOTICE +31 -0
  490. package/package.json +13 -1
  491. package/dist/CjsResManQueue.js.map +0 -1
  492. package/dist/CjsResource.js.map +0 -1
  493. package/dist/CjsResourceSource.js +0 -68
  494. package/dist/CjsResourceSource.js.map +0 -1
  495. package/dist/resourcePath.js +0 -18
  496. package/dist/resourcePath.js.map +0 -1
  497. package/dist/resourceStates.js +0 -9
  498. package/dist/resourceStates.js.map +0 -1
  499. package/dist/resources/AudioGeometryResData.js.map +0 -1
  500. package/dist/resources/GStateBindingCallbackData.js.map +0 -1
  501. package/dist/resources/MeshDecalData.js.map +0 -1
  502. package/dist/resources/MeshDecalLodData.js.map +0 -1
  503. package/dist/resources/Tr2EffectRes.js +0 -71
  504. package/dist/resources/Tr2EffectRes.js.map +0 -1
  505. package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  506. package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
  507. package/dist/resources/Tr2ImageRes.js.map +0 -1
  508. package/dist/resources/Tr2LightProfileRes.js.map +0 -1
  509. package/dist/resources/Tr2MaterialArea.js +0 -34
  510. package/dist/resources/Tr2MaterialArea.js.map +0 -1
  511. package/dist/resources/Tr2MaterialMesh.js +0 -31
  512. package/dist/resources/Tr2MaterialMesh.js.map +0 -1
  513. package/dist/resources/Tr2MaterialRes.js +0 -34
  514. package/dist/resources/Tr2MaterialRes.js.map +0 -1
  515. package/dist/resources/Tr2ShaderPermutation.js +0 -43
  516. package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
  517. package/dist/resources/Tr2TextureLodManager.js.map +0 -1
  518. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  519. package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
  520. package/dist/resources/Tr2TexturePipeline.js.map +0 -1
  521. package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
  522. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  523. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
  524. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  525. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  526. package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  527. package/dist/resources/TriGeometryRes.js +0 -239
  528. package/dist/resources/TriGeometryRes.js.map +0 -1
  529. package/dist/resources/TriGeometryResAreaData.js.map +0 -1
  530. package/dist/resources/TriGeometryResJointData.js.map +0 -1
  531. package/dist/resources/TriGeometryResLodData.js.map +0 -1
  532. package/dist/resources/TriGeometryResMeshData.js.map +0 -1
  533. package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
  534. package/dist/resources/TriGrannyRes.js.map +0 -1
  535. package/dist/resources/TriJointBinding.js.map +0 -1
  536. package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  537. package/dist/resources/TriRtGeometryConstants.js.map +0 -1
  538. package/dist/resources/TriTextureRes.js.map +0 -1
  539. package/dist/resources/enums.js.map +0 -1
  540. package/dist/resources/resourceBoundary.js +0 -47
  541. package/dist/resources/resourceBoundary.js.map +0 -1
  542. package/dist/resources/texturePipelineBehavior.js.map +0 -1
  543. package/dist/texture/CjsTextureArrayRes.js.map +0 -1
  544. package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
@@ -1,4 +1,6 @@
1
1
  const textDecoder = new TextDecoder();
2
+
3
+ /** Returns a byte view over the supplied binary input for the CMF binary reader. */
2
4
  function asUint8Array(input) {
3
5
  if (input instanceof Uint8Array) {
4
6
  return input;
@@ -17,35 +19,71 @@ function asUint8Array(input) {
17
19
  * 64-bit integer reads guarded against unsafe values.
18
20
  */
19
21
  class BinaryReader {
22
+ /** Creates a BinaryReader over caller-provided CMF bytes and reader options. */
20
23
  constructor(bytes) {
21
24
  this.bytes = asUint8Array(bytes);
22
25
  this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);
23
26
  }
27
+
28
+ /**
29
+ * Validates the supplied value against CMF binary reader constraints and
30
+ * throws on failure.
31
+ */
24
32
  require(offset, size, label = "read") {
25
33
  if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength) {
26
34
  throw new RangeError(`CMF ${label} is outside file bounds`);
27
35
  }
28
36
  }
37
+
38
+ /**
39
+ * Reads an unsigned 8-bit integer at the requested offset for the CMF binary
40
+ * reader.
41
+ */
29
42
  u8(offset) {
30
43
  this.require(offset, 1);
31
44
  return this.view.getUint8(offset);
32
45
  }
46
+
47
+ /**
48
+ * Reads an unsigned 16-bit little-endian integer at the requested offset for
49
+ * the CMF binary reader.
50
+ */
33
51
  u16(offset) {
34
52
  this.require(offset, 2);
35
53
  return this.view.getUint16(offset, true);
36
54
  }
55
+
56
+ /**
57
+ * Reads an unsigned 32-bit little-endian integer at the requested offset for
58
+ * the CMF binary reader.
59
+ */
37
60
  u32(offset) {
38
61
  this.require(offset, 4);
39
62
  return this.view.getUint32(offset, true);
40
63
  }
64
+
65
+ /**
66
+ * Reads a signed 32-bit little-endian integer at the requested offset for
67
+ * the CMF binary reader.
68
+ */
41
69
  i32(offset) {
42
70
  this.require(offset, 4);
43
71
  return this.view.getInt32(offset, true);
44
72
  }
73
+
74
+ /**
75
+ * Reads a 32-bit little-endian float at the requested offset for the CMF
76
+ * binary reader.
77
+ */
45
78
  f32(offset) {
46
79
  this.require(offset, 4);
47
80
  return this.view.getFloat32(offset, true);
48
81
  }
82
+
83
+ /**
84
+ * Reads a safe unsigned 64-bit little-endian integer at the requested offset
85
+ * for the CMF binary reader.
86
+ */
49
87
  u64(offset) {
50
88
  this.require(offset, 8);
51
89
  const value = this.view.getBigUint64(offset, true);
@@ -54,6 +92,11 @@ class BinaryReader {
54
92
  }
55
93
  return Number(value);
56
94
  }
95
+
96
+ /**
97
+ * Reads a safe signed 64-bit little-endian integer at the requested offset
98
+ * for the CMF binary reader.
99
+ */
57
100
  i64(offset) {
58
101
  this.require(offset, 8);
59
102
  const value = this.view.getBigInt64(offset, true);
@@ -62,10 +105,17 @@ class BinaryReader {
62
105
  }
63
106
  return Number(value);
64
107
  }
108
+
109
+ /**
110
+ * Returns a bounds-checked byte slice at the requested offset for the CMF
111
+ * binary reader.
112
+ */
65
113
  bytesAt(offset, size) {
66
114
  this.require(offset, size, "byte slice");
67
115
  return this.bytes.subarray(offset, offset + size);
68
116
  }
117
+
118
+ /** Decodes a UTF-8 string at the requested offset for the CMF binary reader. */
69
119
  string(offset, byteSize) {
70
120
  if (byteSize === 0) {
71
121
  return "";
@@ -73,15 +123,29 @@ class BinaryReader {
73
123
  return textDecoder.decode(this.bytesAt(offset, byteSize));
74
124
  }
75
125
  }
126
+
127
+ /**
128
+ * Returns the symbolic enum name or an unknown-value label for the CMF binary
129
+ * reader.
130
+ */
76
131
  function enumName(names, value) {
77
132
  return names[value] ?? `Unknown(${value})`;
78
133
  }
134
+
135
+ /** Reads a three-component vector from the CMF input for the CMF binary reader. */
79
136
  function readVector3(reader, offset) {
80
137
  return [reader.f32(offset), reader.f32(offset + 4), reader.f32(offset + 8)];
81
138
  }
139
+
140
+ /**
141
+ * Reads a four-component quaternion from the CMF input for the CMF binary
142
+ * reader.
143
+ */
82
144
  function readQuaternion(reader, offset) {
83
145
  return [reader.f32(offset), reader.f32(offset + 4), reader.f32(offset + 8), reader.f32(offset + 12)];
84
146
  }
147
+
148
+ /** Reads a 4-by-4 matrix from the CMF input for the CMF binary reader. */
85
149
  function readMatrix(reader, offset) {
86
150
  const values = [];
87
151
  for (let i = 0; i < 16; i++) {
@@ -89,12 +153,19 @@ function readMatrix(reader, offset) {
89
153
  }
90
154
  return values;
91
155
  }
156
+
157
+ /** Reads minimum and maximum bounds from the CMF input for the CMF binary reader. */
92
158
  function readBounds(reader, offset) {
93
159
  return {
94
160
  min: readVector3(reader, offset),
95
161
  max: readVector3(reader, offset + 12)
96
162
  };
97
163
  }
164
+
165
+ /**
166
+ * Computes a CRC-32 checksum over the requested byte range for the CMF binary
167
+ * reader.
168
+ */
98
169
  function crc32(bytes, start = 0, end = bytes.byteLength) {
99
170
  let crc = 0xffffffff;
100
171
  const table = crc32Table();
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sources":["../../../../../src/formats/cmf/core/binary.js"],"sourcesContent":["const textDecoder = new TextDecoder();\n\nexport function asUint8Array(input)\n{\n if (input instanceof Uint8Array)\n {\n return input;\n }\n\n if (input instanceof ArrayBuffer)\n {\n return new Uint8Array(input);\n }\n\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n\n throw new TypeError(\"CMF input must be a Uint8Array, Buffer, ArrayBuffer, or typed-array view\");\n}\n\n/**\n * Bounds-checked little-endian offset reader over CMF file bytes, including\n * 64-bit integer reads guarded against unsafe values.\n */\nexport class BinaryReader\n{\n constructor(bytes)\n {\n this.bytes = asUint8Array(bytes);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n }\n\n require(offset, size, label = \"read\")\n {\n if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength)\n {\n throw new RangeError(`CMF ${label} is outside file bounds`);\n }\n }\n\n u8(offset)\n {\n this.require(offset, 1);\n return this.view.getUint8(offset);\n }\n\n u16(offset)\n {\n this.require(offset, 2);\n return this.view.getUint16(offset, true);\n }\n\n u32(offset)\n {\n this.require(offset, 4);\n return this.view.getUint32(offset, true);\n }\n\n i32(offset)\n {\n this.require(offset, 4);\n return this.view.getInt32(offset, true);\n }\n\n f32(offset)\n {\n this.require(offset, 4);\n return this.view.getFloat32(offset, true);\n }\n\n u64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is larger than Number.MAX_SAFE_INTEGER\");\n }\n return Number(value);\n }\n\n i64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigInt64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is outside the safe JavaScript number range\");\n }\n return Number(value);\n }\n\n bytesAt(offset, size)\n {\n this.require(offset, size, \"byte slice\");\n return this.bytes.subarray(offset, offset + size);\n }\n\n string(offset, byteSize)\n {\n if (byteSize === 0)\n {\n return \"\";\n }\n\n return textDecoder.decode(this.bytesAt(offset, byteSize));\n }\n}\n\nexport function enumName(names, value)\n{\n return names[value] ?? `Unknown(${value})`;\n}\n\nexport function readVector3(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8)\n ];\n}\n\nexport function readQuaternion(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8),\n reader.f32(offset + 12)\n ];\n}\n\nexport function readMatrix(reader, offset)\n{\n const values = [];\n for (let i = 0; i < 16; i++)\n {\n values.push(reader.f32(offset + i * 4));\n }\n return values;\n}\n\nexport function readBounds(reader, offset)\n{\n return {\n min: readVector3(reader, offset),\n max: readVector3(reader, offset + 12)\n };\n}\n\nexport function crc32(bytes, start = 0, end = bytes.byteLength)\n{\n let crc = 0xffffffff;\n const table = crc32Table();\n for (let i = start; i < end; i++)\n {\n crc = (crc >>> 8) ^ table[(crc ^ bytes[i]) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nlet cachedCrc32Table = null;\n\nfunction crc32Table()\n{\n if (cachedCrc32Table)\n {\n return cachedCrc32Table;\n }\n\n cachedCrc32Table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let c = i;\n for (let k = 0; k < 8; k++)\n {\n c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1);\n }\n cachedCrc32Table[i] = c >>> 0;\n }\n return cachedCrc32Table;\n}\n"],"names":["textDecoder","TextDecoder","asUint8Array","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","TypeError","BinaryReader","constructor","bytes","view","DataView","require","offset","size","label","Number","isInteger","RangeError","u8","getUint8","u16","getUint16","u32","getUint32","i32","getInt32","f32","getFloat32","u64","value","getBigUint64","BigInt","MAX_SAFE_INTEGER","i64","getBigInt64","MIN_SAFE_INTEGER","bytesAt","subarray","string","byteSize","decode","enumName","names","readVector3","reader","readQuaternion","readMatrix","values","i","push","readBounds","min","max","crc32","start","end","crc","table","crc32Table","cachedCrc32Table","Uint32Array","c","k"],"mappings":"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"}
1
+ {"version":3,"file":"binary.js","sources":["../../../../../src/formats/cmf/core/binary.js"],"sourcesContent":["const textDecoder = new TextDecoder();\n\n/** Returns a byte view over the supplied binary input for the CMF binary reader. */\nexport function asUint8Array(input)\n{\n if (input instanceof Uint8Array)\n {\n return input;\n }\n\n if (input instanceof ArrayBuffer)\n {\n return new Uint8Array(input);\n }\n\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n\n throw new TypeError(\"CMF input must be a Uint8Array, Buffer, ArrayBuffer, or typed-array view\");\n}\n\n/**\n * Bounds-checked little-endian offset reader over CMF file bytes, including\n * 64-bit integer reads guarded against unsafe values.\n */\nexport class BinaryReader\n{\n /** Creates a BinaryReader over caller-provided CMF bytes and reader options. */\n constructor(bytes)\n {\n this.bytes = asUint8Array(bytes);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n }\n\n /**\n * Validates the supplied value against CMF binary reader constraints and\n * throws on failure.\n */\n require(offset, size, label = \"read\")\n {\n if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength)\n {\n throw new RangeError(`CMF ${label} is outside file bounds`);\n }\n }\n\n /**\n * Reads an unsigned 8-bit integer at the requested offset for the CMF binary\n * reader.\n */\n u8(offset)\n {\n this.require(offset, 1);\n return this.view.getUint8(offset);\n }\n\n /**\n * Reads an unsigned 16-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n u16(offset)\n {\n this.require(offset, 2);\n return this.view.getUint16(offset, true);\n }\n\n /**\n * Reads an unsigned 32-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n u32(offset)\n {\n this.require(offset, 4);\n return this.view.getUint32(offset, true);\n }\n\n /**\n * Reads a signed 32-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n i32(offset)\n {\n this.require(offset, 4);\n return this.view.getInt32(offset, true);\n }\n\n /**\n * Reads a 32-bit little-endian float at the requested offset for the CMF\n * binary reader.\n */\n f32(offset)\n {\n this.require(offset, 4);\n return this.view.getFloat32(offset, true);\n }\n\n /**\n * Reads a safe unsigned 64-bit little-endian integer at the requested offset\n * for the CMF binary reader.\n */\n u64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is larger than Number.MAX_SAFE_INTEGER\");\n }\n return Number(value);\n }\n\n /**\n * Reads a safe signed 64-bit little-endian integer at the requested offset\n * for the CMF binary reader.\n */\n i64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigInt64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is outside the safe JavaScript number range\");\n }\n return Number(value);\n }\n\n /**\n * Returns a bounds-checked byte slice at the requested offset for the CMF\n * binary reader.\n */\n bytesAt(offset, size)\n {\n this.require(offset, size, \"byte slice\");\n return this.bytes.subarray(offset, offset + size);\n }\n\n /** Decodes a UTF-8 string at the requested offset for the CMF binary reader. */\n string(offset, byteSize)\n {\n if (byteSize === 0)\n {\n return \"\";\n }\n\n return textDecoder.decode(this.bytesAt(offset, byteSize));\n }\n}\n\n/**\n * Returns the symbolic enum name or an unknown-value label for the CMF binary\n * reader.\n */\nexport function enumName(names, value)\n{\n return names[value] ?? `Unknown(${value})`;\n}\n\n/** Reads a three-component vector from the CMF input for the CMF binary reader. */\nexport function readVector3(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8)\n ];\n}\n\n/**\n * Reads a four-component quaternion from the CMF input for the CMF binary\n * reader.\n */\nexport function readQuaternion(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8),\n reader.f32(offset + 12)\n ];\n}\n\n/** Reads a 4-by-4 matrix from the CMF input for the CMF binary reader. */\nexport function readMatrix(reader, offset)\n{\n const values = [];\n for (let i = 0; i < 16; i++)\n {\n values.push(reader.f32(offset + i * 4));\n }\n return values;\n}\n\n/** Reads minimum and maximum bounds from the CMF input for the CMF binary reader. */\nexport function readBounds(reader, offset)\n{\n return {\n min: readVector3(reader, offset),\n max: readVector3(reader, offset + 12)\n };\n}\n\n/**\n * Computes a CRC-32 checksum over the requested byte range for the CMF binary\n * reader.\n */\nexport function crc32(bytes, start = 0, end = bytes.byteLength)\n{\n let crc = 0xffffffff;\n const table = crc32Table();\n for (let i = start; i < end; i++)\n {\n crc = (crc >>> 8) ^ table[(crc ^ bytes[i]) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nlet cachedCrc32Table = null;\n\nfunction crc32Table()\n{\n if (cachedCrc32Table)\n {\n return cachedCrc32Table;\n }\n\n cachedCrc32Table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let c = i;\n for (let k = 0; k < 8; k++)\n {\n c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1);\n }\n cachedCrc32Table[i] = c >>> 0;\n }\n return cachedCrc32Table;\n}\n"],"names":["textDecoder","TextDecoder","asUint8Array","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","TypeError","BinaryReader","constructor","bytes","view","DataView","require","offset","size","label","Number","isInteger","RangeError","u8","getUint8","u16","getUint16","u32","getUint32","i32","getInt32","f32","getFloat32","u64","value","getBigUint64","BigInt","MAX_SAFE_INTEGER","i64","getBigInt64","MIN_SAFE_INTEGER","bytesAt","subarray","string","byteSize","decode","enumName","names","readVector3","reader","readQuaternion","readMatrix","values","i","push","readBounds","min","max","crc32","start","end","crc","table","crc32Table","cachedCrc32Table","Uint32Array","c","k"],"mappings":"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"}
@@ -12,11 +12,15 @@ const CHANNEL_NAMES = Object.freeze({
12
12
  PackedTangent: "packedTangent",
13
13
  PackedTangentLegacy: "packedTangentLegacy"
14
14
  });
15
+
16
+ /** Decodes geometry sync into a normalized CMF format reader result. */
15
17
  function decodeGeometrySync(result, sourceBytes) {
16
18
  const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));
17
19
  attachGeometry(result, sections);
18
20
  return result;
19
21
  }
22
+
23
+ /** Decodes geometry async into a normalized CMF format reader result. */
20
24
  async function decodeGeometryAsync(result, sourceBytes) {
21
25
  await MeshoptDecoder.ready;
22
26
  const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));
@@ -1 +1 @@
1
- {"version":3,"file":"buffers.js","sources":["../../../../../src/formats/cmf/core/buffers.js"],"sourcesContent":["import { MeshoptDecoder } from \"meshoptimizer/decoder\";\n\nconst CHANNEL_NAMES = Object.freeze({\n Position: \"position\",\n Normal: \"normal\",\n Tangent: \"tangent\",\n Binormal: \"binormal\",\n TexCoord: \"texcoord\",\n Color: \"color\",\n BoneIndices: \"blendIndice\",\n BoneWeights: \"blendWeight\",\n PackedTangent: \"packedTangent\",\n PackedTangentLegacy: \"packedTangentLegacy\"\n});\n\nexport function decodeGeometrySync(result, sourceBytes)\n{\n const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nexport async function decodeGeometryAsync(result, sourceBytes)\n{\n await MeshoptDecoder.ready;\n const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nfunction decodeSectionSync(section, index, sourceBytes)\n{\n if (section.compression !== \"None\")\n {\n throw new Error(\"CMF compressed GPU buffers require ReadAsync/readAsync so meshoptimizer can initialize\");\n }\n\n return sectionBytes(section, index, sourceBytes);\n}\n\nfunction decodeSectionWithMeshopt(section, index, sourceBytes)\n{\n const source = sectionBytes(section, index, sourceBytes);\n if (section.compression === \"None\")\n {\n return source;\n }\n\n const target = new Uint8Array(section.uncompressedSize);\n const count = section.gpuAlignment === 0 ? 0 : section.uncompressedSize / section.gpuAlignment;\n\n if (section.compression === \"MeshOptimizerVertexBuffer\")\n {\n MeshoptDecoder.decodeVertexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n if (section.compression === \"MeshOptimizerIndexBuffer\")\n {\n MeshoptDecoder.decodeIndexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n throw new Error(`Unsupported CMF section compression \"${section.compression}\"`);\n}\n\nfunction sectionBytes(section, index, sourceBytes)\n{\n if (index === 0 || section.type !== \"GpuBuffer\")\n {\n return null;\n }\n\n return sourceBytes.subarray(section.offset, section.offset + section.compressedSize);\n}\n\nfunction attachGeometry(result, sectionData)\n{\n result.buffers = result.sections.map((section, index) =>\n {\n const data = sectionData[index];\n return {\n index,\n type: section.type,\n compression: section.compression,\n byteLength: data?.byteLength ?? 0,\n data\n };\n });\n\n for (const mesh of result.meshes)\n {\n for (const lod of mesh.lods)\n {\n lod.vertex = readVertexChannels(mesh.decl, lod.vb, sectionData);\n lod.indices = readIndexGroups(mesh, lod, sectionData);\n\n for (let i = 0; i < lod.morphTargets.length; i++)\n {\n const target = lod.morphTargets[i];\n target.vertex = readVertexChannels(mesh.morphTargets.decl, target.vb, sectionData);\n target.name = mesh.morphTargets.targets[i]?.name ?? target.name ?? \"\";\n target.maxDisplacement = mesh.morphTargets.targets[i]?.maxDisplacement ?? target.maxDisplacement ?? 0;\n }\n }\n\n if (mesh.lods.length > 0)\n {\n mesh.vertex = mesh.lods[0].vertex;\n mesh.indices = mesh.lods[0].indices;\n }\n else\n {\n mesh.vertex = createVertexChannels();\n mesh.indices = [];\n }\n }\n}\n\nfunction readVertexChannels(decl, view, sectionData)\n{\n const channels = createVertexChannels();\n const bytes = viewData(view, sectionData);\n if (!bytes || view.stride === 0)\n {\n return channels;\n }\n\n const reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const count = Math.floor(view.size / view.stride);\n for (const element of decl)\n {\n const channel = channelName(element);\n if (!channels[channel]) channels[channel] = [];\n\n for (let vertex = 0; vertex < count; vertex++)\n {\n const base = vertex * view.stride + element.offset;\n for (let component = 0; component < element.elementCount; component++)\n {\n channels[channel].push(readElementComponent(reader, base, element.type, component));\n }\n }\n }\n\n return channels;\n}\n\nfunction readIndexGroups(mesh, lod, sectionData)\n{\n const bytes = viewData(lod.ib, sectionData);\n if (!bytes || lod.ib.stride === 0)\n {\n return [];\n }\n\n const\n reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n allFaces = readIndices(reader, lod.ib.size, lod.ib.stride);\n\n if (lod.areas.length === 0)\n {\n return [ {\n name: \"\",\n bytesPerIndex: lod.ib.stride,\n faces: allFaces\n } ];\n }\n\n return lod.areas.map((area, areaIndex) =>\n {\n const sourceArea = mesh.areas[areaIndex];\n return {\n name: sourceArea?.name ?? \"\",\n bytesPerIndex: lod.ib.stride,\n firstElement: area.firstElement,\n elementCount: area.elementCount,\n faces: allFaces.slice(area.firstElement * 3, (area.firstElement + area.elementCount) * 3)\n };\n });\n}\n\nfunction readIndices(reader, byteSize, stride)\n{\n const result = [];\n for (let offset = 0; offset < byteSize; offset += stride)\n {\n if (stride === 2) result.push(reader.getUint16(offset, true));\n else if (stride === 4) result.push(reader.getUint32(offset, true));\n else result.push(reader.getUint8(offset));\n }\n return result;\n}\n\nfunction viewData(view, sectionData)\n{\n const section = sectionData[view.index];\n if (!section || view.size === 0)\n {\n return null;\n }\n\n return section.subarray(view.offset, view.offset + view.size);\n}\n\nfunction channelName(element)\n{\n const base = CHANNEL_NAMES[element.usage] ?? lowerFirst(element.usage);\n if (element.usage === \"TexCoord\" || element.usage === \"Color\")\n {\n return `${base}${element.usageIndex}`;\n }\n\n if (element.usageIndex > 0)\n {\n return `${base}${element.usageIndex}`;\n }\n\n return base;\n}\n\nfunction createVertexChannels()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n color0: [],\n blendIndice: [],\n blendWeight: [],\n packedTangent: [],\n packedTangentLegacy: []\n };\n}\n\nfunction readElementComponent(reader, base, type, component)\n{\n const offset = base + component * elementTypeSize(type);\n switch (type)\n {\n case \"Float32\":\n return reader.getFloat32(offset, true);\n case \"Float16\":\n return halfToFloat(reader.getUint16(offset, true));\n case \"UInt16Norm\":\n return reader.getUint16(offset, true) / 65535;\n case \"UInt16\":\n return reader.getUint16(offset, true);\n case \"Int16Norm\":\n return Math.max(reader.getInt16(offset, true) / 32767, -1);\n case \"Int16\":\n return reader.getInt16(offset, true);\n case \"UInt8Norm\":\n return reader.getUint8(offset) / 255;\n case \"UInt8\":\n return reader.getUint8(offset);\n case \"Int8Norm\":\n return Math.max(reader.getInt8(offset) / 127, -1);\n case \"Int8\":\n return reader.getInt8(offset);\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction elementTypeSize(type)\n{\n switch (type)\n {\n case \"Float32\":\n return 4;\n case \"Float16\":\n case \"UInt16Norm\":\n case \"UInt16\":\n case \"Int16Norm\":\n case \"Int16\":\n return 2;\n case \"UInt8Norm\":\n case \"UInt8\":\n case \"Int8Norm\":\n case \"Int8\":\n return 1;\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction halfToFloat(value)\n{\n const\n sign = (value & 0x8000) ? -1 : 1,\n exponent = (value >> 10) & 0x1f,\n fraction = value & 0x03ff;\n\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (fraction / 1024);\n }\n\n if (exponent === 31)\n {\n return fraction ? NaN : sign * Infinity;\n }\n\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 1024);\n}\n\nfunction lowerFirst(value)\n{\n return value ? value[0].toLowerCase() + value.slice(1) : value;\n}\n"],"names":["CHANNEL_NAMES","Object","freeze","Position","Normal","Tangent","Binormal","TexCoord","Color","BoneIndices","BoneWeights","PackedTangent","PackedTangentLegacy","decodeGeometrySync","result","sourceBytes","sections","map","section","index","decodeSectionSync","attachGeometry","decodeGeometryAsync","MeshoptDecoder","ready","decodeSectionWithMeshopt","compression","Error","sectionBytes","source","target","Uint8Array","uncompressedSize","count","gpuAlignment","decodeVertexBuffer","decodeIndexBuffer","type","subarray","offset","compressedSize","sectionData","buffers","data","byteLength","mesh","meshes","lod","lods","vertex","readVertexChannels","decl","vb","indices","readIndexGroups","i","morphTargets","length","name","targets","maxDisplacement","createVertexChannels","view","channels","bytes","viewData","stride","reader","DataView","buffer","byteOffset","Math","floor","size","element","channel","channelName","base","component","elementCount","push","readElementComponent","ib","allFaces","readIndices","areas","bytesPerIndex","faces","area","areaIndex","sourceArea","firstElement","slice","byteSize","getUint16","getUint32","getUint8","usage","lowerFirst","usageIndex","position","normal","tangent","binormal","texcoord0","texcoord1","color0","blendIndice","blendWeight","packedTangent","packedTangentLegacy","elementTypeSize","getFloat32","halfToFloat","max","getInt16","getInt8","value","sign","exponent","fraction","pow","NaN","Infinity","toLowerCase"],"mappings":"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"}
1
+ {"version":3,"file":"buffers.js","sources":["../../../../../src/formats/cmf/core/buffers.js"],"sourcesContent":["import { MeshoptDecoder } from \"meshoptimizer/decoder\";\n\nconst CHANNEL_NAMES = Object.freeze({\n Position: \"position\",\n Normal: \"normal\",\n Tangent: \"tangent\",\n Binormal: \"binormal\",\n TexCoord: \"texcoord\",\n Color: \"color\",\n BoneIndices: \"blendIndice\",\n BoneWeights: \"blendWeight\",\n PackedTangent: \"packedTangent\",\n PackedTangentLegacy: \"packedTangentLegacy\"\n});\n\n/** Decodes geometry sync into a normalized CMF format reader result. */\nexport function decodeGeometrySync(result, sourceBytes)\n{\n const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\n/** Decodes geometry async into a normalized CMF format reader result. */\nexport async function decodeGeometryAsync(result, sourceBytes)\n{\n await MeshoptDecoder.ready;\n const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nfunction decodeSectionSync(section, index, sourceBytes)\n{\n if (section.compression !== \"None\")\n {\n throw new Error(\"CMF compressed GPU buffers require ReadAsync/readAsync so meshoptimizer can initialize\");\n }\n\n return sectionBytes(section, index, sourceBytes);\n}\n\nfunction decodeSectionWithMeshopt(section, index, sourceBytes)\n{\n const source = sectionBytes(section, index, sourceBytes);\n if (section.compression === \"None\")\n {\n return source;\n }\n\n const target = new Uint8Array(section.uncompressedSize);\n const count = section.gpuAlignment === 0 ? 0 : section.uncompressedSize / section.gpuAlignment;\n\n if (section.compression === \"MeshOptimizerVertexBuffer\")\n {\n MeshoptDecoder.decodeVertexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n if (section.compression === \"MeshOptimizerIndexBuffer\")\n {\n MeshoptDecoder.decodeIndexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n throw new Error(`Unsupported CMF section compression \"${section.compression}\"`);\n}\n\nfunction sectionBytes(section, index, sourceBytes)\n{\n if (index === 0 || section.type !== \"GpuBuffer\")\n {\n return null;\n }\n\n return sourceBytes.subarray(section.offset, section.offset + section.compressedSize);\n}\n\nfunction attachGeometry(result, sectionData)\n{\n result.buffers = result.sections.map((section, index) =>\n {\n const data = sectionData[index];\n return {\n index,\n type: section.type,\n compression: section.compression,\n byteLength: data?.byteLength ?? 0,\n data\n };\n });\n\n for (const mesh of result.meshes)\n {\n for (const lod of mesh.lods)\n {\n lod.vertex = readVertexChannels(mesh.decl, lod.vb, sectionData);\n lod.indices = readIndexGroups(mesh, lod, sectionData);\n\n for (let i = 0; i < lod.morphTargets.length; i++)\n {\n const target = lod.morphTargets[i];\n target.vertex = readVertexChannels(mesh.morphTargets.decl, target.vb, sectionData);\n target.name = mesh.morphTargets.targets[i]?.name ?? target.name ?? \"\";\n target.maxDisplacement = mesh.morphTargets.targets[i]?.maxDisplacement ?? target.maxDisplacement ?? 0;\n }\n }\n\n if (mesh.lods.length > 0)\n {\n mesh.vertex = mesh.lods[0].vertex;\n mesh.indices = mesh.lods[0].indices;\n }\n else\n {\n mesh.vertex = createVertexChannels();\n mesh.indices = [];\n }\n }\n}\n\nfunction readVertexChannels(decl, view, sectionData)\n{\n const channels = createVertexChannels();\n const bytes = viewData(view, sectionData);\n if (!bytes || view.stride === 0)\n {\n return channels;\n }\n\n const reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const count = Math.floor(view.size / view.stride);\n for (const element of decl)\n {\n const channel = channelName(element);\n if (!channels[channel]) channels[channel] = [];\n\n for (let vertex = 0; vertex < count; vertex++)\n {\n const base = vertex * view.stride + element.offset;\n for (let component = 0; component < element.elementCount; component++)\n {\n channels[channel].push(readElementComponent(reader, base, element.type, component));\n }\n }\n }\n\n return channels;\n}\n\nfunction readIndexGroups(mesh, lod, sectionData)\n{\n const bytes = viewData(lod.ib, sectionData);\n if (!bytes || lod.ib.stride === 0)\n {\n return [];\n }\n\n const\n reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n allFaces = readIndices(reader, lod.ib.size, lod.ib.stride);\n\n if (lod.areas.length === 0)\n {\n return [ {\n name: \"\",\n bytesPerIndex: lod.ib.stride,\n faces: allFaces\n } ];\n }\n\n return lod.areas.map((area, areaIndex) =>\n {\n const sourceArea = mesh.areas[areaIndex];\n return {\n name: sourceArea?.name ?? \"\",\n bytesPerIndex: lod.ib.stride,\n firstElement: area.firstElement,\n elementCount: area.elementCount,\n faces: allFaces.slice(area.firstElement * 3, (area.firstElement + area.elementCount) * 3)\n };\n });\n}\n\nfunction readIndices(reader, byteSize, stride)\n{\n const result = [];\n for (let offset = 0; offset < byteSize; offset += stride)\n {\n if (stride === 2) result.push(reader.getUint16(offset, true));\n else if (stride === 4) result.push(reader.getUint32(offset, true));\n else result.push(reader.getUint8(offset));\n }\n return result;\n}\n\nfunction viewData(view, sectionData)\n{\n const section = sectionData[view.index];\n if (!section || view.size === 0)\n {\n return null;\n }\n\n return section.subarray(view.offset, view.offset + view.size);\n}\n\nfunction channelName(element)\n{\n const base = CHANNEL_NAMES[element.usage] ?? lowerFirst(element.usage);\n if (element.usage === \"TexCoord\" || element.usage === \"Color\")\n {\n return `${base}${element.usageIndex}`;\n }\n\n if (element.usageIndex > 0)\n {\n return `${base}${element.usageIndex}`;\n }\n\n return base;\n}\n\nfunction createVertexChannels()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n color0: [],\n blendIndice: [],\n blendWeight: [],\n packedTangent: [],\n packedTangentLegacy: []\n };\n}\n\nfunction readElementComponent(reader, base, type, component)\n{\n const offset = base + component * elementTypeSize(type);\n switch (type)\n {\n case \"Float32\":\n return reader.getFloat32(offset, true);\n case \"Float16\":\n return halfToFloat(reader.getUint16(offset, true));\n case \"UInt16Norm\":\n return reader.getUint16(offset, true) / 65535;\n case \"UInt16\":\n return reader.getUint16(offset, true);\n case \"Int16Norm\":\n return Math.max(reader.getInt16(offset, true) / 32767, -1);\n case \"Int16\":\n return reader.getInt16(offset, true);\n case \"UInt8Norm\":\n return reader.getUint8(offset) / 255;\n case \"UInt8\":\n return reader.getUint8(offset);\n case \"Int8Norm\":\n return Math.max(reader.getInt8(offset) / 127, -1);\n case \"Int8\":\n return reader.getInt8(offset);\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction elementTypeSize(type)\n{\n switch (type)\n {\n case \"Float32\":\n return 4;\n case \"Float16\":\n case \"UInt16Norm\":\n case \"UInt16\":\n case \"Int16Norm\":\n case \"Int16\":\n return 2;\n case \"UInt8Norm\":\n case \"UInt8\":\n case \"Int8Norm\":\n case \"Int8\":\n return 1;\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction halfToFloat(value)\n{\n const\n sign = (value & 0x8000) ? -1 : 1,\n exponent = (value >> 10) & 0x1f,\n fraction = value & 0x03ff;\n\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (fraction / 1024);\n }\n\n if (exponent === 31)\n {\n return fraction ? NaN : sign * Infinity;\n }\n\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 1024);\n}\n\nfunction lowerFirst(value)\n{\n return value ? value[0].toLowerCase() + value.slice(1) : value;\n}\n"],"names":["CHANNEL_NAMES","Object","freeze","Position","Normal","Tangent","Binormal","TexCoord","Color","BoneIndices","BoneWeights","PackedTangent","PackedTangentLegacy","decodeGeometrySync","result","sourceBytes","sections","map","section","index","decodeSectionSync","attachGeometry","decodeGeometryAsync","MeshoptDecoder","ready","decodeSectionWithMeshopt","compression","Error","sectionBytes","source","target","Uint8Array","uncompressedSize","count","gpuAlignment","decodeVertexBuffer","decodeIndexBuffer","type","subarray","offset","compressedSize","sectionData","buffers","data","byteLength","mesh","meshes","lod","lods","vertex","readVertexChannels","decl","vb","indices","readIndexGroups","i","morphTargets","length","name","targets","maxDisplacement","createVertexChannels","view","channels","bytes","viewData","stride","reader","DataView","buffer","byteOffset","Math","floor","size","element","channel","channelName","base","component","elementCount","push","readElementComponent","ib","allFaces","readIndices","areas","bytesPerIndex","faces","area","areaIndex","sourceArea","firstElement","slice","byteSize","getUint16","getUint32","getUint8","usage","lowerFirst","usageIndex","position","normal","tangent","binormal","texcoord0","texcoord1","color0","blendIndice","blendWeight","packedTangent","packedTangentLegacy","elementTypeSize","getFloat32","halfToFloat","max","getInt16","getInt8","value","sign","exponent","fraction","pow","NaN","Infinity","toLowerCase"],"mappings":"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"}
@@ -8,6 +8,11 @@ const DEFAULT_VALUES = Object.freeze({
8
8
  decodeBuffers: true,
9
9
  classes: {}
10
10
  });
11
+
12
+ /**
13
+ * Normalizes reader options against their supported defaults for the CMF format
14
+ * reader.
15
+ */
11
16
  function normalizeValues(base = {}, options = {}) {
12
17
  const values = {
13
18
  ...DEFAULT_VALUES,
@@ -36,12 +41,16 @@ function normalizeEmit(emit) {
36
41
  function hasClasses(classes) {
37
42
  return !!classes && Object.values(classes).some(Class => typeof Class === "function");
38
43
  }
44
+
45
+ /** Reads and validates raw input bytes for the CMF format reader. */
39
46
  function readRawInput(input, options = {}) {
40
47
  if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
41
48
  return input;
42
49
  }
43
50
  return readCmf(input, options);
44
51
  }
52
+
53
+ /** Reads and validates raw input bytes asynchronously for the CMF format reader. */
45
54
  async function readRawInputAsync(input, options = {}) {
46
55
  if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
47
56
  return input;
@@ -51,6 +60,8 @@ async function readRawInputAsync(input, options = {}) {
51
60
  } = await import('./schema.js');
52
61
  return readCmfAsync(input, options);
53
62
  }
63
+
64
+ /** Reads input using normalized format options for the CMF format reader. */
54
65
  function readWithValues(owner, input, values) {
55
66
  const raw = readRawInput(input, values);
56
67
  if (values.emit === OUTPUT_RAW) {
@@ -64,6 +75,11 @@ function readWithValues(owner, input, values) {
64
75
  source: values.source
65
76
  });
66
77
  }
78
+
79
+ /**
80
+ * Reads input asynchronously using normalized format options for the CMF format
81
+ * reader.
82
+ */
67
83
  async function readWithValuesAsync(owner, input, values) {
68
84
  const raw = await readRawInputAsync(input, values);
69
85
  if (values.emit === OUTPUT_RAW) {
@@ -77,6 +93,8 @@ async function readWithValuesAsync(owner, input, values) {
77
93
  source: values.source
78
94
  });
79
95
  }
96
+
97
+ /** Loads shared with values through the current CMF format reader. */
80
98
  function loadSharedWithValues(input, values) {
81
99
  const native = buildCmfFromShared(input);
82
100
  return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(native, values.classes, {
@@ -87,6 +105,8 @@ function loadSharedWithValues(input, values) {
87
105
  source: values.source
88
106
  });
89
107
  }
108
+
109
+ /** Loads native with values through the current CMF format reader. */
90
110
  function loadNativeWithValues(input, values) {
91
111
  if (values.emit === OUTPUT_RAW) {
92
112
  return input;
@@ -99,6 +119,11 @@ function loadNativeWithValues(input, values) {
99
119
  source: values.source
100
120
  });
101
121
  }
122
+
123
+ /**
124
+ * Inspects raw CMF result without materializing the full CMF format reader
125
+ * payload.
126
+ */
102
127
  function inspectRawCmfResult(input, options = {}) {
103
128
  return inspectCmf(readRawInput(input, {
104
129
  ...options,
@@ -158,6 +183,8 @@ function emptyGr2Vertex() {
158
183
  blendWeight: []
159
184
  };
160
185
  }
186
+
187
+ /** Converts a parsed payload into a JSON-safe value for the CMF format reader. */
161
188
  function toJsonValue(value) {
162
189
  if (value === null || value === undefined) {
163
190
  return value;
@@ -180,11 +207,15 @@ function toJsonValue(value) {
180
207
  }
181
208
  return value;
182
209
  }
210
+
211
+ /** Validates a requested runtime class key for the CMF format reader. */
183
212
  function validateClassKey(type) {
184
213
  if (!CLASS_KEYS.includes(type)) {
185
214
  throw new TypeError(`Unknown CMF class key "${type}"`);
186
215
  }
187
216
  }
217
+
218
+ /** Validates a resolved runtime class constructor for the CMF format reader. */
188
219
  function validateClass(type, Class) {
189
220
  validateClassKey(type);
190
221
  if (typeof Class !== "function") {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/cmf/core/helpers.js"],"sourcesContent":["import { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED } from \"./constants.js\";\nimport { inspectCmf, readCmf } from \"./schema.js\";\nimport { buildCmfFromShared, buildSharedFromCmf } from \"./shared.js\";\n\nexport { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED };\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_NATIVE,\n validateCrc: true,\n decodeBuffers: true,\n classes: {}\n});\n\nexport function normalizeValues(base = {}, options = {})\n{\n const values = {\n ...DEFAULT_VALUES,\n ...base,\n ...options,\n classes: {\n ...(base.classes ?? {}),\n ...(options.classes ?? {})\n }\n };\n\n values.emit = normalizeEmit(values.emit);\n if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes))\n {\n throw new TypeError(\"CMF emit \\\"gr2\\\" requires explicit classes\");\n }\n\n validateClasses(values.classes);\n values.decodeBuffers = !!values.decodeBuffers;\n return values;\n}\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON)\n {\n return OUTPUT_CMF;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;\n throw new TypeError(`CMF emit must be \"${OUTPUT_CMF}\", \"${OUTPUT_CMF_JSON}\", \"${OUTPUT_GR2}\", \"${OUTPUT_SHARED}\", or \"${OUTPUT_RAW}\"`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nexport function readRawInput(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n return readCmf(input, options);\n}\n\nexport async function readRawInputAsync(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n const { readCmfAsync } = await import(\"./schema.js\");\n return readCmfAsync(input, options);\n}\n\nexport function readWithValues(owner, input, values)\n{\n const raw = readRawInput(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport async function readWithValuesAsync(owner, input, values)\n{\n const raw = await readRawInputAsync(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport function loadSharedWithValues(input, values)\n{\n const native = buildCmfFromShared(input);\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(native, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(native, values.classes, { source: values.source })\n : hydrateNativeRoot(native, values.classes, { source: values.source });\n}\n\nexport function loadNativeWithValues(input, values)\n{\n if (values.emit === OUTPUT_RAW)\n {\n return input;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(input, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(input, values.classes, { source: values.source })\n : hydrateNativeRoot(input, values.classes, { source: values.source });\n}\n\nexport function inspectRawCmfResult(input, options = {})\n{\n return inspectCmf(readRawInput(input, { ...options, decodeBuffers: false }));\n}\n\nfunction buildGr2FromCmf(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n grannyFileFormatRevision: raw.version,\n grannyFileSource: \"cmf\",\n meshes: raw.meshes.map((mesh) => hydrateGr2Mesh(mesh, hydrationClasses)),\n models: [],\n animations: raw.animations.map((animation) => hydrate(\"Animation\", {\n name: animation.name ?? \"\",\n duration: animation.duration ?? 0,\n timeStep: 0,\n oversampling: 0,\n defaultLoopCount: 0,\n flags: 0,\n trackGroups: []\n }, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateGr2Mesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n name: mesh.name,\n morphTargets: (mesh.morphTargets?.targets ?? []).map((target) => hydrate(\"MorphTarget\", {\n ...target,\n dataIsDeltas: true,\n vertex: target.vertex ?? null\n }, classes)),\n minBounds: mesh.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: mesh.bounds?.max ?? [ 0, 0, 0 ],\n boneBindings: (mesh.boneBindings ?? []).map((binding) => hydrate(\"BoneBinding\", {\n name: binding.name,\n minBounds: binding.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: binding.bounds?.max ?? [ 0, 0, 0 ]\n }, classes)),\n vertex: mesh.vertex ?? emptyGr2Vertex(),\n indices: (mesh.indices ?? []).map((group) => hydrate(\"IndexGroup\", {\n name: group.name ?? \"\",\n bytesPerIndex: group.bytesPerIndex ?? 2,\n faces: group.faces ?? []\n }, classes))\n }, classes);\n}\n\nfunction emptyGr2Vertex()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n blendIndice: [],\n blendWeight: []\n };\n}\n\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined)\n {\n return value;\n }\n\n if (Array.isArray(value))\n {\n return value.map((item) => toJsonValue(item));\n }\n\n if (ArrayBuffer.isView(value))\n {\n return Array.from(value);\n }\n\n if (typeof value.toJSON === \"function\")\n {\n return toJsonValue(value.toJSON());\n }\n\n if (typeof value === \"object\")\n {\n const result = {};\n for (const [ key, child ] of Object.entries(value))\n {\n result[key] = toJsonValue(child);\n }\n return result;\n }\n\n return value;\n}\n\nexport function validateClassKey(type)\n{\n if (!CLASS_KEYS.includes(type))\n {\n throw new TypeError(`Unknown CMF class key \"${type}\"`);\n }\n}\n\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CMF class \"${type}\" must be a constructor`);\n }\n}\n\nfunction validateClasses(classes)\n{\n for (const [ type, Class ] of Object.entries(classes ?? {}))\n {\n validateClass(type, Class);\n }\n}\n\nfunction hydrateNativeRoot(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n signature: raw.signature,\n version: raw.version,\n headerSize: raw.headerSize,\n crc32: raw.crc32,\n sections: (raw.sections ?? []).map((section) => hydrate(\"Section\", section, hydrationClasses)),\n metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,\n meshes: raw.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: raw.skeletons.map((skeleton) => hydrateSkeleton(skeleton, hydrationClasses)),\n animations: raw.animations.map((animation) => hydrateAnimation(animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMetadata(metadata, classes)\n{\n return hydrate(\"Metadata\", {\n entries: metadata.entries.map((entry) => hydrate(\"MetadataEntry\", entry, classes))\n }, classes);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateMeshLod(lod, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateMeshLod(lod, classes)\n{\n return hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateMorphTargets(morphTargets, classes)\n{\n return hydrate(\"MorphTargets\", {\n decl: morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateSkeleton(skeleton, classes)\n{\n return hydrate(\"Skeleton\", {\n ...skeleton,\n boneMasks: skeleton.boneMasks.map((mask) => hydrate(\"BoneMask\", {\n ...mask,\n weights: mask.weights.map((weight) => hydrate(\"BoneWeight\", weight, classes))\n }, classes))\n }, classes);\n}\n\nfunction hydrateAnimation(animation, classes)\n{\n return hydrate(\"Animation\", {\n ...animation,\n channels: animation.channels.map((channel) => hydrate(\"AnimationChannel\", channel, classes)),\n curves: animation.curves.map((curve) => hydrate(\"AnimationCurve\", curve, classes))\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n if (!Class)\n {\n return fields;\n }\n\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return populate(new Class(), fields, options);\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsCmfFormat class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["DEFAULT_VALUES","Object","freeze","emit","OUTPUT_NATIVE","validateCrc","decodeBuffers","classes","normalizeValues","base","options","values","normalizeEmit","OUTPUT_GR2","hasClasses","TypeError","validateClasses","undefined","OUTPUT_CMF","OUTPUT_CMF_JSON","OUTPUT_JSON","OUTPUT_RAW","OUTPUT_SHARED","some","Class","readRawInput","input","Array","isArray","sections","meshes","readCmf","readRawInputAsync","readCmfAsync","readWithValues","owner","raw","buildSharedFromCmf","source","buildGr2FromCmf","hydrateNativeRoot","readWithValuesAsync","loadSharedWithValues","native","buildCmfFromShared","loadNativeWithValues","inspectRawCmfResult","inspectCmf","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","grannyFileFormatRevision","version","grannyFileSource","map","mesh","hydrateGr2Mesh","models","animations","animation","name","duration","timeStep","oversampling","defaultLoopCount","flags","trackGroups","morphTargets","targets","target","dataIsDeltas","vertex","minBounds","bounds","min","maxBounds","max","boneBindings","binding","emptyGr2Vertex","indices","group","bytesPerIndex","faces","position","normal","tangent","binormal","texcoord0","texcoord1","blendIndice","blendWeight","toJsonValue","value","item","ArrayBuffer","isView","from","toJSON","result","key","child","entries","validateClassKey","type","CLASS_KEYS","includes","validateClass","signature","headerSize","crc32","section","metadata","hydrateMetadata","hydrateMesh","skeletons","skeleton","hydrateSkeleton","hydrateAnimation","entry","decl","element","lods","lod","hydrateMeshLod","areas","area","hydrateMorphTargets","audioOcclusionMesh","boneMasks","mask","weights","weight","channels","channel","curves","curve","fields","keys","length","__hydrationOptions","populate","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/cmf/core/helpers.js"],"sourcesContent":["import { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED } from \"./constants.js\";\nimport { inspectCmf, readCmf } from \"./schema.js\";\nimport { buildCmfFromShared, buildSharedFromCmf } from \"./shared.js\";\n\nexport { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED };\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_NATIVE,\n validateCrc: true,\n decodeBuffers: true,\n classes: {}\n});\n\n/**\n * Normalizes reader options against their supported defaults for the CMF format\n * reader.\n */\nexport function normalizeValues(base = {}, options = {})\n{\n const values = {\n ...DEFAULT_VALUES,\n ...base,\n ...options,\n classes: {\n ...(base.classes ?? {}),\n ...(options.classes ?? {})\n }\n };\n\n values.emit = normalizeEmit(values.emit);\n if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes))\n {\n throw new TypeError(\"CMF emit \\\"gr2\\\" requires explicit classes\");\n }\n\n validateClasses(values.classes);\n values.decodeBuffers = !!values.decodeBuffers;\n return values;\n}\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON)\n {\n return OUTPUT_CMF;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;\n throw new TypeError(`CMF emit must be \"${OUTPUT_CMF}\", \"${OUTPUT_CMF_JSON}\", \"${OUTPUT_GR2}\", \"${OUTPUT_SHARED}\", or \"${OUTPUT_RAW}\"`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\n/** Reads and validates raw input bytes for the CMF format reader. */\nexport function readRawInput(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n return readCmf(input, options);\n}\n\n/** Reads and validates raw input bytes asynchronously for the CMF format reader. */\nexport async function readRawInputAsync(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n const { readCmfAsync } = await import(\"./schema.js\");\n return readCmfAsync(input, options);\n}\n\n/** Reads input using normalized format options for the CMF format reader. */\nexport function readWithValues(owner, input, values)\n{\n const raw = readRawInput(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\n/**\n * Reads input asynchronously using normalized format options for the CMF format\n * reader.\n */\nexport async function readWithValuesAsync(owner, input, values)\n{\n const raw = await readRawInputAsync(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\n/** Loads shared with values through the current CMF format reader. */\nexport function loadSharedWithValues(input, values)\n{\n const native = buildCmfFromShared(input);\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(native, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(native, values.classes, { source: values.source })\n : hydrateNativeRoot(native, values.classes, { source: values.source });\n}\n\n/** Loads native with values through the current CMF format reader. */\nexport function loadNativeWithValues(input, values)\n{\n if (values.emit === OUTPUT_RAW)\n {\n return input;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(input, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(input, values.classes, { source: values.source })\n : hydrateNativeRoot(input, values.classes, { source: values.source });\n}\n\n/**\n * Inspects raw CMF result without materializing the full CMF format reader\n * payload.\n */\nexport function inspectRawCmfResult(input, options = {})\n{\n return inspectCmf(readRawInput(input, { ...options, decodeBuffers: false }));\n}\n\nfunction buildGr2FromCmf(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n grannyFileFormatRevision: raw.version,\n grannyFileSource: \"cmf\",\n meshes: raw.meshes.map((mesh) => hydrateGr2Mesh(mesh, hydrationClasses)),\n models: [],\n animations: raw.animations.map((animation) => hydrate(\"Animation\", {\n name: animation.name ?? \"\",\n duration: animation.duration ?? 0,\n timeStep: 0,\n oversampling: 0,\n defaultLoopCount: 0,\n flags: 0,\n trackGroups: []\n }, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateGr2Mesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n name: mesh.name,\n morphTargets: (mesh.morphTargets?.targets ?? []).map((target) => hydrate(\"MorphTarget\", {\n ...target,\n dataIsDeltas: true,\n vertex: target.vertex ?? null\n }, classes)),\n minBounds: mesh.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: mesh.bounds?.max ?? [ 0, 0, 0 ],\n boneBindings: (mesh.boneBindings ?? []).map((binding) => hydrate(\"BoneBinding\", {\n name: binding.name,\n minBounds: binding.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: binding.bounds?.max ?? [ 0, 0, 0 ]\n }, classes)),\n vertex: mesh.vertex ?? emptyGr2Vertex(),\n indices: (mesh.indices ?? []).map((group) => hydrate(\"IndexGroup\", {\n name: group.name ?? \"\",\n bytesPerIndex: group.bytesPerIndex ?? 2,\n faces: group.faces ?? []\n }, classes))\n }, classes);\n}\n\nfunction emptyGr2Vertex()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n blendIndice: [],\n blendWeight: []\n };\n}\n\n/** Converts a parsed payload into a JSON-safe value for the CMF format reader. */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined)\n {\n return value;\n }\n\n if (Array.isArray(value))\n {\n return value.map((item) => toJsonValue(item));\n }\n\n if (ArrayBuffer.isView(value))\n {\n return Array.from(value);\n }\n\n if (typeof value.toJSON === \"function\")\n {\n return toJsonValue(value.toJSON());\n }\n\n if (typeof value === \"object\")\n {\n const result = {};\n for (const [ key, child ] of Object.entries(value))\n {\n result[key] = toJsonValue(child);\n }\n return result;\n }\n\n return value;\n}\n\n/** Validates a requested runtime class key for the CMF format reader. */\nexport function validateClassKey(type)\n{\n if (!CLASS_KEYS.includes(type))\n {\n throw new TypeError(`Unknown CMF class key \"${type}\"`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the CMF format reader. */\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CMF class \"${type}\" must be a constructor`);\n }\n}\n\nfunction validateClasses(classes)\n{\n for (const [ type, Class ] of Object.entries(classes ?? {}))\n {\n validateClass(type, Class);\n }\n}\n\nfunction hydrateNativeRoot(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n signature: raw.signature,\n version: raw.version,\n headerSize: raw.headerSize,\n crc32: raw.crc32,\n sections: (raw.sections ?? []).map((section) => hydrate(\"Section\", section, hydrationClasses)),\n metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,\n meshes: raw.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: raw.skeletons.map((skeleton) => hydrateSkeleton(skeleton, hydrationClasses)),\n animations: raw.animations.map((animation) => hydrateAnimation(animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMetadata(metadata, classes)\n{\n return hydrate(\"Metadata\", {\n entries: metadata.entries.map((entry) => hydrate(\"MetadataEntry\", entry, classes))\n }, classes);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateMeshLod(lod, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateMeshLod(lod, classes)\n{\n return hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateMorphTargets(morphTargets, classes)\n{\n return hydrate(\"MorphTargets\", {\n decl: morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateSkeleton(skeleton, classes)\n{\n return hydrate(\"Skeleton\", {\n ...skeleton,\n boneMasks: skeleton.boneMasks.map((mask) => hydrate(\"BoneMask\", {\n ...mask,\n weights: mask.weights.map((weight) => hydrate(\"BoneWeight\", weight, classes))\n }, classes))\n }, classes);\n}\n\nfunction hydrateAnimation(animation, classes)\n{\n return hydrate(\"Animation\", {\n ...animation,\n channels: animation.channels.map((channel) => hydrate(\"AnimationChannel\", channel, classes)),\n curves: animation.curves.map((curve) => hydrate(\"AnimationCurve\", curve, classes))\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n if (!Class)\n {\n return fields;\n }\n\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return populate(new Class(), fields, options);\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsCmfFormat class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["DEFAULT_VALUES","Object","freeze","emit","OUTPUT_NATIVE","validateCrc","decodeBuffers","classes","normalizeValues","base","options","values","normalizeEmit","OUTPUT_GR2","hasClasses","TypeError","validateClasses","undefined","OUTPUT_CMF","OUTPUT_CMF_JSON","OUTPUT_JSON","OUTPUT_RAW","OUTPUT_SHARED","some","Class","readRawInput","input","Array","isArray","sections","meshes","readCmf","readRawInputAsync","readCmfAsync","readWithValues","owner","raw","buildSharedFromCmf","source","buildGr2FromCmf","hydrateNativeRoot","readWithValuesAsync","loadSharedWithValues","native","buildCmfFromShared","loadNativeWithValues","inspectRawCmfResult","inspectCmf","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","grannyFileFormatRevision","version","grannyFileSource","map","mesh","hydrateGr2Mesh","models","animations","animation","name","duration","timeStep","oversampling","defaultLoopCount","flags","trackGroups","morphTargets","targets","target","dataIsDeltas","vertex","minBounds","bounds","min","maxBounds","max","boneBindings","binding","emptyGr2Vertex","indices","group","bytesPerIndex","faces","position","normal","tangent","binormal","texcoord0","texcoord1","blendIndice","blendWeight","toJsonValue","value","item","ArrayBuffer","isView","from","toJSON","result","key","child","entries","validateClassKey","type","CLASS_KEYS","includes","validateClass","signature","headerSize","crc32","section","metadata","hydrateMetadata","hydrateMesh","skeletons","skeleton","hydrateSkeleton","hydrateAnimation","entry","decl","element","lods","lod","hydrateMeshLod","areas","area","hydrateMorphTargets","audioOcclusionMesh","boneMasks","mask","weights","weight","channels","channel","curves","curve","fields","keys","length","__hydrationOptions","populate","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { STRUCT_SIZE, FILE_SIGNATURE, FILE_VERSION, SectionCompression, SectionT
2
2
  import { BinaryReader, crc32, enumName, readBounds, readVector3, readMatrix, readQuaternion } from './binary.js';
3
3
  import { decodeGeometrySync, decodeGeometryAsync } from './buffers.js';
4
4
 
5
+ /** Reads and validates a CMF document synchronously for the CMF format reader. */
5
6
  function readCmf(input, options = {}) {
6
7
  const reader = new BinaryReader(input);
7
8
  const header = readHeader(reader);
@@ -23,6 +24,8 @@ function readCmf(input, options = {}) {
23
24
  };
24
25
  return options.decodeBuffers ? decodeGeometrySync(result, reader.bytes) : result;
25
26
  }
27
+
28
+ /** Reads and validates a CMF document asynchronously for the CMF format reader. */
26
29
  async function readCmfAsync(input, options = {}) {
27
30
  const reader = new BinaryReader(input);
28
31
  const header = readHeader(reader);
@@ -44,6 +47,8 @@ async function readCmfAsync(input, options = {}) {
44
47
  };
45
48
  return options.decodeBuffers ? await decodeGeometryAsync(result, reader.bytes) : result;
46
49
  }
50
+
51
+ /** Reads header from the current CMF format reader. */
47
52
  function readHeader(reader) {
48
53
  const signature = reader.u32(0);
49
54
  const version = reader.u32(4);
@@ -60,6 +65,11 @@ function readHeader(reader) {
60
65
  sections
61
66
  };
62
67
  }
68
+
69
+ /**
70
+ * Returns CMF header and section metadata without decoding geometry for the CMF
71
+ * format reader.
72
+ */
63
73
  function inspectCmf(result) {
64
74
  return {
65
75
  signature: result.signature,