@carbonenginejs/runtime-resource 0.12.2 → 0.14.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 (238) hide show
  1. package/README.md +21 -0
  2. package/dist/CjsResMan.js +393 -29
  3. package/dist/CjsResMan.js.map +1 -1
  4. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +165 -118
  5. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  6. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  7. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  8. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +7 -113
  9. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  10. package/dist/format/carbonEffect/carbonEffectRecords.js +258 -66
  11. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  12. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  13. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  14. package/dist/format/effect/effectBodyInventory.js +146 -0
  15. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  16. package/dist/format/effect/effectPermutationGraph.js +13 -13
  17. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  18. package/dist/format/index.js +4 -4
  19. package/dist/formats/black/CjsBlackFormat.js +19 -1
  20. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  21. package/dist/formats/bnk/CjsBnkFormat.js +28 -9
  22. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  23. package/dist/formats/bnk/core/busNodes.js +252 -0
  24. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  25. package/dist/formats/bnk/core/effectNodes.js +147 -0
  26. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  27. package/dist/formats/bnk/core/eventAction.js +135 -24
  28. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  29. package/dist/formats/bnk/core/globalSettings.js +215 -0
  30. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  31. package/dist/formats/bnk/core/helpers.js +37 -5
  32. package/dist/formats/bnk/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/core/musicNodes.js +43 -19
  34. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +28 -7
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  37. package/dist/formats/dds/core/helpers.js +40 -1
  38. package/dist/formats/dds/core/helpers.js.map +1 -1
  39. package/dist/formats/dxbc/CjsDxbcFormat.js +45 -0
  40. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  41. package/dist/formats/dxbc/core/disassemble.js +240 -0
  42. package/dist/formats/dxbc/core/disassemble.js.map +1 -0
  43. package/dist/formats/gltf/CjsGltfFormat.js +1 -39
  44. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  45. package/dist/formats/gltf/core/helpers.js +1 -21
  46. package/dist/formats/gltf/core/helpers.js.map +1 -1
  47. package/dist/formats/hlsl/CjsHlslFormat.js +0 -21
  48. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
  49. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +118 -49
  50. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  51. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  52. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  53. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  54. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  55. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +79 -73
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  57. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +8 -1
  58. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
  59. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +11 -691
  60. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  61. package/dist/formats/index.js +4 -2
  62. package/dist/formats/index.js.map +1 -1
  63. package/dist/formats/obj/CjsObjFormat.js +1 -22
  64. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  65. package/dist/formats/obj/core/helpers.js +1 -21
  66. package/dist/formats/obj/core/helpers.js.map +1 -1
  67. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  68. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  69. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  70. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  71. package/dist/formats/pickle/index.js +2 -0
  72. package/dist/formats/pickle/index.js.map +1 -0
  73. package/dist/formats/red/core/redGraph.js +11 -8
  74. package/dist/formats/red/core/redGraph.js.map +1 -1
  75. package/dist/formats/stl/CjsStlFormat.js +1 -46
  76. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  77. package/dist/formats/stl/core/helpers.js +1 -21
  78. package/dist/formats/stl/core/helpers.js.map +1 -1
  79. package/dist/formats/webgl/CjsWebglFormat.js +33 -55
  80. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  81. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  82. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  83. package/dist/formats/webgl/core/effectPackage.js +216 -108
  84. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  85. package/dist/formats/webgl/core/errors.js +1 -1
  86. package/dist/formats/webgl/core/errors.js.map +1 -1
  87. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +166 -24
  88. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  89. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +63 -5
  90. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  91. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  92. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  93. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  94. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  95. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  96. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  97. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +12 -8
  98. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  99. package/dist/formats/webgl/core/helpers.js +33 -172
  100. package/dist/formats/webgl/core/helpers.js.map +1 -1
  101. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  102. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  103. package/dist/formats/webgl/core/readGlslEffectContainer.js +249 -0
  104. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  105. package/dist/formats/webgpu/CjsWebgpuFormat.js +15 -15
  106. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  107. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +37 -145
  108. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  109. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +13 -27
  110. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  111. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +1 -1
  112. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  113. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +4 -4
  114. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  115. package/dist/formats/webgpu/core/effectBackendBodySet.js +18 -18
  116. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  117. package/dist/formats/webgpu/core/errors.js +1 -1
  118. package/dist/formats/webgpu/core/errors.js.map +1 -1
  119. package/dist/formats/webgpu/core/helpers.js +22 -22
  120. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  121. package/dist/formats/webgpu/core/packageEffect.js +11 -15
  122. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  123. package/dist/formats/webgpu/core/packageEffectSelection.js +1 -1
  124. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  125. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +23 -23
  126. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  127. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +6 -6
  128. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  129. package/dist/formats/yaml/CjsYamlFormat.js +3 -3
  130. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  131. package/dist/formats/yaml/core/CjsYamlReader.js +4 -6
  132. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  133. package/dist/formats/yaml/core/helpers.js +27 -1
  134. package/dist/formats/yaml/core/helpers.js.map +1 -1
  135. package/dist/index.js +2 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/resource/CjsLoadingObject.js +19 -0
  138. package/dist/resource/CjsLoadingObject.js.map +1 -0
  139. package/dist/resource/CjsResource.js +4 -0
  140. package/dist/resource/CjsResource.js.map +1 -1
  141. package/dist/resource/ResourceHandlerMode.js +14 -0
  142. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  143. package/dist/resource/index.js +2 -0
  144. package/dist/resource/index.js.map +1 -1
  145. package/dist/resource/shader/Tr2EffectRes.js +118 -213
  146. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  147. package/dist/resource/shader/Tr2Shader.js +37 -15
  148. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  149. package/dist/resource/shader/reflection/Tr2EffectConstant.js +37 -29
  150. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  151. package/dist/resource/shader/reflection/Tr2EffectDescription.js +39 -34
  152. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  153. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +51 -30
  154. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  155. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +45 -25
  156. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  157. package/dist/resource/shader/reflection/Tr2EffectResource.js +51 -17
  158. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  159. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +219 -88
  160. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  161. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +28 -18
  162. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  163. package/dist/resource/shader/reflection/Tr2Pass.js +96 -39
  164. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  165. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  166. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  167. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  168. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  169. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +68 -10
  170. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  171. package/dist/worker/CjsResManMainThreadLoader.js +9 -7
  172. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  173. package/dist/worker/CjsResManWorker.js +5 -4
  174. package/dist/worker/CjsResManWorker.js.map +1 -1
  175. package/dist/worker/CjsResManWorkerLoader.js +9 -6
  176. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  177. package/docs/README.md +2 -2
  178. package/docs/architecture.md +12 -3
  179. package/docs/concepts/resource-lifecycle.md +9 -8
  180. package/docs/concepts/shader-resource-model.md +14 -17
  181. package/docs/concepts/writing-an-engine-adapter.md +1 -1
  182. package/docs/formats/README.md +4 -2
  183. package/docs/formats/carbon-effect-container.md +127 -26
  184. package/docs/formats/dxbc/architecture.md +1 -1
  185. package/docs/formats/dxbc/reference/api.md +28 -0
  186. package/docs/formats/hlsl/README.md +3 -3
  187. package/docs/formats/hlsl/architecture.md +8 -9
  188. package/docs/formats/hlsl/guides/hydrating-json-output.md +3 -5
  189. package/docs/formats/hlsl/guides/reading-effects.md +5 -1
  190. package/docs/formats/hlsl/reference/advanced-analysis.md +20 -25
  191. package/docs/formats/hlsl/reference/api.md +0 -7
  192. package/docs/formats/hlsl/reference/json-graph.md +1 -4
  193. package/docs/formats/pickle.md +82 -0
  194. package/docs/formats/webgl/README.md +71 -13
  195. package/docs/formats/webgl/architecture.md +16 -17
  196. package/docs/formats/webgl/carbon-constant-layouts.md +3 -3
  197. package/docs/formats/webgl/decl-io.md +3 -3
  198. package/docs/formats/webgl/memory-structured.md +27 -8
  199. package/docs/formats/webgl/texture-sample.md +1 -1
  200. package/docs/formats/webgpu/README.md +3 -3
  201. package/docs/formats/webgpu/architecture.md +5 -6
  202. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +10 -11
  203. package/docs/formats/webgpu/guides/effect-packaging.md +6 -8
  204. package/docs/formats/webgpu/reference/api.md +11 -12
  205. package/docs/formats/webgpu/reference/wgsl-compatibility.md +11 -8
  206. package/docs/formats/wwise.md +63 -2
  207. package/docs/reference/classes/core.md +10 -0
  208. package/docs/reference/classes/formats.md +40 -48
  209. package/docs/reference/classes/resources.md +2 -2
  210. package/docs/reference/queues.md +88 -4
  211. package/docs/reference/workers.md +7 -0
  212. package/package.json +61 -61
  213. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  214. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  215. package/dist/format/effect/effectReflectionPackage.js +0 -636
  216. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  217. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  218. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  219. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  220. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  221. package/dist/formats/hlsl/portable.js +0 -2
  222. package/dist/formats/hlsl/portable.js.map +0 -1
  223. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  224. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  225. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  226. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  227. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  228. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  229. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  230. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  231. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  233. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  234. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  235. package/dist/resource/shader/portable.js +0 -33
  236. package/dist/resource/shader/portable.js.map +0 -1
  237. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  238. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"HlslEffectDescription.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/shader/HlslEffectDescription.js"],"sourcesContent":["import { HlslReader } from \"../../HlslReader.js\";\nimport { asUint8Array } from \"@carbonenginejs/runtime-utils/bytes\";\nimport { cjsUint32ToFloat32 } from \"../../HlslBinaryUtils.js\";\nimport { HlslRenderStateSetup } from \"../../HlslRenderStateSetup.js\";\nimport { HlslResourceSetDescription } from \"../../HlslResourceSetDescription.js\";\nimport { HlslShaderBytecode } from \"../../HlslShaderBytecode.js\";\nimport {\n HlslRenderContextEnum,\n HlslUsageCodeNames,\n hlslShaderStageName\n} from \"../HlslRenderContextEnum.js\";\nimport { HlslEffectConstant } from \"./HlslEffectConstant.js\";\nimport { HlslEffectLibrary } from \"./HlslEffectLibrary.js\";\nimport { HlslEffectParameterAnnotation } from \"./HlslEffectParameterAnnotation.js\";\nimport { HlslEffectResource } from \"./HlslEffectResource.js\";\nimport { HlslEffectStageInput } from \"./HlslEffectStageInput.js\";\nimport { HlslEffectTechnique } from \"./HlslEffectTechnique.js\";\nimport { HlslPass } from \"./HlslPass.js\";\nimport { HlslSamplerDescription } from \"./HlslSamplerDescription.js\";\nimport { HlslSamplerSetup } from \"./HlslSamplerSetup.js\";\n\nexport const DEFAULT_TECHNIQUE = \"Main\";\nexport const ANY_TECHNIQUE = \"\";\n\n/**\n * Trinity effect-description body decoded from one compiled permutation record.\n */\nexport class HlslEffectDescription\n{\n /**\n * Creates an empty decoded effect description.\n */\n constructor()\n {\n this.techniques = [];\n this.annotations = new Map();\n this.version = 0;\n this.effectName = \"\";\n this.readError = null;\n this.effectStateManager = null;\n }\n\n /**\n * Reads a compiled effect body using the shared string table from `HlslEffectRes`.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} data Effect body bytes.\n * @param {number} dataSize Valid byte size of the effect body.\n * @param {number} version Carbon effect data version.\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} stringTable Shared effect string table.\n * @param {number} stringTableSize Valid string-table byte count.\n * @param {string} effectName Source effect name or path.\n * @param {object} [options] Reader options and dependency overrides.\n * @returns {boolean} True when the body was decoded successfully.\n */\n Read(data, dataSize, version, stringTable, stringTableSize, effectName, options = {})\n {\n this.techniques = [];\n this.annotations = new Map();\n this.version = Number(version) || 0;\n this.effectName = effectName || \"\";\n this.readError = null;\n this.effectStateManager = options.effectStateManager || options.renderContext?.m_esm || null;\n\n try\n {\n const bodyBytes = asUint8Array(data).subarray(0, Number(dataSize) || 0);\n const tableBytes = asUint8Array(stringTable).subarray(0, Number(stringTableSize) || 0);\n const stream = new HlslReader(bodyBytes, {\n stringTable: tableBytes,\n stringTableSize: tableBytes.length,\n source: effectName || \"HlslEffectDescription\"\n });\n const context = createReadContext(options, this.effectStateManager);\n this.effectStateManager = context.effectStateManager;\n\n let techniqueCount = 1;\n if (version > 6)\n {\n techniqueCount = stream.readUint8();\n }\n\n for (let techniqueIndex = 0; techniqueIndex < techniqueCount; techniqueIndex += 1)\n {\n const technique = new HlslEffectTechnique();\n technique.name = version > 6 ? stream.readString() : DEFAULT_TECHNIQUE;\n technique.shaderTypeMask = 0;\n\n const passCount = sanityCheck(stream.readUint8(), 64, \"pass count\");\n for (let passIndex = 0; passIndex < passCount; passIndex += 1)\n {\n const pass = readPass(stream, version, effectName || \"\", context);\n technique.passes.push(pass);\n technique.shaderTypeMask |= pass.shaderTypeMask;\n }\n\n if (version > 13)\n {\n const libraryCount = stream.readUint8();\n for (let libraryIndex = 0; libraryIndex < libraryCount; libraryIndex += 1)\n {\n technique.libraries.push(readLibrary(stream, version, context));\n }\n }\n\n this.techniques.push(technique);\n }\n\n const parameterCount = sanityCheck(stream.readUint16(), 256, \"parameter annotation count\");\n for (let parameterIndex = 0; parameterIndex < parameterCount; parameterIndex += 1)\n {\n const name = stream.readString();\n if (this.annotations.has(name))\n {\n throw new Error(`Duplicate effect parameter annotation group ${name}`);\n }\n this.annotations.set(name, readAnnotations(stream));\n }\n\n applyHeapViewAnnotations(this, context);\n return true;\n }\n catch (error)\n {\n this.readError = error;\n this.techniques = [];\n this.annotations = new Map();\n return false;\n }\n }\n\n /**\n * Returns a JSON-safe summary of decoded techniques and annotations.\n *\n * @returns {object} Serializable effect-description summary.\n */\n toJSON()\n {\n return {\n version: this.version,\n effectName: this.effectName,\n techniques: this.techniques.map((entry) => entry.toJSON()),\n annotations: mapAnnotationToJson(this.annotations),\n readError: this.readError ? {\n name: this.readError.name,\n message: this.readError.message,\n details: this.readError.details || null\n } : null\n };\n }\n}\n\n/**\n * Builds the shared parser context used while reading one effect body.\n *\n * @param {object} options Reader options from `Read`.\n * @param {object|null} effectStateManager Effect-state registry override.\n * @returns {object} Parser context.\n */\nfunction createReadContext(options, effectStateManager)\n{\n return {\n effectStateManager,\n perFrameVSStartRegister: Number.isInteger(options.perFrameVSStartRegister)\n ? options.perFrameVSStartRegister\n : null,\n perFramePSStartRegister: Number.isInteger(options.perFramePSStartRegister)\n ? options.perFramePSStartRegister\n : null\n };\n}\n\n/**\n * Reads one technique pass, including shader stages, signatures, resources, and states.\n *\n * @param {HlslReader} stream Binary reader positioned at a pass record.\n * @param {number} version Carbon effect data version.\n * @param {string} effectName Source effect name or path.\n * @param {object} context Shared parser context.\n * @returns {HlslPass} Decoded pass.\n */\nfunction readPass(stream, version, effectName, context)\n{\n const pass = new HlslPass();\n const shaderTypes = [];\n const signatures = [];\n const shaderHandles = [];\n const stageCount = sanityCheck(stream.readUint8(), HlslRenderContextEnum.SHADER_TYPE_COUNT, \"stage count\");\n\n for (let stageIndex = 0; stageIndex < stageCount; stageIndex += 1)\n {\n const stageType = stream.readUint8();\n if (stageType >= HlslRenderContextEnum.SHADER_TYPE_COUNT\n || pass.stageInputs[stageType]?.m_exists)\n {\n throw new Error(`Duplicate or invalid shader stage type ${stageType}`);\n }\n const stageInput = pass.stageInputs[stageType] || new HlslEffectStageInput();\n pass.stageInputs[stageType] = stageInput;\n pass.shaderTypeMask |= 1 << stageType;\n stageInput.m_exists = true;\n\n if (version < 14)\n {\n readPipelineInputs(stageInput.signature.pipelineInputs, stream, version);\n if (version > 8)\n {\n readRegisters(stageInput.signature, stream, version, stageType, context);\n }\n }\n\n const shaderSize = stream.readUint32();\n let shaderBlob;\n if (version < 5)\n {\n shaderBlob = {\n offset: null,\n bytes: stream.readRaw(shaderSize)\n };\n stream.readRaw(stream.readUint32());\n }\n else\n {\n shaderBlob = stream.readTableBlob(shaderSize);\n if (version < 12)\n {\n stream.readUint32();\n stream.readUint32();\n }\n }\n\n if (version >= 3)\n {\n stageInput.signature.threadGroupSize = {\n x: stream.readUint32(),\n y: stream.readUint32(),\n z: stream.readUint32()\n };\n }\n\n if (version >= 14)\n {\n readPipelineInputs(stageInput.signature.pipelineInputs, stream, version);\n readRegisters(stageInput.signature, stream, version, stageType, context);\n }\n\n readInput(stageInput, stream, version, stageType, context);\n\n const bytecode = new HlslShaderBytecode({\n stageType,\n stageName: hlslShaderStageName(stageType),\n bytes: shaderBlob.bytes,\n shaderSize,\n stringTableOffset: shaderBlob.offset,\n effectName\n });\n stageInput.cjsShaderBytecode = bytecode;\n stageInput.m_shader = context.effectStateManager.RegisterShader(stageType, bytecode, stageInput.signature, effectName);\n shaderHandles[stageIndex] = stageInput.m_shader;\n shaderTypes.push(stageType);\n signatures.push(stageInput.signature);\n }\n\n pass.resourceSetDesc = new HlslResourceSetDescription(shaderTypes, signatures);\n for (let stageType = 0; stageType < HlslRenderContextEnum.SHADER_TYPE_COUNT; stageType += 1)\n {\n const stageInput = pass.stageInputs[stageType];\n if (!stageInput?.m_exists) continue;\n for (const [ registerIndex, sampler ] of stageInput.samplers.entries())\n {\n pass.resourceSetDesc.SetSampler(stageType, registerIndex, sampler.sampler);\n }\n }\n\n pass.shaderProgram = context.effectStateManager.RegisterShaderProgram(shaderHandles, stageCount);\n\n const stateCount = sanityCheck(stream.readUint8(), 64, \"render state count\");\n const states = new Map();\n for (let stateIndex = 0; stateIndex < stateCount; stateIndex += 1)\n {\n const state = stream.readUint32();\n const value = stream.readUint32();\n if (states.has(state))\n {\n throw new Error(`Duplicate render state ${state}`);\n }\n states.set(state, value);\n }\n pass.cjsRenderStateSetup = new HlslRenderStateSetup(states);\n pass.renderStates = context.effectStateManager.RegisterRenderStateSetup(pass.cjsRenderStateSetup);\n\n return pass;\n}\n\n/**\n * Reads one ray-tracing shader library block from v14+ effect data.\n *\n * @param {HlslReader} stream Binary reader positioned at a library record.\n * @param {number} version Carbon effect data version.\n * @param {object} context Shared parser context.\n * @returns {HlslEffectLibrary} Decoded library metadata.\n */\nfunction readLibrary(stream, version, context)\n{\n const library = new HlslEffectLibrary();\n library.payloadSize = stream.readUint32();\n const bytecodeSize = stream.readUint32();\n const bytecodeBlob = stream.readTableBlob(bytecodeSize);\n library.cjsShaderBytecode = new HlslShaderBytecode({\n stageType: HlslRenderContextEnum.COMPUTE_SHADER,\n stageName: \"library\",\n bytes: bytecodeBlob.bytes,\n shaderSize: bytecodeSize,\n stringTableOffset: bytecodeBlob.offset\n });\n library.libraryHandle = context.effectStateManager.RegisterShaderLibrary(\n library.cjsShaderBytecode\n );\n\n const exportCount = stream.readUint32();\n for (let exportIndex = 0; exportIndex < exportCount; exportIndex += 1)\n {\n const type = stream.readUint8();\n const name = stream.readString();\n library.exports.push({ type, name });\n if (type === 0) library.rayGenName = name;\n if (type === 1) library.missName = name;\n if (type === 2) library.closestHitName = name;\n if (type === 3) library.anyHitName = name;\n if (type === 4) library.intersectionName = name;\n }\n library.hitGroupName = stream.readString();\n\n const shaderType = HlslRenderContextEnum.COMPUTE_SHADER;\n readRegisters(library.globalInput.signature, stream, version, shaderType, context);\n readInput(library.globalInput, stream, version, shaderType, context);\n library.globalResourceSetDesc = new HlslResourceSetDescription([ shaderType ], [ library.globalInput.signature ]);\n for (const [ registerIndex, sampler ] of library.globalInput.samplers.entries())\n {\n library.globalResourceSetDesc.SetSampler(shaderType, registerIndex, sampler.sampler);\n }\n\n readRegisters(library.localInput.signature, stream, version, shaderType, context);\n readInput(library.localInput, stream, version, shaderType, context);\n\n return library;\n}\n\n/**\n * Reads constants, resources, samplers, UAVs, and annotations for one shader input.\n *\n * @param {HlslEffectStageInput} input Stage or library input to populate.\n * @param {HlslReader} stream Binary reader positioned at an input record.\n * @param {number} version Carbon effect data version.\n * @param {number} stageType Trinity shader stage enum value.\n * @param {object} context Shared parser context.\n */\nfunction readInput(input, stream, version, stageType, context)\n{\n const constantCount = stream.readUint32();\n input.constants = [];\n for (let constantIndex = 0; constantIndex < constantCount; constantIndex += 1)\n {\n input.constants.push(readConstant(stream, version));\n }\n\n const constantValueSize = stream.readUint32();\n input.sourceConstantValueSize = constantValueSize;\n let sourceConstantValues;\n if (version < 5)\n {\n sourceConstantValues = constantValueSize\n ? stream.readRaw(constantValueSize)\n : new Uint8Array(0);\n }\n else\n {\n const blob = stream.readTableBlobOptional(constantValueSize);\n sourceConstantValues = blob.bytes;\n }\n input.sourceConstantValues = Uint8Array.from(sourceConstantValues);\n input.m_constantValueSize = Math.min(\n constantValueSize,\n HlslEffectStageInput.SHADER_CONSTANTS_MAX\n );\n input.constantValues = input.sourceConstantValues.slice(0, input.m_constantValueSize);\n\n const textureCount = sanityCheck(stream.readUint8(), 64, \"texture count\");\n input.resources = new Map();\n for (let textureIndex = 0; textureIndex < textureCount; textureIndex += 1)\n {\n const registerIndex = stream.readUint8();\n if (input.resources.has(registerIndex))\n {\n throw new Error(`Duplicate resource register ${registerIndex}`);\n }\n input.resources.set(registerIndex, readResource(stream, version));\n }\n\n const samplerCount = sanityCheck(stream.readUint8(), 64, \"sampler count\");\n input.samplers = new Map();\n for (let samplerIndex = 0; samplerIndex < samplerCount; samplerIndex += 1)\n {\n const registerIndex = stream.readUint8();\n const samplerSetup = new HlslSamplerSetup();\n samplerSetup.name = version >= 4 ? stream.readString() : null;\n samplerSetup.sampler = readSampler(stream);\n if (version < 4)\n {\n stream.readBool();\n }\n if (version > 12)\n {\n samplerSetup.sampler.isDynamic = stream.readBool();\n if (!samplerSetup.sampler.isDynamic)\n {\n samplerSetup.name = null;\n }\n }\n if (input.samplers.has(registerIndex))\n {\n throw new Error(`Duplicate sampler register ${registerIndex}`);\n }\n input.samplers.set(registerIndex, samplerSetup);\n }\n\n if (version >= 3)\n {\n const uavCount = sanityCheck(stream.readUint8(), 64, \"uav count\");\n input.uavs = new Map();\n for (let uavIndex = 0; uavIndex < uavCount; uavIndex += 1)\n {\n const registerIndex = stream.readUint8();\n const resource = new HlslEffectResource();\n resource.isSRGB = false;\n resource.name = stream.readString();\n resource.type = stream.readUint8();\n resource.arrayElements = version >= 13 ? stream.readUint32() : 1;\n resource.isAutoregister = stream.readBool();\n if (input.uavs.has(registerIndex))\n {\n throw new Error(`Duplicate UAV register ${registerIndex}`);\n }\n input.uavs.set(registerIndex, resource);\n }\n\n if (version >= 8)\n {\n input.annotation = readAnnotations(stream);\n }\n }\n\n for (const constant of input.constants)\n {\n patchSamplerHeapIndexConstant(input, constant, context, stageType);\n }\n}\n\n/**\n * Reads a vector of parameter annotations from the effect stream.\n *\n * @param {HlslReader} stream Binary reader positioned at an annotation vector.\n * @returns {HlslEffectParameterAnnotation[]} Decoded annotations.\n */\nfunction readAnnotations(stream)\n{\n const annotations = [];\n const annotationCount = stream.readUint8();\n for (let annotationIndex = 0; annotationIndex < annotationCount; annotationIndex += 1)\n {\n const annotation = new HlslEffectParameterAnnotation();\n annotation.name = stream.readString();\n annotation.type = stream.readUint8();\n\n if (annotation.type === HlslEffectParameterAnnotation.Type.STRING)\n {\n annotation.stringValue = stream.readString();\n }\n else\n {\n annotation.rawValue = stream.readUint32();\n annotation.boolValue = annotation.rawValue !== 0;\n annotation.intValue = annotation.rawValue | 0;\n annotation.floatValue = cjsUint32ToFloat32(annotation.rawValue);\n }\n annotations.push(annotation);\n }\n return annotations;\n}\n\n/**\n * Reads one constant-buffer metadata record.\n *\n * @param {HlslReader} stream Binary reader positioned at a constant record.\n * @param {number} version Carbon effect data version.\n * @returns {HlslEffectConstant} Decoded constant metadata.\n */\nfunction readConstant(stream, version)\n{\n const constant = new HlslEffectConstant();\n constant.name = stream.readString();\n constant.offset = stream.readUint32();\n constant.size = stream.readUint32();\n if (version < 11)\n {\n const oldType = stream.readUint8();\n if (oldType === 0) constant.type = HlslEffectConstant.Type.FLOAT;\n else if (oldType === 1) constant.type = HlslEffectConstant.Type.INT;\n else if (oldType === 2) constant.type = HlslEffectConstant.Type.BOOL;\n else constant.type = HlslEffectConstant.Type.OTHER;\n }\n else\n {\n constant.type = stream.readUint8();\n }\n constant.dimension = stream.readUint8();\n constant.elements = stream.readUint32();\n constant.isSRGB = stream.readBool();\n constant.isAutoregister = stream.readBool();\n return constant;\n}\n\n/**\n * Reads one shader resource metadata record.\n *\n * @param {HlslReader} stream Binary reader positioned at a resource record.\n * @param {number} version Carbon effect data version.\n * @returns {HlslEffectResource} Decoded resource metadata.\n */\nfunction readResource(stream, version)\n{\n const resource = new HlslEffectResource();\n resource.name = stream.readString();\n resource.type = stream.readUint8();\n resource.arrayElements = version >= 13 ? stream.readUint32() : 1;\n resource.isSRGB = stream.readBool();\n resource.isAutoregister = stream.readBool();\n return resource;\n}\n\n/**\n * Reads one static or dynamic sampler descriptor.\n *\n * @param {HlslReader} stream Binary reader positioned at a sampler descriptor.\n * @returns {HlslSamplerDescription} Decoded sampler descriptor.\n */\nfunction readSampler(stream)\n{\n const sampler = new HlslSamplerDescription();\n sampler.comparison = stream.readBool();\n sampler.minFilter = stream.readUint8();\n sampler.magFilter = stream.readUint8();\n sampler.mipFilter = stream.readUint8();\n sampler.addressU = stream.readUint8();\n sampler.addressV = stream.readUint8();\n sampler.addressW = stream.readUint8();\n const mipLODBias = readFloat32WithBits(stream);\n sampler.mipLODBias = mipLODBias.value;\n sampler.mipLODBiasRaw = mipLODBias.rawValue;\n sampler.maxAnisotropy = stream.readUint8();\n sampler.comparisonFunc = stream.readUint8();\n const borderColor = Array.from({ length: 4 }, () => readFloat32WithBits(stream));\n sampler.borderColor = borderColor.map((entry) => entry.value);\n sampler.borderColorRaw = borderColor.map((entry) => entry.rawValue);\n const minLOD = readFloat32WithBits(stream);\n sampler.minLOD = minLOD.value;\n sampler.minLODRaw = minLOD.rawValue;\n const maxLOD = readFloat32WithBits(stream);\n sampler.maxLOD = maxLOD.value;\n sampler.maxLODRaw = maxLOD.rawValue;\n return sampler;\n}\n\n/**\n * Reads vertex/input-layout signature records for one shader stage.\n *\n * @param {object[]} pipelineInputs Destination pipeline-input array.\n * @param {HlslReader} stream Binary reader positioned at the input list.\n * @param {number} version Carbon effect data version.\n */\nfunction readPipelineInputs(pipelineInputs, stream, version)\n{\n const inputCount = sanityCheck(stream.readUint8(), 64, \"pipeline input count\");\n pipelineInputs.length = 0;\n for (let inputIndex = 0; inputIndex < inputCount; inputIndex += 1)\n {\n const usage = stream.readUint8();\n const registerIndex = stream.readUint8();\n const usageIndex = stream.readUint8();\n const usedMask = stream.readUint8();\n const input = {\n usage,\n usageName: HlslUsageCodeNames[usage] || `USAGE_${usage}`,\n registerIndex,\n usageIndex,\n usedMask,\n type: 0,\n dimension: 4\n };\n if (version > 10)\n {\n input.type = stream.readUint8();\n input.dimension = stream.readUint8();\n }\n else\n {\n input.type = usage === 6 ? HlslEffectConstant.Type.UINT : HlslEffectConstant.Type.FLOAT;\n input.dimension = 4;\n }\n pipelineInputs.push(input);\n }\n}\n\n/**\n * Reads resource-register signatures and static sampler signatures for one stage.\n *\n * @param {object} signature Stage signature object to populate.\n * @param {HlslReader} stream Binary reader positioned at the register list.\n * @param {number} version Carbon effect data version.\n * @param {number} stageType Trinity shader stage enum value.\n * @param {object} context Shared parser context.\n */\nfunction readRegisters(signature, stream, version, stageType, context)\n{\n let inputCount = stream.readUint8();\n signature.registers = [];\n for (let inputIndex = 0; inputIndex < inputCount; inputIndex += 1)\n {\n const register = {};\n if (version > 9)\n {\n register.registerType = stream.readUint8();\n }\n else\n {\n register.registerType = mapOldRegisterType(stream.readUint8());\n }\n register.registerIndex = stream.readUint32();\n if (version > 12)\n {\n register.arrayCount = stream.readUint32();\n register.registerCount = register.arrayCount;\n register.registerSpace = stream.readUint8();\n }\n else\n {\n register.arrayCount = 1;\n register.registerCount = 1;\n register.registerSpace = stageType;\n }\n register.dynamic = isRegisterDynamic(register, stageType, context);\n signature.registers.push(register);\n }\n\n if (version > 12)\n {\n inputCount = stream.readUint8();\n signature.samplers = [];\n for (let inputIndex = 0; inputIndex < inputCount; inputIndex += 1)\n {\n signature.samplers.push(readStaticSampler(stream));\n }\n }\n}\n\n/**\n * Reads one static sampler signature entry from v13+ effect data.\n *\n * @param {HlslReader} stream Binary reader positioned at a static sampler record.\n * @returns {object} Decoded static sampler entry.\n */\nfunction readStaticSampler(stream)\n{\n const record = {\n registerIndex: stream.readUint32(),\n registerSpace: stream.readUint8(),\n sampler: {\n comparison: stream.readBool(),\n minFilter: stream.readUint8(),\n magFilter: stream.readUint8(),\n mipFilter: stream.readUint8(),\n addressU: stream.readUint8(),\n addressV: stream.readUint8(),\n addressW: stream.readUint8(),\n mipLODBias: 0,\n maxAnisotropy: 0,\n comparisonFunc: 0,\n borderColor: 0,\n minLOD: 0,\n maxLOD: 0\n }\n };\n Object.defineProperties(record.sampler, {\n mipLODBiasRaw: { value: 0, writable: true },\n minLODRaw: { value: 0, writable: true },\n maxLODRaw: { value: 0, writable: true }\n });\n const mipLODBias = readFloat32WithBits(stream);\n record.sampler.mipLODBias = mipLODBias.value;\n record.sampler.mipLODBiasRaw = mipLODBias.rawValue;\n record.sampler.maxAnisotropy = stream.readUint8();\n record.sampler.comparisonFunc = stream.readUint8();\n record.sampler.borderColor = stream.readUint8();\n const minLOD = readFloat32WithBits(stream);\n record.sampler.minLOD = minLOD.value;\n record.sampler.minLODRaw = minLOD.rawValue;\n const maxLOD = readFloat32WithBits(stream);\n record.sampler.maxLOD = maxLOD.value;\n record.sampler.maxLODRaw = maxLOD.rawValue;\n return record;\n}\n\n/**\n * Reads one float while preserving its exact serialized IEEE-754 bits.\n *\n * @param {HlslReader} stream Binary reader positioned at a float.\n * @returns {{value:number,rawValue:number}} Decoded value and raw uint32 bits.\n */\nfunction readFloat32WithBits(stream)\n{\n const rawValue = stream.readUint32();\n return {\n value: cjsUint32ToFloat32(rawValue),\n rawValue\n };\n}\n\n/**\n * Maps pre-v10 register type ids to Carbon's newer register type values.\n *\n * @param {number} value Legacy register type id.\n * @returns {number} Modern register type value.\n */\nfunction mapOldRegisterType(value)\n{\n if (value === 0) return 0;\n if (value === 1) return 36;\n if (value === 2) return 68;\n if (value === 3) return 1;\n return 36;\n}\n\n/**\n * Determines whether a resource register is dynamic for the current stage.\n *\n * @param {object} register Register signature metadata.\n * @param {number} stageType Trinity shader stage enum value.\n * @param {object} context Shared parser context.\n * @returns {boolean} True when the register should be treated as dynamic.\n */\nfunction isRegisterDynamic(register, stageType, context)\n{\n if (register.registerType !== 0)\n {\n return true;\n }\n if (stageType === HlslRenderContextEnum.VERTEX_SHADER && register.registerIndex === context.perFrameVSStartRegister)\n {\n return false;\n }\n if (stageType === HlslRenderContextEnum.PIXEL_SHADER && register.registerIndex === context.perFramePSStartRegister)\n {\n return false;\n }\n return true;\n}\n\n/**\n * Ensures sampler heap-index constants have enough backing constant data.\n *\n * @param {HlslEffectStageInput} input Stage input containing samplers and constants.\n * @param {HlslEffectConstant} constant Constant metadata to compare with sampler names.\n */\nfunction patchSamplerHeapIndexConstant(input, constant)\n{\n if (constant.type !== HlslEffectConstant.Type.UINT || constant.dimension !== 1)\n {\n return;\n }\n for (const sampler of input.samplers.values())\n {\n if (sampler.name !== constant.name) continue;\n const neededSize = constant.offset + constant.size;\n if (neededSize > input.m_constantValueSize)\n {\n const next = new Uint8Array(neededSize);\n next.set(input.constantValues);\n input.constantValues = next;\n input.m_constantValueSize = neededSize;\n }\n break;\n }\n}\n\n/**\n * Applies `IsHeapView` parameter annotations to resource-set descriptions.\n *\n * @param {HlslEffectDescription} effectDescription Fully read effect description.\n */\nfunction applyHeapViewAnnotations(effectDescription)\n{\n const isHeapView = (name) =>\n {\n if (!name) return false;\n const annotations = effectDescription.annotations.get(name) || [];\n return annotations.some((annotation) =>\n annotation.name === \"IsHeapView\" &&\n annotation.type === HlslEffectParameterAnnotation.Type.BOOL &&\n annotation.boolValue\n );\n };\n\n for (const technique of effectDescription.techniques)\n {\n for (const library of technique.libraries)\n {\n const shaderType = HlslRenderContextEnum.COMPUTE_SHADER;\n for (const [ registerIndex, resource ] of library.globalInput.resources.entries())\n {\n if (isHeapView(resource.name)) library.globalResourceSetDesc?.SetSrvHeapView(shaderType, registerIndex);\n }\n for (const [ registerIndex, resource ] of library.globalInput.uavs.entries())\n {\n if (isHeapView(resource.name)) library.globalResourceSetDesc?.SetUavHeapView(shaderType, registerIndex);\n }\n for (const [ registerIndex, sampler ] of library.globalInput.samplers.entries())\n {\n if (isHeapView(sampler.name)) library.globalResourceSetDesc?.SetSamplerHeapView(shaderType, registerIndex);\n }\n }\n\n for (const pass of technique.passes)\n {\n for (let stageType = 0; stageType < pass.stageInputs.length; stageType += 1)\n {\n const stage = pass.stageInputs[stageType];\n if (!stage?.m_exists) continue;\n for (const [ registerIndex, resource ] of stage.resources.entries())\n {\n if (isHeapView(resource.name)) pass.resourceSetDesc?.SetSrvHeapView(stageType, registerIndex);\n }\n for (const [ registerIndex, resource ] of stage.uavs.entries())\n {\n if (isHeapView(resource.name)) pass.resourceSetDesc?.SetUavHeapView(stageType, registerIndex);\n }\n for (const [ registerIndex, sampler ] of stage.samplers.entries())\n {\n if (isHeapView(sampler.name)) pass.resourceSetDesc?.SetSamplerHeapView(stageType, registerIndex);\n }\n }\n }\n }\n}\n\n/**\n * Rejects unexpectedly large counts before allocating or iterating.\n *\n * @param {number} value Count read from the effect stream.\n * @param {number} limit Maximum expected count.\n * @param {string} label Name used in the thrown error.\n * @returns {number} The original value when it is within range.\n */\nfunction sanityCheck(value, limit, label)\n{\n if (value > limit)\n {\n throw new Error(`Unexpected ${label}: ${value}`);\n }\n return value;\n}\n\n/**\n * Serializes a map of parameter names to annotation arrays.\n *\n * @param {Map<string, HlslEffectParameterAnnotation[]>} map Annotation map.\n * @returns {object[]} JSON-safe annotation groups.\n */\nfunction mapAnnotationToJson(map)\n{\n return Array.from(map.entries()).map(([ name, annotations ]) => ({\n name,\n annotations: annotations.map((entry) => entry.toJSON())\n }));\n}\n"],"names":["DEFAULT_TECHNIQUE","ANY_TECHNIQUE","HlslEffectDescription","constructor","techniques","annotations","Map","version","effectName","readError","effectStateManager","Read","data","dataSize","stringTable","stringTableSize","options","Number","renderContext","m_esm","bodyBytes","asUint8Array","subarray","tableBytes","stream","HlslReader","length","source","context","createReadContext","techniqueCount","readUint8","techniqueIndex","technique","HlslEffectTechnique","name","readString","shaderTypeMask","passCount","sanityCheck","passIndex","pass","readPass","passes","push","libraryCount","libraryIndex","libraries","readLibrary","parameterCount","readUint16","parameterIndex","has","Error","set","readAnnotations","applyHeapViewAnnotations","error","toJSON","map","entry","mapAnnotationToJson","message","details","perFrameVSStartRegister","isInteger","perFramePSStartRegister","HlslPass","shaderTypes","signatures","shaderHandles","stageCount","HlslRenderContextEnum","SHADER_TYPE_COUNT","stageIndex","stageType","stageInputs","m_exists","stageInput","HlslEffectStageInput","readPipelineInputs","signature","pipelineInputs","readRegisters","shaderSize","readUint32","shaderBlob","offset","bytes","readRaw","readTableBlob","threadGroupSize","x","y","z","readInput","bytecode","HlslShaderBytecode","stageName","hlslShaderStageName","stringTableOffset","cjsShaderBytecode","m_shader","RegisterShader","resourceSetDesc","HlslResourceSetDescription","registerIndex","sampler","samplers","entries","SetSampler","shaderProgram","RegisterShaderProgram","stateCount","states","stateIndex","state","value","cjsRenderStateSetup","HlslRenderStateSetup","renderStates","RegisterRenderStateSetup","library","HlslEffectLibrary","payloadSize","bytecodeSize","bytecodeBlob","COMPUTE_SHADER","libraryHandle","RegisterShaderLibrary","exportCount","exportIndex","type","exports","rayGenName","missName","closestHitName","anyHitName","intersectionName","hitGroupName","shaderType","globalInput","globalResourceSetDesc","localInput","input","constantCount","constants","constantIndex","readConstant","constantValueSize","sourceConstantValueSize","sourceConstantValues","Uint8Array","blob","readTableBlobOptional","from","m_constantValueSize","Math","min","SHADER_CONSTANTS_MAX","constantValues","slice","textureCount","resources","textureIndex","readResource","samplerCount","samplerIndex","samplerSetup","HlslSamplerSetup","readSampler","readBool","isDynamic","uavCount","uavs","uavIndex","resource","HlslEffectResource","isSRGB","arrayElements","isAutoregister","annotation","constant","patchSamplerHeapIndexConstant","annotationCount","annotationIndex","HlslEffectParameterAnnotation","Type","STRING","stringValue","rawValue","boolValue","intValue","floatValue","cjsUint32ToFloat32","HlslEffectConstant","size","oldType","FLOAT","INT","BOOL","OTHER","dimension","elements","HlslSamplerDescription","comparison","minFilter","magFilter","mipFilter","addressU","addressV","addressW","mipLODBias","readFloat32WithBits","mipLODBiasRaw","maxAnisotropy","comparisonFunc","borderColor","Array","borderColorRaw","minLOD","minLODRaw","maxLOD","maxLODRaw","inputCount","inputIndex","usage","usageIndex","usedMask","usageName","HlslUsageCodeNames","UINT","registers","register","registerType","mapOldRegisterType","arrayCount","registerCount","registerSpace","dynamic","isRegisterDynamic","readStaticSampler","record","Object","defineProperties","writable","VERTEX_SHADER","PIXEL_SHADER","values","neededSize","next","effectDescription","isHeapView","get","some","SetSrvHeapView","SetUavHeapView","SetSamplerHeapView","stage","limit","label"],"mappings":"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"}
