@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 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gr2/core/helpers.js"],"sourcesContent":["import { readGr2Raw } from \"./reader.js\";\nimport { emitJson, CLASS_KEYS as GR2_CLASS_KEYS } from \"./json.js\";\nimport { tangents } from \"./tangents.js\";\nimport { decompressAnimationCurves } from \"./curves.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_GR2_JSON = \"gr2Json\";\nexport const OUTPUT_CMF = \"cmf\";\nexport const OUTPUT_RAW = \"raw\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n decompressCurves: false,\n unpackTangents: false,\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"decompressCurves\",\n \"unpackTangents\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;\n if (emit === OUTPUT_GR2) return OUTPUT_GR2;\n if (emit === OUTPUT_CMF) return OUTPUT_CMF;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new Error(`CjsFormatGr2 unknown emit value \"${emit}\"`);\n}\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n decompressCurves: values.decompressCurves,\n unpackTangents: values.unpackTangents,\n rebuildMissingNormals: values.rebuildMissingNormals,\n rebuildMissingTangents: values.rebuildMissingTangents,\n rebuildMissingBiNormals: values.rebuildMissingBiNormals,\n classes: { ...classMap(values) }\n };\n}\n\nfunction assertKnownOptions(options)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`CjsFormatGr2 unknown option \"${key}\"`);\n }\n }\n}\n\nfunction validateBoolean(name, value)\n{\n if (typeof value !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${name} option must be true or false`);\n }\n return value;\n}\n\nfunction validateRule(name, value)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`CjsFormatGr2 ${name} option must be true, false, or a function`);\n}\n\nexport function validateClassKey(key)\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`CjsFormatGr2 unknown class type \"${key}\"`);\n }\n}\n\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CjsFormatGr2 class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 classes option must be an object\");\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(type, Class);\n next[type] = Class;\n }\n values.classes = next;\n}\n\nfunction optionValue(options, keys)\n{\n for (const key of keys)\n {\n if (hasOwn(options, key)) return options[key];\n }\n return undefined;\n}\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {})\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 options must be an object\");\n }\n\n assertKnownOptions(options);\n\n const values = cloneValues(base);\n\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit);\n if (hasOwn(options, \"decompressCurves\"))\n {\n values.decompressCurves = validateBoolean(\"decompressCurves\", options.decompressCurves);\n }\n\n const unpackTangents = optionValue(options, [ \"unpackTangents\" ]);\n if (unpackTangents !== undefined)\n {\n values.unpackTangents = validateRule(\"unpackTangents\", unpackTangents);\n }\n\n const rebuildMissingNormals = optionValue(options, [ \"rebuildMissingNormals\" ]);\n if (rebuildMissingNormals !== undefined)\n {\n values.rebuildMissingNormals = validateRule(\"rebuildMissingNormals\", rebuildMissingNormals);\n }\n\n const rebuildMissingTangents = optionValue(options, [ \"rebuildMissingTangents\" ]);\n if (rebuildMissingTangents !== undefined)\n {\n values.rebuildMissingTangents = validateRule(\"rebuildMissingTangents\", rebuildMissingTangents);\n }\n\n const rebuildMissingBiNormals = optionValue(options, [ \"rebuildMissingBiNormals\" ]);\n if (rebuildMissingBiNormals !== undefined)\n {\n values.rebuildMissingBiNormals = validateRule(\"rebuildMissingBiNormals\", rebuildMissingBiNormals);\n }\n\n if (hasOwn(options, \"classes\"))\n {\n mergeClasses(values, options.classes);\n }\n\n if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes))\n {\n throw new TypeError(`CjsFormatGr2 emit \"${values.emit}\" requires explicit classes`);\n }\n\n return values;\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction isRawGr2Result(value)\n{\n return !!value && typeof value === \"object\" && \"fileInfo\" in value &&\n typeof value.version === \"number\";\n}\n\n/**\n * Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,\n * `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw\n * ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which\n * is how ccpwgl's resource loader supplies bytes) must be wrapped in a\n * view before it reaches readGr2Raw, not passed straight through.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.\n * @returns {Uint8Array} A Uint8Array view over the same bytes.\n */\nfunction toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsFormatGr2: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\nexport function readRawInput(input)\n{\n return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));\n}\n\nfunction meshName(mesh, meshIndex)\n{\n return mesh && mesh.name ? `\"${mesh.name}\"` : `#${meshIndex}`;\n}\n\nfunction vertexChannel(mesh, channel)\n{\n return mesh && mesh.vertex && mesh.vertex[channel];\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = vertexChannel(mesh, channel);\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = vertexChannel(mesh, channel);\n if (!value || value.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n\n if (faces.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);\n }\n\n return faces;\n}\n\nfunction shouldApplyMeshRule(reader, rule, context)\n{\n const fullContext = { reader, ...context };\n\n if (typeof rule === \"function\")\n {\n const result = rule(fullContext);\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${context.feature} rule must return true or false`);\n }\n return result;\n }\n\n return rule;\n}\n\nfunction unpackMeshTangents(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (shouldApplyMeshRule(reader, values.unpackTangents, {\n options: values, raw, json, mesh, meshIndex,\n feature: \"unpackTangents\",\n channel: \"tangent\"\n }))\n {\n tangents.unpack(mesh);\n }\n }\n}\n\nfunction rebuildMeshNormals(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\");\n\n mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));\n}\n\nfunction rebuildMeshTangents(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n uvs = requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\");\n\n mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));\n}\n\nfunction rebuildMeshBiNormals(mesh, meshIndex)\n{\n const\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n tangentValues = requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\");\n\n mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);\n}\n\nfunction rebuildMissingMeshData(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n rebuildMeshNormals(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingTangents,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n rebuildMeshTangents(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingBiNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n rebuildMeshBiNormals(mesh, meshIndex);\n }\n }\n}\n\nfunction processMeshData(reader, json, raw, values)\n{\n unpackMeshTangents(reader, json, raw, values);\n rebuildMissingMeshData(reader, json, raw, values);\n}\n\nfunction buildJson(reader, raw, values)\n{\n const json = emitJson(raw.fileInfo, raw.version, {\n classes: values.emit === OUTPUT_GR2 || ((values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes))\n ? values.classes\n : {}\n });\n\n if (values.decompressCurves)\n {\n decompressAnimationCurves(json);\n }\n\n processMeshData(reader, json, raw, values);\n\n return json;\n}\n\nexport function readWithValues(reader, input, values)\n{\n const parsed = readRawInput(input);\n if (values.emit === OUTPUT_RAW) return parsed;\n const json = buildJson(reader, parsed, values);\n return values.emit === OUTPUT_CMF\n ? hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source })\n : json;\n}\n\nexport function toJsonValue(value, seen = new WeakSet())\n{\n if (value === null || typeof value !== \"object\") return value;\n if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));\n if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));\n\n if (seen.has(value))\n {\n throw new TypeError(\"CjsFormatGr2.toJSON cannot convert circular data\");\n }\n\n if (typeof value.toJSON === \"function\")\n {\n seen.add(value);\n const json = toJsonValue(value.toJSON(), seen);\n seen.delete(value);\n return json;\n }\n\n seen.add(value);\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key], seen);\n }\n seen.delete(value);\n return out;\n}\n\nexport function inspectRawGr2Result(parsed)\n{\n const\n fileInfo = parsed.fileInfo || {},\n count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;\n\n return {\n reader: \"CjsFormatGr2\",\n format: \"gr2\",\n version: parsed.version | 0,\n sectionCount: parsed.secCount | 0,\n source: fileInfo.FromFileName ?? \"\",\n counts: {\n meshes: count(fileInfo.Meshes),\n models: count(fileInfo.Models),\n animations: count(fileInfo.Animations),\n materials: count(fileInfo.Materials),\n textures: count(fileInfo.Textures)\n }\n };\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","normalizeEmit","undefined","Error","hasOwn","value","key","prototype","hasOwnProperty","call","classMap","values","cloneValues","assertKnownOptions","options","keys","has","TypeError","validateBoolean","name","validateRule","validateClassKey","includes","validateClass","type","Class","mergeClasses","next","entries","optionValue","normalizeValues","base","hasClasses","some","isRawGr2Result","version","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","readRawInput","readGr2Raw","meshName","mesh","meshIndex","vertexChannel","channel","vertex","hasVertexChannel","length","requireVertexChannel","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","reader","rule","context","fullContext","result","unpackMeshTangents","json","raw","meshes","tangents","unpack","rebuildMeshNormals","positions","normal","generateNormals","rebuildMeshTangents","normals","uvs","tangent","generateTangents","rebuildMeshBiNormals","tangentValues","binormal","generateBiNormals","rebuildMissingMeshData","processMeshData","buildJson","emitJson","fileInfo","decompressAnimationCurves","readWithValues","parsed","hydrateCmf","buildCmfFromShared","source","toJsonValue","seen","WeakSet","item","isArray","map","toJSON","add","delete","out","inspectRawGr2Result","count","filter","Boolean","format","sectionCount","secCount","FromFileName","counts","Meshes","models","Models","animations","Animations","materials","Materials","textures","Textures"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gr2/core/helpers.js"],"sourcesContent":["import { readGr2Raw } from \"./reader.js\";\nimport { emitJson, CLASS_KEYS as GR2_CLASS_KEYS } from \"./json.js\";\nimport { tangents } from \"./tangents.js\";\nimport { decompressAnimationCurves } from \"./curves.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_GR2_JSON = \"gr2Json\";\nexport const OUTPUT_CMF = \"cmf\";\nexport const OUTPUT_RAW = \"raw\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n decompressCurves: false,\n unpackTangents: false,\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"decompressCurves\",\n \"unpackTangents\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;\n if (emit === OUTPUT_GR2) return OUTPUT_GR2;\n if (emit === OUTPUT_CMF) return OUTPUT_CMF;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new Error(`CjsFormatGr2 unknown emit value \"${emit}\"`);\n}\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n decompressCurves: values.decompressCurves,\n unpackTangents: values.unpackTangents,\n rebuildMissingNormals: values.rebuildMissingNormals,\n rebuildMissingTangents: values.rebuildMissingTangents,\n rebuildMissingBiNormals: values.rebuildMissingBiNormals,\n classes: { ...classMap(values) }\n };\n}\n\nfunction assertKnownOptions(options)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`CjsFormatGr2 unknown option \"${key}\"`);\n }\n }\n}\n\nfunction validateBoolean(name, value)\n{\n if (typeof value !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${name} option must be true or false`);\n }\n return value;\n}\n\nfunction validateRule(name, value)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`CjsFormatGr2 ${name} option must be true, false, or a function`);\n}\n\n/** Validates a requested runtime class key for the GR2 format reader. */\nexport function validateClassKey(key)\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`CjsFormatGr2 unknown class type \"${key}\"`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the GR2 format reader. */\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CjsFormatGr2 class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 classes option must be an object\");\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(type, Class);\n next[type] = Class;\n }\n values.classes = next;\n}\n\nfunction optionValue(options, keys)\n{\n for (const key of keys)\n {\n if (hasOwn(options, key)) return options[key];\n }\n return undefined;\n}\n\n/**\n * Normalizes reader options against their supported defaults for the GR2 format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {})\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 options must be an object\");\n }\n\n assertKnownOptions(options);\n\n const values = cloneValues(base);\n\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit);\n if (hasOwn(options, \"decompressCurves\"))\n {\n values.decompressCurves = validateBoolean(\"decompressCurves\", options.decompressCurves);\n }\n\n const unpackTangents = optionValue(options, [ \"unpackTangents\" ]);\n if (unpackTangents !== undefined)\n {\n values.unpackTangents = validateRule(\"unpackTangents\", unpackTangents);\n }\n\n const rebuildMissingNormals = optionValue(options, [ \"rebuildMissingNormals\" ]);\n if (rebuildMissingNormals !== undefined)\n {\n values.rebuildMissingNormals = validateRule(\"rebuildMissingNormals\", rebuildMissingNormals);\n }\n\n const rebuildMissingTangents = optionValue(options, [ \"rebuildMissingTangents\" ]);\n if (rebuildMissingTangents !== undefined)\n {\n values.rebuildMissingTangents = validateRule(\"rebuildMissingTangents\", rebuildMissingTangents);\n }\n\n const rebuildMissingBiNormals = optionValue(options, [ \"rebuildMissingBiNormals\" ]);\n if (rebuildMissingBiNormals !== undefined)\n {\n values.rebuildMissingBiNormals = validateRule(\"rebuildMissingBiNormals\", rebuildMissingBiNormals);\n }\n\n if (hasOwn(options, \"classes\"))\n {\n mergeClasses(values, options.classes);\n }\n\n if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes))\n {\n throw new TypeError(`CjsFormatGr2 emit \"${values.emit}\" requires explicit classes`);\n }\n\n return values;\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction isRawGr2Result(value)\n{\n return !!value && typeof value === \"object\" && \"fileInfo\" in value &&\n typeof value.version === \"number\";\n}\n\n/**\n * Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,\n * `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw\n * ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which\n * is how ccpwgl's resource loader supplies bytes) must be wrapped in a\n * view before it reaches readGr2Raw, not passed straight through.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.\n * @returns {Uint8Array} A Uint8Array view over the same bytes.\n */\nfunction toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsFormatGr2: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\n/** Reads and validates raw input bytes for the GR2 format reader. */\nexport function readRawInput(input)\n{\n return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));\n}\n\nfunction meshName(mesh, meshIndex)\n{\n return mesh && mesh.name ? `\"${mesh.name}\"` : `#${meshIndex}`;\n}\n\nfunction vertexChannel(mesh, channel)\n{\n return mesh && mesh.vertex && mesh.vertex[channel];\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = vertexChannel(mesh, channel);\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = vertexChannel(mesh, channel);\n if (!value || value.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n\n if (faces.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);\n }\n\n return faces;\n}\n\nfunction shouldApplyMeshRule(reader, rule, context)\n{\n const fullContext = { reader, ...context };\n\n if (typeof rule === \"function\")\n {\n const result = rule(fullContext);\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${context.feature} rule must return true or false`);\n }\n return result;\n }\n\n return rule;\n}\n\nfunction unpackMeshTangents(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (shouldApplyMeshRule(reader, values.unpackTangents, {\n options: values, raw, json, mesh, meshIndex,\n feature: \"unpackTangents\",\n channel: \"tangent\"\n }))\n {\n tangents.unpack(mesh);\n }\n }\n}\n\nfunction rebuildMeshNormals(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\");\n\n mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));\n}\n\nfunction rebuildMeshTangents(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n uvs = requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\");\n\n mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));\n}\n\nfunction rebuildMeshBiNormals(mesh, meshIndex)\n{\n const\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n tangentValues = requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\");\n\n mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);\n}\n\nfunction rebuildMissingMeshData(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n rebuildMeshNormals(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingTangents,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n rebuildMeshTangents(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingBiNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n rebuildMeshBiNormals(mesh, meshIndex);\n }\n }\n}\n\nfunction processMeshData(reader, json, raw, values)\n{\n unpackMeshTangents(reader, json, raw, values);\n rebuildMissingMeshData(reader, json, raw, values);\n}\n\nfunction buildJson(reader, raw, values)\n{\n const json = emitJson(raw.fileInfo, raw.version, {\n classes: values.emit === OUTPUT_GR2 || ((values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes))\n ? values.classes\n : {}\n });\n\n if (values.decompressCurves)\n {\n decompressAnimationCurves(json);\n }\n\n processMeshData(reader, json, raw, values);\n\n return json;\n}\n\n/** Reads input using normalized format options for the GR2 format reader. */\nexport function readWithValues(reader, input, values)\n{\n const parsed = readRawInput(input);\n if (values.emit === OUTPUT_RAW) return parsed;\n const json = buildJson(reader, parsed, values);\n return values.emit === OUTPUT_CMF\n ? hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source })\n : json;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GR2 format reader. */\nexport function toJsonValue(value, seen = new WeakSet())\n{\n if (value === null || typeof value !== \"object\") return value;\n if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));\n if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));\n\n if (seen.has(value))\n {\n throw new TypeError(\"CjsFormatGr2.toJSON cannot convert circular data\");\n }\n\n if (typeof value.toJSON === \"function\")\n {\n seen.add(value);\n const json = toJsonValue(value.toJSON(), seen);\n seen.delete(value);\n return json;\n }\n\n seen.add(value);\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key], seen);\n }\n seen.delete(value);\n return out;\n}\n\n/**\n * Inspects raw GR2 result without materializing the full GR2 format reader\n * payload.\n */\nexport function inspectRawGr2Result(parsed)\n{\n const\n fileInfo = parsed.fileInfo || {},\n count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;\n\n return {\n reader: \"CjsFormatGr2\",\n format: \"gr2\",\n version: parsed.version | 0,\n sectionCount: parsed.secCount | 0,\n source: fileInfo.FromFileName ?? \"\",\n counts: {\n meshes: count(fileInfo.Meshes),\n models: count(fileInfo.Models),\n animations: count(fileInfo.Animations),\n materials: count(fileInfo.Materials),\n textures: count(fileInfo.Textures)\n }\n };\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","normalizeEmit","undefined","Error","hasOwn","value","key","prototype","hasOwnProperty","call","classMap","values","cloneValues","assertKnownOptions","options","keys","has","TypeError","validateBoolean","name","validateRule","validateClassKey","includes","validateClass","type","Class","mergeClasses","next","entries","optionValue","normalizeValues","base","hasClasses","some","isRawGr2Result","version","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","readRawInput","readGr2Raw","meshName","mesh","meshIndex","vertexChannel","channel","vertex","hasVertexChannel","length","requireVertexChannel","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","reader","rule","context","fullContext","result","unpackMeshTangents","json","raw","meshes","tangents","unpack","rebuildMeshNormals","positions","normal","generateNormals","rebuildMeshTangents","normals","uvs","tangent","generateTangents","rebuildMeshBiNormals","tangentValues","binormal","generateBiNormals","rebuildMissingMeshData","processMeshData","buildJson","emitJson","fileInfo","decompressAnimationCurves","readWithValues","parsed","hydrateCmf","buildCmfFromShared","source","toJsonValue","seen","WeakSet","item","isArray","map","toJSON","add","delete","out","inspectRawGr2Result","count","filter","Boolean","format","sectionCount","secCount","FromFileName","counts","Meshes","models","Models","animations","Animations","materials","Materials","textures","Textures"],"mappings":"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"}
@@ -44,6 +44,11 @@ const CHANNELS = Object.freeze([{
44
44
  elementCount: 4,
45
45
  usageIndex: 0
46
46
  }]);
