@carbonenginejs/runtime-resource 0.9.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +3 -2
- package/README.md +47 -6
- package/dist/CjsMotherLode.js +88 -88
- package/dist/CjsMotherLode.js.map +1 -1
- package/dist/CjsResMan.js +717 -228
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManFetchProvider.js +94 -0
- package/dist/CjsResManFetchProvider.js.map +1 -0
- package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
- package/dist/CjsResManWorkQueue.js.map +1 -0
- package/dist/format/CjsBlueReader.js +89 -0
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +42 -16
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsReader.js +4 -0
- package/dist/format/CjsReader.js.map +1 -1
- package/dist/format/CjsResourceProbe.js +2 -0
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/format/effect/effectPermutationGraph.js +257 -0
- package/dist/format/effect/effectPermutationGraph.js.map +1 -0
- package/dist/format/effect/effectReflectionPackage.js +636 -0
- package/dist/format/effect/effectReflectionPackage.js.map +1 -0
- package/dist/format/effect/sha256.js +114 -0
- package/dist/format/effect/sha256.js.map +1 -0
- package/dist/format/payloadContract.js +20 -0
- package/dist/format/payloadContract.js.map +1 -1
- package/dist/formats/black/CjsBlackFormat.js +15 -1
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +125 -0
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
- package/dist/formats/black/core/helpers.js +17 -0
- package/dist/formats/black/core/helpers.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +8 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +20 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +40 -3
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
- package/dist/formats/cmf/core/binary.js +71 -0
- package/dist/formats/cmf/core/binary.js.map +1 -1
- package/dist/formats/cmf/core/buffers.js +4 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -1
- package/dist/formats/cmf/core/helpers.js +31 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -1
- package/dist/formats/cmf/core/schema.js +10 -0
- package/dist/formats/cmf/core/schema.js.map +1 -1
- package/dist/formats/cmf/core/shared.js +9 -0
- package/dist/formats/cmf/core/shared.js.map +1 -1
- package/dist/formats/cmf/core/writer.js +54 -0
- package/dist/formats/cmf/core/writer.js.map +1 -1
- package/dist/formats/dds/core/bc6h.js +10 -0
- package/dist/formats/dds/core/bc6h.js.map +1 -1
- package/dist/formats/dds/core/bc7.js +16 -0
- package/dist/formats/dds/core/bc7.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +47 -0
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dxbc/CjsDxbcFormat.js +142 -0
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -0
- package/dist/formats/dxbc/core/DxbcReader.js +266 -0
- package/dist/formats/dxbc/core/DxbcReader.js.map +1 -0
- package/dist/formats/dxbc/core/container.js +169 -0
- package/dist/formats/dxbc/core/container.js.map +1 -0
- package/dist/formats/dxbc/core/decoder.js +789 -0
- package/dist/formats/dxbc/core/decoder.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -0
- package/dist/formats/dxbc/core/errors.js.map +1 -0
- package/dist/formats/dxbc/core/helpers.js +220 -0
- package/dist/formats/dxbc/core/helpers.js.map +1 -0
- package/dist/formats/dxbc/core/opcodes.js +45 -0
- package/dist/formats/dxbc/core/opcodes.js.map +1 -0
- package/dist/formats/dxbc/core/program.js +91 -0
- package/dist/formats/dxbc/core/program.js.map +1 -0
- package/dist/formats/dxbc/core/signature.js +172 -0
- package/dist/formats/dxbc/core/signature.js.map +1 -0
- package/dist/formats/dxbc/index.js +2 -0
- package/dist/formats/dxbc/index.js.map +1 -0
- package/dist/formats/fbx/core/helpers.js +21 -0
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +49 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +20 -0
- package/dist/formats/flac/core/helpers.js.map +1 -1
- package/dist/formats/gif/CjsGifFormat.js +49 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +20 -0
- package/dist/formats/gif/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +15 -0
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/parser.js +13 -0
- package/dist/formats/gltf/core/parser.js.map +1 -1
- package/dist/formats/gltf/core/targets.js +10 -0
- package/dist/formats/gltf/core/targets.js.map +1 -1
- package/dist/formats/gr2/core/bitknit2.js +2 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -1
- package/dist/formats/gr2/core/helpers.js +20 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/targets.js +10 -0
- package/dist/formats/gr2/core/targets.js.map +1 -1
- package/dist/formats/hlsl/CjsHlslFormat.js +254 -0
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -0
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -0
- package/dist/formats/hlsl/core/HlslBinaryUtils.js.map +1 -0
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -0
- package/dist/formats/hlsl/core/HlslEffectReadError.js.map +1 -0
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -0
- package/dist/formats/hlsl/core/HlslEffectStateManager.js.map +1 -0
- package/dist/formats/hlsl/core/HlslReader.js +266 -0
- package/dist/formats/hlsl/core/HlslReader.js.map +1 -0
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -0
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js.map +1 -0
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -0
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js.map +1 -0
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -0
- package/dist/formats/hlsl/core/HlslShaderBytecode.js.map +1 -0
- package/dist/formats/hlsl/core/analysis.js +51 -0
- package/dist/formats/hlsl/core/analysis.js.map +1 -0
- package/dist/formats/hlsl/core/helpers.js +270 -0
- package/dist/formats/hlsl/core/helpers.js.map +1 -0
- package/dist/formats/hlsl/core/json.js +284 -0
- package/dist/formats/hlsl/core/json.js.map +1 -0
- package/dist/formats/hlsl/core/metadata.js +327 -0
- package/dist/formats/hlsl/core/metadata.js.map +1 -0
- package/dist/formats/hlsl/core/portableReflection.js +848 -0
- package/dist/formats/hlsl/core/portableReflection.js.map +1 -0
- package/dist/formats/hlsl/core/render-states.js +280 -0
- package/dist/formats/hlsl/core/render-states.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -0
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +294 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +742 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js.map +1 -0
- package/dist/formats/hlsl/index.js +2 -0
- package/dist/formats/hlsl/index.js.map +1 -0
- package/dist/formats/hlsl/portable.js +2 -0
- package/dist/formats/hlsl/portable.js.map +1 -0
- package/dist/formats/index.js +4 -0
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/jpeg/core/helpers.js +52 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +93 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +37 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +35 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +49 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/helpers.js +23 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -1
- package/dist/formats/ogg/core/vorbis.js +13 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/formats/png/core/helpers.js +52 -0
- package/dist/formats/png/core/helpers.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +2 -0
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/CjsRedReader.js +52 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -1
- package/dist/formats/red/core/helpers.js +19 -0
- package/dist/formats/red/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/stl.js +8 -0
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/stl/core/targets.js +10 -0
- package/dist/formats/stl/core/targets.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +47 -0
- package/dist/formats/tga/core/helpers.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +37 -0
- package/dist/formats/wav/core/helpers.js.map +1 -1
- package/dist/formats/webgl/CjsWebglFormat.js +221 -0
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -0
- package/dist/formats/webgl/core/cewg/CewgPackage.js +339 -0
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -0
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +104 -0
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +1 -0
- package/dist/formats/webgl/core/cewg/binary.js +101 -0
- package/dist/formats/webgl/core/cewg/binary.js.map +1 -0
- package/dist/formats/webgl/core/cewgCompleteness.js +81 -0
- package/dist/formats/webgl/core/cewgCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +789 -0
- package/dist/formats/webgl/core/effectPackage.js.map +1 -0
- package/dist/formats/webgl/core/effectPackageValidation.js +331 -0
- package/dist/formats/webgl/core/effectPackageValidation.js.map +1 -0
- package/dist/formats/webgl/core/errors.js +27 -0
- package/dist/formats/webgl/core/errors.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2678 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +428 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +306 -0
- package/dist/formats/webgl/core/helpers.js.map +1 -0
- package/dist/formats/webgl/index.js +2 -0
- package/dist/formats/webgl/index.js.map +1 -0
- package/dist/formats/webgpu/CjsWebgpuFormat.js +376 -0
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +415 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +100 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/binary.js +93 -0
- package/dist/formats/webgpu/core/cewgpu/binary.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/tags.js +17 -0
- package/dist/formats/webgpu/core/cewgpu/tags.js.map +1 -0
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -0
- package/dist/formats/webgpu/core/effectAnalysis.js.map +1 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js +305 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -0
- package/dist/formats/webgpu/core/effectPackageValidation.js +1078 -0
- package/dist/formats/webgpu/core/effectPackageValidation.js.map +1 -0
- package/dist/formats/webgpu/core/errors.js +20 -0
- package/dist/formats/webgpu/core/errors.js.map +1 -0
- package/dist/formats/webgpu/core/helpers.js +448 -0
- package/dist/formats/webgpu/core/helpers.js.map +1 -0
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +223 -0
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -0
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -0
- package/dist/formats/webgpu/core/ir/buildControlFlow.js.map +1 -0
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -0
- package/dist/formats/webgpu/core/ir/indexableTemps.js.map +1 -0
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +454 -0
- package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -0
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -0
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -0
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -0
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js.map +1 -0
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -0
- package/dist/formats/webgpu/core/ir/sourceLanes.js.map +1 -0
- package/dist/formats/webgpu/core/packageEffect.js +300 -0
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -0
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -0
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -0
- package/dist/formats/webgpu/core/packageMetadata.js +8 -0
- package/dist/formats/webgpu/core/packageMetadata.js.map +1 -0
- package/dist/formats/webgpu/core/schema.js +4 -0
- package/dist/formats/webgpu/core/schema.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +275 -0
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +182 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +324 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -0
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -0
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -0
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +754 -0
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -0
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -0
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -0
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -0
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -0
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -0
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -0
- package/dist/formats/webgpu/core/wgsl/precisionControls.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +758 -0
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -0
- package/dist/formats/webgpu/core/wgsl/uniformity.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -0
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -0
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js.map +1 -0
- package/dist/formats/webgpu/index.js +2 -0
- package/dist/formats/webgpu/index.js.map +1 -0
- package/dist/formats/webm/core/helpers.js +35 -0
- package/dist/formats/webm/core/helpers.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +49 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +23 -0
- package/dist/formats/webp/core/helpers.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +8 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/wem/core/bitStream.js +2 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -1
- package/dist/formats/wem/core/helpers.js +20 -0
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +45 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +10 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/index.js +56 -43
- package/dist/index.js.map +1 -1
- package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
- package/dist/resource/CjsResource.js.map +1 -0
- package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
- package/dist/resource/Tr2LightProfileRes.js.map +1 -0
- package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
- package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
- package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
- package/dist/resource/audio/CjsAudioRes.js +213 -0
- package/dist/resource/audio/CjsAudioRes.js.map +1 -0
- package/dist/resource/audio/index.js +4 -0
- package/dist/resource/audio/index.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
- package/dist/resource/geometry/MeshDecalData.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
- package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
- package/dist/resource/geometry/TriGeometryRes.js +656 -0
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
- package/dist/resource/geometry/TriJointBinding.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
- package/dist/resource/geometry/granny/enums.js.map +1 -0
- package/dist/resource/geometry/granny/index.js +6 -0
- package/dist/resource/geometry/granny/index.js.map +1 -0
- package/dist/resource/geometry/index.js +17 -0
- package/dist/resource/geometry/index.js.map +1 -0
- package/dist/resource/index.js +52 -0
- package/dist/resource/index.js.map +1 -0
- package/dist/resource/resourceBoundary.js +64 -0
- package/dist/resource/resourceBoundary.js.map +1 -0
- package/dist/resource/shader/Tr2EffectRes.js +429 -0
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialArea.js +34 -0
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialMesh.js +30 -0
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialRes.js +35 -0
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
- package/dist/resource/shader/Tr2Shader.js +256 -0
- package/dist/resource/shader/Tr2Shader.js.map +1 -0
- package/dist/resource/shader/Tr2ShaderPermutation.js +47 -0
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
- package/dist/resource/shader/index.js +17 -0
- package/dist/resource/shader/index.js.map +1 -0
- package/dist/resource/shader/portable.js +33 -0
- package/dist/resource/shader/portable.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +135 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +28 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +107 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +145 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +103 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js +84 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +239 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +66 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2Pass.js +109 -0
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +75 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
- package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
- package/dist/resource/texture/TriTextureRes.js.map +1 -0
- package/dist/resource/texture/index.js +15 -0
- package/dist/resource/texture/index.js.map +1 -0
- package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
- package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
- package/dist/worker/CjsResManMainThreadLoader.js +87 -0
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
- package/dist/worker/CjsResManWorker.js +217 -0
- package/dist/worker/CjsResManWorker.js.map +1 -0
- package/dist/worker/CjsResManWorkerLoader.js +434 -0
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
- package/dist/worker/protocol.js +12 -0
- package/dist/worker/protocol.js.map +1 -0
- package/docs/README.md +16 -3
- package/docs/architecture.md +39 -16
- package/docs/concepts/resource-lifecycle.md +2 -1
- package/docs/formats/README.md +8 -0
- package/docs/formats/provenance.md +11 -3
- package/docs/reference/classes/README.md +6 -4
- package/docs/reference/classes/audio.md +30 -0
- package/docs/reference/classes/core.md +31 -11
- package/docs/reference/classes/formats.md +440 -0
- package/docs/reference/classes/resources.md +151 -41
- package/docs/reference/classes/texture.md +7 -7
- package/docs/reference/motherlode-cache.md +17 -0
- package/docs/reference/queues.md +9 -1
- package/docs/reference/workers.md +135 -0
- package/docs/roadmap.md +27 -1
- package/format-notices/dxbc/LICENSE +21 -0
- package/format-notices/dxbc/NOTICE +20 -0
- package/format-notices/hlsl/LICENSE +21 -0
- package/format-notices/hlsl/NOTICE +25 -0
- package/format-notices/webgl/LICENSE +21 -0
- package/format-notices/webgl/NOTICE +35 -0
- package/format-notices/webgpu/LICENSE +21 -0
- package/format-notices/webgpu/NOTICE +31 -0
- package/package.json +13 -1
- package/dist/CjsResManQueue.js.map +0 -1
- package/dist/CjsResource.js.map +0 -1
- package/dist/CjsResourceSource.js +0 -68
- package/dist/CjsResourceSource.js.map +0 -1
- package/dist/resourcePath.js +0 -18
- package/dist/resourcePath.js.map +0 -1
- package/dist/resourceStates.js +0 -9
- package/dist/resourceStates.js.map +0 -1
- package/dist/resources/AudioGeometryResData.js.map +0 -1
- package/dist/resources/GStateBindingCallbackData.js.map +0 -1
- package/dist/resources/MeshDecalData.js.map +0 -1
- package/dist/resources/MeshDecalLodData.js.map +0 -1
- package/dist/resources/Tr2EffectRes.js +0 -71
- package/dist/resources/Tr2EffectRes.js.map +0 -1
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
- package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
- package/dist/resources/Tr2ImageRes.js.map +0 -1
- package/dist/resources/Tr2LightProfileRes.js.map +0 -1
- package/dist/resources/Tr2MaterialArea.js +0 -34
- package/dist/resources/Tr2MaterialArea.js.map +0 -1
- package/dist/resources/Tr2MaterialMesh.js +0 -31
- package/dist/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/resources/Tr2MaterialRes.js +0 -34
- package/dist/resources/Tr2MaterialRes.js.map +0 -1
- package/dist/resources/Tr2ShaderPermutation.js +0 -43
- package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
- package/dist/resources/Tr2TextureLodManager.js.map +0 -1
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
- package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
- package/dist/resources/Tr2TexturePipeline.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
- package/dist/resources/TriGeometryRes.js +0 -239
- package/dist/resources/TriGeometryRes.js.map +0 -1
- package/dist/resources/TriGeometryResAreaData.js.map +0 -1
- package/dist/resources/TriGeometryResJointData.js.map +0 -1
- package/dist/resources/TriGeometryResLodData.js.map +0 -1
- package/dist/resources/TriGeometryResMeshData.js.map +0 -1
- package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
- package/dist/resources/TriGrannyRes.js.map +0 -1
- package/dist/resources/TriJointBinding.js.map +0 -1
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
- package/dist/resources/TriRtGeometryConstants.js.map +0 -1
- package/dist/resources/TriTextureRes.js.map +0 -1
- package/dist/resources/enums.js.map +0 -1
- package/dist/resources/resourceBoundary.js +0 -47
- package/dist/resources/resourceBoundary.js.map +0 -1
- package/dist/resources/texturePipelineBehavior.js.map +0 -1
- package/dist/texture/CjsTextureArrayRes.js.map +0 -1
- package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const textDecoder = new TextDecoder();
|
|
2
|
+
|
|
3
|
+
/** Returns a byte view over the supplied binary input for the CMF binary reader. */
|
|
2
4
|
function asUint8Array(input) {
|
|
3
5
|
if (input instanceof Uint8Array) {
|
|
4
6
|
return input;
|
|
@@ -17,35 +19,71 @@ function asUint8Array(input) {
|
|
|
17
19
|
* 64-bit integer reads guarded against unsafe values.
|
|
18
20
|
*/
|
|
19
21
|
class BinaryReader {
|
|
22
|
+
/** Creates a BinaryReader over caller-provided CMF bytes and reader options. */
|
|
20
23
|
constructor(bytes) {
|
|
21
24
|
this.bytes = asUint8Array(bytes);
|
|
22
25
|
this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);
|
|
23
26
|
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Validates the supplied value against CMF binary reader constraints and
|
|
30
|
+
* throws on failure.
|
|
31
|
+
*/
|
|
24
32
|
require(offset, size, label = "read") {
|
|
25
33
|
if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength) {
|
|
26
34
|
throw new RangeError(`CMF ${label} is outside file bounds`);
|
|
27
35
|
}
|
|
28
36
|
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Reads an unsigned 8-bit integer at the requested offset for the CMF binary
|
|
40
|
+
* reader.
|
|
41
|
+
*/
|
|
29
42
|
u8(offset) {
|
|
30
43
|
this.require(offset, 1);
|
|
31
44
|
return this.view.getUint8(offset);
|
|
32
45
|
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Reads an unsigned 16-bit little-endian integer at the requested offset for
|
|
49
|
+
* the CMF binary reader.
|
|
50
|
+
*/
|
|
33
51
|
u16(offset) {
|
|
34
52
|
this.require(offset, 2);
|
|
35
53
|
return this.view.getUint16(offset, true);
|
|
36
54
|
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Reads an unsigned 32-bit little-endian integer at the requested offset for
|
|
58
|
+
* the CMF binary reader.
|
|
59
|
+
*/
|
|
37
60
|
u32(offset) {
|
|
38
61
|
this.require(offset, 4);
|
|
39
62
|
return this.view.getUint32(offset, true);
|
|
40
63
|
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reads a signed 32-bit little-endian integer at the requested offset for
|
|
67
|
+
* the CMF binary reader.
|
|
68
|
+
*/
|
|
41
69
|
i32(offset) {
|
|
42
70
|
this.require(offset, 4);
|
|
43
71
|
return this.view.getInt32(offset, true);
|
|
44
72
|
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Reads a 32-bit little-endian float at the requested offset for the CMF
|
|
76
|
+
* binary reader.
|
|
77
|
+
*/
|
|
45
78
|
f32(offset) {
|
|
46
79
|
this.require(offset, 4);
|
|
47
80
|
return this.view.getFloat32(offset, true);
|
|
48
81
|
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Reads a safe unsigned 64-bit little-endian integer at the requested offset
|
|
85
|
+
* for the CMF binary reader.
|
|
86
|
+
*/
|
|
49
87
|
u64(offset) {
|
|
50
88
|
this.require(offset, 8);
|
|
51
89
|
const value = this.view.getBigUint64(offset, true);
|
|
@@ -54,6 +92,11 @@ class BinaryReader {
|
|
|
54
92
|
}
|
|
55
93
|
return Number(value);
|
|
56
94
|
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Reads a safe signed 64-bit little-endian integer at the requested offset
|
|
98
|
+
* for the CMF binary reader.
|
|
99
|
+
*/
|
|
57
100
|
i64(offset) {
|
|
58
101
|
this.require(offset, 8);
|
|
59
102
|
const value = this.view.getBigInt64(offset, true);
|
|
@@ -62,10 +105,17 @@ class BinaryReader {
|
|
|
62
105
|
}
|
|
63
106
|
return Number(value);
|
|
64
107
|
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Returns a bounds-checked byte slice at the requested offset for the CMF
|
|
111
|
+
* binary reader.
|
|
112
|
+
*/
|
|
65
113
|
bytesAt(offset, size) {
|
|
66
114
|
this.require(offset, size, "byte slice");
|
|
67
115
|
return this.bytes.subarray(offset, offset + size);
|
|
68
116
|
}
|
|
117
|
+
|
|
118
|
+
/** Decodes a UTF-8 string at the requested offset for the CMF binary reader. */
|
|
69
119
|
string(offset, byteSize) {
|
|
70
120
|
if (byteSize === 0) {
|
|
71
121
|
return "";
|
|
@@ -73,15 +123,29 @@ class BinaryReader {
|
|
|
73
123
|
return textDecoder.decode(this.bytesAt(offset, byteSize));
|
|
74
124
|
}
|
|
75
125
|
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Returns the symbolic enum name or an unknown-value label for the CMF binary
|
|
129
|
+
* reader.
|
|
130
|
+
*/
|
|
76
131
|
function enumName(names, value) {
|
|
77
132
|
return names[value] ?? `Unknown(${value})`;
|
|
78
133
|
}
|
|
134
|
+
|
|
135
|
+
/** Reads a three-component vector from the CMF input for the CMF binary reader. */
|
|
79
136
|
function readVector3(reader, offset) {
|
|
80
137
|
return [reader.f32(offset), reader.f32(offset + 4), reader.f32(offset + 8)];
|
|
81
138
|
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Reads a four-component quaternion from the CMF input for the CMF binary
|
|
142
|
+
* reader.
|
|
143
|
+
*/
|
|
82
144
|
function readQuaternion(reader, offset) {
|
|
83
145
|
return [reader.f32(offset), reader.f32(offset + 4), reader.f32(offset + 8), reader.f32(offset + 12)];
|
|
84
146
|
}
|
|
147
|
+
|
|
148
|
+
/** Reads a 4-by-4 matrix from the CMF input for the CMF binary reader. */
|
|
85
149
|
function readMatrix(reader, offset) {
|
|
86
150
|
const values = [];
|
|
87
151
|
for (let i = 0; i < 16; i++) {
|
|
@@ -89,12 +153,19 @@ function readMatrix(reader, offset) {
|
|
|
89
153
|
}
|
|
90
154
|
return values;
|
|
91
155
|
}
|
|
156
|
+
|
|
157
|
+
/** Reads minimum and maximum bounds from the CMF input for the CMF binary reader. */
|
|
92
158
|
function readBounds(reader, offset) {
|
|
93
159
|
return {
|
|
94
160
|
min: readVector3(reader, offset),
|
|
95
161
|
max: readVector3(reader, offset + 12)
|
|
96
162
|
};
|
|
97
163
|
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Computes a CRC-32 checksum over the requested byte range for the CMF binary
|
|
167
|
+
* reader.
|
|
168
|
+
*/
|
|
98
169
|
function crc32(bytes, start = 0, end = bytes.byteLength) {
|
|
99
170
|
let crc = 0xffffffff;
|
|
100
171
|
const table = crc32Table();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.js","sources":["../../../../../src/formats/cmf/core/binary.js"],"sourcesContent":["const textDecoder = new TextDecoder();\n\nexport function asUint8Array(input)\n{\n if (input instanceof Uint8Array)\n {\n return input;\n }\n\n if (input instanceof ArrayBuffer)\n {\n return new Uint8Array(input);\n }\n\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n\n throw new TypeError(\"CMF input must be a Uint8Array, Buffer, ArrayBuffer, or typed-array view\");\n}\n\n/**\n * Bounds-checked little-endian offset reader over CMF file bytes, including\n * 64-bit integer reads guarded against unsafe values.\n */\nexport class BinaryReader\n{\n constructor(bytes)\n {\n this.bytes = asUint8Array(bytes);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n }\n\n require(offset, size, label = \"read\")\n {\n if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength)\n {\n throw new RangeError(`CMF ${label} is outside file bounds`);\n }\n }\n\n u8(offset)\n {\n this.require(offset, 1);\n return this.view.getUint8(offset);\n }\n\n u16(offset)\n {\n this.require(offset, 2);\n return this.view.getUint16(offset, true);\n }\n\n u32(offset)\n {\n this.require(offset, 4);\n return this.view.getUint32(offset, true);\n }\n\n i32(offset)\n {\n this.require(offset, 4);\n return this.view.getInt32(offset, true);\n }\n\n f32(offset)\n {\n this.require(offset, 4);\n return this.view.getFloat32(offset, true);\n }\n\n u64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is larger than Number.MAX_SAFE_INTEGER\");\n }\n return Number(value);\n }\n\n i64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigInt64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is outside the safe JavaScript number range\");\n }\n return Number(value);\n }\n\n bytesAt(offset, size)\n {\n this.require(offset, size, \"byte slice\");\n return this.bytes.subarray(offset, offset + size);\n }\n\n string(offset, byteSize)\n {\n if (byteSize === 0)\n {\n return \"\";\n }\n\n return textDecoder.decode(this.bytesAt(offset, byteSize));\n }\n}\n\nexport function enumName(names, value)\n{\n return names[value] ?? `Unknown(${value})`;\n}\n\nexport function readVector3(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8)\n ];\n}\n\nexport function readQuaternion(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8),\n reader.f32(offset + 12)\n ];\n}\n\nexport function readMatrix(reader, offset)\n{\n const values = [];\n for (let i = 0; i < 16; i++)\n {\n values.push(reader.f32(offset + i * 4));\n }\n return values;\n}\n\nexport function readBounds(reader, offset)\n{\n return {\n min: readVector3(reader, offset),\n max: readVector3(reader, offset + 12)\n };\n}\n\nexport function crc32(bytes, start = 0, end = bytes.byteLength)\n{\n let crc = 0xffffffff;\n const table = crc32Table();\n for (let i = start; i < end; i++)\n {\n crc = (crc >>> 8) ^ table[(crc ^ bytes[i]) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nlet cachedCrc32Table = null;\n\nfunction crc32Table()\n{\n if (cachedCrc32Table)\n {\n return cachedCrc32Table;\n }\n\n cachedCrc32Table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let c = i;\n for (let k = 0; k < 8; k++)\n {\n c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1);\n }\n cachedCrc32Table[i] = c >>> 0;\n }\n return cachedCrc32Table;\n}\n"],"names":["textDecoder","TextDecoder","asUint8Array","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","TypeError","BinaryReader","constructor","bytes","view","DataView","require","offset","size","label","Number","isInteger","RangeError","u8","getUint8","u16","getUint16","u32","getUint32","i32","getInt32","f32","getFloat32","u64","value","getBigUint64","BigInt","MAX_SAFE_INTEGER","i64","getBigInt64","MIN_SAFE_INTEGER","bytesAt","subarray","string","byteSize","decode","enumName","names","readVector3","reader","readQuaternion","readMatrix","values","i","push","readBounds","min","max","crc32","start","end","crc","table","crc32Table","cachedCrc32Table","Uint32Array","c","k"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"binary.js","sources":["../../../../../src/formats/cmf/core/binary.js"],"sourcesContent":["const textDecoder = new TextDecoder();\n\n/** Returns a byte view over the supplied binary input for the CMF binary reader. */\nexport function asUint8Array(input)\n{\n if (input instanceof Uint8Array)\n {\n return input;\n }\n\n if (input instanceof ArrayBuffer)\n {\n return new Uint8Array(input);\n }\n\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n\n throw new TypeError(\"CMF input must be a Uint8Array, Buffer, ArrayBuffer, or typed-array view\");\n}\n\n/**\n * Bounds-checked little-endian offset reader over CMF file bytes, including\n * 64-bit integer reads guarded against unsafe values.\n */\nexport class BinaryReader\n{\n /** Creates a BinaryReader over caller-provided CMF bytes and reader options. */\n constructor(bytes)\n {\n this.bytes = asUint8Array(bytes);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n }\n\n /**\n * Validates the supplied value against CMF binary reader constraints and\n * throws on failure.\n */\n require(offset, size, label = \"read\")\n {\n if (!Number.isInteger(offset) || offset < 0 || offset + size > this.bytes.byteLength)\n {\n throw new RangeError(`CMF ${label} is outside file bounds`);\n }\n }\n\n /**\n * Reads an unsigned 8-bit integer at the requested offset for the CMF binary\n * reader.\n */\n u8(offset)\n {\n this.require(offset, 1);\n return this.view.getUint8(offset);\n }\n\n /**\n * Reads an unsigned 16-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n u16(offset)\n {\n this.require(offset, 2);\n return this.view.getUint16(offset, true);\n }\n\n /**\n * Reads an unsigned 32-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n u32(offset)\n {\n this.require(offset, 4);\n return this.view.getUint32(offset, true);\n }\n\n /**\n * Reads a signed 32-bit little-endian integer at the requested offset for\n * the CMF binary reader.\n */\n i32(offset)\n {\n this.require(offset, 4);\n return this.view.getInt32(offset, true);\n }\n\n /**\n * Reads a 32-bit little-endian float at the requested offset for the CMF\n * binary reader.\n */\n f32(offset)\n {\n this.require(offset, 4);\n return this.view.getFloat32(offset, true);\n }\n\n /**\n * Reads a safe unsigned 64-bit little-endian integer at the requested offset\n * for the CMF binary reader.\n */\n u64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigUint64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is larger than Number.MAX_SAFE_INTEGER\");\n }\n return Number(value);\n }\n\n /**\n * Reads a safe signed 64-bit little-endian integer at the requested offset\n * for the CMF binary reader.\n */\n i64(offset)\n {\n this.require(offset, 8);\n const value = this.view.getBigInt64(offset, true);\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER))\n {\n throw new RangeError(\"CMF integer is outside the safe JavaScript number range\");\n }\n return Number(value);\n }\n\n /**\n * Returns a bounds-checked byte slice at the requested offset for the CMF\n * binary reader.\n */\n bytesAt(offset, size)\n {\n this.require(offset, size, \"byte slice\");\n return this.bytes.subarray(offset, offset + size);\n }\n\n /** Decodes a UTF-8 string at the requested offset for the CMF binary reader. */\n string(offset, byteSize)\n {\n if (byteSize === 0)\n {\n return \"\";\n }\n\n return textDecoder.decode(this.bytesAt(offset, byteSize));\n }\n}\n\n/**\n * Returns the symbolic enum name or an unknown-value label for the CMF binary\n * reader.\n */\nexport function enumName(names, value)\n{\n return names[value] ?? `Unknown(${value})`;\n}\n\n/** Reads a three-component vector from the CMF input for the CMF binary reader. */\nexport function readVector3(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8)\n ];\n}\n\n/**\n * Reads a four-component quaternion from the CMF input for the CMF binary\n * reader.\n */\nexport function readQuaternion(reader, offset)\n{\n return [\n reader.f32(offset),\n reader.f32(offset + 4),\n reader.f32(offset + 8),\n reader.f32(offset + 12)\n ];\n}\n\n/** Reads a 4-by-4 matrix from the CMF input for the CMF binary reader. */\nexport function readMatrix(reader, offset)\n{\n const values = [];\n for (let i = 0; i < 16; i++)\n {\n values.push(reader.f32(offset + i * 4));\n }\n return values;\n}\n\n/** Reads minimum and maximum bounds from the CMF input for the CMF binary reader. */\nexport function readBounds(reader, offset)\n{\n return {\n min: readVector3(reader, offset),\n max: readVector3(reader, offset + 12)\n };\n}\n\n/**\n * Computes a CRC-32 checksum over the requested byte range for the CMF binary\n * reader.\n */\nexport function crc32(bytes, start = 0, end = bytes.byteLength)\n{\n let crc = 0xffffffff;\n const table = crc32Table();\n for (let i = start; i < end; i++)\n {\n crc = (crc >>> 8) ^ table[(crc ^ bytes[i]) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nlet cachedCrc32Table = null;\n\nfunction crc32Table()\n{\n if (cachedCrc32Table)\n {\n return cachedCrc32Table;\n }\n\n cachedCrc32Table = new Uint32Array(256);\n for (let i = 0; i < 256; i++)\n {\n let c = i;\n for (let k = 0; k < 8; k++)\n {\n c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1);\n }\n cachedCrc32Table[i] = c >>> 0;\n }\n return cachedCrc32Table;\n}\n"],"names":["textDecoder","TextDecoder","asUint8Array","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","TypeError","BinaryReader","constructor","bytes","view","DataView","require","offset","size","label","Number","isInteger","RangeError","u8","getUint8","u16","getUint16","u32","getUint32","i32","getInt32","f32","getFloat32","u64","value","getBigUint64","BigInt","MAX_SAFE_INTEGER","i64","getBigInt64","MIN_SAFE_INTEGER","bytesAt","subarray","string","byteSize","decode","enumName","names","readVector3","reader","readQuaternion","readMatrix","values","i","push","readBounds","min","max","crc32","start","end","crc","table","crc32Table","cachedCrc32Table","Uint32Array","c","k"],"mappings":"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"}
|
|
@@ -12,11 +12,15 @@ const CHANNEL_NAMES = Object.freeze({
|
|
|
12
12
|
PackedTangent: "packedTangent",
|
|
13
13
|
PackedTangentLegacy: "packedTangentLegacy"
|
|
14
14
|
});
|
|
15
|
+
|
|
16
|
+
/** Decodes geometry sync into a normalized CMF format reader result. */
|
|
15
17
|
function decodeGeometrySync(result, sourceBytes) {
|
|
16
18
|
const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));
|
|
17
19
|
attachGeometry(result, sections);
|
|
18
20
|
return result;
|
|
19
21
|
}
|
|
22
|
+
|
|
23
|
+
/** Decodes geometry async into a normalized CMF format reader result. */
|
|
20
24
|
async function decodeGeometryAsync(result, sourceBytes) {
|
|
21
25
|
await MeshoptDecoder.ready;
|
|
22
26
|
const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffers.js","sources":["../../../../../src/formats/cmf/core/buffers.js"],"sourcesContent":["import { MeshoptDecoder } from \"meshoptimizer/decoder\";\n\nconst CHANNEL_NAMES = Object.freeze({\n Position: \"position\",\n Normal: \"normal\",\n Tangent: \"tangent\",\n Binormal: \"binormal\",\n TexCoord: \"texcoord\",\n Color: \"color\",\n BoneIndices: \"blendIndice\",\n BoneWeights: \"blendWeight\",\n PackedTangent: \"packedTangent\",\n PackedTangentLegacy: \"packedTangentLegacy\"\n});\n\nexport function decodeGeometrySync(result, sourceBytes)\n{\n const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nexport async function decodeGeometryAsync(result, sourceBytes)\n{\n await MeshoptDecoder.ready;\n const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nfunction decodeSectionSync(section, index, sourceBytes)\n{\n if (section.compression !== \"None\")\n {\n throw new Error(\"CMF compressed GPU buffers require ReadAsync/readAsync so meshoptimizer can initialize\");\n }\n\n return sectionBytes(section, index, sourceBytes);\n}\n\nfunction decodeSectionWithMeshopt(section, index, sourceBytes)\n{\n const source = sectionBytes(section, index, sourceBytes);\n if (section.compression === \"None\")\n {\n return source;\n }\n\n const target = new Uint8Array(section.uncompressedSize);\n const count = section.gpuAlignment === 0 ? 0 : section.uncompressedSize / section.gpuAlignment;\n\n if (section.compression === \"MeshOptimizerVertexBuffer\")\n {\n MeshoptDecoder.decodeVertexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n if (section.compression === \"MeshOptimizerIndexBuffer\")\n {\n MeshoptDecoder.decodeIndexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n throw new Error(`Unsupported CMF section compression \"${section.compression}\"`);\n}\n\nfunction sectionBytes(section, index, sourceBytes)\n{\n if (index === 0 || section.type !== \"GpuBuffer\")\n {\n return null;\n }\n\n return sourceBytes.subarray(section.offset, section.offset + section.compressedSize);\n}\n\nfunction attachGeometry(result, sectionData)\n{\n result.buffers = result.sections.map((section, index) =>\n {\n const data = sectionData[index];\n return {\n index,\n type: section.type,\n compression: section.compression,\n byteLength: data?.byteLength ?? 0,\n data\n };\n });\n\n for (const mesh of result.meshes)\n {\n for (const lod of mesh.lods)\n {\n lod.vertex = readVertexChannels(mesh.decl, lod.vb, sectionData);\n lod.indices = readIndexGroups(mesh, lod, sectionData);\n\n for (let i = 0; i < lod.morphTargets.length; i++)\n {\n const target = lod.morphTargets[i];\n target.vertex = readVertexChannels(mesh.morphTargets.decl, target.vb, sectionData);\n target.name = mesh.morphTargets.targets[i]?.name ?? target.name ?? \"\";\n target.maxDisplacement = mesh.morphTargets.targets[i]?.maxDisplacement ?? target.maxDisplacement ?? 0;\n }\n }\n\n if (mesh.lods.length > 0)\n {\n mesh.vertex = mesh.lods[0].vertex;\n mesh.indices = mesh.lods[0].indices;\n }\n else\n {\n mesh.vertex = createVertexChannels();\n mesh.indices = [];\n }\n }\n}\n\nfunction readVertexChannels(decl, view, sectionData)\n{\n const channels = createVertexChannels();\n const bytes = viewData(view, sectionData);\n if (!bytes || view.stride === 0)\n {\n return channels;\n }\n\n const reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const count = Math.floor(view.size / view.stride);\n for (const element of decl)\n {\n const channel = channelName(element);\n if (!channels[channel]) channels[channel] = [];\n\n for (let vertex = 0; vertex < count; vertex++)\n {\n const base = vertex * view.stride + element.offset;\n for (let component = 0; component < element.elementCount; component++)\n {\n channels[channel].push(readElementComponent(reader, base, element.type, component));\n }\n }\n }\n\n return channels;\n}\n\nfunction readIndexGroups(mesh, lod, sectionData)\n{\n const bytes = viewData(lod.ib, sectionData);\n if (!bytes || lod.ib.stride === 0)\n {\n return [];\n }\n\n const\n reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n allFaces = readIndices(reader, lod.ib.size, lod.ib.stride);\n\n if (lod.areas.length === 0)\n {\n return [ {\n name: \"\",\n bytesPerIndex: lod.ib.stride,\n faces: allFaces\n } ];\n }\n\n return lod.areas.map((area, areaIndex) =>\n {\n const sourceArea = mesh.areas[areaIndex];\n return {\n name: sourceArea?.name ?? \"\",\n bytesPerIndex: lod.ib.stride,\n firstElement: area.firstElement,\n elementCount: area.elementCount,\n faces: allFaces.slice(area.firstElement * 3, (area.firstElement + area.elementCount) * 3)\n };\n });\n}\n\nfunction readIndices(reader, byteSize, stride)\n{\n const result = [];\n for (let offset = 0; offset < byteSize; offset += stride)\n {\n if (stride === 2) result.push(reader.getUint16(offset, true));\n else if (stride === 4) result.push(reader.getUint32(offset, true));\n else result.push(reader.getUint8(offset));\n }\n return result;\n}\n\nfunction viewData(view, sectionData)\n{\n const section = sectionData[view.index];\n if (!section || view.size === 0)\n {\n return null;\n }\n\n return section.subarray(view.offset, view.offset + view.size);\n}\n\nfunction channelName(element)\n{\n const base = CHANNEL_NAMES[element.usage] ?? lowerFirst(element.usage);\n if (element.usage === \"TexCoord\" || element.usage === \"Color\")\n {\n return `${base}${element.usageIndex}`;\n }\n\n if (element.usageIndex > 0)\n {\n return `${base}${element.usageIndex}`;\n }\n\n return base;\n}\n\nfunction createVertexChannels()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n color0: [],\n blendIndice: [],\n blendWeight: [],\n packedTangent: [],\n packedTangentLegacy: []\n };\n}\n\nfunction readElementComponent(reader, base, type, component)\n{\n const offset = base + component * elementTypeSize(type);\n switch (type)\n {\n case \"Float32\":\n return reader.getFloat32(offset, true);\n case \"Float16\":\n return halfToFloat(reader.getUint16(offset, true));\n case \"UInt16Norm\":\n return reader.getUint16(offset, true) / 65535;\n case \"UInt16\":\n return reader.getUint16(offset, true);\n case \"Int16Norm\":\n return Math.max(reader.getInt16(offset, true) / 32767, -1);\n case \"Int16\":\n return reader.getInt16(offset, true);\n case \"UInt8Norm\":\n return reader.getUint8(offset) / 255;\n case \"UInt8\":\n return reader.getUint8(offset);\n case \"Int8Norm\":\n return Math.max(reader.getInt8(offset) / 127, -1);\n case \"Int8\":\n return reader.getInt8(offset);\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction elementTypeSize(type)\n{\n switch (type)\n {\n case \"Float32\":\n return 4;\n case \"Float16\":\n case \"UInt16Norm\":\n case \"UInt16\":\n case \"Int16Norm\":\n case \"Int16\":\n return 2;\n case \"UInt8Norm\":\n case \"UInt8\":\n case \"Int8Norm\":\n case \"Int8\":\n return 1;\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction halfToFloat(value)\n{\n const\n sign = (value & 0x8000) ? -1 : 1,\n exponent = (value >> 10) & 0x1f,\n fraction = value & 0x03ff;\n\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (fraction / 1024);\n }\n\n if (exponent === 31)\n {\n return fraction ? NaN : sign * Infinity;\n }\n\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 1024);\n}\n\nfunction lowerFirst(value)\n{\n return value ? value[0].toLowerCase() + value.slice(1) : value;\n}\n"],"names":["CHANNEL_NAMES","Object","freeze","Position","Normal","Tangent","Binormal","TexCoord","Color","BoneIndices","BoneWeights","PackedTangent","PackedTangentLegacy","decodeGeometrySync","result","sourceBytes","sections","map","section","index","decodeSectionSync","attachGeometry","decodeGeometryAsync","MeshoptDecoder","ready","decodeSectionWithMeshopt","compression","Error","sectionBytes","source","target","Uint8Array","uncompressedSize","count","gpuAlignment","decodeVertexBuffer","decodeIndexBuffer","type","subarray","offset","compressedSize","sectionData","buffers","data","byteLength","mesh","meshes","lod","lods","vertex","readVertexChannels","decl","vb","indices","readIndexGroups","i","morphTargets","length","name","targets","maxDisplacement","createVertexChannels","view","channels","bytes","viewData","stride","reader","DataView","buffer","byteOffset","Math","floor","size","element","channel","channelName","base","component","elementCount","push","readElementComponent","ib","allFaces","readIndices","areas","bytesPerIndex","faces","area","areaIndex","sourceArea","firstElement","slice","byteSize","getUint16","getUint32","getUint8","usage","lowerFirst","usageIndex","position","normal","tangent","binormal","texcoord0","texcoord1","color0","blendIndice","blendWeight","packedTangent","packedTangentLegacy","elementTypeSize","getFloat32","halfToFloat","max","getInt16","getInt8","value","sign","exponent","fraction","pow","NaN","Infinity","toLowerCase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buffers.js","sources":["../../../../../src/formats/cmf/core/buffers.js"],"sourcesContent":["import { MeshoptDecoder } from \"meshoptimizer/decoder\";\n\nconst CHANNEL_NAMES = Object.freeze({\n Position: \"position\",\n Normal: \"normal\",\n Tangent: \"tangent\",\n Binormal: \"binormal\",\n TexCoord: \"texcoord\",\n Color: \"color\",\n BoneIndices: \"blendIndice\",\n BoneWeights: \"blendWeight\",\n PackedTangent: \"packedTangent\",\n PackedTangentLegacy: \"packedTangentLegacy\"\n});\n\n/** Decodes geometry sync into a normalized CMF format reader result. */\nexport function decodeGeometrySync(result, sourceBytes)\n{\n const sections = result.sections.map((section, index) => decodeSectionSync(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\n/** Decodes geometry async into a normalized CMF format reader result. */\nexport async function decodeGeometryAsync(result, sourceBytes)\n{\n await MeshoptDecoder.ready;\n const sections = result.sections.map((section, index) => decodeSectionWithMeshopt(section, index, sourceBytes));\n attachGeometry(result, sections);\n return result;\n}\n\nfunction decodeSectionSync(section, index, sourceBytes)\n{\n if (section.compression !== \"None\")\n {\n throw new Error(\"CMF compressed GPU buffers require ReadAsync/readAsync so meshoptimizer can initialize\");\n }\n\n return sectionBytes(section, index, sourceBytes);\n}\n\nfunction decodeSectionWithMeshopt(section, index, sourceBytes)\n{\n const source = sectionBytes(section, index, sourceBytes);\n if (section.compression === \"None\")\n {\n return source;\n }\n\n const target = new Uint8Array(section.uncompressedSize);\n const count = section.gpuAlignment === 0 ? 0 : section.uncompressedSize / section.gpuAlignment;\n\n if (section.compression === \"MeshOptimizerVertexBuffer\")\n {\n MeshoptDecoder.decodeVertexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n if (section.compression === \"MeshOptimizerIndexBuffer\")\n {\n MeshoptDecoder.decodeIndexBuffer(target, count, section.gpuAlignment, source);\n return target;\n }\n\n throw new Error(`Unsupported CMF section compression \"${section.compression}\"`);\n}\n\nfunction sectionBytes(section, index, sourceBytes)\n{\n if (index === 0 || section.type !== \"GpuBuffer\")\n {\n return null;\n }\n\n return sourceBytes.subarray(section.offset, section.offset + section.compressedSize);\n}\n\nfunction attachGeometry(result, sectionData)\n{\n result.buffers = result.sections.map((section, index) =>\n {\n const data = sectionData[index];\n return {\n index,\n type: section.type,\n compression: section.compression,\n byteLength: data?.byteLength ?? 0,\n data\n };\n });\n\n for (const mesh of result.meshes)\n {\n for (const lod of mesh.lods)\n {\n lod.vertex = readVertexChannels(mesh.decl, lod.vb, sectionData);\n lod.indices = readIndexGroups(mesh, lod, sectionData);\n\n for (let i = 0; i < lod.morphTargets.length; i++)\n {\n const target = lod.morphTargets[i];\n target.vertex = readVertexChannels(mesh.morphTargets.decl, target.vb, sectionData);\n target.name = mesh.morphTargets.targets[i]?.name ?? target.name ?? \"\";\n target.maxDisplacement = mesh.morphTargets.targets[i]?.maxDisplacement ?? target.maxDisplacement ?? 0;\n }\n }\n\n if (mesh.lods.length > 0)\n {\n mesh.vertex = mesh.lods[0].vertex;\n mesh.indices = mesh.lods[0].indices;\n }\n else\n {\n mesh.vertex = createVertexChannels();\n mesh.indices = [];\n }\n }\n}\n\nfunction readVertexChannels(decl, view, sectionData)\n{\n const channels = createVertexChannels();\n const bytes = viewData(view, sectionData);\n if (!bytes || view.stride === 0)\n {\n return channels;\n }\n\n const reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const count = Math.floor(view.size / view.stride);\n for (const element of decl)\n {\n const channel = channelName(element);\n if (!channels[channel]) channels[channel] = [];\n\n for (let vertex = 0; vertex < count; vertex++)\n {\n const base = vertex * view.stride + element.offset;\n for (let component = 0; component < element.elementCount; component++)\n {\n channels[channel].push(readElementComponent(reader, base, element.type, component));\n }\n }\n }\n\n return channels;\n}\n\nfunction readIndexGroups(mesh, lod, sectionData)\n{\n const bytes = viewData(lod.ib, sectionData);\n if (!bytes || lod.ib.stride === 0)\n {\n return [];\n }\n\n const\n reader = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n allFaces = readIndices(reader, lod.ib.size, lod.ib.stride);\n\n if (lod.areas.length === 0)\n {\n return [ {\n name: \"\",\n bytesPerIndex: lod.ib.stride,\n faces: allFaces\n } ];\n }\n\n return lod.areas.map((area, areaIndex) =>\n {\n const sourceArea = mesh.areas[areaIndex];\n return {\n name: sourceArea?.name ?? \"\",\n bytesPerIndex: lod.ib.stride,\n firstElement: area.firstElement,\n elementCount: area.elementCount,\n faces: allFaces.slice(area.firstElement * 3, (area.firstElement + area.elementCount) * 3)\n };\n });\n}\n\nfunction readIndices(reader, byteSize, stride)\n{\n const result = [];\n for (let offset = 0; offset < byteSize; offset += stride)\n {\n if (stride === 2) result.push(reader.getUint16(offset, true));\n else if (stride === 4) result.push(reader.getUint32(offset, true));\n else result.push(reader.getUint8(offset));\n }\n return result;\n}\n\nfunction viewData(view, sectionData)\n{\n const section = sectionData[view.index];\n if (!section || view.size === 0)\n {\n return null;\n }\n\n return section.subarray(view.offset, view.offset + view.size);\n}\n\nfunction channelName(element)\n{\n const base = CHANNEL_NAMES[element.usage] ?? lowerFirst(element.usage);\n if (element.usage === \"TexCoord\" || element.usage === \"Color\")\n {\n return `${base}${element.usageIndex}`;\n }\n\n if (element.usageIndex > 0)\n {\n return `${base}${element.usageIndex}`;\n }\n\n return base;\n}\n\nfunction createVertexChannels()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n color0: [],\n blendIndice: [],\n blendWeight: [],\n packedTangent: [],\n packedTangentLegacy: []\n };\n}\n\nfunction readElementComponent(reader, base, type, component)\n{\n const offset = base + component * elementTypeSize(type);\n switch (type)\n {\n case \"Float32\":\n return reader.getFloat32(offset, true);\n case \"Float16\":\n return halfToFloat(reader.getUint16(offset, true));\n case \"UInt16Norm\":\n return reader.getUint16(offset, true) / 65535;\n case \"UInt16\":\n return reader.getUint16(offset, true);\n case \"Int16Norm\":\n return Math.max(reader.getInt16(offset, true) / 32767, -1);\n case \"Int16\":\n return reader.getInt16(offset, true);\n case \"UInt8Norm\":\n return reader.getUint8(offset) / 255;\n case \"UInt8\":\n return reader.getUint8(offset);\n case \"Int8Norm\":\n return Math.max(reader.getInt8(offset) / 127, -1);\n case \"Int8\":\n return reader.getInt8(offset);\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction elementTypeSize(type)\n{\n switch (type)\n {\n case \"Float32\":\n return 4;\n case \"Float16\":\n case \"UInt16Norm\":\n case \"UInt16\":\n case \"Int16Norm\":\n case \"Int16\":\n return 2;\n case \"UInt8Norm\":\n case \"UInt8\":\n case \"Int8Norm\":\n case \"Int8\":\n return 1;\n default:\n throw new Error(`Unsupported CMF vertex element type \"${type}\"`);\n }\n}\n\nfunction halfToFloat(value)\n{\n const\n sign = (value & 0x8000) ? -1 : 1,\n exponent = (value >> 10) & 0x1f,\n fraction = value & 0x03ff;\n\n if (exponent === 0)\n {\n return sign * Math.pow(2, -14) * (fraction / 1024);\n }\n\n if (exponent === 31)\n {\n return fraction ? NaN : sign * Infinity;\n }\n\n return sign * Math.pow(2, exponent - 15) * (1 + fraction / 1024);\n}\n\nfunction lowerFirst(value)\n{\n return value ? value[0].toLowerCase() + value.slice(1) : value;\n}\n"],"names":["CHANNEL_NAMES","Object","freeze","Position","Normal","Tangent","Binormal","TexCoord","Color","BoneIndices","BoneWeights","PackedTangent","PackedTangentLegacy","decodeGeometrySync","result","sourceBytes","sections","map","section","index","decodeSectionSync","attachGeometry","decodeGeometryAsync","MeshoptDecoder","ready","decodeSectionWithMeshopt","compression","Error","sectionBytes","source","target","Uint8Array","uncompressedSize","count","gpuAlignment","decodeVertexBuffer","decodeIndexBuffer","type","subarray","offset","compressedSize","sectionData","buffers","data","byteLength","mesh","meshes","lod","lods","vertex","readVertexChannels","decl","vb","indices","readIndexGroups","i","morphTargets","length","name","targets","maxDisplacement","createVertexChannels","view","channels","bytes","viewData","stride","reader","DataView","buffer","byteOffset","Math","floor","size","element","channel","channelName","base","component","elementCount","push","readElementComponent","ib","allFaces","readIndices","areas","bytesPerIndex","faces","area","areaIndex","sourceArea","firstElement","slice","byteSize","getUint16","getUint32","getUint8","usage","lowerFirst","usageIndex","position","normal","tangent","binormal","texcoord0","texcoord1","color0","blendIndice","blendWeight","packedTangent","packedTangentLegacy","elementTypeSize","getFloat32","halfToFloat","max","getInt16","getInt8","value","sign","exponent","fraction","pow","NaN","Infinity","toLowerCase"],"mappings":"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"}
|
|
@@ -8,6 +8,11 @@ const DEFAULT_VALUES = Object.freeze({
|
|
|
8
8
|
decodeBuffers: true,
|
|
9
9
|
classes: {}
|
|
10
10
|
});
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Normalizes reader options against their supported defaults for the CMF format
|
|
14
|
+
* reader.
|
|
15
|
+
*/
|
|
11
16
|
function normalizeValues(base = {}, options = {}) {
|
|
12
17
|
const values = {
|
|
13
18
|
...DEFAULT_VALUES,
|
|
@@ -36,12 +41,16 @@ function normalizeEmit(emit) {
|
|
|
36
41
|
function hasClasses(classes) {
|
|
37
42
|
return !!classes && Object.values(classes).some(Class => typeof Class === "function");
|
|
38
43
|
}
|
|
44
|
+
|
|
45
|
+
/** Reads and validates raw input bytes for the CMF format reader. */
|
|
39
46
|
function readRawInput(input, options = {}) {
|
|
40
47
|
if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
|
|
41
48
|
return input;
|
|
42
49
|
}
|
|
43
50
|
return readCmf(input, options);
|
|
44
51
|
}
|
|
52
|
+
|
|
53
|
+
/** Reads and validates raw input bytes asynchronously for the CMF format reader. */
|
|
45
54
|
async function readRawInputAsync(input, options = {}) {
|
|
46
55
|
if (input && typeof input === "object" && Array.isArray(input.sections) && Array.isArray(input.meshes)) {
|
|
47
56
|
return input;
|
|
@@ -51,6 +60,8 @@ async function readRawInputAsync(input, options = {}) {
|
|
|
51
60
|
} = await import('./schema.js');
|
|
52
61
|
return readCmfAsync(input, options);
|
|
53
62
|
}
|
|
63
|
+
|
|
64
|
+
/** Reads input using normalized format options for the CMF format reader. */
|
|
54
65
|
function readWithValues(owner, input, values) {
|
|
55
66
|
const raw = readRawInput(input, values);
|
|
56
67
|
if (values.emit === OUTPUT_RAW) {
|
|
@@ -64,6 +75,11 @@ function readWithValues(owner, input, values) {
|
|
|
64
75
|
source: values.source
|
|
65
76
|
});
|
|
66
77
|
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Reads input asynchronously using normalized format options for the CMF format
|
|
81
|
+
* reader.
|
|
82
|
+
*/
|
|
67
83
|
async function readWithValuesAsync(owner, input, values) {
|
|
68
84
|
const raw = await readRawInputAsync(input, values);
|
|
69
85
|
if (values.emit === OUTPUT_RAW) {
|
|
@@ -77,6 +93,8 @@ async function readWithValuesAsync(owner, input, values) {
|
|
|
77
93
|
source: values.source
|
|
78
94
|
});
|
|
79
95
|
}
|
|
96
|
+
|
|
97
|
+
/** Loads shared with values through the current CMF format reader. */
|
|
80
98
|
function loadSharedWithValues(input, values) {
|
|
81
99
|
const native = buildCmfFromShared(input);
|
|
82
100
|
return values.emit === OUTPUT_SHARED ? buildSharedFromCmf(native, values.classes, {
|
|
@@ -87,6 +105,8 @@ function loadSharedWithValues(input, values) {
|
|
|
87
105
|
source: values.source
|
|
88
106
|
});
|
|
89
107
|
}
|
|
108
|
+
|
|
109
|
+
/** Loads native with values through the current CMF format reader. */
|
|
90
110
|
function loadNativeWithValues(input, values) {
|
|
91
111
|
if (values.emit === OUTPUT_RAW) {
|
|
92
112
|
return input;
|
|
@@ -99,6 +119,11 @@ function loadNativeWithValues(input, values) {
|
|
|
99
119
|
source: values.source
|
|
100
120
|
});
|
|
101
121
|
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Inspects raw CMF result without materializing the full CMF format reader
|
|
125
|
+
* payload.
|
|
126
|
+
*/
|
|
102
127
|
function inspectRawCmfResult(input, options = {}) {
|
|
103
128
|
return inspectCmf(readRawInput(input, {
|
|
104
129
|
...options,
|
|
@@ -158,6 +183,8 @@ function emptyGr2Vertex() {
|
|
|
158
183
|
blendWeight: []
|
|
159
184
|
};
|
|
160
185
|
}
|
|
186
|
+
|
|
187
|
+
/** Converts a parsed payload into a JSON-safe value for the CMF format reader. */
|
|
161
188
|
function toJsonValue(value) {
|
|
162
189
|
if (value === null || value === undefined) {
|
|
163
190
|
return value;
|
|
@@ -180,11 +207,15 @@ function toJsonValue(value) {
|
|
|
180
207
|
}
|
|
181
208
|
return value;
|
|
182
209
|
}
|
|
210
|
+
|
|
211
|
+
/** Validates a requested runtime class key for the CMF format reader. */
|
|
183
212
|
function validateClassKey(type) {
|
|
184
213
|
if (!CLASS_KEYS.includes(type)) {
|
|
185
214
|
throw new TypeError(`Unknown CMF class key "${type}"`);
|
|
186
215
|
}
|
|
187
216
|
}
|
|
217
|
+
|
|
218
|
+
/** Validates a resolved runtime class constructor for the CMF format reader. */
|
|
188
219
|
function validateClass(type, Class) {
|
|
189
220
|
validateClassKey(type);
|
|
190
221
|
if (typeof Class !== "function") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/cmf/core/helpers.js"],"sourcesContent":["import { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED } from \"./constants.js\";\nimport { inspectCmf, readCmf } from \"./schema.js\";\nimport { buildCmfFromShared, buildSharedFromCmf } from \"./shared.js\";\n\nexport { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED };\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_NATIVE,\n validateCrc: true,\n decodeBuffers: true,\n classes: {}\n});\n\nexport function normalizeValues(base = {}, options = {})\n{\n const values = {\n ...DEFAULT_VALUES,\n ...base,\n ...options,\n classes: {\n ...(base.classes ?? {}),\n ...(options.classes ?? {})\n }\n };\n\n values.emit = normalizeEmit(values.emit);\n if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes))\n {\n throw new TypeError(\"CMF emit \\\"gr2\\\" requires explicit classes\");\n }\n\n validateClasses(values.classes);\n values.decodeBuffers = !!values.decodeBuffers;\n return values;\n}\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON)\n {\n return OUTPUT_CMF;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;\n throw new TypeError(`CMF emit must be \"${OUTPUT_CMF}\", \"${OUTPUT_CMF_JSON}\", \"${OUTPUT_GR2}\", \"${OUTPUT_SHARED}\", or \"${OUTPUT_RAW}\"`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nexport function readRawInput(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n return readCmf(input, options);\n}\n\nexport async function readRawInputAsync(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n const { readCmfAsync } = await import(\"./schema.js\");\n return readCmfAsync(input, options);\n}\n\nexport function readWithValues(owner, input, values)\n{\n const raw = readRawInput(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport async function readWithValuesAsync(owner, input, values)\n{\n const raw = await readRawInputAsync(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\nexport function loadSharedWithValues(input, values)\n{\n const native = buildCmfFromShared(input);\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(native, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(native, values.classes, { source: values.source })\n : hydrateNativeRoot(native, values.classes, { source: values.source });\n}\n\nexport function loadNativeWithValues(input, values)\n{\n if (values.emit === OUTPUT_RAW)\n {\n return input;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(input, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(input, values.classes, { source: values.source })\n : hydrateNativeRoot(input, values.classes, { source: values.source });\n}\n\nexport function inspectRawCmfResult(input, options = {})\n{\n return inspectCmf(readRawInput(input, { ...options, decodeBuffers: false }));\n}\n\nfunction buildGr2FromCmf(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n grannyFileFormatRevision: raw.version,\n grannyFileSource: \"cmf\",\n meshes: raw.meshes.map((mesh) => hydrateGr2Mesh(mesh, hydrationClasses)),\n models: [],\n animations: raw.animations.map((animation) => hydrate(\"Animation\", {\n name: animation.name ?? \"\",\n duration: animation.duration ?? 0,\n timeStep: 0,\n oversampling: 0,\n defaultLoopCount: 0,\n flags: 0,\n trackGroups: []\n }, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateGr2Mesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n name: mesh.name,\n morphTargets: (mesh.morphTargets?.targets ?? []).map((target) => hydrate(\"MorphTarget\", {\n ...target,\n dataIsDeltas: true,\n vertex: target.vertex ?? null\n }, classes)),\n minBounds: mesh.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: mesh.bounds?.max ?? [ 0, 0, 0 ],\n boneBindings: (mesh.boneBindings ?? []).map((binding) => hydrate(\"BoneBinding\", {\n name: binding.name,\n minBounds: binding.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: binding.bounds?.max ?? [ 0, 0, 0 ]\n }, classes)),\n vertex: mesh.vertex ?? emptyGr2Vertex(),\n indices: (mesh.indices ?? []).map((group) => hydrate(\"IndexGroup\", {\n name: group.name ?? \"\",\n bytesPerIndex: group.bytesPerIndex ?? 2,\n faces: group.faces ?? []\n }, classes))\n }, classes);\n}\n\nfunction emptyGr2Vertex()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n blendIndice: [],\n blendWeight: []\n };\n}\n\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined)\n {\n return value;\n }\n\n if (Array.isArray(value))\n {\n return value.map((item) => toJsonValue(item));\n }\n\n if (ArrayBuffer.isView(value))\n {\n return Array.from(value);\n }\n\n if (typeof value.toJSON === \"function\")\n {\n return toJsonValue(value.toJSON());\n }\n\n if (typeof value === \"object\")\n {\n const result = {};\n for (const [ key, child ] of Object.entries(value))\n {\n result[key] = toJsonValue(child);\n }\n return result;\n }\n\n return value;\n}\n\nexport function validateClassKey(type)\n{\n if (!CLASS_KEYS.includes(type))\n {\n throw new TypeError(`Unknown CMF class key \"${type}\"`);\n }\n}\n\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CMF class \"${type}\" must be a constructor`);\n }\n}\n\nfunction validateClasses(classes)\n{\n for (const [ type, Class ] of Object.entries(classes ?? {}))\n {\n validateClass(type, Class);\n }\n}\n\nfunction hydrateNativeRoot(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n signature: raw.signature,\n version: raw.version,\n headerSize: raw.headerSize,\n crc32: raw.crc32,\n sections: (raw.sections ?? []).map((section) => hydrate(\"Section\", section, hydrationClasses)),\n metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,\n meshes: raw.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: raw.skeletons.map((skeleton) => hydrateSkeleton(skeleton, hydrationClasses)),\n animations: raw.animations.map((animation) => hydrateAnimation(animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMetadata(metadata, classes)\n{\n return hydrate(\"Metadata\", {\n entries: metadata.entries.map((entry) => hydrate(\"MetadataEntry\", entry, classes))\n }, classes);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateMeshLod(lod, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateMeshLod(lod, classes)\n{\n return hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateMorphTargets(morphTargets, classes)\n{\n return hydrate(\"MorphTargets\", {\n decl: morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateSkeleton(skeleton, classes)\n{\n return hydrate(\"Skeleton\", {\n ...skeleton,\n boneMasks: skeleton.boneMasks.map((mask) => hydrate(\"BoneMask\", {\n ...mask,\n weights: mask.weights.map((weight) => hydrate(\"BoneWeight\", weight, classes))\n }, classes))\n }, classes);\n}\n\nfunction hydrateAnimation(animation, classes)\n{\n return hydrate(\"Animation\", {\n ...animation,\n channels: animation.channels.map((channel) => hydrate(\"AnimationChannel\", channel, classes)),\n curves: animation.curves.map((curve) => hydrate(\"AnimationCurve\", curve, classes))\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n if (!Class)\n {\n return fields;\n }\n\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return populate(new Class(), fields, options);\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsCmfFormat class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["DEFAULT_VALUES","Object","freeze","emit","OUTPUT_NATIVE","validateCrc","decodeBuffers","classes","normalizeValues","base","options","values","normalizeEmit","OUTPUT_GR2","hasClasses","TypeError","validateClasses","undefined","OUTPUT_CMF","OUTPUT_CMF_JSON","OUTPUT_JSON","OUTPUT_RAW","OUTPUT_SHARED","some","Class","readRawInput","input","Array","isArray","sections","meshes","readCmf","readRawInputAsync","readCmfAsync","readWithValues","owner","raw","buildSharedFromCmf","source","buildGr2FromCmf","hydrateNativeRoot","readWithValuesAsync","loadSharedWithValues","native","buildCmfFromShared","loadNativeWithValues","inspectRawCmfResult","inspectCmf","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","grannyFileFormatRevision","version","grannyFileSource","map","mesh","hydrateGr2Mesh","models","animations","animation","name","duration","timeStep","oversampling","defaultLoopCount","flags","trackGroups","morphTargets","targets","target","dataIsDeltas","vertex","minBounds","bounds","min","maxBounds","max","boneBindings","binding","emptyGr2Vertex","indices","group","bytesPerIndex","faces","position","normal","tangent","binormal","texcoord0","texcoord1","blendIndice","blendWeight","toJsonValue","value","item","ArrayBuffer","isView","from","toJSON","result","key","child","entries","validateClassKey","type","CLASS_KEYS","includes","validateClass","signature","headerSize","crc32","section","metadata","hydrateMetadata","hydrateMesh","skeletons","skeleton","hydrateSkeleton","hydrateAnimation","entry","decl","element","lods","lod","hydrateMeshLod","areas","area","hydrateMorphTargets","audioOcclusionMesh","boneMasks","mask","weights","weight","channels","channel","curves","curve","fields","keys","length","__hydrationOptions","populate","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/cmf/core/helpers.js"],"sourcesContent":["import { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED } from \"./constants.js\";\nimport { inspectCmf, readCmf } from \"./schema.js\";\nimport { buildCmfFromShared, buildSharedFromCmf } from \"./shared.js\";\n\nexport { CLASS_KEYS, OUTPUT_CMF, OUTPUT_CMF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_NATIVE, OUTPUT_RAW, OUTPUT_SHARED };\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_NATIVE,\n validateCrc: true,\n decodeBuffers: true,\n classes: {}\n});\n\n/**\n * Normalizes reader options against their supported defaults for the CMF format\n * reader.\n */\nexport function normalizeValues(base = {}, options = {})\n{\n const values = {\n ...DEFAULT_VALUES,\n ...base,\n ...options,\n classes: {\n ...(base.classes ?? {}),\n ...(options.classes ?? {})\n }\n };\n\n values.emit = normalizeEmit(values.emit);\n if (values.emit === OUTPUT_GR2 && !hasClasses(values.classes))\n {\n throw new TypeError(\"CMF emit \\\"gr2\\\" requires explicit classes\");\n }\n\n validateClasses(values.classes);\n values.decodeBuffers = !!values.decodeBuffers;\n return values;\n}\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_NATIVE || emit === OUTPUT_CMF || emit === OUTPUT_CMF_JSON || emit === OUTPUT_JSON)\n {\n return OUTPUT_CMF;\n }\n if (emit === OUTPUT_GR2 || emit === OUTPUT_RAW || emit === OUTPUT_SHARED) return emit;\n throw new TypeError(`CMF emit must be \"${OUTPUT_CMF}\", \"${OUTPUT_CMF_JSON}\", \"${OUTPUT_GR2}\", \"${OUTPUT_SHARED}\", or \"${OUTPUT_RAW}\"`);\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\n/** Reads and validates raw input bytes for the CMF format reader. */\nexport function readRawInput(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n return readCmf(input, options);\n}\n\n/** Reads and validates raw input bytes asynchronously for the CMF format reader. */\nexport async function readRawInputAsync(input, options = {})\n{\n if (input && typeof input === \"object\" && Array.isArray(input.sections) && Array.isArray(input.meshes))\n {\n return input;\n }\n\n const { readCmfAsync } = await import(\"./schema.js\");\n return readCmfAsync(input, options);\n}\n\n/** Reads input using normalized format options for the CMF format reader. */\nexport function readWithValues(owner, input, values)\n{\n const raw = readRawInput(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\n/**\n * Reads input asynchronously using normalized format options for the CMF format\n * reader.\n */\nexport async function readWithValuesAsync(owner, input, values)\n{\n const raw = await readRawInputAsync(input, values);\n if (values.emit === OUTPUT_RAW)\n {\n return raw;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(raw, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(raw, values.classes, { source: values.source })\n : hydrateNativeRoot(raw, values.classes, { source: values.source });\n}\n\n/** Loads shared with values through the current CMF format reader. */\nexport function loadSharedWithValues(input, values)\n{\n const native = buildCmfFromShared(input);\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(native, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(native, values.classes, { source: values.source })\n : hydrateNativeRoot(native, values.classes, { source: values.source });\n}\n\n/** Loads native with values through the current CMF format reader. */\nexport function loadNativeWithValues(input, values)\n{\n if (values.emit === OUTPUT_RAW)\n {\n return input;\n }\n\n return values.emit === OUTPUT_SHARED\n ? buildSharedFromCmf(input, values.classes, { source: values.source })\n : values.emit === OUTPUT_GR2\n ? buildGr2FromCmf(input, values.classes, { source: values.source })\n : hydrateNativeRoot(input, values.classes, { source: values.source });\n}\n\n/**\n * Inspects raw CMF result without materializing the full CMF format reader\n * payload.\n */\nexport function inspectRawCmfResult(input, options = {})\n{\n return inspectCmf(readRawInput(input, { ...options, decodeBuffers: false }));\n}\n\nfunction buildGr2FromCmf(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n grannyFileFormatRevision: raw.version,\n grannyFileSource: \"cmf\",\n meshes: raw.meshes.map((mesh) => hydrateGr2Mesh(mesh, hydrationClasses)),\n models: [],\n animations: raw.animations.map((animation) => hydrate(\"Animation\", {\n name: animation.name ?? \"\",\n duration: animation.duration ?? 0,\n timeStep: 0,\n oversampling: 0,\n defaultLoopCount: 0,\n flags: 0,\n trackGroups: []\n }, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateGr2Mesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n name: mesh.name,\n morphTargets: (mesh.morphTargets?.targets ?? []).map((target) => hydrate(\"MorphTarget\", {\n ...target,\n dataIsDeltas: true,\n vertex: target.vertex ?? null\n }, classes)),\n minBounds: mesh.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: mesh.bounds?.max ?? [ 0, 0, 0 ],\n boneBindings: (mesh.boneBindings ?? []).map((binding) => hydrate(\"BoneBinding\", {\n name: binding.name,\n minBounds: binding.bounds?.min ?? [ 0, 0, 0 ],\n maxBounds: binding.bounds?.max ?? [ 0, 0, 0 ]\n }, classes)),\n vertex: mesh.vertex ?? emptyGr2Vertex(),\n indices: (mesh.indices ?? []).map((group) => hydrate(\"IndexGroup\", {\n name: group.name ?? \"\",\n bytesPerIndex: group.bytesPerIndex ?? 2,\n faces: group.faces ?? []\n }, classes))\n }, classes);\n}\n\nfunction emptyGr2Vertex()\n{\n return {\n position: [],\n normal: [],\n tangent: [],\n binormal: [],\n texcoord0: [],\n texcoord1: [],\n blendIndice: [],\n blendWeight: []\n };\n}\n\n/** Converts a parsed payload into a JSON-safe value for the CMF format reader. */\nexport function toJsonValue(value)\n{\n if (value === null || value === undefined)\n {\n return value;\n }\n\n if (Array.isArray(value))\n {\n return value.map((item) => toJsonValue(item));\n }\n\n if (ArrayBuffer.isView(value))\n {\n return Array.from(value);\n }\n\n if (typeof value.toJSON === \"function\")\n {\n return toJsonValue(value.toJSON());\n }\n\n if (typeof value === \"object\")\n {\n const result = {};\n for (const [ key, child ] of Object.entries(value))\n {\n result[key] = toJsonValue(child);\n }\n return result;\n }\n\n return value;\n}\n\n/** Validates a requested runtime class key for the CMF format reader. */\nexport function validateClassKey(type)\n{\n if (!CLASS_KEYS.includes(type))\n {\n throw new TypeError(`Unknown CMF class key \"${type}\"`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the CMF format reader. */\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CMF class \"${type}\" must be a constructor`);\n }\n}\n\nfunction validateClasses(classes)\n{\n for (const [ type, Class ] of Object.entries(classes ?? {}))\n {\n validateClass(type, Class);\n }\n}\n\nfunction hydrateNativeRoot(raw, classes, hydrationOptions = {})\n{\n const hydrationClasses = createHydrationClasses(classes, hydrationOptions);\n return hydrate(\"Root\", {\n signature: raw.signature,\n version: raw.version,\n headerSize: raw.headerSize,\n crc32: raw.crc32,\n sections: (raw.sections ?? []).map((section) => hydrate(\"Section\", section, hydrationClasses)),\n metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,\n meshes: raw.meshes.map((mesh) => hydrateMesh(mesh, hydrationClasses)),\n skeletons: raw.skeletons.map((skeleton) => hydrateSkeleton(skeleton, hydrationClasses)),\n animations: raw.animations.map((animation) => hydrateAnimation(animation, hydrationClasses))\n }, hydrationClasses, hydrationOptions);\n}\n\nfunction hydrateMetadata(metadata, classes)\n{\n return hydrate(\"Metadata\", {\n entries: metadata.entries.map((entry) => hydrate(\"MetadataEntry\", entry, classes))\n }, classes);\n}\n\nfunction hydrateMesh(mesh, classes)\n{\n return hydrate(\"Mesh\", {\n ...mesh,\n decl: mesh.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n lods: mesh.lods.map((lod) => hydrateMeshLod(lod, classes)),\n areas: mesh.areas.map((area) => hydrate(\"MeshArea\", area, classes)),\n boneBindings: mesh.boneBindings.map((binding) => hydrate(\"BoneBinding\", binding, classes)),\n morphTargets: hydrateMorphTargets(mesh.morphTargets, classes),\n audioOcclusionMesh: hydrate(\"AudioOcclusionMesh\", mesh.audioOcclusionMesh, classes)\n }, classes);\n}\n\nfunction hydrateMeshLod(lod, classes)\n{\n return hydrate(\"MeshLod\", {\n ...lod,\n areas: lod.areas.map((area) => hydrate(\"LodMeshArea\", area, classes)),\n morphTargets: lod.morphTargets.map((target) => hydrate(\"LodMorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateMorphTargets(morphTargets, classes)\n{\n return hydrate(\"MorphTargets\", {\n decl: morphTargets.decl.map((element) => hydrate(\"VertexElement\", element, classes)),\n targets: morphTargets.targets.map((target) => hydrate(\"MorphTarget\", target, classes))\n }, classes);\n}\n\nfunction hydrateSkeleton(skeleton, classes)\n{\n return hydrate(\"Skeleton\", {\n ...skeleton,\n boneMasks: skeleton.boneMasks.map((mask) => hydrate(\"BoneMask\", {\n ...mask,\n weights: mask.weights.map((weight) => hydrate(\"BoneWeight\", weight, classes))\n }, classes))\n }, classes);\n}\n\nfunction hydrateAnimation(animation, classes)\n{\n return hydrate(\"Animation\", {\n ...animation,\n channels: animation.channels.map((channel) => hydrate(\"AnimationChannel\", channel, classes)),\n curves: animation.curves.map((curve) => hydrate(\"AnimationCurve\", curve, classes))\n }, classes);\n}\n\nfunction hydrate(type, fields, classes, hydrationOptions = {})\n{\n const Class = classes?.[type];\n if (!Class)\n {\n return fields;\n }\n\n const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};\n return populate(new Class(), fields, options);\n}\n\nfunction populate(instance, fields, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsCmfFormat class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(fields, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\nfunction createHydrationClasses(classes, hydrationOptions)\n{\n const map = Object.create(classes || null);\n Object.defineProperty(map, \"__hydrationOptions\", { value: hydrationOptions, enumerable: false });\n return map;\n}\n"],"names":["DEFAULT_VALUES","Object","freeze","emit","OUTPUT_NATIVE","validateCrc","decodeBuffers","classes","normalizeValues","base","options","values","normalizeEmit","OUTPUT_GR2","hasClasses","TypeError","validateClasses","undefined","OUTPUT_CMF","OUTPUT_CMF_JSON","OUTPUT_JSON","OUTPUT_RAW","OUTPUT_SHARED","some","Class","readRawInput","input","Array","isArray","sections","meshes","readCmf","readRawInputAsync","readCmfAsync","readWithValues","owner","raw","buildSharedFromCmf","source","buildGr2FromCmf","hydrateNativeRoot","readWithValuesAsync","loadSharedWithValues","native","buildCmfFromShared","loadNativeWithValues","inspectRawCmfResult","inspectCmf","hydrationOptions","hydrationClasses","createHydrationClasses","hydrate","grannyFileFormatRevision","version","grannyFileSource","map","mesh","hydrateGr2Mesh","models","animations","animation","name","duration","timeStep","oversampling","defaultLoopCount","flags","trackGroups","morphTargets","targets","target","dataIsDeltas","vertex","minBounds","bounds","min","maxBounds","max","boneBindings","binding","emptyGr2Vertex","indices","group","bytesPerIndex","faces","position","normal","tangent","binormal","texcoord0","texcoord1","blendIndice","blendWeight","toJsonValue","value","item","ArrayBuffer","isView","from","toJSON","result","key","child","entries","validateClassKey","type","CLASS_KEYS","includes","validateClass","signature","headerSize","crc32","section","metadata","hydrateMetadata","hydrateMesh","skeletons","skeleton","hydrateSkeleton","hydrateAnimation","entry","decl","element","lods","lod","hydrateMeshLod","areas","area","hydrateMorphTargets","audioOcclusionMesh","boneMasks","mask","weights","weight","channels","channel","curves","curve","fields","keys","length","__hydrationOptions","populate","instance","SetValues","skipUpdate","skipEvents","create","defineProperty","enumerable"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { STRUCT_SIZE, FILE_SIGNATURE, FILE_VERSION, SectionCompression, SectionT
|
|
|
2
2
|
import { BinaryReader, crc32, enumName, readBounds, readVector3, readMatrix, readQuaternion } from './binary.js';
|
|
3
3
|
import { decodeGeometrySync, decodeGeometryAsync } from './buffers.js';
|
|
4
4
|
|
|
5
|
+
/** Reads and validates a CMF document synchronously for the CMF format reader. */
|
|
5
6
|
function readCmf(input, options = {}) {
|
|
6
7
|
const reader = new BinaryReader(input);
|
|
7
8
|
const header = readHeader(reader);
|
|
@@ -23,6 +24,8 @@ function readCmf(input, options = {}) {
|
|
|
23
24
|
};
|
|
24
25
|
return options.decodeBuffers ? decodeGeometrySync(result, reader.bytes) : result;
|
|
25
26
|
}
|
|
27
|
+
|
|
28
|
+
/** Reads and validates a CMF document asynchronously for the CMF format reader. */
|
|
26
29
|
async function readCmfAsync(input, options = {}) {
|
|
27
30
|
const reader = new BinaryReader(input);
|
|
28
31
|
const header = readHeader(reader);
|
|
@@ -44,6 +47,8 @@ async function readCmfAsync(input, options = {}) {
|
|
|
44
47
|
};
|
|
45
48
|
return options.decodeBuffers ? await decodeGeometryAsync(result, reader.bytes) : result;
|
|
46
49
|
}
|
|
50
|
+
|
|
51
|
+
/** Reads header from the current CMF format reader. */
|
|
47
52
|
function readHeader(reader) {
|
|
48
53
|
const signature = reader.u32(0);
|
|
49
54
|
const version = reader.u32(4);
|
|
@@ -60,6 +65,11 @@ function readHeader(reader) {
|
|
|
60
65
|
sections
|
|
61
66
|
};
|
|
62
67
|
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns CMF header and section metadata without decoding geometry for the CMF
|
|
71
|
+
* format reader.
|
|
72
|
+
*/
|
|
63
73
|
function inspectCmf(result) {
|
|
64
74
|
return {
|
|
65
75
|
signature: result.signature,
|