1
+ {"version":3,"file":"HlslEffectDescription.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/shader/HlslEffectDescription.js"],"sourcesContent":["export const DEFAULT_TECHNIQUE = \"Main\";\nexport const ANY_TECHNIQUE = \"\";\n\n/**\n * Trinity effect-description body decoded from one compiled permutation record.\n *\n * This class no longer reads bytes. The single byte-reading implementation is\n * `CjsCarbonEffectReader` (`src/format/carbonEffect/`), which decodes a body\n * into a record tree; `runtimeDescriptionFromCarbon`\n * (`../../carbonDescriptionToRuntime.js`) maps those records onto this shape,\n * and `HlslEffectRes.GetShaderByIndex` assembles the result onto an instance.\n * The byte walk that used to live here — one of two hand-written copies of\n * Carbon's description layout — was deleted when the read paths converged;\n * its version branches (8..15) moved into the shared reader.\n */\nexport class HlslEffectDescription\n{\n /**\n * Creates an empty decoded effect description.\n */\n constructor()\n {\n this.techniques = [];\n this.annotations = new Map();\n this.version = 0;\n this.effectName = \"\";\n this.readError = null;\n this.effectStateManager = null;\n }\n\n /**\n * Returns a JSON-safe summary of decoded techniques and annotations.\n *\n * @returns {object} Serializable effect-description summary.\n */\n toJSON()\n {\n return {\n version: this.version,\n effectName: this.effectName,\n techniques: this.techniques.map((entry) => entry.toJSON()),\n annotations: mapAnnotationToJson(this.annotations),\n readError: this.readError ? {\n name: this.readError.name,\n message: this.readError.message,\n details: this.readError.details || null\n } : null\n };\n }\n}\n\n/**\n * Serializes a map of parameter names to annotation arrays.\n *\n * @param {Map<string, object[]>} map Annotation map.\n * @returns {object[]} JSON-safe annotation groups.\n */\nfunction mapAnnotationToJson(map)\n{\n return Array.from(map.entries()).map(([ name, annotations ]) => ({\n name,\n annotations: annotations.map((entry) => entry.toJSON())\n }));\n}\n"],"names":["ANY_TECHNIQUE","HlslEffectDescription","constructor","techniques","annotations","Map","version","effectName","readError","effectStateManager","toJSON","map","entry","mapAnnotationToJson","name","message","details","Array","from","entries"],"mappings":"AACO,MAAMA,aAAa,GAAG;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,qBAAqB,CAClC;AACI;AACJ;AACA;AACIC,EAAAA,WAAWA,GACX;IACI,IAAI,CAACC,UAAU,GAAG,EAAE;AACpB,IAAA,IAAI,CAACC,WAAW,GAAG,IAAIC,GAAG,EAAE;IAC5B,IAAI,CAACC,OAAO,GAAG,CAAC;IAChB,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,kBAAkB,GAAG,IAAI;AAClC,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIC,EAAAA,MAAMA,GACN;IACI,OAAO;MACHJ,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBC,UAAU,EAAE,IAAI,CAACA,UAAU;AAC3BJ,MAAAA,UAAU,EAAE,IAAI,CAACA,UAAU,CAACQ,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACF,MAAM,EAAE,CAAC;AAC1DN,MAAAA,WAAW,EAAES,mBAAmB,CAAC,IAAI,CAACT,WAAW,CAAC;AAClDI,MAAAA,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG;AACxBM,QAAAA,IAAI,EAAE,IAAI,CAACN,SAAS,CAACM,IAAI;AACzBC,QAAAA,OAAO,EAAE,IAAI,CAACP,SAAS,CAACO,OAAO;AAC/BC,QAAAA,OAAO,EAAE,IAAI,CAACR,SAAS,CAACQ,OAAO,IAAI;AACvC,OAAC,GAAG;KACP;AACL,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASH,mBAAmBA,CAACF,GAAG,EAChC;AACI,EAAA,OAAOM,KAAK,CAACC,IAAI,CAACP,GAAG,CAACQ,OAAO,EAAE,CAAC,CAACR,GAAG,CAAC,CAAC,CAAEG,IAAI,EAAEV,WAAW,CAAE,MAAM;IAC7DU,IAAI;IACJV,WAAW,EAAEA,WAAW,CAACO,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACF,MAAM,EAAE;AAC1D,GAAC,CAAC,CAAC;AACP;;;;"}
@@ -4,9 +4,10 @@ export { CjsCmfFormat } from './cmf/CjsCmfFormat.js';
4
4
  export { CjsDdsFormat } from './dds/CjsDdsFormat.js';