47
+
48
+ /**
49
+ * Builds a CMF document from normalized shared geometry for the GR2
50
+ * shared-geometry adapter.
51
+ */
47
52
  function buildCmfFromShared(root) {
48
53
  return {
49
54
  version: 1,
@@ -294,6 +299,11 @@ function maxDisplacement(deltaPositions) {
294
299
  }
295
300
  return max;
296
301
  }
302
+
303
+ /**
304
+ * Hydrates a CMF document through the configured runtime-class resolver for the
305
+ * GR2 shared-geometry adapter.
306
+ */
297
307
  function hydrateCmf(root, classes, hydrationOptions = {}) {
298
308
  const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
299
309
  return hydrate("Root", {
@@ -1 +1 @@
1
- {"version":3,"file":"targets.js","sources":["../../../../../src/formats/gr2/core/targets.js"],"sourcesContent":["export const CMF_CLASS_KEYS = Object.freeze([\n \"Root\",\n \"Section\",\n \"Metadata\",\n \"MetadataEntry\",\n \"Mesh\",\n \"IndexGroup\",\n \"VertexElement\",\n \"MeshLod\",\n \"MeshArea\",\n \"LodMeshArea\",\n \"BoneBinding\",\n \"MorphTargets\",\n \"MorphTarget\",\n \"LodMorphTarget\",\n \"AudioOcclusionMesh\",\n \"Skeleton\",\n \"BoneMask\",\n \"BoneWeight\",\n \"Animation\",\n \"AnimationChannel\",\n \"AnimationCurve\"\n]);\n\nconst CHANNELS = Object.freeze([\n { name: \"position\", usage: \"Position\", elementCount: 3 },\n { name: \"normal\", usage: \"Normal\", elementCount: 3 },\n { name: \"tangent\", usage: \"Tangent\", elementCount: 4, flexible: true },\n { name: \"binormal\", usage: \"Binormal\", elementCount: 4, flexible: true },\n { name: \"texcoord0\", usage: \"TexCoord\", elementCount: 2, usageIndex: 0 },\n { name: \"texcoord1\", usage: \"TexCoord\", elementCount: 2, usageIndex: 1 },\n { name: \"color0\", usage: \"Color\", elementCount: 4, usageIndex: 0 },\n { name: \"blendIndice\", usage: \"BoneIndices\", elementCount: 4, usageIndex: 0, type: \"UInt16\" },\n { name: \"blendWeight\", usage: \"BoneWeights\", elementCount: 4, usageIndex: 0 }\n]);\n\nexport function buildCmfFromShared(root)\n{\n return {\n version: 1,\n metadata: null,\n meshes: (root.meshes ?? []).map((mesh) => buildMesh(mesh)),\n skeletons: [],\n animations: []\n };\n}\n\nfunction buildMesh(mesh)\n{\n const\n vertex = mesh.vertex ?? {},\n indices = mesh.indices ?? [],\n boneBindings = (mesh.boneBindings ?? []).map((binding) => buildBoneBinding(binding)),\n affectedByBones = boneBindings.length > 0,\n morphTargets = buildMorphTargets(mesh),\n affectedByMorphTargets = morphTargets.targets.length > 0,\n vertexCount = vertexCountOf(vertex),\n stride = estimateVertexStride(vertex, vertexCount);\n\n return {\n name: mesh.name ?? \"\",\n decl: buildDecl(vertex),\n lods: [ {\n vb: { index: 1, offset: 0, size: vertexCount * stride, stride },\n ib: { index: 2, offset: 0, size: totalIndexCount(indices) * bytesPerIndex(indices), stride: bytesPerIndex(indices) },\n areas: indices.map((group, index) => ({\n firstElement: firstTriangle(indices, index),\n elementCount: Math.floor((group.faces ?? []).length / 3)\n })),\n morphTargets: morphTargets.lods,\n threshold: 0xffffffff,\n vertex,\n indices\n } ],\n areas: indices.map((group) => ({\n name: group.name ?? \"\",\n bounds: bounds(mesh),\n bones: [],\n affectedByBones,\n affectedByMorphTargets\n })),\n boneBindings,\n morphTargets: {\n decl: morphTargets.decl,\n targets: morphTargets.targets\n },\n uvDensities: [],\n bounds: bounds(mesh),\n audioOcclusionMesh: {\n vertices: [],\n indices: [],\n bounds: { min: [ 0, 0, 0 ], max: [ 0, 0, 0 ] }\n },\n topology: \"TriangleList\",\n skeleton: null,\n vertex,\n indices\n };\n}\n\nfunction buildMorphTargets(mesh)\n{\n const targets = mesh.morphTargets ?? [];\n if (!targets.length)\n {\n return { decl: [], targets: [], lods: [] };\n }\n\n const\n baseVertex = mesh.vertex ?? {},\n vertexCount = vertexCountOf(baseVertex),\n specs = morphChannelSpecs(targets, baseVertex, vertexCount),\n decl = buildDeclFromSpecs(specs),\n stride = estimateStrideFromDecl(decl),\n vertices = targets.map((target) => canonicalMorphVertex(baseVertex, target, specs, vertexCount));\n\n return {\n decl,\n targets: targets.map((target, index) => ({\n name: target.name ?? \"\",\n maxDisplacement: target.maxDisplacement ?? maxDisplacement(vertices[index].position ?? [])\n })),\n lods: vertices.map((vertex) => ({\n vb: { index: 0, offset: 0, size: vertexCount * stride, stride },\n vertex\n }))\n };\n}\n\nfunction morphChannelSpecs(targets, baseVertex, vertexCount)\n{\n return CHANNELS.flatMap((spec) =>\n {\n let elementCount = 0;\n for (const target of targets)\n {\n const\n vertex = target.vertex ?? {},\n values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n const count = targetSourceCount(target, vertexCount);\n elementCount = Math.max(elementCount, channelWidth(spec, vertex, count));\n }\n if (!elementCount) return [];\n if ((baseVertex[spec.name] ?? []).length)\n {\n elementCount = Math.max(elementCount, channelWidth(spec, baseVertex, vertexCount));\n }\n return [ { ...spec, elementCount } ];\n });\n}\n\nfunction canonicalMorphVertex(baseVertex, target, specs, vertexCount)\n{\n const\n sourceVertex = target.vertex ?? {},\n vertexIndices = Array.isArray(target.vertexIndices) ? target.vertexIndices : null,\n sourceCount = targetSourceCount(target, vertexCount),\n result = {};\n\n for (const spec of specs)\n {\n const\n source = sourceVertex[spec.name] ?? [],\n output = new Array(vertexCount * spec.elementCount).fill(0),\n sourceWidth = channelWidth(spec, sourceVertex, sourceCount),\n base = baseVertex[spec.name] ?? [],\n baseWidth = channelWidth(spec, baseVertex, vertexCount),\n rowCount = Math.min(sourceCount, sourceWidth ? Math.floor(source.length / sourceWidth) : 0);\n\n for (let row = 0; row < rowCount; row++)\n {\n const vertexIndex = vertexIndices ? vertexIndices[row] : row;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n\n const count = Math.min(sourceWidth, spec.elementCount);\n for (let component = 0; component < count; component++)\n {\n const\n sourceValue = source[row * sourceWidth + component],\n baseValue = base[vertexIndex * baseWidth + component] ?? 0;\n output[vertexIndex * spec.elementCount + component] = target.dataIsDeltas === false\n ? sourceValue - baseValue\n : sourceValue;\n }\n }\n result[spec.name] = output;\n }\n\n return result;\n}\n\nfunction targetSourceCount(target, fallbackCount)\n{\n if (Array.isArray(target.vertexIndices)) return target.vertexIndices.length;\n return vertexCountOf(target.vertex ?? {}, fallbackCount);\n}\n\nfunction buildBoneBinding(binding)\n{\n return {\n name: binding.name ?? \"\",\n bounds: {\n min: binding.minBounds ?? binding.bounds?.min ?? [ 0, 0, 0 ],\n max: binding.maxBounds ?? binding.bounds?.max ?? [ 0, 0, 0 ]\n }\n };\n}\n\nfunction buildDecl(vertex, vertexCount = vertexCountOf(vertex))\n{\n const specs = CHANNELS\n .filter((spec) => Array.isArray(vertex[spec.name]) && vertex[spec.name].length > 0)\n .map((spec) => ({ ...spec, elementCount: channelWidth(spec, vertex, vertexCount) }));\n return buildDeclFromSpecs(specs);\n}\n\nfunction buildDeclFromSpecs(specs)\n{\n const decl = [];\n let offset = 0;\n for (const spec of specs)\n {\n const { usage, usageIndex = 0, type = \"Float32\", elementCount } = spec;\n decl.push({ usage, usageIndex, type, elementCount, offset });\n offset += elementCount * elementTypeSize(type);\n }\n return decl;\n}\n\nfunction channelWidth(spec, vertex, vertexCount)\n{\n const values = vertex[spec.name] ?? [];\n if (spec.flexible && vertexCount > 0 && values.length % vertexCount === 0)\n {\n const width = values.length / vertexCount;\n if (width === 3 || width === 4) return width;\n }\n return spec.elementCount;\n}\n\nfunction vertexCountOf(vertex, expectedCount = 0)\n{\n if (expectedCount > 0)\n {\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (values.length && values.length % expectedCount === 0) return expectedCount;\n }\n }\n\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n if (spec.flexible)\n {\n if (values.length % spec.elementCount === 0) return values.length / spec.elementCount;\n if (values.length % 3 === 0) return values.length / 3;\n }\n const count = values.length / spec.elementCount;\n if (Number.isInteger(count)) return count;\n }\n return 0;\n}\n\nfunction estimateVertexStride(vertex, vertexCount)\n{\n return estimateStrideFromDecl(buildDecl(vertex, vertexCount));\n}\n\nfunction estimateStrideFromDecl(decl)\n{\n return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);\n}\n\nfunction elementTypeSize(type)\n{\n return type === \"Float32\" ? 4 : type.includes(\"16\") ? 2 : 1;\n}\n\nfunction totalIndexCount(indices)\n{\n return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);\n}\n\nfunction bytesPerIndex(indices)\n{\n return indices.some((group) => group.bytesPerIndex === 4 || (group.faces ?? []).some((index) => index > 0xffff)) ? 4 : 2;\n}\n\nfunction firstTriangle(indices, areaIndex)\n{\n let first = 0;\n for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);\n return first;\n}\n\nfunction bounds(mesh)\n{\n return {\n min: mesh.minBounds ?? [ 0, 0, 0 ],\n max: mesh.maxBounds ?? [ 0, 0, 0 ]\n };\n}\n\nfunction maxDisplacement(deltaPositions)\n{\n let max = 0;\n for (let i = 0; i + 2 < deltaPositions.length; i += 3)\n {\n max = Math.max(max, Math.hypot(\n deltaPositions[i],\n deltaPositions[i + 1],\n deltaPositions[i + 2]\n ));\n }\n return max;\n}\n\nexport function hydrateCmf(root, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n ...root,\n metadata: root.metadata ? hydrate(\"Metadata\", root.metadata, hydrationClasses) : null,\n meshes: root.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: root.skeletons.map((skeleton) => hydrate(\"Skeleton\", skeleton, hydrationClasses)),\n animations: root.animations.map((animation) => hydrate(\"Animation\", animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\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) => 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 areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrate(\"MorphTargets\", {\n decl: mesh.morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: mesh.morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return Class ? populate(new Class(), fields, options) : fields;\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsFormatGr2 CMF 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":["CMF_CLASS_KEYS","Object","freeze","CHANNELS","name","usage","elementCount","flexible","usageIndex","type","buildCmfFromShared","root","version","metadata","meshes","map","mesh","buildMesh","skeletons","animations","vertex","indices","boneBindings","binding","buildBoneBinding","affectedByBones","length","morphTargets","buildMorphTargets","affectedByMorphTargets","targets","vertexCount","vertexCountOf","stride","estimateVertexStride","decl","buildDecl","lods","vb","index","offset","size","ib","totalIndexCount","bytesPerIndex","areas","group","firstElement","firstTriangle","Math","floor","faces","threshold","bounds","bones","uvDensities","audioOcclusionMesh","vertices","min","max","topology","skeleton","baseVertex","specs","morphChannelSpecs","buildDeclFromSpecs","estimateStrideFromDecl","target","canonicalMorphVertex","maxDisplacement","position","flatMap","spec","values","count","targetSourceCount","channelWidth","sourceVertex","vertexIndices","Array","isArray","sourceCount","result","source","output","fill","sourceWidth","base","baseWidth","rowCount","row","vertexIndex","Number","isInteger","component","sourceValue","baseValue","dataIsDeltas","fallbackCount","minBounds","maxBounds","filter","push","elementTypeSize","width","expectedCount","reduce","element","includes","total","some","areaIndex","first","i","deltaPositions","hypot","hydrateCmf","classes","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","hydrateMesh","animation","lod","area","fields","Class","options","keys","__hydrationOptions","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","create","defineProperty","value","enumerable"],"mappings":"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"}
1
+ {"version":3,"file":"targets.js","sources":["../../../../../src/formats/gr2/core/targets.js"],"sourcesContent":["export const CMF_CLASS_KEYS = Object.freeze([\n \"Root\",\n \"Section\",\n \"Metadata\",\n \"MetadataEntry\",\n \"Mesh\",\n \"IndexGroup\",\n \"VertexElement\",\n \"MeshLod\",\n \"MeshArea\",\n \"LodMeshArea\",\n \"BoneBinding\",\n \"MorphTargets\",\n \"MorphTarget\",\n \"LodMorphTarget\",\n \"AudioOcclusionMesh\",\n \"Skeleton\",\n \"BoneMask\",\n \"BoneWeight\",\n \"Animation\",\n \"AnimationChannel\",\n \"AnimationCurve\"\n]);\n\nconst CHANNELS = Object.freeze([\n { name: \"position\", usage: \"Position\", elementCount: 3 },\n { name: \"normal\", usage: \"Normal\", elementCount: 3 },\n { name: \"tangent\", usage: \"Tangent\", elementCount: 4, flexible: true },\n { name: \"binormal\", usage: \"Binormal\", elementCount: 4, flexible: true },\n { name: \"texcoord0\", usage: \"TexCoord\", elementCount: 2, usageIndex: 0 },\n { name: \"texcoord1\", usage: \"TexCoord\", elementCount: 2, usageIndex: 1 },\n { name: \"color0\", usage: \"Color\", elementCount: 4, usageIndex: 0 },\n { name: \"blendIndice\", usage: \"BoneIndices\", elementCount: 4, usageIndex: 0, type: \"UInt16\" },\n { name: \"blendWeight\", usage: \"BoneWeights\", elementCount: 4, usageIndex: 0 }\n]);\n\n/**\n * Builds a CMF document from normalized shared geometry for the GR2\n * shared-geometry adapter.\n */\nexport function buildCmfFromShared(root)\n{\n return {\n version: 1,\n metadata: null,\n meshes: (root.meshes ?? []).map((mesh) => buildMesh(mesh)),\n skeletons: [],\n animations: []\n };\n}\n\nfunction buildMesh(mesh)\n{\n const\n vertex = mesh.vertex ?? {},\n indices = mesh.indices ?? [],\n boneBindings = (mesh.boneBindings ?? []).map((binding) => buildBoneBinding(binding)),\n affectedByBones = boneBindings.length > 0,\n morphTargets = buildMorphTargets(mesh),\n affectedByMorphTargets = morphTargets.targets.length > 0,\n vertexCount = vertexCountOf(vertex),\n stride = estimateVertexStride(vertex, vertexCount);\n\n return {\n name: mesh.name ?? \"\",\n decl: buildDecl(vertex),\n lods: [ {\n vb: { index: 1, offset: 0, size: vertexCount * stride, stride },\n ib: { index: 2, offset: 0, size: totalIndexCount(indices) * bytesPerIndex(indices), stride: bytesPerIndex(indices) },\n areas: indices.map((group, index) => ({\n firstElement: firstTriangle(indices, index),\n elementCount: Math.floor((group.faces ?? []).length / 3)\n })),\n morphTargets: morphTargets.lods,\n threshold: 0xffffffff,\n vertex,\n indices\n } ],\n areas: indices.map((group) => ({\n name: group.name ?? \"\",\n bounds: bounds(mesh),\n bones: [],\n affectedByBones,\n affectedByMorphTargets\n })),\n boneBindings,\n morphTargets: {\n decl: morphTargets.decl,\n targets: morphTargets.targets\n },\n uvDensities: [],\n bounds: bounds(mesh),\n audioOcclusionMesh: {\n vertices: [],\n indices: [],\n bounds: { min: [ 0, 0, 0 ], max: [ 0, 0, 0 ] }\n },\n topology: \"TriangleList\",\n skeleton: null,\n vertex,\n indices\n };\n}\n\nfunction buildMorphTargets(mesh)\n{\n const targets = mesh.morphTargets ?? [];\n if (!targets.length)\n {\n return { decl: [], targets: [], lods: [] };\n }\n\n const\n baseVertex = mesh.vertex ?? {},\n vertexCount = vertexCountOf(baseVertex),\n specs = morphChannelSpecs(targets, baseVertex, vertexCount),\n decl = buildDeclFromSpecs(specs),\n stride = estimateStrideFromDecl(decl),\n vertices = targets.map((target) => canonicalMorphVertex(baseVertex, target, specs, vertexCount));\n\n return {\n decl,\n targets: targets.map((target, index) => ({\n name: target.name ?? \"\",\n maxDisplacement: target.maxDisplacement ?? maxDisplacement(vertices[index].position ?? [])\n })),\n lods: vertices.map((vertex) => ({\n vb: { index: 0, offset: 0, size: vertexCount * stride, stride },\n vertex\n }))\n };\n}\n\nfunction morphChannelSpecs(targets, baseVertex, vertexCount)\n{\n return CHANNELS.flatMap((spec) =>\n {\n let elementCount = 0;\n for (const target of targets)\n {\n const\n vertex = target.vertex ?? {},\n values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n const count = targetSourceCount(target, vertexCount);\n elementCount = Math.max(elementCount, channelWidth(spec, vertex, count));\n }\n if (!elementCount) return [];\n if ((baseVertex[spec.name] ?? []).length)\n {\n elementCount = Math.max(elementCount, channelWidth(spec, baseVertex, vertexCount));\n }\n return [ { ...spec, elementCount } ];\n });\n}\n\nfunction canonicalMorphVertex(baseVertex, target, specs, vertexCount)\n{\n const\n sourceVertex = target.vertex ?? {},\n vertexIndices = Array.isArray(target.vertexIndices) ? target.vertexIndices : null,\n sourceCount = targetSourceCount(target, vertexCount),\n result = {};\n\n for (const spec of specs)\n {\n const\n source = sourceVertex[spec.name] ?? [],\n output = new Array(vertexCount * spec.elementCount).fill(0),\n sourceWidth = channelWidth(spec, sourceVertex, sourceCount),\n base = baseVertex[spec.name] ?? [],\n baseWidth = channelWidth(spec, baseVertex, vertexCount),\n rowCount = Math.min(sourceCount, sourceWidth ? Math.floor(source.length / sourceWidth) : 0);\n\n for (let row = 0; row < rowCount; row++)\n {\n const vertexIndex = vertexIndices ? vertexIndices[row] : row;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n\n const count = Math.min(sourceWidth, spec.elementCount);\n for (let component = 0; component < count; component++)\n {\n const\n sourceValue = source[row * sourceWidth + component],\n baseValue = base[vertexIndex * baseWidth + component] ?? 0;\n output[vertexIndex * spec.elementCount + component] = target.dataIsDeltas === false\n ? sourceValue - baseValue\n : sourceValue;\n }\n }\n result[spec.name] = output;\n }\n\n return result;\n}\n\nfunction targetSourceCount(target, fallbackCount)\n{\n if (Array.isArray(target.vertexIndices)) return target.vertexIndices.length;\n return vertexCountOf(target.vertex ?? {}, fallbackCount);\n}\n\nfunction buildBoneBinding(binding)\n{\n return {\n name: binding.name ?? \"\",\n bounds: {\n min: binding.minBounds ?? binding.bounds?.min ?? [ 0, 0, 0 ],\n max: binding.maxBounds ?? binding.bounds?.max ?? [ 0, 0, 0 ]\n }\n };\n}\n\nfunction buildDecl(vertex, vertexCount = vertexCountOf(vertex))\n{\n const specs = CHANNELS\n .filter((spec) => Array.isArray(vertex[spec.name]) && vertex[spec.name].length > 0)\n .map((spec) => ({ ...spec, elementCount: channelWidth(spec, vertex, vertexCount) }));\n return buildDeclFromSpecs(specs);\n}\n\nfunction buildDeclFromSpecs(specs)\n{\n const decl = [];\n let offset = 0;\n for (const spec of specs)\n {\n const { usage, usageIndex = 0, type = \"Float32\", elementCount } = spec;\n decl.push({ usage, usageIndex, type, elementCount, offset });\n offset += elementCount * elementTypeSize(type);\n }\n return decl;\n}\n\nfunction channelWidth(spec, vertex, vertexCount)\n{\n const values = vertex[spec.name] ?? [];\n if (spec.flexible && vertexCount > 0 && values.length % vertexCount === 0)\n {\n const width = values.length / vertexCount;\n if (width === 3 || width === 4) return width;\n }\n return spec.elementCount;\n}\n\nfunction vertexCountOf(vertex, expectedCount = 0)\n{\n if (expectedCount > 0)\n {\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (values.length && values.length % expectedCount === 0) return expectedCount;\n }\n }\n\n for (const spec of CHANNELS)\n {\n const values = vertex[spec.name] ?? [];\n if (!values.length) continue;\n if (spec.flexible)\n {\n if (values.length % spec.elementCount === 0) return values.length / spec.elementCount;\n if (values.length % 3 === 0) return values.length / 3;\n }\n const count = values.length / spec.elementCount;\n if (Number.isInteger(count)) return count;\n }\n return 0;\n}\n\nfunction estimateVertexStride(vertex, vertexCount)\n{\n return estimateStrideFromDecl(buildDecl(vertex, vertexCount));\n}\n\nfunction estimateStrideFromDecl(decl)\n{\n return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);\n}\n\nfunction elementTypeSize(type)\n{\n return type === \"Float32\" ? 4 : type.includes(\"16\") ? 2 : 1;\n}\n\nfunction totalIndexCount(indices)\n{\n return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);\n}\n\nfunction bytesPerIndex(indices)\n{\n return indices.some((group) => group.bytesPerIndex === 4 || (group.faces ?? []).some((index) => index > 0xffff)) ? 4 : 2;\n}\n\nfunction firstTriangle(indices, areaIndex)\n{\n let first = 0;\n for (let i = 0; i < areaIndex; i++) first += Math.floor((indices[i].faces ?? []).length / 3);\n return first;\n}\n\nfunction bounds(mesh)\n{\n return {\n min: mesh.minBounds ?? [ 0, 0, 0 ],\n max: mesh.maxBounds ?? [ 0, 0, 0 ]\n };\n}\n\nfunction maxDisplacement(deltaPositions)\n{\n let max = 0;\n for (let i = 0; i + 2 < deltaPositions.length; i += 3)\n {\n max = Math.max(max, Math.hypot(\n deltaPositions[i],\n deltaPositions[i + 1],\n deltaPositions[i + 2]\n ));\n }\n return max;\n}\n\n/**\n * Hydrates a CMF document through the configured runtime-class resolver for the\n * GR2 shared-geometry adapter.\n */\nexport function hydrateCmf(root, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n ...root,\n metadata: root.metadata ? hydrate(\"Metadata\", root.metadata, hydrationClasses) : null,\n meshes: root.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: root.skeletons.map((skeleton) => hydrate(\"Skeleton\", skeleton, hydrationClasses)),\n animations: root.animations.map((animation) => hydrate(\"Animation\", animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\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) => 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 areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrate(\"MorphTargets\", {\n decl: mesh.morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: mesh.morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return Class ? populate(new Class(), fields, options) : fields;\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsFormatGr2 CMF 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":["CMF_CLASS_KEYS","Object","freeze","CHANNELS","name","usage","elementCount","flexible","usageIndex","type","buildCmfFromShared","root","version","metadata","meshes","map","mesh","buildMesh","skeletons","animations","vertex","indices","boneBindings","binding","buildBoneBinding","affectedByBones","length","morphTargets","buildMorphTargets","affectedByMorphTargets","targets","vertexCount","vertexCountOf","stride","estimateVertexStride","decl","buildDecl","lods","vb","index","offset","size","ib","totalIndexCount","bytesPerIndex","areas","group","firstElement","firstTriangle","Math","floor","faces","threshold","bounds","bones","uvDensities","audioOcclusionMesh","vertices","min","max","topology","skeleton","baseVertex","specs","morphChannelSpecs","buildDeclFromSpecs","estimateStrideFromDecl","target","canonicalMorphVertex","maxDisplacement","position","flatMap","spec","values","count","targetSourceCount","channelWidth","sourceVertex","vertexIndices","Array","isArray","sourceCount","result","source","output","fill","sourceWidth","base","baseWidth","rowCount","row","vertexIndex","Number","isInteger","component","sourceValue","baseValue","dataIsDeltas","fallbackCount","minBounds","maxBounds","filter","push","elementTypeSize","width","expectedCount","reduce","element","includes","total","some","areaIndex","first","i","deltaPositions","hypot","hydrateCmf","classes","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","hydrateMesh","animation","lod","area","fields","Class","options","keys","__hydrationOptions","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","create","defineProperty","value","enumerable"],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ import { HlslEffectRes } from './core/tr2/resources/HlslEffectRes.js';
2
+ import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, toJsonValue, toBytes, OUTPUT_JSON, OUTPUT_METADATA, OUTPUT_RAW } from './core/helpers.js';
3
+ import { CLASS_KEYS } from './core/json.js';
4
+
5
+ /**
6
+ * Exposed CarbonEngineJS-facing Tr2 effect container format class.
7
+ *
8
+ * Keep this file small and reviewable: the Tr2 effect graph parser lives
9
+ * under src/core/tr2 (internal parsing machinery, not part of this
10
+ * package's public surface); input/option normalization, the shared read
11
+ * path, and the JSON emitters live under src/core.
12
+ */
13
+
14
+ const FORMAT_NAME = "CjsHlslFormat";
15
+
16
+ /**
17
+ * CarbonEngineJS-facing reader for CCP's Tr2 compiled effect container
18
+ * format (`.sm_hi` / `.sm_lo` / `.sm_depth` bodies).
19
+ *
20
+ * The Cjs prefix marks this as a JavaScript format/construction boundary.
21
+ * This format profile has no dependency on any DXBC/shader-bytecode decoder: shader
22
+ * bodies stay as opaque bytes in the emitted graph. The public contract is
23
+ * plain JSON data (`emit: "json"`, the default) — the documented effect
24
+ * graph shape described in `docs/reference/json-graph.md`. `emit: "raw"`
25
+ * exposes the internal
26
+ * HlslEffectRes graph directly; treat it as unstable, not schema-guaranteed
27
+ * internals, useful mainly for resolving multiple permutations by hand.
28
+ *
29
+ * The `classes` option lets a caller register constructors for specific
30
+ * node kinds in the emitted JSON graph (see `CjsHlslFormat.CLASS_KEYS`);
31
+ * class registration does not depend on importing internal graph classes.
32
+ */
33
+ class CjsHlslFormat {
34
+ #emit = DEFAULT_VALUES.emit;
35
+ #source = DEFAULT_VALUES.source;
36
+ #permutation = DEFAULT_VALUES.permutation;
37
+ #classes = DEFAULT_VALUES.classes;
38
+
39
+ /**
40
+ * Create a reusable format profile.
41
+ *
42
+ * @param {object} [options] Default format values.
43
+ */
44
+ constructor(options = {}) {
45
+ this.SetValues(options);
46
+ }
47
+
48
+ /**
49
+ * Set format values for this reusable profile.
50
+ *
51
+ * @param {object} [options] Values to merge into the profile.
52
+ * @returns {CjsHlslFormat} This format profile.
53
+ */
54
+ SetValues(options = {}) {
55
+ const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);
56
+ this.#emit = values.emit;
57
+ this.#source = values.source;
58
+ this.#permutation = values.permutation;
59
+ this.#classes = values.classes;
60
+ return this;
61
+ }
62
+
63
+ /**
64
+ * Get this profile's current values, optionally with per-call overrides.
65
+ *
66
+ * @param {object} [options] Optional values to merge into a copy.
67
+ * @returns {object} A copy of the effective values.
68
+ */
69
+ GetValues(options = {}) {
70
+ return normalizeValues({
71
+ emit: this.#emit,
72
+ source: this.#source,
73
+ permutation: this.#permutation,
74
+ classes: this.#classes
75
+ }, options, FORMAT_NAME);
76
+ }
77
+
78
+ /**
79
+ * Set multiple node-class constructors for this profile.
80
+ *
81
+ * @param {object} [classes] Map of node class keys to constructors. See {@link CjsHlslFormat.CLASS_KEYS}.
82
+ * @returns {CjsHlslFormat} This format profile.
83
+ */
84
+ SetClasses(classes = {}) {
85
+ return this.SetValues({
86
+ classes
87
+ });
88
+ }
89
+
90
+ /**
91
+ * Set one node-class constructor for this profile.
92
+ *
93
+ * @param {string} type Node class key.
94
+ * @param {Function|null|undefined} Class Constructor to use, or nullish to delete.
95
+ * @returns {CjsHlslFormat} This format profile.
96
+ */
97
+ SetClass(type, Class) {
98
+ if (Class === null || Class === undefined) {
99
+ validateClassKey(type, FORMAT_NAME);
100
+ const classes = {
101
+ ...this.#classes
102
+ };
103
+ delete classes[type];
104
+ this.#classes = classes;
105
+ return this;
106
+ }
107
+ validateClass(type, Class, FORMAT_NAME);
108
+ return this.SetValues({
109
+ classes: {
110
+ [type]: Class
111
+ }
112
+ });
113
+ }
114
+
115
+ /**
116
+ * Get a configured node-class constructor.
117
+ *
118
+ * @param {string} type Node class key.
119
+ * @returns {Function|undefined} The registered constructor, if any.
120
+ */
121
+ GetClass(type) {
122
+ validateClassKey(type, FORMAT_NAME);
123
+ return this.#classes[type];
124
+ }
125
+
126
+ /**
127
+ * Whether this reader has a constructor registered for a node class key.
128
+ *
129
+ * @param {string} type Node class key.
130
+ * @returns {boolean} True when a constructor is registered.
131
+ */
132
+ HasClass(type) {
133
+ return !!this.GetClass(type);
134
+ }
135
+
136
+ /**
137
+ * Read a Tr2 effect payload with this profile's values.
138
+ *
139
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.
140
+ * @param {object} [options] Per-call value overrides.
141
+ * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.
142
+ */
143
+ Read(input, options = {}) {
144
+ return readWithValues(input, this.GetValues(options));
145
+ }
146
+
147
+ /**
148
+ * Inspect a Tr2 effect payload: header facts plus the default (or
149
+ * selected) permutation's technique names and stage counts.
150
+ *
151
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.
152
+ * @param {object} [options] Per-call value overrides.
153
+ * @returns {object} Plain summary data.
154
+ */
155
+ Inspect(input, options = {}) {
156
+ return inspectWithValues(input, this.GetValues(options));
157
+ }
158
+
159
+ /**
160
+ * Convert format output to JSON-compatible data.
161
+ *
162
+ * @param {any} value Format output to convert.
163
+ * @returns {any} Plain JSON-compatible data.
164
+ */
165
+ ToJSON(value) {
166
+ return toJsonValue(value);
167
+ }
168
+
169
+ /**
170
+ * Static payload sniff. Static methods use camelCase by convention.
171
+ *
172
+ * The Tr2 effect container has no magic number, so this attempts a
173
+ * cheap header-only load (version, string table, permutation axes and
174
+ * body offsets — no shader bodies) and reports whether it succeeded.
175
+ *
176
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.
177
+ * @returns {boolean} True when the payload's header decodes as a supported Tr2 effect.
178
+ */
179
+ static isSupported(input) {
180
+ try {
181
+ const bytes = toBytes(input);
182
+ return new HlslEffectRes().DoLoad(bytes, {
183
+ source: "isSupported"
184
+ });
185
+ } catch {
186
+ return false;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Static one-shot read.
192
+ *
193
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.
194
+ * @param {object} [options] Format values.
195
+ * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.
196
+ */
197
+ static read(input, options = {}) {
198
+ return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));
199
+ }
200
+
201
+ /**
202
+ * Static one-shot inspection.
203
+ *
204
+ * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.
205
+ * @param {object} [options] Format values.
206
+ * @returns {object} Plain summary data.
207
+ */
208
+ static inspect(input, options = {}) {
209
+ return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));
210
+ }
211
+
212
+ /**
213
+ * Static JSON-compatible conversion.
214
+ *
215
+ * @param {any} value Format output to convert.
216
+ * @returns {any} Plain JSON-compatible data.
217
+ */
218
+ static toJSON(value) {
219
+ return toJsonValue(value);
220
+ }
221
+
222
+ /**
223
+ * Node-only convenience: reads a compiled Tr2 effect file from disk.
224
+ *
225
+ * @param {string} path Path to a compiled Carbon effect file (`.sm_hi` etc.).
226
+ * @param {object} [options] Format values.
227
+ * @returns {Promise<HlslEffectRes|object>} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.
228
+ */
229
+ static async readFile(path, options = {}) {
230
+ if (typeof path !== "string" || !path) {
231
+ throw new TypeError(`${FORMAT_NAME}: readFile path must be a non-empty string`);
232
+ }
233
+ const {
234
+ readFile
235
+ } = await import('node:fs/promises');
236
+ const input = await readFile(path);
237
+ return readWithValues(input, normalizeValues(DEFAULT_VALUES, {
238
+ source: path,
239
+ ...options
240
+ }, FORMAT_NAME));
241
+ }
242
+ static OUTPUT_JSON = OUTPUT_JSON;
243
+ static OUTPUT_METADATA = OUTPUT_METADATA;
244
+ static OUTPUT_RAW = OUTPUT_RAW;
245
+ static CLASS_KEYS = CLASS_KEYS;
246
+ static type = Object.freeze(["shader"]);
247
+ static mediaTypes = Object.freeze(["shader"]);
248
+ static inputTypes = Object.freeze(["sm_hi", "sm_lo", "sm_depth"]);
249
+ static outputTypes = Object.freeze([OUTPUT_JSON, OUTPUT_METADATA]);
250
+ static debugOutputTypes = Object.freeze([OUTPUT_RAW]);
251
+ }
252
+
253
+ export { CjsHlslFormat, CjsHlslFormat as default };
254
+ //# sourceMappingURL=CjsHlslFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CjsHlslFormat.js","sources":["../../../../src/formats/hlsl/CjsHlslFormat.js"],"sourcesContent":["/**\n * Exposed CarbonEngineJS-facing Tr2 effect container format class.\n *\n * Keep this file small and reviewable: the Tr2 effect graph parser lives\n * under src/core/tr2 (internal parsing machinery, not part of this\n * package's public surface); input/option normalization, the shared read\n * path, and the JSON emitters live under src/core.\n */\n\nimport { HlslEffectRes } from \"./core/tr2/resources/HlslEffectRes.js\";\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_JSON,\n OUTPUT_METADATA,\n OUTPUT_RAW,\n inspectWithValues,\n normalizeValues,\n readWithValues,\n toBytes,\n toJsonValue,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsHlslFormat\";\n\n/**\n * CarbonEngineJS-facing reader for CCP's Tr2 compiled effect container\n * format (`.sm_hi` / `.sm_lo` / `.sm_depth` bodies).\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * This format profile has no dependency on any DXBC/shader-bytecode decoder: shader\n * bodies stay as opaque bytes in the emitted graph. The public contract is\n * plain JSON data (`emit: \"json\"`, the default) — the documented effect\n * graph shape described in `docs/reference/json-graph.md`. `emit: \"raw\"`\n * exposes the internal\n * HlslEffectRes graph directly; treat it as unstable, not schema-guaranteed\n * internals, useful mainly for resolving multiple permutations by hand.\n *\n * The `classes` option lets a caller register constructors for specific\n * node kinds in the emitted JSON graph (see `CjsHlslFormat.CLASS_KEYS`);\n * class registration does not depend on importing internal graph classes.\n */\nexport class CjsHlslFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #permutation = DEFAULT_VALUES.permutation;\n #classes = DEFAULT_VALUES.classes;\n\n /**\n * Create a reusable format profile.\n *\n * @param {object} [options] Default format values.\n */\n constructor(options = {})\n {\n this.SetValues(options);\n }\n\n /**\n * Set format values for this reusable profile.\n *\n * @param {object} [options] Values to merge into the profile.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetValues(options = {})\n {\n const values = normalizeValues(this.GetValues(), options, FORMAT_NAME);\n\n this.#emit = values.emit;\n this.#source = values.source;\n this.#permutation = values.permutation;\n this.#classes = values.classes;\n\n return this;\n }\n\n /**\n * Get this profile's current values, optionally with per-call overrides.\n *\n * @param {object} [options] Optional values to merge into a copy.\n * @returns {object} A copy of the effective values.\n */\n GetValues(options = {})\n {\n return normalizeValues({\n emit: this.#emit,\n source: this.#source,\n permutation: this.#permutation,\n classes: this.#classes\n }, options, FORMAT_NAME);\n }\n\n /**\n * Set multiple node-class constructors for this profile.\n *\n * @param {object} [classes] Map of node class keys to constructors. See {@link CjsHlslFormat.CLASS_KEYS}.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClasses(classes = {})\n {\n return this.SetValues({ classes });\n }\n\n /**\n * Set one node-class constructor for this profile.\n *\n * @param {string} type Node class key.\n * @param {Function|null|undefined} Class Constructor to use, or nullish to delete.\n * @returns {CjsHlslFormat} This format profile.\n */\n SetClass(type, Class)\n {\n if (Class === null || Class === undefined)\n {\n validateClassKey(type, FORMAT_NAME);\n const classes = { ...this.#classes };\n delete classes[type];\n this.#classes = classes;\n return this;\n }\n\n validateClass(type, Class, FORMAT_NAME);\n return this.SetValues({ classes: { [type]: Class } });\n }\n\n /**\n * Get a configured node-class constructor.\n *\n * @param {string} type Node class key.\n * @returns {Function|undefined} The registered constructor, if any.\n */\n GetClass(type)\n {\n validateClassKey(type, FORMAT_NAME);\n return this.#classes[type];\n }\n\n /**\n * Whether this reader has a constructor registered for a node class key.\n *\n * @param {string} type Node class key.\n * @returns {boolean} True when a constructor is registered.\n */\n HasClass(type)\n {\n return !!this.GetClass(type);\n }\n\n /**\n * Read a Tr2 effect payload with this profile's values.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n Read(input, options = {})\n {\n return readWithValues(input, this.GetValues(options));\n }\n\n /**\n * Inspect a Tr2 effect payload: header facts plus the default (or\n * selected) permutation's technique names and stage counts.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} Plain summary data.\n */\n Inspect(input, options = {})\n {\n return inspectWithValues(input, this.GetValues(options));\n }\n\n /**\n * Convert format output to JSON-compatible data.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n ToJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Static payload sniff. Static methods use camelCase by convention.\n *\n * The Tr2 effect container has no magic number, so this attempts a\n * cheap header-only load (version, string table, permutation axes and\n * body offsets — no shader bodies) and reports whether it succeeded.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Candidate bytes.\n * @returns {boolean} True when the payload's header decodes as a supported Tr2 effect.\n */\n static isSupported(input)\n {\n try\n {\n const bytes = toBytes(input);\n return new HlslEffectRes().DoLoad(bytes, { source: \"isSupported\" });\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Static one-shot read.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {HlslEffectRes|object} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n static read(input, options = {})\n {\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Tr2 effect container bytes.\n * @param {object} [options] Format values.\n * @returns {object} Plain summary data.\n */\n static inspect(input, options = {})\n {\n return inspectWithValues(input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME));\n }\n\n /**\n * Static JSON-compatible conversion.\n *\n * @param {any} value Format output to convert.\n * @returns {any} Plain JSON-compatible data.\n */\n static toJSON(value)\n {\n return toJsonValue(value);\n }\n\n /**\n * Node-only convenience: reads a compiled Tr2 effect file from disk.\n *\n * @param {string} path Path to a compiled Carbon effect file (`.sm_hi` etc.).\n * @param {object} [options] Format values.\n * @returns {Promise<HlslEffectRes|object>} The raw HlslEffectRes instance, compact metadata, or the documented JSON graph.\n */\n static async readFile(path, options = {})\n {\n if (typeof path !== \"string\" || !path)\n {\n throw new TypeError(`${FORMAT_NAME}: readFile path must be a non-empty string`);\n }\n\n const { readFile } = await import(\"node:fs/promises\");\n const input = await readFile(path);\n\n return readWithValues(input, normalizeValues(DEFAULT_VALUES, { source: path, ...options }, FORMAT_NAME));\n }\n\n static OUTPUT_JSON = OUTPUT_JSON;\n static OUTPUT_METADATA = OUTPUT_METADATA;\n static OUTPUT_RAW = OUTPUT_RAW;\n static CLASS_KEYS = CLASS_KEYS;\n static type = Object.freeze([ \"shader\" ]);\n static mediaTypes = Object.freeze([ \"shader\" ]);\n static inputTypes = Object.freeze([ \"sm_hi\", \"sm_lo\", \"sm_depth\" ]);\n static outputTypes = Object.freeze([ OUTPUT_JSON, OUTPUT_METADATA ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_RAW ]);\n\n}\n\nexport default CjsHlslFormat;\n"],"names":["FORMAT_NAME","CjsHlslFormat","DEFAULT_VALUES","emit","source","permutation","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","isSupported","bytes","toBytes","HlslEffectRes","DoLoad","read","inspect","toJSON","readFile","path","TypeError","OUTPUT_JSON","OUTPUT_METADATA","OUTPUT_RAW","CLASS_KEYS","Object","freeze","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Reinterprets a little-endian uint32 annotation payload as a float32.
3
+ *
4
+ * @param {number} value Unsigned 32-bit integer containing float bits.
5
+ * @returns {number} Float value represented by the same bits.
6
+ */
7
+ function cjsUint32ToFloat32(value) {
8
+ const bytes = new Uint8Array(4);
9
+ const view = new DataView(bytes.buffer);
10
+ view.setUint32(0, value >>> 0, true);
11
+ return view.getFloat32(0, true);
12
+ }
13
+
14
+ export { cjsUint32ToFloat32 };
15
+ //# sourceMappingURL=HlslBinaryUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HlslBinaryUtils.js","sources":["../../../../../src/formats/hlsl/core/HlslBinaryUtils.js"],"sourcesContent":["/**\n * Reinterprets a little-endian uint32 annotation payload as a float32.\n *\n * @param {number} value Unsigned 32-bit integer containing float bits.\n * @returns {number} Float value represented by the same bits.\n */\nexport function cjsUint32ToFloat32(value)\n{\n const bytes = new Uint8Array(4);\n const view = new DataView(bytes.buffer);\n view.setUint32(0, value >>> 0, true);\n return view.getFloat32(0, true);\n}\n"],"names":["cjsUint32ToFloat32","value","bytes","Uint8Array","view","DataView","buffer","setUint32","getFloat32"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,kBAAkBA,CAACC,KAAK,EACxC;AACI,EAAA,MAAMC,KAAK,GAAG,IAAIC,UAAU,CAAC,CAAC,CAAC;EAC/B,MAAMC,IAAI,GAAG,IAAIC,QAAQ,CAACH,KAAK,CAACI,MAAM,CAAC;EACvCF,IAAI,CAACG,SAAS,CAAC,CAAC,EAAEN,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC;AACpC,EAAA,OAAOG,IAAI,CAACI,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;AACnC;;;;"}