@carbonenginejs/runtime-resource 0.11.1 → 0.12.1

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 (211) hide show
  1. package/dist/CjsResMan.js +4 -4
  2. package/dist/CjsResMan.js.map +1 -1
  3. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -4
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  5. package/dist/format/CjsByteReader.js +310 -0
  6. package/dist/format/CjsByteReader.js.map +1 -0
  7. package/dist/format/CjsByteWriter.js +242 -0
  8. package/dist/format/CjsByteWriter.js.map +1 -0
  9. package/dist/format/CjsFormatError.js +41 -0
  10. package/dist/format/CjsFormatError.js.map +1 -0
  11. package/dist/format/CjsStringTable.js +268 -0
  12. package/dist/format/CjsStringTable.js.map +1 -0
  13. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +361 -0
  14. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -0
  15. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -0
  16. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -0
  17. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +372 -0
  18. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +1 -0
  19. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +427 -0
  20. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -0
  21. package/dist/format/carbonEffect/carbonEffectRecords.js +955 -0
  22. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -0
  23. package/dist/format/compareUtf8.js +36 -0
  24. package/dist/format/compareUtf8.js.map +1 -0
  25. package/dist/format/index.js +11 -0
  26. package/dist/format/index.js.map +1 -0
  27. package/dist/formats/bnk/CjsBnkFormat.js +18 -2
  28. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  29. package/dist/formats/bnk/core/eventAction.js +305 -0
  30. package/dist/formats/bnk/core/eventAction.js.map +1 -0
  31. package/dist/formats/bnk/core/graph.js +3 -6
  32. package/dist/formats/bnk/core/graph.js.map +1 -1
  33. package/dist/formats/bnk/core/helpers.js +62 -11
  34. package/dist/formats/bnk/core/helpers.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +532 -0
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -0
  37. package/dist/formats/bnk/core/sfxNodes.js +632 -0
  38. package/dist/formats/bnk/core/sfxNodes.js.map +1 -0
  39. package/dist/formats/bnk/core/soundbanksInfo.js +59 -51
  40. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  41. package/dist/formats/gr2/CjsGr2Format.js +256 -13
  42. package/dist/formats/gr2/CjsGr2Format.js.map +1 -1
  43. package/dist/formats/gr2/core/helpers.js +15 -15
  44. package/dist/formats/gr2/core/helpers.js.map +1 -1
  45. package/dist/formats/gr2/core/json.js +1 -1
  46. package/dist/formats/gr2/core/json.js.map +1 -1
  47. package/dist/formats/gr2/core/targets.js +1 -1
  48. package/dist/formats/gr2/core/targets.js.map +1 -1
  49. package/dist/formats/gr2/index.js +0 -1
  50. package/dist/formats/gr2/index.js.map +1 -1
  51. package/dist/formats/hlsl/core/HlslReader.js +7 -257
  52. package/dist/formats/hlsl/core/HlslReader.js.map +1 -1
  53. package/dist/formats/hlsl/core/analysis.js +1 -1
  54. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +781 -0
  55. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -0
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +21 -1
  57. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  58. package/dist/formats/hlsl/index.js +1 -0
  59. package/dist/formats/hlsl/index.js.map +1 -1
  60. package/dist/formats/index.js +3 -6
  61. package/dist/formats/index.js.map +1 -1
  62. package/dist/formats/webgl/core/cewg/CewgPackage.js +2 -1
  63. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -1
  64. package/dist/formats/webgl/core/cewg/binary.js +11 -93
  65. package/dist/formats/webgl/core/cewg/binary.js.map +1 -1
  66. package/dist/formats/webgl/core/effectPackage.js +4 -1
  67. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  68. package/dist/formats/webgl/core/errors.js +3 -3
  69. package/dist/formats/webgl/core/errors.js.map +1 -1
  70. package/dist/formats/webgpu/CjsWebgpuFormat.js +4 -23
  71. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  72. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +197 -0
  73. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -0
  74. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js +368 -0
  75. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +1 -0
  76. package/dist/formats/webgpu/core/cewgpu/containerViews.js +355 -0
  77. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +1 -0
  78. package/dist/formats/webgpu/core/cewgpu/validateContainer.js +90 -0
  79. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +1 -0
  80. package/dist/formats/webgpu/core/effectBackendBodySet.js +21 -20
  81. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  82. package/dist/formats/webgpu/core/helpers.js +87 -92
  83. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  84. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +14 -13
  85. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -1
  86. package/dist/formats/webgpu/core/ir/inferValueTypes.js +10 -8
  87. package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -1
  88. package/dist/formats/webgpu/core/packageEffect.js +94 -9
  89. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  90. package/dist/formats/webgpu/core/packageMetadata.js +10 -1
  91. package/dist/formats/webgpu/core/packageMetadata.js.map +1 -1
  92. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +17 -15
  93. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  94. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +13 -12
  95. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -1
  96. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +9 -8
  97. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  98. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +23 -22
  99. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -1
  100. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +46 -44
  101. package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -1
  102. package/dist/resource/CjsResource.js +700 -684
  103. package/dist/resource/CjsResource.js.map +1 -1
  104. package/dist/resource/Tr2LightProfileRes.js +18 -27
  105. package/dist/resource/Tr2LightProfileRes.js.map +1 -1
  106. package/dist/resource/audio/CjsAudioBufferRes.js +2 -2
  107. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -1
  108. package/dist/resource/audio/CjsAudioRes.js +2 -2
  109. package/dist/resource/audio/CjsAudioRes.js.map +1 -1
  110. package/dist/resource/geometry/TriGeometryRes.js +605 -586
  111. package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
  112. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +21 -30
  113. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -1
  114. package/dist/resource/geometry/granny/TriGrannyRes.js +21 -30
  115. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -1
  116. package/dist/resource/shader/Tr2EffectRes.js +9 -7
  117. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  118. package/dist/resource/shader/Tr2MaterialArea.js +5 -3
  119. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -1
  120. package/dist/resource/shader/Tr2MaterialMesh.js +4 -2
  121. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -1
  122. package/dist/resource/shader/Tr2MaterialRes.js +5 -3
  123. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -1
  124. package/dist/resource/shader/Tr2Shader.js +26 -21
  125. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  126. package/dist/resource/shader/Tr2ShaderPermutation.js +8 -6
  127. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -1
  128. package/dist/resource/shader/reflection/Tr2EffectDefine.js +5 -3
  129. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -1
  130. package/dist/resource/shader/reflection/Tr2EffectDescription.js +5 -3
  131. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  132. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +17 -15
  133. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  134. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +11 -9
  135. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  136. package/dist/resource/shader/reflection/Tr2EffectResource.js +8 -6
  137. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  138. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +15 -13
  139. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  140. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +7 -5
  141. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  142. package/dist/resource/shader/reflection/Tr2Pass.js +11 -9
  143. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  144. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +8 -6
  145. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  146. package/dist/resource/texture/CjsTextureArrayRes.js +400 -411
  147. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -1
  148. package/dist/resource/texture/Tr2ImageRes.js +99 -95
  149. package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
  150. package/dist/resource/texture/TriTextureRes.js +312 -273
  151. package/dist/resource/texture/TriTextureRes.js.map +1 -1
  152. package/docs/README.md +13 -1
  153. package/docs/architecture.md +3 -3
  154. package/docs/concepts/resource-lifecycle.md +9 -2
  155. package/docs/concepts/shader-resource-model.md +114 -0
  156. package/docs/concepts/writing-an-engine-adapter.md +115 -0
  157. package/docs/formats/README.md +24 -1
  158. package/docs/formats/carbon-effect-container.md +452 -0
  159. package/docs/formats/dxbc/README.md +68 -0
  160. package/docs/formats/dxbc/architecture.md +80 -0
  161. package/docs/formats/dxbc/reference/api.md +77 -0
  162. package/docs/formats/dxbc/reference/classes/README.md +9 -0
  163. package/docs/formats/dxbc/reference/decoded-output.md +122 -0
  164. package/docs/formats/gr2.md +3 -4
  165. package/docs/formats/hlsl/README.md +54 -0
  166. package/docs/formats/hlsl/architecture.md +67 -0
  167. package/docs/formats/hlsl/guides/hydrating-json-output.md +62 -0
  168. package/docs/formats/hlsl/guides/reading-effects.md +64 -0
  169. package/docs/formats/hlsl/reference/advanced-analysis.md +66 -0
  170. package/docs/formats/hlsl/reference/api.md +98 -0
  171. package/docs/formats/hlsl/reference/classes/README.md +11 -0
  172. package/docs/formats/hlsl/reference/json-graph.md +100 -0
  173. package/docs/formats/hlsl/reference/portable-reflection.md +141 -0
  174. package/docs/formats/provenance.md +32 -17
  175. package/docs/formats/webgl/README.md +57 -0
  176. package/docs/formats/webgl/architecture.md +70 -0
  177. package/docs/formats/webgl/carbon-constant-layouts.md +326 -0
  178. package/docs/formats/webgl/decl-io.md +1234 -0
  179. package/docs/formats/webgl/effect-reflection.md +127 -0
  180. package/docs/formats/webgl/memory-structured.md +871 -0
  181. package/docs/formats/webgl/reference/classes/README.md +9 -0
  182. package/docs/formats/webgl/texture-sample.md +964 -0
  183. package/docs/formats/webgpu/README.md +84 -0
  184. package/docs/formats/webgpu/architecture.md +96 -0
  185. package/docs/formats/webgpu/formats/cewgpu.md +216 -0
  186. package/docs/formats/webgpu/guides/effect-packaging.md +191 -0
  187. package/docs/formats/webgpu/reference/api.md +197 -0
  188. package/docs/formats/webgpu/reference/classes/README.md +9 -0
  189. package/docs/formats/webgpu/reference/wgsl-compatibility.md +1543 -0
  190. package/docs/formats/wwise.md +45 -4
  191. package/docs/reference/classes/core.md +80 -0
  192. package/docs/reference/classes/formats.md +24 -34
  193. package/docs/reference/events.md +25 -0
  194. package/docs/reference/motherlode-cache.md +22 -8
  195. package/docs/reference/workers.md +5 -5
  196. package/docs/roadmap.md +61 -41
  197. package/format-notices/bnk/NOTICE +5 -4
  198. package/format-notices/webgl/NOTICE +1 -1
  199. package/package.json +2 -1
  200. package/dist/formats/gr2/core/CjsFormatGr2.js +0 -273
  201. package/dist/formats/gr2/core/CjsFormatGr2.js.map +0 -1
  202. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +0 -415
  203. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +0 -1
  204. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +0 -100
  205. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +0 -1
  206. package/dist/formats/webgpu/core/cewgpu/binary.js +0 -93
  207. package/dist/formats/webgpu/core/cewgpu/binary.js.map +0 -1
  208. package/dist/formats/webgpu/core/cewgpu/tags.js +0 -17
  209. package/dist/formats/webgpu/core/cewgpu/tags.js.map +0 -1
  210. package/dist/formats/webgpu/core/effectPackageValidation.js +0 -1078
  211. package/dist/formats/webgpu/core/effectPackageValidation.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sources":["../../../../../src/formats/gr2/core/json.js"],"sourcesContent":["/**\n * GR2 JSON emitter.\n * @author cppctamber\n * `emitJson(fileInfo, version)` returns a plain object whose key order\n * mirrors the reader schema. Normalized integer values are dequantized with\n * float32 reciprocals, Real16 values are already converted by reader.js, and\n * non-finite floats are serialized as 0.\n */\n\nconst fr = Math.fround;\n\n/**\n * Member type ids whose numeric values need conversion for GR2 JSON output.\n */\nconst MEMBER_TYPES = Object.freeze({\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\n Int32: 19, UInt32: 20, Real16: 21\n});\nconst T = MEMBER_TYPES;\n\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\nconst INV255_VALUE = fr(1 / 255);\n\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\nconst INV65535_VALUE = fr(1 / 65535);\n\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\nconst INV127_VALUE = fr(1 / 127);\n\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\nconst INV32767_VALUE = fr(1 / 32767);\n\nconst\n INV255 = INV255_VALUE,\n INV65535 = INV65535_VALUE,\n INV127 = INV127_VALUE,\n INV32767 = INV32767_VALUE;\n\n/**\n * Node keys accepted by {@link emitJson}'s `options.classes` map.\n *\n * Each key names one GR2 JSON node shape; the mapped constructor is\n * instantiated with `new` and populated with that node's usual fields instead\n * of a plain object literal.\n */\nexport const CLASS_KEYS = Object.freeze([\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"Curve\"\n]);\n\n/**\n * Constructors used to hydrate GR2 JSON nodes as class instances.\n *\n * Every key is optional; node types with no matching constructor keep the\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\n *\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\n */\n\n/**\n * Instantiate and populate a node class, or return the plain props unchanged.\n *\n * @param {Gr2NodeClasses} classes Opt-in node class map.\n * @param {string} key Node key to look up in `classes`.\n * @param {object} props Fields to populate onto the instance.\n * @returns {object} A populated class instance, or `props` when no\n * constructor is registered for `key`.\n */\nfunction build(classes, key, props, hydrationOptions = {})\n{\n const Ctor = classes[key];\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\n}\n\nfunction populate(instance, props, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsFormatGr2 class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\n/**\n * Root object emitted in the GR2 JSON shape.\n *\n * @typedef {object} Gr2JsonRoot\n * @property {number} grannyFileFormatRevision Granny file format revision.\n * @property {string} grannyFileSource Original source filename, or an empty string.\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\n * @property {object[]} models Model records with skeleton and mesh bindings.\n * @property {object[]} animations Animation records and transform tracks.\n */\n\n/**\n * Convert a reflected numeric value to the float convention used by GR2 JSON.\n *\n * @param {number} v Raw reflected numeric value.\n * @param {number} memberType Granny member type id.\n * @returns {number} Converted and float32-rounded value.\n */\nfunction convert(v, memberType)\n{\n switch (memberType)\n {\n case T.NormalUInt8:\n return fr(v * INV255);\n\n case T.NormalUInt16:\n return fr(v * INV65535);\n\n case T.BinormalInt8:\n return fr(v * INV127);\n\n case T.BinormalInt16:\n return fr(v * INV32767);\n\n default:\n return fr(v);\n }\n}\n\n/**\n * Replace non-finite JSON numbers with zero.\n *\n * @param {number} v Candidate numeric value.\n * @returns {number} The original finite value, or zero.\n */\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\n\n/**\n * Copy and dequantize one vertex channel from reflected vertex objects.\n *\n * Missing Granny members return an empty channel.\n *\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\n * @param {string} memberName Granny vertex member name to copy.\n * @param {number} destWidth Number of components in the emitted channel.\n * @returns {number[]} Flat deinterleaved channel values.\n */\nfunction copyChannel(vertices, memberName, destWidth)\n{\n const\n type = vertices.__type || [],\n m = type.find(x => x.name === memberName);\n if (!m) return [];\n const\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\n n = Math.min(srcWidth, destWidth),\n out = new Array(vertices.length * destWidth).fill(0);\n for (let i = 0; i < vertices.length; i++)\n {\n const\n raw = vertices[i][memberName],\n arr = Array.isArray(raw) ? raw : [ raw ],\n base = i * destWidth;\n for (let k = 0; k < n; k++)\n {\n out[base + k] = sf(convert(arr[k], m.type));\n }\n }\n return out;\n}\n\nconst VERTEX_CHANNELS = Object.freeze([\n [ \"position\", \"Position\", 3 ],\n [ \"blendIndice\", \"BoneIndices\", 4 ],\n [ \"tangent\", \"Tangent\", 4 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"texcoord0\", \"TextureCoordinates0\", 2 ],\n [ \"texcoord1\", \"TextureCoordinates1\", 2 ],\n [ \"binormal\", \"Binormal\", 4 ],\n [ \"blendWeight\", \"BoneWeights\", 4 ]\n]);\n\nfunction emitVertexChannels(vertices)\n{\n const channels = {};\n for (const [ name, memberName, width ] of VERTEX_CHANNELS)\n {\n channels[name] = copyChannel(vertices, memberName, width);\n }\n return channels;\n}\n\n/**\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\n * @returns {any[]} Plain scalar values.\n */\nfunction scalarArray(a)\n{\n if (!a || !a.length) return [];\n if (typeof a[0] === \"object\" && a[0] !== null)\n {\n const k = Object.keys(a[0])[0];\n return a.map(x => x[k]);\n }\n return a;\n}\n\n/**\n * Granny curve format ids emitted by the GR2 JSON curve serializer.\n */\nconst CURVE_FORMATS = Object.freeze({\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\n});\nconst F = CURVE_FORMATS;\n\n/**\n * Locate the inline curve-data header inside a reflected curve-data object.\n *\n * @param {object} cd Reflected Granny curve-data object.\n * @returns {{Format: number, Degree: number}|null} Header object when present.\n */\nfunction curveHeader(cd)\n{\n for (const k of Object.keys(cd))\n {\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\n }\n return null;\n}\n\n/**\n * Convert a reflected scalar array to float32-rounded finite numbers.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Float array.\n */\nfunction farr(a) { return scalarArray(a).map(x => sf(fr(x))); }\n\n/**\n * Convert a reflected scalar array to unsigned 32-bit integer values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Unsigned integer array.\n */\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\n\n/**\n * Emit one Granny Curve2 object in GR2 JSON form.\n *\n * @param {object} curve2 Reflected Granny curve object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Compact curve record with format-specific fields.\n */\nfunction emitCurve(curve2, classes = {})\n{\n const cd = curve2 && curve2.CurveData;\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\n const\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\n format = h.Format,\n degree = h.Degree,\n o = { format, degree };\n switch (format)\n {\n case F.DaIdentity:\n break;\n\n case F.DaKeyframes32f:\n o.dimension = cd.Dimension;\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaConstant32f:\n o.controls = farr(cd.Controls);\n break;\n\n case F.D3Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0 ]).slice(0, 3).map(x => sf(fr(x)));\n break;\n\n case F.D4Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0, 0 ]).slice(0, 4).map(x => sf(fr(x)));\n break;\n\n case F.DaK32fC32f:\n o.knots = farr(cd.Knots);\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaK16uC16u:\n case F.DaK8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D4nK16uC15u:\n case F.D4nK8uC7u:\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3K16uC16u:\n case F.D3K8uC8u:\n case F.D3I1K16uC16u:\n case F.D3I1K8uC8u:\n case F.D9I3K16uC16u:\n case F.D9I3K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3I1K32fC32f:\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = farr(cd.KnotsControls);\n break;\n\n case F.D9I1K16uC16u:\n case F.D9I1K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n default:\n o.error = `Unknown format ${format}`;\n }\n return build(classes, \"Curve\", o);\n}\n\n/**\n * Convert arbitrary reflected variant data to JSON-safe plain values.\n *\n * @param {any} v Reflected variant value.\n * @returns {JsonValue} JSON-compatible value.\n */\nfunction emitVariant(v)\n{\n if (v === null || v === undefined) return null;\n if (Array.isArray(v)) return v.map(emitVariant);\n if (typeof v === \"object\")\n {\n const o = {};\n for (const k of Object.keys(v))\n {\n o[k] = emitVariant(v[k]);\n }\n return o;\n }\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\n return v;\n}\n\n/**\n * Attach converted extended data when the reflected variant is present.\n *\n * @param {object} target Emitted GR2 JSON object to mutate.\n * @param {object|null|undefined} ext Reflected extended-data variant.\n * @returns {void}\n */\nfunction addExtendedData(target, ext)\n{\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\n {\n target.extendedData = emitVariant(ext);\n }\n}\n\n/**\n * Emit one reflected Granny morph target (blend shape) in GR2 JSON shape.\n *\n * Morph target vertex data uses the same deinterleaved channel layout as a\n * mesh's primary vertex data.\n *\n * @param {object} mt Reflected Granny `granny_morph_target` object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted morph-target record.\n */\nfunction emitMorphTarget(mt, classes = {})\n{\n const\n vd = mt.VertexData,\n verts = (vd && vd.Vertices) || [];\n return build(classes, \"MorphTarget\", {\n name: mt.ScalarName ?? \"\",\n dataIsDeltas: !!mt.DataIsDeltas,\n vertex: emitVertexChannels(verts)\n });\n}\n\nfunction mappedAnnotationRows(set, vertexCount)\n{\n const\n annotations = set.VertexAnnotations || [],\n map = scalarArray(set.VertexAnnotationIndices),\n rows = [],\n vertexIndices = [];\n\n if (set.IndicesMapFromVertexToAnnotation)\n {\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\n {\n const annotationIndex = map[vertexIndex];\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n else\n {\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\n {\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n\n Object.defineProperty(rows, \"__type\", {\n value: annotations.__type || [],\n configurable: true\n });\n\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\n return { rows, vertexIndices: identity ? null : vertexIndices };\n}\n\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\n{\n if (!set || !set.VertexAnnotations?.length) return null;\n\n const mapped = mappedAnnotationRows(set, vertexCount);\n if (!mapped.rows.length) return null;\n\n const target = {\n name: set.Name ?? \"\",\n dataIsDeltas: true,\n vertex: emitVertexChannels(mapped.rows)\n };\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\n return build(classes, \"MorphTarget\", target);\n}\n\n/**\n * Emit a reflected Granny mesh in GR2 JSON shape.\n *\n * @param {object} mesh Reflected Granny mesh object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted mesh record.\n */\nfunction emitMesh(mesh, classes = {})\n{\n const o = {};\n o.name = mesh.Name ?? \"\";\n o.minBounds = [ 0, 0, 0 ];\n o.maxBounds = [ 0, 0, 0 ];\n\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\n name: bb.BoneName ?? \"\",\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\n }));\n\n const\n vd = mesh.PrimaryVertexData,\n verts = (vd && vd.Vertices) || [];\n o.vertex = emitVertexChannels(verts);\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\n .filter(Boolean));\n\n const\n topo = mesh.PrimaryTopology || {},\n i32arr = scalarArray(topo.Indices),\n i16arr = scalarArray(topo.Indices16),\n groups = topo.Groups || [];\n o.indices = [];\n let indices = null, bpi = 0;\n if (i32arr.length) { indices = i32arr; bpi = 4; }\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\n if (indices)\n {\n for (const g of groups)\n {\n const\n faces = new Array(g.TriCount * 3),\n start = g.TriFirst * 3;\n for (let i = 0; i < g.TriCount * 3; i++)\n {\n faces[i] = indices[start + i] >>> 0;\n }\n o.indices.push(build(classes, \"IndexGroup\", {\n name: `area_${g.MaterialIndex}`,\n bytesPerIndex: bpi,\n faces\n }));\n }\n }\n return build(classes, \"Mesh\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton bone in GR2 JSON shape.\n *\n * @param {object} bone Reflected Granny bone object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted bone record.\n */\nfunction emitBone(bone, classes = {})\n{\n const\n t = bone.LocalTransform || bone.Transform ||\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\n o = {};\n o.name = bone.Name ?? \"\";\n o.parentIndex = bone.ParentIndex | 0;\n o.flag = t.flags;\n if (t.flags & 1) o.position = t.position.map(x => sf(fr(x)));\n if (t.flags & 2) o.orientation = t.orientation.map(x => sf(fr(x)));\n if (t.flags & 4) o.scaleShear = t.scaleShear.map(x => sf(fr(x)));\n addExtendedData(o, bone.ExtendedData);\n return build(classes, \"Bone\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton in GR2 JSON shape.\n *\n * @param {object|null} skel Reflected Granny skeleton object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted skeleton record.\n */\nfunction emitSkeleton(skel, classes = {})\n{\n const o = {};\n o.name = skel ? (skel.Name ?? \"\") : \"\";\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\n if (skel) addExtendedData(o, skel.ExtendedData);\n return build(classes, \"Skeleton\", o);\n}\n\n/**\n * Emit a reflected Granny model in GR2 JSON shape.\n *\n * @param {object} model Reflected Granny model object.\n * @param {object} fileInfo Root reflected Granny file-info object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted model record.\n */\nfunction emitModel(model, fileInfo, classes = {})\n{\n const o = {};\n o.name = model.Name ?? \"\";\n o.skeleton = emitSkeleton(model.Skeleton, classes);\n const meshes = fileInfo.Meshes || [];\n o.meshBindings = (model.MeshBindings || []).map(mb =>\n {\n const idx = meshes.indexOf(mb && mb.Mesh);\n return idx;\n });\n addExtendedData(o, model.ExtendedData);\n return build(classes, \"Model\", o);\n}\n\n/**\n * Emit a reflected Granny transform track in GR2 JSON shape.\n *\n * @param {object} tt Reflected Granny transform-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted transform-track record.\n */\nfunction emitTransformTrack(tt, classes = {})\n{\n return build(classes, \"TransformTrack\", {\n name: tt.Name ?? \"\",\n flags: tt.Flags | 0,\n orientation: emitCurve(tt.OrientationCurve, classes),\n position: emitCurve(tt.PositionCurve, classes),\n scaleShear: emitCurve(tt.ScaleShearCurve, classes)\n });\n}\n\n/**\n * Emit a reflected Granny track group in GR2 JSON shape.\n *\n * @param {object} tg Reflected Granny track-group object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted track-group record.\n */\nfunction emitTrackGroup(tg, classes = {})\n{\n return build(classes, \"TrackGroup\", {\n name: tg.Name ?? \"\",\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes))\n });\n}\n\n/**\n * Emit a reflected Granny animation in GR2 JSON shape.\n *\n * @param {object} anim Reflected Granny animation object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted animation record.\n */\nfunction emitAnimation(anim, classes = {})\n{\n const o = {};\n o.name = anim.Name ?? \"\";\n o.duration = sf(fr(anim.Duration));\n o.timeStep = sf(fr(anim.TimeStep));\n o.oversampling = sf(fr(anim.Oversampling));\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\n o.flags = anim.Flags | 0;\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\n addExtendedData(o, anim.ExtendedData);\n return build(classes, \"Animation\", o);\n}\n\n/**\n * Convert a reflected `granny_file_info` graph into a GR2 JSON object.\n *\n * The key order and numeric conversion rules are stable so downstream tools can\n * compare emitted data.\n *\n * When `options.classes` is given, matching node types are instantiated and\n * populated as class instances instead of plain object literals; an opt-in\n * alternative to walking the returned JSON into application-specific classes\n * by hand. See {@link CLASS_KEYS} for the recognized keys.\n *\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\n * @param {number} version Granny file format revision.\n * @param {object} [options] Emission options.\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\n * @returns {Gr2JsonRoot} Plain JSON-compatible `GR2 JSON` object, or a\n * populated `classes.Root` instance when provided.\n */\nexport function emitJson(fileInfo, version, options = {})\n{\n const { classes = {}, ...hydrationOptions } = options;\n return build(classes, \"Root\", {\n grannyFileFormatRevision: version | 0,\n grannyFileSource: fileInfo.FromFileName ?? \"\",\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes)),\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes)),\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\n }, hydrationOptions);\n}\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","width","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","uarr","emitCurve","curve2","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","value","configurable","identity","every","index","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","g","faces","TriCount","start","TriFirst","MaterialIndex","bytesPerIndex","emitBone","bone","t","LocalTransform","Transform","flags","position","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeleton","Skeleton","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitTrackGroup","tg","transformTracks","TransformTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","emitJson","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"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"}
1
+ {"version":3,"file":"json.js","sources":["../../../../../src/formats/gr2/core/json.js"],"sourcesContent":["/**\n * GR2 JSON emitter.\n * @author cppctamber\n * `emitJson(fileInfo, version)` returns a plain object whose key order\n * mirrors the reader schema. Normalized integer values are dequantized with\n * float32 reciprocals, Real16 values are already converted by reader.js, and\n * non-finite floats are serialized as 0.\n */\n\nconst fr = Math.fround;\n\n/**\n * Member type ids whose numeric values need conversion for GR2 JSON output.\n */\nconst MEMBER_TYPES = Object.freeze({\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\n Int32: 19, UInt32: 20, Real16: 21\n});\nconst T = MEMBER_TYPES;\n\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\nconst INV255_VALUE = fr(1 / 255);\n\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\nconst INV65535_VALUE = fr(1 / 65535);\n\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\nconst INV127_VALUE = fr(1 / 127);\n\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\nconst INV32767_VALUE = fr(1 / 32767);\n\nconst\n INV255 = INV255_VALUE,\n INV65535 = INV65535_VALUE,\n INV127 = INV127_VALUE,\n INV32767 = INV32767_VALUE;\n\n/**\n * Node keys accepted by {@link emitJson}'s `options.classes` map.\n *\n * Each key names one GR2 JSON node shape; the mapped constructor is\n * instantiated with `new` and populated with that node's usual fields instead\n * of a plain object literal.\n */\nexport const CLASS_KEYS = Object.freeze([\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"Curve\"\n]);\n\n/**\n * Constructors used to hydrate GR2 JSON nodes as class instances.\n *\n * Every key is optional; node types with no matching constructor keep the\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\n *\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\n */\n\n/**\n * Instantiate and populate a node class, or return the plain props unchanged.\n *\n * @param {Gr2NodeClasses} classes Opt-in node class map.\n * @param {string} key Node key to look up in `classes`.\n * @param {object} props Fields to populate onto the instance.\n * @returns {object} A populated class instance, or `props` when no\n * constructor is registered for `key`.\n */\nfunction build(classes, key, props, hydrationOptions = {})\n{\n const Ctor = classes[key];\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\n}\n\nfunction populate(instance, props, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsGr2Format class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\n/**\n * Root object emitted in the GR2 JSON shape.\n *\n * @typedef {object} Gr2JsonRoot\n * @property {number} grannyFileFormatRevision Granny file format revision.\n * @property {string} grannyFileSource Original source filename, or an empty string.\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\n * @property {object[]} models Model records with skeleton and mesh bindings.\n * @property {object[]} animations Animation records and transform tracks.\n */\n\n/**\n * Convert a reflected numeric value to the float convention used by GR2 JSON.\n *\n * @param {number} v Raw reflected numeric value.\n * @param {number} memberType Granny member type id.\n * @returns {number} Converted and float32-rounded value.\n */\nfunction convert(v, memberType)\n{\n switch (memberType)\n {\n case T.NormalUInt8:\n return fr(v * INV255);\n\n case T.NormalUInt16:\n return fr(v * INV65535);\n\n case T.BinormalInt8:\n return fr(v * INV127);\n\n case T.BinormalInt16:\n return fr(v * INV32767);\n\n default:\n return fr(v);\n }\n}\n\n/**\n * Replace non-finite JSON numbers with zero.\n *\n * @param {number} v Candidate numeric value.\n * @returns {number} The original finite value, or zero.\n */\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\n\n/**\n * Copy and dequantize one vertex channel from reflected vertex objects.\n *\n * Missing Granny members return an empty channel.\n *\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\n * @param {string} memberName Granny vertex member name to copy.\n * @param {number} destWidth Number of components in the emitted channel.\n * @returns {number[]} Flat deinterleaved channel values.\n */\nfunction copyChannel(vertices, memberName, destWidth)\n{\n const\n type = vertices.__type || [],\n m = type.find(x => x.name === memberName);\n if (!m) return [];\n const\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\n n = Math.min(srcWidth, destWidth),\n out = new Array(vertices.length * destWidth).fill(0);\n for (let i = 0; i < vertices.length; i++)\n {\n const\n raw = vertices[i][memberName],\n arr = Array.isArray(raw) ? raw : [ raw ],\n base = i * destWidth;\n for (let k = 0; k < n; k++)\n {\n out[base + k] = sf(convert(arr[k], m.type));\n }\n }\n return out;\n}\n\nconst VERTEX_CHANNELS = Object.freeze([\n [ \"position\", \"Position\", 3 ],\n [ \"blendIndice\", \"BoneIndices\", 4 ],\n [ \"tangent\", \"Tangent\", 4 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"texcoord0\", \"TextureCoordinates0\", 2 ],\n [ \"texcoord1\", \"TextureCoordinates1\", 2 ],\n [ \"binormal\", \"Binormal\", 4 ],\n [ \"blendWeight\", \"BoneWeights\", 4 ]\n]);\n\nfunction emitVertexChannels(vertices)\n{\n const channels = {};\n for (const [ name, memberName, width ] of VERTEX_CHANNELS)\n {\n channels[name] = copyChannel(vertices, memberName, width);\n }\n return channels;\n}\n\n/**\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\n * @returns {any[]} Plain scalar values.\n */\nfunction scalarArray(a)\n{\n if (!a || !a.length) return [];\n if (typeof a[0] === \"object\" && a[0] !== null)\n {\n const k = Object.keys(a[0])[0];\n return a.map(x => x[k]);\n }\n return a;\n}\n\n/**\n * Granny curve format ids emitted by the GR2 JSON curve serializer.\n */\nconst CURVE_FORMATS = Object.freeze({\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\n});\nconst F = CURVE_FORMATS;\n\n/**\n * Locate the inline curve-data header inside a reflected curve-data object.\n *\n * @param {object} cd Reflected Granny curve-data object.\n * @returns {{Format: number, Degree: number}|null} Header object when present.\n */\nfunction curveHeader(cd)\n{\n for (const k of Object.keys(cd))\n {\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\n }\n return null;\n}\n\n/**\n * Convert a reflected scalar array to float32-rounded finite numbers.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Float array.\n */\nfunction farr(a) { return scalarArray(a).map(x => sf(fr(x))); }\n\n/**\n * Convert a reflected scalar array to unsigned 32-bit integer values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Unsigned integer array.\n */\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\n\n/**\n * Emit one Granny Curve2 object in GR2 JSON form.\n *\n * @param {object} curve2 Reflected Granny curve object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Compact curve record with format-specific fields.\n */\nfunction emitCurve(curve2, classes = {})\n{\n const cd = curve2 && curve2.CurveData;\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\n const\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\n format = h.Format,\n degree = h.Degree,\n o = { format, degree };\n switch (format)\n {\n case F.DaIdentity:\n break;\n\n case F.DaKeyframes32f:\n o.dimension = cd.Dimension;\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaConstant32f:\n o.controls = farr(cd.Controls);\n break;\n\n case F.D3Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0 ]).slice(0, 3).map(x => sf(fr(x)));\n break;\n\n case F.D4Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0, 0 ]).slice(0, 4).map(x => sf(fr(x)));\n break;\n\n case F.DaK32fC32f:\n o.knots = farr(cd.Knots);\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaK16uC16u:\n case F.DaK8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D4nK16uC15u:\n case F.D4nK8uC7u:\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3K16uC16u:\n case F.D3K8uC8u:\n case F.D3I1K16uC16u:\n case F.D3I1K8uC8u:\n case F.D9I3K16uC16u:\n case F.D9I3K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3I1K32fC32f:\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = farr(cd.KnotsControls);\n break;\n\n case F.D9I1K16uC16u:\n case F.D9I1K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n default:\n o.error = `Unknown format ${format}`;\n }\n return build(classes, \"Curve\", o);\n}\n\n/**\n * Convert arbitrary reflected variant data to JSON-safe plain values.\n *\n * @param {any} v Reflected variant value.\n * @returns {JsonValue} JSON-compatible value.\n */\nfunction emitVariant(v)\n{\n if (v === null || v === undefined) return null;\n if (Array.isArray(v)) return v.map(emitVariant);\n if (typeof v === \"object\")\n {\n const o = {};\n for (const k of Object.keys(v))\n {\n o[k] = emitVariant(v[k]);\n }\n return o;\n }\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\n return v;\n}\n\n/**\n * Attach converted extended data when the reflected variant is present.\n *\n * @param {object} target Emitted GR2 JSON object to mutate.\n * @param {object|null|undefined} ext Reflected extended-data variant.\n * @returns {void}\n */\nfunction addExtendedData(target, ext)\n{\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\n {\n target.extendedData = emitVariant(ext);\n }\n}\n\n/**\n * Emit one reflected Granny morph target (blend shape) in GR2 JSON shape.\n *\n * Morph target vertex data uses the same deinterleaved channel layout as a\n * mesh's primary vertex data.\n *\n * @param {object} mt Reflected Granny `granny_morph_target` object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted morph-target record.\n */\nfunction emitMorphTarget(mt, classes = {})\n{\n const\n vd = mt.VertexData,\n verts = (vd && vd.Vertices) || [];\n return build(classes, \"MorphTarget\", {\n name: mt.ScalarName ?? \"\",\n dataIsDeltas: !!mt.DataIsDeltas,\n vertex: emitVertexChannels(verts)\n });\n}\n\nfunction mappedAnnotationRows(set, vertexCount)\n{\n const\n annotations = set.VertexAnnotations || [],\n map = scalarArray(set.VertexAnnotationIndices),\n rows = [],\n vertexIndices = [];\n\n if (set.IndicesMapFromVertexToAnnotation)\n {\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\n {\n const annotationIndex = map[vertexIndex];\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n else\n {\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\n {\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n\n Object.defineProperty(rows, \"__type\", {\n value: annotations.__type || [],\n configurable: true\n });\n\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\n return { rows, vertexIndices: identity ? null : vertexIndices };\n}\n\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\n{\n if (!set || !set.VertexAnnotations?.length) return null;\n\n const mapped = mappedAnnotationRows(set, vertexCount);\n if (!mapped.rows.length) return null;\n\n const target = {\n name: set.Name ?? \"\",\n dataIsDeltas: true,\n vertex: emitVertexChannels(mapped.rows)\n };\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\n return build(classes, \"MorphTarget\", target);\n}\n\n/**\n * Emit a reflected Granny mesh in GR2 JSON shape.\n *\n * @param {object} mesh Reflected Granny mesh object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted mesh record.\n */\nfunction emitMesh(mesh, classes = {})\n{\n const o = {};\n o.name = mesh.Name ?? \"\";\n o.minBounds = [ 0, 0, 0 ];\n o.maxBounds = [ 0, 0, 0 ];\n\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\n name: bb.BoneName ?? \"\",\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\n }));\n\n const\n vd = mesh.PrimaryVertexData,\n verts = (vd && vd.Vertices) || [];\n o.vertex = emitVertexChannels(verts);\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\n .filter(Boolean));\n\n const\n topo = mesh.PrimaryTopology || {},\n i32arr = scalarArray(topo.Indices),\n i16arr = scalarArray(topo.Indices16),\n groups = topo.Groups || [];\n o.indices = [];\n let indices = null, bpi = 0;\n if (i32arr.length) { indices = i32arr; bpi = 4; }\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\n if (indices)\n {\n for (const g of groups)\n {\n const\n faces = new Array(g.TriCount * 3),\n start = g.TriFirst * 3;\n for (let i = 0; i < g.TriCount * 3; i++)\n {\n faces[i] = indices[start + i] >>> 0;\n }\n o.indices.push(build(classes, \"IndexGroup\", {\n name: `area_${g.MaterialIndex}`,\n bytesPerIndex: bpi,\n faces\n }));\n }\n }\n return build(classes, \"Mesh\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton bone in GR2 JSON shape.\n *\n * @param {object} bone Reflected Granny bone object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted bone record.\n */\nfunction emitBone(bone, classes = {})\n{\n const\n t = bone.LocalTransform || bone.Transform ||\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\n o = {};\n o.name = bone.Name ?? \"\";\n o.parentIndex = bone.ParentIndex | 0;\n o.flag = t.flags;\n if (t.flags & 1) o.position = t.position.map(x => sf(fr(x)));\n if (t.flags & 2) o.orientation = t.orientation.map(x => sf(fr(x)));\n if (t.flags & 4) o.scaleShear = t.scaleShear.map(x => sf(fr(x)));\n addExtendedData(o, bone.ExtendedData);\n return build(classes, \"Bone\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton in GR2 JSON shape.\n *\n * @param {object|null} skel Reflected Granny skeleton object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted skeleton record.\n */\nfunction emitSkeleton(skel, classes = {})\n{\n const o = {};\n o.name = skel ? (skel.Name ?? \"\") : \"\";\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\n if (skel) addExtendedData(o, skel.ExtendedData);\n return build(classes, \"Skeleton\", o);\n}\n\n/**\n * Emit a reflected Granny model in GR2 JSON shape.\n *\n * @param {object} model Reflected Granny model object.\n * @param {object} fileInfo Root reflected Granny file-info object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted model record.\n */\nfunction emitModel(model, fileInfo, classes = {})\n{\n const o = {};\n o.name = model.Name ?? \"\";\n o.skeleton = emitSkeleton(model.Skeleton, classes);\n const meshes = fileInfo.Meshes || [];\n o.meshBindings = (model.MeshBindings || []).map(mb =>\n {\n const idx = meshes.indexOf(mb && mb.Mesh);\n return idx;\n });\n addExtendedData(o, model.ExtendedData);\n return build(classes, \"Model\", o);\n}\n\n/**\n * Emit a reflected Granny transform track in GR2 JSON shape.\n *\n * @param {object} tt Reflected Granny transform-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted transform-track record.\n */\nfunction emitTransformTrack(tt, classes = {})\n{\n return build(classes, \"TransformTrack\", {\n name: tt.Name ?? \"\",\n flags: tt.Flags | 0,\n orientation: emitCurve(tt.OrientationCurve, classes),\n position: emitCurve(tt.PositionCurve, classes),\n scaleShear: emitCurve(tt.ScaleShearCurve, classes)\n });\n}\n\n/**\n * Emit a reflected Granny track group in GR2 JSON shape.\n *\n * @param {object} tg Reflected Granny track-group object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted track-group record.\n */\nfunction emitTrackGroup(tg, classes = {})\n{\n return build(classes, \"TrackGroup\", {\n name: tg.Name ?? \"\",\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes))\n });\n}\n\n/**\n * Emit a reflected Granny animation in GR2 JSON shape.\n *\n * @param {object} anim Reflected Granny animation object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted animation record.\n */\nfunction emitAnimation(anim, classes = {})\n{\n const o = {};\n o.name = anim.Name ?? \"\";\n o.duration = sf(fr(anim.Duration));\n o.timeStep = sf(fr(anim.TimeStep));\n o.oversampling = sf(fr(anim.Oversampling));\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\n o.flags = anim.Flags | 0;\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\n addExtendedData(o, anim.ExtendedData);\n return build(classes, \"Animation\", o);\n}\n\n/**\n * Convert a reflected `granny_file_info` graph into a GR2 JSON object.\n *\n * The key order and numeric conversion rules are stable so downstream tools can\n * compare emitted data.\n *\n * When `options.classes` is given, matching node types are instantiated and\n * populated as class instances instead of plain object literals; an opt-in\n * alternative to walking the returned JSON into application-specific classes\n * by hand. See {@link CLASS_KEYS} for the recognized keys.\n *\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\n * @param {number} version Granny file format revision.\n * @param {object} [options] Emission options.\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\n * @returns {Gr2JsonRoot} Plain JSON-compatible `GR2 JSON` object, or a\n * populated `classes.Root` instance when provided.\n */\nexport function emitJson(fileInfo, version, options = {})\n{\n const { classes = {}, ...hydrationOptions } = options;\n return build(classes, \"Root\", {\n grannyFileFormatRevision: version | 0,\n grannyFileSource: fileInfo.FromFileName ?? \"\",\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes)),\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes)),\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\n }, hydrationOptions);\n}\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","width","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","uarr","emitCurve","curve2","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","value","configurable","identity","every","index","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","g","faces","TriCount","start","TriFirst","MaterialIndex","bytesPerIndex","emitBone","bone","t","LocalTransform","Transform","flags","position","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeleton","Skeleton","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitTrackGroup","tg","transformTracks","TransformTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","emitJson","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"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"}
@@ -339,7 +339,7 @@ function hydrate(type, fields, classes, hydrationOptions = {}) {
339
339
  }
340
340
  function populate(instance, fields, hydrationOptions = {}) {
341
341
  if (!instance || typeof instance.SetValues !== "function") {
342
- throw new TypeError("CjsFormatGr2 CMF class population requires classes to implement SetValues(values)");
342
+ throw new TypeError("CjsGr2Format CMF class population requires classes to implement SetValues(values)");
343
343
  }
344
344
  instance.SetValues(fields, {
345
345
  ...hydrationOptions,
@@ -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\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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"}
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(\"CjsGr2Format 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,3 +1,2 @@
1
1
  export { CjsGr2Format, CjsGr2Format as default } from './CjsGr2Format.js';
2
- export { CjsFormatGr2 } from './core/CjsFormatGr2.js';
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}