5
5
  export { CjsDxbcFormat } from './dxbc/CjsDxbcFormat.js';
6
6
  export { CjsHlslFormat } from './hlsl/CjsHlslFormat.js';
7
- import '../format/CjsByteReader.js';
8
7
  import '@carbonenginejs/runtime-utils/bytes';
9
- import './hlsl/core/tr2/shader/HlslEffectResource.js';
8
+ import './hlsl/core/carbonDescriptionToRuntime.js';
9
+ import '../format/CjsByteReader.js';
10
+ import '../format/compareUtf8.js';
10
11
  export { CjsWebglFormat } from './webgl/CjsWebglFormat.js';
11
12
  export { CjsWebgpuFormat } from './webgpu/CjsWebgpuFormat.js';
12
13
  export { CjsFbxFormat } from './fbx/CjsFbxFormat.js';
@@ -19,6 +20,7 @@ export { CjsMp3Format } from './mp3/CjsMp3Format.js';
19
20
  export { CjsMp4Format } from './mp4/CjsMp4Format.js';
20
21
  export { CjsObjFormat } from './obj/CjsObjFormat.js';
21
22
  export { CjsOggFormat } from './ogg/CjsOggFormat.js';
23
+ export { CjsPickleFormat } from './pickle/CjsPickleFormat.js';
22
24
  export { CjsPngFormat } from './png/CjsPngFormat.js';
23
25
  export { CjsRedFormat } from './red/CjsRedFormat.js';
24
26
  export { CjsStlFormat } from './stl/CjsStlFormat.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, toJsonValue, importNodeModule, toText, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_SHARED, OUTPUT_OBJ_JSON, OUTPUT_JSON, CLASS_KEYS } from './core/helpers.js';
1
+ import { DEFAULT_VALUES, normalizeValues, validateClassKey, validateClass, readWithValues, inspectWithValues, toJsonValue, toText, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_SHARED, OUTPUT_OBJ_JSON, OUTPUT_JSON, CLASS_KEYS } from './core/helpers.js';
2
2
 
3
3
  /**
4
4
  * Exposed CarbonEngineJS-facing OBJ format class.
@@ -195,27 +195,6 @@ class CjsObjFormat {
195
195
  return toJsonValue(value);
196
196
  }
197
197
 
198
- /**
199
- * Node-only convenience: reads an OBJ file from disk.
200
- *
201
- * @param {string} path Path to a Wavefront OBJ file.
202
- * @param {object} [options] Format values.
203
- * @returns {Promise<object>} The shared CarbonEngineJS JSON mesh schema.
204
- */
205
- static async readFile(path, options = {}) {
206
- if (typeof path !== "string" || !path) {
207
- throw new TypeError(`${FORMAT_NAME}: readFile path must be a non-empty string`);
208
- }
209
- const {
210
- readFile
211
- } = await importNodeModule("node:fs/promises");
212
- const input = await readFile(path);
213
- return CjsObjFormat.read(input, {
214
- source: path,
215
- ...options
216
- });
217
- }
218
-
219
198
  /**
220
199
  * Cheap text sniff for OBJ-like mesh data.
221
200
  *
@@ -1 +1 @@
1
- {"version":3,"file":"CjsObjFormat.js","sources":["../../../../src/formats/obj/CjsObjFormat.js"],"sourcesContent":["/**\n * Exposed CarbonEngineJS-facing OBJ format class.\n *\n * Keep this file small and reviewable: OBJ parsing, mesh rebuild helpers,\n * option normalization, and JSON hydration live under src/core.\n */\n\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GR2,\n OUTPUT_JSON,\n OUTPUT_OBJ_JSON,\n OUTPUT_SHARED,\n importNodeModule,\n inspectWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue,\n toText,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsObjFormat\";\n\n/**\n * CarbonEngineJS-facing Wavefront OBJ format surface.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * OBJ is the current import source; the public read contract is the shared\n * CarbonEngineJS JSON mesh schema.\n */\nexport class CjsObjFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #packTangents = DEFAULT_VALUES.packTangents;\n #uvHandedness = DEFAULT_VALUES.uvHandedness;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\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 {CjsObjFormat} 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.#packTangents = values.packTangents;\n this.#uvHandedness = values.uvHandedness;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 packTangents: this.#packTangents,\n uvHandedness: this.#uvHandedness,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\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.\n * @returns {CjsObjFormat} 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 {CjsObjFormat} 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 format profile 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 OBJ text with this profile's values.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} The shared CarbonEngineJS JSON mesh schema.\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options), FORMAT_NAME);\n }\n\n /**\n * Inspect OBJ text without hydrating classes.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 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), FORMAT_NAME);\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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} [options] Format values.\n * @returns {object} The shared CarbonEngineJS JSON mesh schema.\n */\n static read(input, options = {})\n {\n return readWithValues(CjsObjFormat, input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME), FORMAT_NAME);\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 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), 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 an OBJ file from disk.\n *\n * @param {string} path Path to a Wavefront OBJ file.\n * @param {object} [options] Format values.\n * @returns {Promise<object>} The shared CarbonEngineJS JSON mesh schema.\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 importNodeModule(\"node:fs/promises\");\n const input = await readFile(path);\n return CjsObjFormat.read(input, { source: path, ...options });\n }\n\n /**\n * Cheap text sniff for OBJ-like mesh data.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input Candidate OBJ text.\n * @returns {boolean} True when at least one vertex and face statement exist.\n */\n static isObj(input)\n {\n try\n {\n const text = toText(input);\n return /^v\\s+/m.test(text) && /^f\\s+/m.test(text);\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n JSON: OUTPUT_JSON,\n OBJ_JSON: OUTPUT_OBJ_JSON,\n SHARED: OUTPUT_SHARED,\n GR2: OUTPUT_GR2,\n CMF: OUTPUT_CMF\n });\n static CLASS_KEYS = CLASS_KEYS;\n static type = Object.freeze([ \"geometry\" ]);\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static inputTypes = Object.freeze([ \"obj\" ]);\n static outputTypes = Object.freeze([ OUTPUT_SHARED, OUTPUT_GR2, OUTPUT_CMF ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_JSON, OUTPUT_OBJ_JSON ]);\n\n}\n\nexport default CjsObjFormat;\n"],"names":["FORMAT_NAME","CjsObjFormat","DEFAULT_VALUES","emit","source","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","inspect","toJSON","readFile","path","TypeError","importNodeModule","isObj","text","toText","test","Output","Object","freeze","JSON","OUTPUT_JSON","OBJ_JSON","OUTPUT_OBJ_JSON","SHARED","OUTPUT_SHARED","GR2","OUTPUT_GR2","CMF","OUTPUT_CMF","CLASS_KEYS","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
1
+ {"version":3,"file":"CjsObjFormat.js","sources":["../../../../src/formats/obj/CjsObjFormat.js"],"sourcesContent":["/**\n * Exposed CarbonEngineJS-facing OBJ format class.\n *\n * Keep this file small and reviewable: OBJ parsing, mesh rebuild helpers,\n * option normalization, and JSON hydration live under src/core.\n */\n\nimport {\n CLASS_KEYS,\n DEFAULT_VALUES,\n OUTPUT_CMF,\n OUTPUT_GR2,\n OUTPUT_JSON,\n OUTPUT_OBJ_JSON,\n OUTPUT_SHARED,\n inspectWithValues,\n normalizeValues,\n readWithValues,\n toJsonValue,\n toText,\n validateClass,\n validateClassKey\n} from \"./core/helpers.js\";\n\nconst FORMAT_NAME = \"CjsObjFormat\";\n\n/**\n * CarbonEngineJS-facing Wavefront OBJ format surface.\n *\n * The Cjs prefix marks this as a JavaScript format/construction boundary.\n * OBJ is the current import source; the public read contract is the shared\n * CarbonEngineJS JSON mesh schema.\n */\nexport class CjsObjFormat\n{\n\n #emit = DEFAULT_VALUES.emit;\n #source = DEFAULT_VALUES.source;\n #packTangents = DEFAULT_VALUES.packTangents;\n #uvHandedness = DEFAULT_VALUES.uvHandedness;\n #rebuildMissingNormals = DEFAULT_VALUES.rebuildMissingNormals;\n #rebuildMissingTangents = DEFAULT_VALUES.rebuildMissingTangents;\n #rebuildMissingBiNormals = DEFAULT_VALUES.rebuildMissingBiNormals;\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 {CjsObjFormat} 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.#packTangents = values.packTangents;\n this.#uvHandedness = values.uvHandedness;\n this.#rebuildMissingNormals = values.rebuildMissingNormals;\n this.#rebuildMissingTangents = values.rebuildMissingTangents;\n this.#rebuildMissingBiNormals = values.rebuildMissingBiNormals;\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 packTangents: this.#packTangents,\n uvHandedness: this.#uvHandedness,\n rebuildMissingNormals: this.#rebuildMissingNormals,\n rebuildMissingTangents: this.#rebuildMissingTangents,\n rebuildMissingBiNormals: this.#rebuildMissingBiNormals,\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.\n * @returns {CjsObjFormat} 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 {CjsObjFormat} 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 format profile 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 OBJ text with this profile's values.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} [options] Per-call value overrides.\n * @returns {object} The shared CarbonEngineJS JSON mesh schema.\n */\n Read(input, options = {})\n {\n return readWithValues(this, input, this.GetValues(options), FORMAT_NAME);\n }\n\n /**\n * Inspect OBJ text without hydrating classes.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 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), FORMAT_NAME);\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 one-shot read. Static methods use camelCase by convention.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} [options] Format values.\n * @returns {object} The shared CarbonEngineJS JSON mesh schema.\n */\n static read(input, options = {})\n {\n return readWithValues(CjsObjFormat, input, normalizeValues(DEFAULT_VALUES, options, FORMAT_NAME), FORMAT_NAME);\n }\n\n /**\n * Static one-shot inspection.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 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), 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 * Cheap text sniff for OBJ-like mesh data.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input Candidate OBJ text.\n * @returns {boolean} True when at least one vertex and face statement exist.\n */\n static isObj(input)\n {\n try\n {\n const text = toText(input);\n return /^v\\s+/m.test(text) && /^f\\s+/m.test(text);\n }\n catch\n {\n return false;\n }\n }\n\n /**\n * Emit targets for this format (canonical frozen enum).\n */\n static Output = Object.freeze({\n JSON: OUTPUT_JSON,\n OBJ_JSON: OUTPUT_OBJ_JSON,\n SHARED: OUTPUT_SHARED,\n GR2: OUTPUT_GR2,\n CMF: OUTPUT_CMF\n });\n static CLASS_KEYS = CLASS_KEYS;\n static type = Object.freeze([ \"geometry\" ]);\n static mediaTypes = Object.freeze([ \"geometry\" ]);\n static inputTypes = Object.freeze([ \"obj\" ]);\n static outputTypes = Object.freeze([ OUTPUT_SHARED, OUTPUT_GR2, OUTPUT_CMF ]);\n static debugOutputTypes = Object.freeze([ OUTPUT_JSON, OUTPUT_OBJ_JSON ]);\n\n}\n\nexport default CjsObjFormat;\n"],"names":["FORMAT_NAME","CjsObjFormat","DEFAULT_VALUES","emit","source","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","constructor","options","SetValues","values","normalizeValues","GetValues","SetClasses","SetClass","type","Class","undefined","validateClassKey","validateClass","GetClass","HasClass","Read","input","readWithValues","Inspect","inspectWithValues","ToJSON","value","toJsonValue","read","inspect","toJSON","isObj","text","toText","test","Output","Object","freeze","JSON","OUTPUT_JSON","OBJ_JSON","OUTPUT_OBJ_JSON","SHARED","OUTPUT_SHARED","GR2","OUTPUT_GR2","CMF","OUTPUT_CMF","CLASS_KEYS","mediaTypes","inputTypes","outputTypes","debugOutputTypes"],"mappings":"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"}
@@ -549,25 +549,5 @@ function toJsonValue(value) {
549
549
  return out;
550
550
  }
551
551
 
552
- /**
553
- * Imports a Node built-in module without exposing the specifier to any
554
- * bundler's static import graph.
555
- *
556
- * `await import("node:fs/promises")` written as a literal is resolved
557
- * eagerly by webpack/Rollup/esbuild alike when they walk the module
558
- * graph, breaking browser builds even though this path only ever runs
559
- * under Node (readFile is a Node-only convenience). Building the
560
- * specifier inside a `Function` body hides it from every bundler's
561
- * static analysis - it only exists at runtime, in the Node process that
562
- * actually calls readFile.
563
- *
564
- * @param {string} specifier Node built-in module specifier, e.g. "node:fs/promises".
565
- * @returns {Promise<any>} The imported module namespace.
566
- */
567
- function importNodeModule(specifier) {
568
- // eslint-disable-next-line no-new-func
569
- return new Function("s", "return import(s)")(specifier);
570
- }
571
-
572
- export { CLASS_KEYS, CMF_CLASS_KEYS, DEFAULT_VALUES, GR2_CLASS_KEYS, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_OBJ_JSON, OUTPUT_SHARED, importNodeModule, inspectWithValues, normalizeValues, readWithValues, toJsonValue, toText, validateClass, validateClassKey };
552
+ export { CLASS_KEYS, CMF_CLASS_KEYS, DEFAULT_VALUES, GR2_CLASS_KEYS, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_OBJ_JSON, OUTPUT_SHARED, inspectWithValues, normalizeValues, readWithValues, toJsonValue, toText, validateClass, validateClassKey };
573
553
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/obj/core/helpers.js"],"sourcesContent":["/**\n * Internal read-pipeline glue for CjsObjFormat.\n */\n\nimport { hydrateJson } from \"./json.js\";\nimport { parseObjText } from \"./parser.js\";\nimport {\n generateBiNormals,\n generateNormals,\n generateTangents\n} from \"@carbonenginejs/runtime-utils/mesh\";\nimport {\n packTangentFrames\n} from \"@carbonenginejs/runtime-utils/tangent\";\n\nexport const GR2_CLASS_KEYS = Object.freeze([\n \"Root\",\n \"Mesh\",\n \"BoneBinding\",\n \"IndexGroup\",\n \"MorphTarget\",\n \"Model\",\n \"Skeleton\",\n \"Bone\",\n \"Animation\",\n \"TrackGroup\",\n \"TransformTrack\",\n \"Curve\"\n]);\n\nexport 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\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_OBJ_JSON = \"objJson\";\nexport const OUTPUT_SHARED = \"shared\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_CMF = \"cmf\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_OBJ_JSON,\n source: \"memory\",\n packTangents: false,\n uvHandedness: \"right\",\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"source\",\n \"packTangents\",\n \"uvHandedness\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\n/**\n * Validate a `classes` node key against {@link CLASS_KEYS}.\n *\n * @param {string} key Candidate node key.\n * @param {string} [readerName] Format name used in thrown errors.\n */\nexport function validateClassKey(key, readerName = \"CjsObjFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\n/**\n * Validate a single `classes` entry.\n *\n * @param {string} key Node key.\n * @param {Function} Class Candidate constructor.\n * @param {string} [readerName] Format name used in thrown errors.\n */\nexport function validateClass(key, Class, readerName = \"CjsObjFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\n/**\n * Merge and validate a class map.\n *\n * @param {object} base Current classes map.\n * @param {object} classes Incoming classes map.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {object} Merged classes.\n */\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\n/**\n * Validate a boolean/function mesh rule.\n *\n * @param {string} name Option name.\n * @param {any} value Candidate option value.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {boolean|Function} Validated rule.\n */\nfunction validateRule(name, value, readerName)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);\n}\n\n/**\n * Normalize the generated UV/tangent handedness option.\n *\n * @param {any} value Candidate option value.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {\"right\"|\"left\"} Normalized handedness.\n */\nfunction normalizeUvHandedness(value, readerName)\n{\n if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;\n if (value === \"right\" || value === 1 || value === \"positive\") return \"right\";\n if (value === \"left\" || value === -1 || value === \"negative\") return \"left\";\n throw new TypeError(`${readerName}: uvHandedness must be \"right\" or \"left\"`);\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string} [readerName] Format name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, readerName = \"CjsObjFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n const emit = normalizeEmit(values.emit, readerName);\n const classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes))\n {\n throw new TypeError(`${readerName}: emit \"${emit}\" requires explicit classes`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n\n return {\n emit,\n source: values.source,\n packTangents: validateRule(\"packTangents\", values.packTangents, readerName),\n uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),\n rebuildMissingNormals: validateRule(\"rebuildMissingNormals\", values.rebuildMissingNormals, readerName),\n rebuildMissingTangents: validateRule(\"rebuildMissingTangents\", values.rebuildMissingTangents, readerName),\n rebuildMissingBiNormals: validateRule(\"rebuildMissingBiNormals\", values.rebuildMissingBiNormals, readerName),\n classes\n };\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_OBJ_JSON || emit === OUTPUT_SHARED)\n {\n return OUTPUT_OBJ_JSON;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_SHARED}\", \"${OUTPUT_OBJ_JSON}\", \"${OUTPUT_GR2}\", or \"${OUTPUT_CMF}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\n/**\n * Normalize caller input into OBJ text.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input Candidate OBJ text.\n * @returns {string} OBJ text.\n */\nexport function toText(input)\n{\n if (typeof input === \"string\") return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer)\n {\n return new TextDecoder().decode(new Uint8Array(input));\n }\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView(input))\n {\n return new TextDecoder().decode(new Uint8Array(input.buffer, input.byteOffset, input.byteLength));\n }\n throw new TypeError(\"CjsObjFormat: input must be OBJ text or UTF-8 bytes\");\n}\n\n/**\n * Whether a shared-schema vertex channel contains data.\n *\n * @param {object} mesh Mesh record.\n * @param {string} channel Vertex channel name.\n * @returns {boolean} True when channel exists and has values.\n */\nfunction hasVertexChannel(mesh, channel)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n return !!value && value.length > 0;\n}\n\n/**\n * Require one vertex channel.\n *\n * @param {object} mesh Mesh record.\n * @param {number} meshIndex Mesh index.\n * @param {string} channel Vertex channel name.\n * @param {string} feature Feature name.\n * @returns {number[]} Channel values.\n */\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n if (!value || value.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsObjFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);\n }\n return value;\n}\n\n/**\n * Gather all triangle indices from a mesh's index groups.\n *\n * @param {object} mesh Mesh record.\n * @param {number} meshIndex Mesh index.\n * @param {string} feature Feature name.\n * @returns {number[]} Flat triangle indices.\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 if (faces.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsObjFormat: ${feature} requires triangle indices for mesh ${name}`);\n }\n return faces;\n}\n\n/**\n * Evaluate a boolean/function mesh rule.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {boolean|Function} rule Rule value.\n * @param {object} context Rule context.\n * @returns {boolean} Whether the rule applies.\n */\nfunction shouldApplyMeshRule(format, rule, context)\n{\n if (typeof rule === \"function\")\n {\n const result = rule({ format, reader: format, ...context });\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsObjFormat: ${context.feature} rule must return true or false`);\n }\n return result;\n }\n return rule;\n}\n\n/**\n * Apply missing-channel rebuild options to a shared JSON graph.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {object} json Shared JSON graph.\n * @param {object} values Normalized format values.\n */\nfunction rebuildMissingMeshData(format, json, values)\n{\n for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++)\n {\n const\n mesh = json.meshes[meshIndex],\n common = { options: values, raw: null, json, mesh, meshIndex },\n shouldPackTangents = shouldApplyMeshRule(\n format,\n values.packTangents,\n { ...common, feature: \"packTangents\", channel: \"tangent\" }\n );\n\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingNormals,\n { ...common, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\")\n );\n }\n else if (!hasVertexChannel(mesh, \"normal\") && shouldPackTangents)\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"packTangents\"),\n triangleFaces(mesh, meshIndex, \"packTangents\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingTangents,\n { ...common, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n else if (!hasVertexChannel(mesh, \"tangent\") && shouldPackTangents)\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"packTangents\"),\n triangleFaces(mesh, meshIndex, \"packTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingBiNormals,\n { ...common, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n mesh.vertex.binormal = generateBiNormals(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n else if (!hasVertexChannel(mesh, \"binormal\") && shouldPackTangents)\n {\n mesh.vertex.binormal = generateBiNormals(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"packTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n\n if (shouldPackTangents)\n {\n mesh.vertex.tangent = packTangentFrames(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"binormal\", \"packTangents\")\n );\n mesh.vertex.normal = [];\n mesh.vertex.binormal = [];\n }\n }\n}\n\n/**\n * Read OBJ text and return the shared JSON schema.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} values Normalized format values.\n * @param {string} readerName Format name.\n * @returns {object} Shared JSON graph.\n */\nexport function readWithValues(format, input, values, readerName = \"CjsObjFormat\")\n{\n const text = toText(input);\n const json = parseObjText(text, { source: values.source });\n rebuildMissingMeshData(format, json, values);\n if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source });\n return hydrateJson(json, { classes: values.classes, source: values.source });\n}\n\nfunction buildCmfFromShared(root)\n{\n return {\n version: 1,\n metadata: null,\n meshes: (root.meshes ?? []).map((mesh) => buildCmfMesh(mesh)),\n skeletons: [],\n animations: []\n };\n}\n\nfunction buildCmfMesh(mesh)\n{\n const\n vertex = mesh.vertex ?? {},\n stride = estimateVertexStride(vertex),\n vertexCount = stride === 0 ? 0 : Math.floor((vertex.position ?? []).length / 3),\n indices = mesh.indices ?? [];\n\n return {\n name: mesh.name ?? \"\",\n decl: buildCmfDecl(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: [],\n threshold: 0xffffffff,\n vertex,\n indices\n } ],\n areas: indices.map((group) => ({\n name: group.name ?? \"\",\n bounds: cmfBounds(mesh),\n bones: [],\n affectedByBones: false,\n affectedByMorphTargets: false\n })),\n boneBindings: [],\n morphTargets: { decl: [], targets: [] },\n uvDensities: [],\n bounds: cmfBounds(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 buildCmfDecl(vertex)\n{\n const decl = [];\n let offset = 0;\n for (const channel of [\n [ \"position\", \"Position\", 3 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"tangent\", \"Tangent\", 3 ],\n [ \"binormal\", \"Binormal\", 3 ],\n [ \"texcoord0\", \"TexCoord\", 2, 0 ],\n [ \"texcoord1\", \"TexCoord\", 2, 1 ],\n [ \"color0\", \"Color\", 4, 0 ],\n [ \"blendIndice\", \"BoneIndices\", 4, 0, \"UInt16\" ],\n [ \"blendWeight\", \"BoneWeights\", 4, 0 ]\n ])\n {\n const [ name, usage, elementCount, usageIndex = 0, type = \"Float32\" ] = channel;\n if (!Array.isArray(vertex[name]) || vertex[name].length === 0) continue;\n decl.push({ usage, usageIndex, type, elementCount, offset });\n offset += elementCount * elementTypeSize(type);\n }\n return decl;\n}\n\nfunction estimateVertexStride(vertex)\n{\n return buildCmfDecl(vertex).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 cmfBounds(mesh)\n{\n return {\n min: mesh.minBounds ?? [ 0, 0, 0 ],\n max: mesh.maxBounds ?? [ 0, 0, 0 ]\n };\n}\n\nfunction hydrateCmf(root, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrateCmfNode(\"Root\", {\n ...root,\n metadata: root.metadata ? hydrateCmfNode(\"Metadata\", root.metadata, hydrationClasses) : null,\n meshes: root.meshes.map((mesh) => hydrateCmfMesh(mesh, hydrationClasses)),\n skeletons: root.skeletons.map((skeleton) => hydrateCmfNode(\"Skeleton\", skeleton, hydrationClasses)),\n animations: root.animations.map((animation) => hydrateCmfNode(\"Animation\", animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateCmfMesh(mesh, classes)\n{\n return hydrateCmfNode(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrateCmfNode(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateCmfNode(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrateCmfNode(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrateCmfNode(\"LodMorphTarget\", target, classes))\n }, classes)),\n areas: mesh.areas.map((area) => hydrateCmfNode(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrateCmfNode(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateCmfNode(\"MorphTargets\", {\n decl: mesh.morphTargets.decl.map((element) => hydrateCmfNode(\"VertexElement\", element, classes)),\n targets: mesh.morphTargets.targets.map((target) => hydrateCmfNode(\"MorphTarget\", target, classes))\n }, classes),\n audioOcclusionMesh: hydrateCmfNode(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateCmfNode(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return Class ? populateCmfNode(new Class(), fields, options) : fields;\n}\n\nfunction populateCmfNode(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsObjFormat 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\n/**\n * Inspect OBJ text without hydrating classes or applying rebuild options.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const json = parseObjText(toText(input), { source: values.source });\n return {\n source: json.grannyFileSource,\n format: \"obj\",\n meshCount: json.meshes.length,\n triangleCount: json.meshes.reduce((total, mesh) =>\n total + mesh.indices.reduce((meshTotal, group) => meshTotal + group.faces.length / 3, 0), 0),\n meshes: json.meshes.map(mesh => ({\n name: mesh.name,\n vertexCount: mesh.vertex.position.length / 3,\n triangleCount: mesh.indices.reduce((total, group) => total + group.faces.length / 3, 0),\n indexGroupCount: mesh.indices.length,\n indexGroupNames: mesh.indices.map(group => group.name),\n hasNormals: mesh.vertex.normal.length > 0,\n hasTangents: mesh.vertex.tangent.length > 0,\n hasBiNormals: mesh.vertex.binormal.length > 0,\n hasTexcoord0: mesh.vertex.texcoord0.length > 0\n }))\n };\n}\n\n/**\n * Convert format output to plain JSON-compatible data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value;\n if (typeof value !== \"object\") return value;\n\n if (typeof value.toJSON === \"function\")\n {\n const next = value.toJSON();\n if (next !== value) return toJsonValue(next);\n }\n\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);\n\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key]);\n }\n return out;\n}\n\n/**\n * Imports a Node built-in module without exposing the specifier to any\n * bundler's static import graph.\n *\n * `await import(\"node:fs/promises\")` written as a literal is resolved\n * eagerly by webpack/Rollup/esbuild alike when they walk the module\n * graph, breaking browser builds even though this path only ever runs\n * under Node (readFile is a Node-only convenience). Building the\n * specifier inside a `Function` body hides it from every bundler's\n * static analysis - it only exists at runtime, in the Node process that\n * actually calls readFile.\n *\n * @param {string} specifier Node built-in module specifier, e.g. \"node:fs/promises\".\n * @returns {Promise<any>} The imported module namespace.\n */\nexport function importNodeModule(specifier)\n{\n // eslint-disable-next-line no-new-func\n return new Function(\"s\", \"return import(s)\")(specifier);\n}\n"],"names":["GR2_CLASS_KEYS","Object","freeze","CMF_CLASS_KEYS","CLASS_KEYS","Array","from","Set","OUTPUT_JSON","OUTPUT_OBJ_JSON","OUTPUT_SHARED","OUTPUT_GR2","OUTPUT_CMF","DEFAULT_VALUES","emit","source","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","validateClassKey","key","readerName","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","validateRule","name","value","normalizeUvHandedness","normalizeValues","options","keys","has","values","normalizeEmit","prototype","hasOwnProperty","call","hasClasses","some","toText","input","ArrayBuffer","TextDecoder","decode","Uint8Array","isView","buffer","byteOffset","byteLength","hasVertexChannel","mesh","channel","vertex","length","requireVertexChannel","meshIndex","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","format","rule","context","result","reader","rebuildMissingMeshData","json","meshes","common","raw","shouldPackTangents","normal","generateNormals","tangent","generateTangents","binormal","generateBiNormals","packTangentFrames","readWithValues","text","parseObjText","hydrateCmf","buildCmfFromShared","hydrateJson","root","version","metadata","map","buildCmfMesh","skeletons","animations","stride","estimateVertexStride","vertexCount","Math","floor","position","decl","buildCmfDecl","lods","vb","index","offset","size","ib","totalIndexCount","bytesPerIndex","areas","firstElement","firstTriangle","elementCount","morphTargets","threshold","bounds","cmfBounds","bones","affectedByBones","affectedByMorphTargets","boneBindings","targets","uvDensities","audioOcclusionMesh","vertices","min","max","topology","skeleton","usage","usageIndex","type","isArray","elementTypeSize","reduce","element","total","areaIndex","first","i","minBounds","maxBounds","hydrationOptions","hydrationClasses","createHydrationClasses","hydrateCmfNode","hydrateCmfMesh","animation","lod","area","target","binding","fields","__hydrationOptions","populateCmfNode","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable","inspectWithValues","grannyFileSource","meshCount","triangleCount","meshTotal","indexGroupCount","indexGroupNames","hasNormals","hasTangents","hasBiNormals","hasTexcoord0","texcoord0","toJsonValue","toJSON","DataView","out","importNodeModule","specifier","Function"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/obj/core/helpers.js"],"sourcesContent":["/**\n * Internal read-pipeline glue for CjsObjFormat.\n */\n\nimport { hydrateJson } from \"./json.js\";\nimport { parseObjText } from \"./parser.js\";\nimport {\n generateBiNormals,\n generateNormals,\n generateTangents\n} from \"@carbonenginejs/runtime-utils/mesh\";\nimport {\n packTangentFrames\n} from \"@carbonenginejs/runtime-utils/tangent\";\n\nexport const GR2_CLASS_KEYS = Object.freeze([\n \"Root\",\n \"Mesh\",\n \"BoneBinding\",\n \"IndexGroup\",\n \"MorphTarget\",\n \"Model\",\n \"Skeleton\",\n \"Bone\",\n \"Animation\",\n \"TrackGroup\",\n \"TransformTrack\",\n \"Curve\"\n]);\n\nexport 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\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_OBJ_JSON = \"objJson\";\nexport const OUTPUT_SHARED = \"shared\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_CMF = \"cmf\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_OBJ_JSON,\n source: \"memory\",\n packTangents: false,\n uvHandedness: \"right\",\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"source\",\n \"packTangents\",\n \"uvHandedness\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\n/**\n * Validate a `classes` node key against {@link CLASS_KEYS}.\n *\n * @param {string} key Candidate node key.\n * @param {string} [readerName] Format name used in thrown errors.\n */\nexport function validateClassKey(key, readerName = \"CjsObjFormat\")\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(\", \")}`);\n }\n}\n\n/**\n * Validate a single `classes` entry.\n *\n * @param {string} key Node key.\n * @param {Function} Class Candidate constructor.\n * @param {string} [readerName] Format name used in thrown errors.\n */\nexport function validateClass(key, Class, readerName = \"CjsObjFormat\")\n{\n validateClassKey(key, readerName);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);\n }\n}\n\n/**\n * Merge and validate a class map.\n *\n * @param {object} base Current classes map.\n * @param {object} classes Incoming classes map.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {object} Merged classes.\n */\nfunction mergeClasses(base, classes, readerName)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(`${readerName}: classes option must be an object`);\n }\n\n const next = { ...base };\n for (const [ key, Class ] of Object.entries(classes))\n {\n if (Class === null || Class === undefined)\n {\n delete next[key];\n continue;\n }\n validateClass(key, Class, readerName);\n next[key] = Class;\n }\n return next;\n}\n\n/**\n * Validate a boolean/function mesh rule.\n *\n * @param {string} name Option name.\n * @param {any} value Candidate option value.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {boolean|Function} Validated rule.\n */\nfunction validateRule(name, value, readerName)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);\n}\n\n/**\n * Normalize the generated UV/tangent handedness option.\n *\n * @param {any} value Candidate option value.\n * @param {string} readerName Format name used in thrown errors.\n * @returns {\"right\"|\"left\"} Normalized handedness.\n */\nfunction normalizeUvHandedness(value, readerName)\n{\n if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;\n if (value === \"right\" || value === 1 || value === \"positive\") return \"right\";\n if (value === \"left\" || value === -1 || value === \"negative\") return \"left\";\n throw new TypeError(`${readerName}: uvHandedness must be \"right\" or \"left\"`);\n}\n\n/**\n * Merge format values over a base set and validate them.\n *\n * @param {object} base Current values.\n * @param {object} [options] Values to merge in.\n * @param {string} [readerName] Format name used in error messages.\n * @returns {object} A validated copy of the merged values.\n */\nexport function normalizeValues(base, options = {}, readerName = \"CjsObjFormat\")\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(`${readerName}: options must be an object`);\n }\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);\n }\n }\n\n const values = { ...base, ...options };\n const emit = normalizeEmit(values.emit, readerName);\n const classes = Object.prototype.hasOwnProperty.call(options, \"classes\")\n ? mergeClasses(base.classes || {}, options.classes, readerName)\n : { ...(base.classes || {}) };\n if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes))\n {\n throw new TypeError(`${readerName}: emit \"${emit}\" requires explicit classes`);\n }\n if (typeof values.source !== \"string\" || !values.source)\n {\n values.source = DEFAULT_VALUES.source;\n }\n\n return {\n emit,\n source: values.source,\n packTangents: validateRule(\"packTangents\", values.packTangents, readerName),\n uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),\n rebuildMissingNormals: validateRule(\"rebuildMissingNormals\", values.rebuildMissingNormals, readerName),\n rebuildMissingTangents: validateRule(\"rebuildMissingTangents\", values.rebuildMissingTangents, readerName),\n rebuildMissingBiNormals: validateRule(\"rebuildMissingBiNormals\", values.rebuildMissingBiNormals, readerName),\n classes\n };\n}\n\nfunction normalizeEmit(emit, readerName)\n{\n if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_OBJ_JSON || emit === OUTPUT_SHARED)\n {\n return OUTPUT_OBJ_JSON;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;\n throw new TypeError(`${readerName}: emit must be \"${OUTPUT_SHARED}\", \"${OUTPUT_OBJ_JSON}\", \"${OUTPUT_GR2}\", or \"${OUTPUT_CMF}\", got ${JSON.stringify(emit)}`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\n/**\n * Normalize caller input into OBJ text.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input Candidate OBJ text.\n * @returns {string} OBJ text.\n */\nexport function toText(input)\n{\n if (typeof input === \"string\") return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer)\n {\n return new TextDecoder().decode(new Uint8Array(input));\n }\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView(input))\n {\n return new TextDecoder().decode(new Uint8Array(input.buffer, input.byteOffset, input.byteLength));\n }\n throw new TypeError(\"CjsObjFormat: input must be OBJ text or UTF-8 bytes\");\n}\n\n/**\n * Whether a shared-schema vertex channel contains data.\n *\n * @param {object} mesh Mesh record.\n * @param {string} channel Vertex channel name.\n * @returns {boolean} True when channel exists and has values.\n */\nfunction hasVertexChannel(mesh, channel)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n return !!value && value.length > 0;\n}\n\n/**\n * Require one vertex channel.\n *\n * @param {object} mesh Mesh record.\n * @param {number} meshIndex Mesh index.\n * @param {string} channel Vertex channel name.\n * @param {string} feature Feature name.\n * @returns {number[]} Channel values.\n */\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = mesh && mesh.vertex && mesh.vertex[channel];\n if (!value || value.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsObjFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);\n }\n return value;\n}\n\n/**\n * Gather all triangle indices from a mesh's index groups.\n *\n * @param {object} mesh Mesh record.\n * @param {number} meshIndex Mesh index.\n * @param {string} feature Feature name.\n * @returns {number[]} Flat triangle indices.\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 if (faces.length === 0)\n {\n const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;\n throw new Error(`CjsObjFormat: ${feature} requires triangle indices for mesh ${name}`);\n }\n return faces;\n}\n\n/**\n * Evaluate a boolean/function mesh rule.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {boolean|Function} rule Rule value.\n * @param {object} context Rule context.\n * @returns {boolean} Whether the rule applies.\n */\nfunction shouldApplyMeshRule(format, rule, context)\n{\n if (typeof rule === \"function\")\n {\n const result = rule({ format, reader: format, ...context });\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsObjFormat: ${context.feature} rule must return true or false`);\n }\n return result;\n }\n return rule;\n}\n\n/**\n * Apply missing-channel rebuild options to a shared JSON graph.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {object} json Shared JSON graph.\n * @param {object} values Normalized format values.\n */\nfunction rebuildMissingMeshData(format, json, values)\n{\n for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++)\n {\n const\n mesh = json.meshes[meshIndex],\n common = { options: values, raw: null, json, mesh, meshIndex },\n shouldPackTangents = shouldApplyMeshRule(\n format,\n values.packTangents,\n { ...common, feature: \"packTangents\", channel: \"tangent\" }\n );\n\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingNormals,\n { ...common, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\")\n );\n }\n else if (!hasVertexChannel(mesh, \"normal\") && shouldPackTangents)\n {\n mesh.vertex.normal = generateNormals(\n requireVertexChannel(mesh, meshIndex, \"position\", \"packTangents\"),\n triangleFaces(mesh, meshIndex, \"packTangents\")\n );\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingTangents,\n { ...common, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n else if (!hasVertexChannel(mesh, \"tangent\") && shouldPackTangents)\n {\n mesh.vertex.tangent = generateTangents(\n requireVertexChannel(mesh, meshIndex, \"position\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"packTangents\"),\n triangleFaces(mesh, meshIndex, \"packTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n format,\n values.rebuildMissingBiNormals,\n { ...common, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n mesh.vertex.binormal = generateBiNormals(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n else if (!hasVertexChannel(mesh, \"binormal\") && shouldPackTangents)\n {\n mesh.vertex.binormal = generateBiNormals(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"packTangents\"),\n { uvHandedness: values.uvHandedness }\n );\n }\n\n if (shouldPackTangents)\n {\n mesh.vertex.tangent = packTangentFrames(\n requireVertexChannel(mesh, meshIndex, \"normal\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"tangent\", \"packTangents\"),\n requireVertexChannel(mesh, meshIndex, \"binormal\", \"packTangents\")\n );\n mesh.vertex.normal = [];\n mesh.vertex.binormal = [];\n }\n }\n}\n\n/**\n * Read OBJ text and return the shared JSON schema.\n *\n * @param {object|Function} format Format instance or constructor.\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} values Normalized format values.\n * @param {string} readerName Format name.\n * @returns {object} Shared JSON graph.\n */\nexport function readWithValues(format, input, values, readerName = \"CjsObjFormat\")\n{\n const text = toText(input);\n const json = parseObjText(text, { source: values.source });\n rebuildMissingMeshData(format, json, values);\n if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source });\n return hydrateJson(json, { classes: values.classes, source: values.source });\n}\n\nfunction buildCmfFromShared(root)\n{\n return {\n version: 1,\n metadata: null,\n meshes: (root.meshes ?? []).map((mesh) => buildCmfMesh(mesh)),\n skeletons: [],\n animations: []\n };\n}\n\nfunction buildCmfMesh(mesh)\n{\n const\n vertex = mesh.vertex ?? {},\n stride = estimateVertexStride(vertex),\n vertexCount = stride === 0 ? 0 : Math.floor((vertex.position ?? []).length / 3),\n indices = mesh.indices ?? [];\n\n return {\n name: mesh.name ?? \"\",\n decl: buildCmfDecl(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: [],\n threshold: 0xffffffff,\n vertex,\n indices\n } ],\n areas: indices.map((group) => ({\n name: group.name ?? \"\",\n bounds: cmfBounds(mesh),\n bones: [],\n affectedByBones: false,\n affectedByMorphTargets: false\n })),\n boneBindings: [],\n morphTargets: { decl: [], targets: [] },\n uvDensities: [],\n bounds: cmfBounds(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 buildCmfDecl(vertex)\n{\n const decl = [];\n let offset = 0;\n for (const channel of [\n [ \"position\", \"Position\", 3 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"tangent\", \"Tangent\", 3 ],\n [ \"binormal\", \"Binormal\", 3 ],\n [ \"texcoord0\", \"TexCoord\", 2, 0 ],\n [ \"texcoord1\", \"TexCoord\", 2, 1 ],\n [ \"color0\", \"Color\", 4, 0 ],\n [ \"blendIndice\", \"BoneIndices\", 4, 0, \"UInt16\" ],\n [ \"blendWeight\", \"BoneWeights\", 4, 0 ]\n ])\n {\n const [ name, usage, elementCount, usageIndex = 0, type = \"Float32\" ] = channel;\n if (!Array.isArray(vertex[name]) || vertex[name].length === 0) continue;\n decl.push({ usage, usageIndex, type, elementCount, offset });\n offset += elementCount * elementTypeSize(type);\n }\n return decl;\n}\n\nfunction estimateVertexStride(vertex)\n{\n return buildCmfDecl(vertex).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 cmfBounds(mesh)\n{\n return {\n min: mesh.minBounds ?? [ 0, 0, 0 ],\n max: mesh.maxBounds ?? [ 0, 0, 0 ]\n };\n}\n\nfunction hydrateCmf(root, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrateCmfNode(\"Root\", {\n ...root,\n metadata: root.metadata ? hydrateCmfNode(\"Metadata\", root.metadata, hydrationClasses) : null,\n meshes: root.meshes.map((mesh) => hydrateCmfMesh(mesh, hydrationClasses)),\n skeletons: root.skeletons.map((skeleton) => hydrateCmfNode(\"Skeleton\", skeleton, hydrationClasses)),\n animations: root.animations.map((animation) => hydrateCmfNode(\"Animation\", animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateCmfMesh(mesh, classes)\n{\n return hydrateCmfNode(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrateCmfNode(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateCmfNode(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrateCmfNode(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrateCmfNode(\"LodMorphTarget\", target, classes))\n }, classes)),\n areas: mesh.areas.map((area) => hydrateCmfNode(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrateCmfNode(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateCmfNode(\"MorphTargets\", {\n decl: mesh.morphTargets.decl.map((element) => hydrateCmfNode(\"VertexElement\", element, classes)),\n targets: mesh.morphTargets.targets.map((target) => hydrateCmfNode(\"MorphTarget\", target, classes))\n }, classes),\n audioOcclusionMesh: hydrateCmfNode(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateCmfNode(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return Class ? populateCmfNode(new Class(), fields, options) : fields;\n}\n\nfunction populateCmfNode(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsObjFormat 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\n/**\n * Inspect OBJ text without hydrating classes or applying rebuild options.\n *\n * @param {string|Uint8Array|ArrayBuffer|DataView} input OBJ text or UTF-8 bytes.\n * @param {object} values Normalized format values.\n * @returns {object} Plain summary data.\n */\nexport function inspectWithValues(input, values)\n{\n const json = parseObjText(toText(input), { source: values.source });\n return {\n source: json.grannyFileSource,\n format: \"obj\",\n meshCount: json.meshes.length,\n triangleCount: json.meshes.reduce((total, mesh) =>\n total + mesh.indices.reduce((meshTotal, group) => meshTotal + group.faces.length / 3, 0), 0),\n meshes: json.meshes.map(mesh => ({\n name: mesh.name,\n vertexCount: mesh.vertex.position.length / 3,\n triangleCount: mesh.indices.reduce((total, group) => total + group.faces.length / 3, 0),\n indexGroupCount: mesh.indices.length,\n indexGroupNames: mesh.indices.map(group => group.name),\n hasNormals: mesh.vertex.normal.length > 0,\n hasTangents: mesh.vertex.tangent.length > 0,\n hasBiNormals: mesh.vertex.binormal.length > 0,\n hasTexcoord0: mesh.vertex.texcoord0.length > 0\n }))\n };\n}\n\n/**\n * Convert format output to plain JSON-compatible data.\n *\n * @param {any} value Format output.\n * @returns {any} JSON-compatible value.\n */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined) return value;\n if (typeof value !== \"object\") return value;\n\n if (typeof value.toJSON === \"function\")\n {\n const next = value.toJSON();\n if (next !== value) return toJsonValue(next);\n }\n\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);\n\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key]);\n }\n return out;\n}\n\n"],"names":["GR2_CLASS_KEYS","Object","freeze","CMF_CLASS_KEYS","CLASS_KEYS","Array","from","Set","OUTPUT_JSON","OUTPUT_OBJ_JSON","OUTPUT_SHARED","OUTPUT_GR2","OUTPUT_CMF","DEFAULT_VALUES","emit","source","packTangents","uvHandedness","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","validateClassKey","key","readerName","includes","Error","JSON","stringify","join","validateClass","Class","TypeError","mergeClasses","base","next","entries","undefined","validateRule","name","value","normalizeUvHandedness","normalizeValues","options","keys","has","values","normalizeEmit","prototype","hasOwnProperty","call","hasClasses","some","toText","input","ArrayBuffer","TextDecoder","decode","Uint8Array","isView","buffer","byteOffset","byteLength","hasVertexChannel","mesh","channel","vertex","length","requireVertexChannel","meshIndex","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","format","rule","context","result","reader","rebuildMissingMeshData","json","meshes","common","raw","shouldPackTangents","normal","generateNormals","tangent","generateTangents","binormal","generateBiNormals","packTangentFrames","readWithValues","text","parseObjText","hydrateCmf","buildCmfFromShared","hydrateJson","root","version","metadata","map","buildCmfMesh","skeletons","animations","stride","estimateVertexStride","vertexCount","Math","floor","position","decl","buildCmfDecl","lods","vb","index","offset","size","ib","totalIndexCount","bytesPerIndex","areas","firstElement","firstTriangle","elementCount","morphTargets","threshold","bounds","cmfBounds","bones","affectedByBones","affectedByMorphTargets","boneBindings","targets","uvDensities","audioOcclusionMesh","vertices","min","max","topology","skeleton","usage","usageIndex","type","isArray","elementTypeSize","reduce","element","total","areaIndex","first","i","minBounds","maxBounds","hydrationOptions","hydrationClasses","createHydrationClasses","hydrateCmfNode","hydrateCmfMesh","animation","lod","area","target","binding","fields","__hydrationOptions","populateCmfNode","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable","inspectWithValues","grannyFileSource","meshCount","triangleCount","meshTotal","indexGroupCount","indexGroupNames","hasNormals","hasTangents","hasBiNormals","hasTexcoord0","texcoord0","toJsonValue","toJSON","DataView","out"],"mappings":"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"}