@carbonenginejs/runtime-resource 0.9.1 → 0.10.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 +718 -229
- 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 +91 -2
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +47 -21
- 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 +4 -2
- package/dist/format/CjsResourceProbe.js.map +1 -1
- 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 +62 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +127 -2
- 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/fbx/core/helpers.js +22 -1
- 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 +18 -3
- 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/tangents.js +9 -9
- package/dist/formats/gr2/core/tangents.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/index.js +4 -4
- 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/obj/core/helpers.js +2 -2
- package/dist/formats/obj/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 +3 -1
- 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 +10 -2
- 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/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 +57 -44
- package/dist/index.js.map +1 -1
- package/dist/{CjsResource.js → resource/CjsResource.js} +234 -19
- package/dist/resource/CjsResource.js.map +1 -0
- package/dist/{resources → resource}/Tr2LightProfileRes.js +5 -4
- package/dist/resource/Tr2LightProfileRes.js.map +1 -0
- package/dist/{resources → resource/audio}/AudioGeometryResData.js +4 -4
- 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 +3 -3
- package/dist/resource/geometry/MeshDecalData.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalLodData.js +3 -3
- 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 +4 -4
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +4 -4
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +3 -3
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +5 -5
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +3 -3
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriJointBinding.js +4 -4
- package/dist/resource/geometry/TriJointBinding.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +3 -3
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +3 -3
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +3 -3
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +5 -5
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +7 -6
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +7 -6
- 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 +420 -0
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialArea.js +11 -6
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialMesh.js +10 -5
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2MaterialRes.js +12 -6
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
- package/dist/resource/shader/Tr2Shader.js +250 -0
- package/dist/resource/shader/Tr2Shader.js.map +1 -0
- package/dist/{resources → resource/shader}/Tr2ShaderPermutation.js +15 -9
- 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/portableValidation.js +461 -0
- package/dist/resource/shader/portableValidation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +100 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +34 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +113 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +141 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +107 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js +90 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +235 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +71 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2Pass.js +111 -0
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +80 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
- package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +84 -7
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +57 -11
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2ImageRes.js +7 -5
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +5 -3
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +3 -3
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +3 -3
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +8 -6
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +3 -3
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/{resources → resource/texture}/TriTextureRes.js +43 -27
- 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 +61 -61
- 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 +18 -5
- package/docs/architecture.md +40 -17
- package/docs/concepts/resource-lifecycle.md +2 -1
- package/docs/formats/README.md +4 -0
- 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 +1 -1
- package/docs/reference/classes/resources.md +151 -41
- package/docs/reference/classes/texture.md +7 -7
- package/docs/reference/events.md +1 -1
- 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/black/NOTICE +1 -1
- package/package.json +9 -4
- 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.map +0 -1
- package/dist/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/resources/Tr2MaterialRes.js.map +0 -1
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sources":["../../../../../src/formats/cmf/core/writer.js"],"sourcesContent":["import { MeshoptEncoder } from \"meshoptimizer/encoder\";\nimport {\n AnimationChannelTargetType,\n ElementType,\n FILE_SIGNATURE,\n FILE_VERSION,\n Interpolation,\n MeshTopology,\n STRUCT_SIZE,\n SectionCompression,\n SectionType,\n Usage\n} from \"./constants.js\";\nimport { crc32 } from \"./binary.js\";\n\n/**\n * Binary CMF v1 writer.\n *\n * Mirrors CarbonEngine's `cmf::BuildFile`: the object graph is flattened into\n * the Data section as structs with self-relative tagged span offsets\n * (depth-first in member order, 8-byte chunk alignment, identical leaf chunks\n * deduplicated), GPU buffers referenced by BufferViews become one section\n * each (remapped to section indices in first-encounter order, meshoptimizer\n * compressed by default), optional metadata flattens into a trailing section,\n * and the header CRC covers everything after the crc32 field.\n */\n\nconst textEncoder = new TextEncoder();\n\nlet encoderReady = false;\nMeshoptEncoder.ready.then(() => { encoderReady = true; });\n\nfunction writeError(message)\n{\n const error = new Error(`CMF write: ${message}`);\n error.code = \"CJS_FORMAT_WRITE_ERROR\";\n return error;\n}\n\nfunction enumValue(names, value, label)\n{\n if (typeof value === \"number\") return value;\n const index = names.indexOf(value);\n if (index >= 0) return index;\n const unknown = /^Unknown\\((\\d+)\\)$/u.exec(String(value ?? \"\"));\n if (unknown) return Number(unknown[1]);\n throw writeError(`unknown ${label} value ${JSON.stringify(value)}`);\n}\n\n/**\n * Growable little-endian struct buffer with tagged span support.\n */\nclass Flattener\n{\n #bytes = new Uint8Array(1024);\n #view = new DataView(this.#bytes.buffer);\n #chunkCache = new Map();\n size = 0;\n\n #ensure(capacity)\n {\n if (capacity <= this.#bytes.length) return;\n let next = this.#bytes.length * 2;\n while (next < capacity) next *= 2;\n const grown = new Uint8Array(next);\n grown.set(this.#bytes.subarray(0, this.size));\n this.#bytes = grown;\n this.#view = new DataView(grown.buffer);\n }\n\n reserve(byteLength)\n {\n const offset = this.size;\n this.#ensure(offset + byteLength);\n this.#bytes.fill(0, offset, offset + byteLength);\n this.size = offset + byteLength;\n return offset;\n }\n\n reserveAligned(byteLength, alignment = 8)\n {\n const padded = Math.ceil(this.size / alignment) * alignment;\n this.#ensure(padded);\n this.#bytes.fill(0, this.size, padded);\n this.size = padded;\n return this.reserve(byteLength);\n }\n\n u8(offset, value) { this.#view.setUint8(offset, value); }\n u16(offset, value) { this.#view.setUint16(offset, value, true); }\n u32(offset, value) { this.#view.setUint32(offset, value >>> 0, true); }\n f32(offset, value) { this.#view.setFloat32(offset, value || 0, true); }\n i64(offset, value) { this.#view.setBigInt64(offset, BigInt(value), true); }\n u64(offset, value) { this.#view.setBigUint64(offset, BigInt(value), true); }\n\n setBytes(offset, bytes)\n {\n this.#bytes.set(bytes, offset);\n }\n\n /**\n * Write a span field and append its element chunk.\n *\n * `writeElement(flattener, offset, element)` may itself append nested\n * chunks; leaf chunks (`dedup: true`) are shared when byte-identical,\n * matching the reference writer.\n */\n span(fieldOffset, elements, elementSize, writeElement, { dedup = false } = {})\n {\n const count = elements ? elements.length : 0;\n const byteSize = count * elementSize;\n if (byteSize === 0)\n {\n // tagged self-relative offset of 0 keeps span pointers valid\n this.i64(fieldOffset, 1);\n this.u64(fieldOffset + 8, 0);\n return;\n }\n\n if (dedup)\n {\n const scratch = new Flattener();\n const scratchOffset = scratch.reserve(byteSize);\n for (let i = 0; i < count; i++) writeElement(scratch, scratchOffset + i * elementSize, elements[i]);\n const chunk = scratch.bytes();\n const key = chunkKey(chunk);\n const cached = this.#chunkCache.get(key);\n if (cached !== undefined && bytesEqual(this.#bytes, cached, chunk))\n {\n this.i64(fieldOffset, ((cached - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n const chunkOffset = this.reserveAligned(byteSize);\n this.setBytes(chunkOffset, chunk);\n this.#chunkCache.set(key, chunkOffset);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n\n const chunkOffset = this.reserveAligned(byteSize);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n for (let i = 0; i < count; i++) writeElement(this, chunkOffset + i * elementSize, elements[i]);\n }\n\n string(fieldOffset, value)\n {\n const encoded = textEncoder.encode(value || \"\");\n this.span(fieldOffset, encoded, 1, (buffer, offset, byte) => buffer.u8(offset, byte), { dedup: true });\n }\n\n bytes()\n {\n return this.#bytes.slice(0, this.size);\n }\n}\n\nfunction chunkKey(bytes)\n{\n let hash = 2166136261 >>> 0;\n for (let i = 0; i < bytes.length; i++)\n {\n hash = Math.imul(hash, 16777619) >>> 0;\n hash = (hash ^ bytes[i]) >>> 0;\n }\n return `${bytes.length}:${hash}`;\n}\n\nfunction bytesEqual(target, offset, chunk)\n{\n for (let i = 0; i < chunk.length; i++)\n {\n if (target[offset + i] !== chunk[i]) return false;\n }\n return true;\n}\n\nfunction writeBounds(buffer, offset, bounds)\n{\n const min = bounds?.min || [ 0, 0, 0 ];\n const max = bounds?.max || [ 0, 0, 0 ];\n for (let i = 0; i < 3; i++) buffer.f32(offset + i * 4, min[i]);\n for (let i = 0; i < 3; i++) buffer.f32(offset + 12 + i * 4, max[i]);\n}\n\nfunction writeBufferView(buffer, offset, view, remap)\n{\n const size = view?.size || 0;\n const index = view?.index || 0;\n buffer.u32(offset, size === 0 ? index : (remap.get(index) ?? index));\n buffer.u32(offset + 4, view?.offset || 0);\n buffer.u32(offset + 8, size);\n buffer.u32(offset + 12, view?.stride || 0);\n}\n\nfunction writeVertexElement(buffer, offset, element)\n{\n buffer.u8(offset, enumValue(Usage, element.usage, \"vertex usage\"));\n buffer.u8(offset + 1, element.usageIndex || 0);\n buffer.u8(offset + 2, enumValue(ElementType, element.type, \"element type\"));\n buffer.u8(offset + 3, element.elementCount || 0);\n buffer.u32(offset + 4, element.offset || 0);\n}\n\nfunction writeData(buffer, offset, graph, remap)\n{\n const writeMesh = (target, meshOffset, mesh) =>\n {\n target.string(meshOffset, mesh.name);\n target.span(meshOffset + 16, mesh.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 32, mesh.lods || [], STRUCT_SIZE.MeshLod, (lodTarget, lodOffset, lod) =>\n {\n writeBufferView(lodTarget, lodOffset, lod.vb, remap);\n writeBufferView(lodTarget, lodOffset + 16, lod.ib, remap);\n lodTarget.span(lodOffset + 32, lod.areas || [], STRUCT_SIZE.LodMeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.u32(areaOffset, area.firstElement || 0);\n areaTarget.u32(areaOffset + 4, area.elementCount || 0);\n }, { dedup: true });\n lodTarget.span(lodOffset + 48, lod.morphTargets || [], STRUCT_SIZE.LodMorphTarget, (morphTarget, morphOffset, morph) =>\n {\n writeBufferView(morphTarget, morphOffset, morph.vb, remap);\n });\n lodTarget.u32(lodOffset + 64, lod.threshold ?? 0xffffffff);\n });\n target.span(meshOffset + 48, mesh.areas || [], STRUCT_SIZE.MeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.string(areaOffset, area.name);\n writeBounds(areaTarget, areaOffset + 16, area.bounds);\n areaTarget.span(areaOffset + 40, area.bones || [], 2, (boneTarget, boneOffset, bone) => boneTarget.u16(boneOffset, bone), { dedup: true });\n areaTarget.u8(areaOffset + 56, area.affectedByBones ? 1 : 0);\n areaTarget.u8(areaOffset + 57, area.affectedByMorphTargets ? 1 : 0);\n });\n target.span(meshOffset + 64, mesh.boneBindings || [], STRUCT_SIZE.BoneBinding, (bindingTarget, bindingOffset, binding) =>\n {\n bindingTarget.string(bindingOffset, binding.name);\n writeBounds(bindingTarget, bindingOffset + 16, binding.bounds);\n });\n target.span(meshOffset + 80, mesh.morphTargets?.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 96, mesh.morphTargets?.targets || [], STRUCT_SIZE.MorphTarget, (morphTarget, morphOffset, morph) =>\n {\n morphTarget.string(morphOffset, morph.name);\n morphTarget.f32(morphOffset + 16, morph.maxDisplacement || 0);\n });\n target.span(meshOffset + 112, mesh.uvDensities || [], 4, (densityTarget, densityOffset, value) => densityTarget.f32(densityOffset, value), { dedup: true });\n writeBounds(target, meshOffset + 128, mesh.bounds);\n const occlusion = mesh.audioOcclusionMesh || {};\n target.span(meshOffset + 152, occlusion.vertices || [], 12, (vertexTarget, vertexOffset, vertex) =>\n {\n for (let i = 0; i < 3; i++) vertexTarget.f32(vertexOffset + i * 4, vertex[i]);\n }, { dedup: true });\n target.span(meshOffset + 168, occlusion.indices || [], 2, (indexTarget, indexOffset, index) => indexTarget.u16(indexOffset, index), { dedup: true });\n writeBounds(target, meshOffset + 184, occlusion.bounds);\n target.u8(meshOffset + 208, enumValue(MeshTopology, mesh.topology ?? \"TriangleList\", \"topology\"));\n target.u8(meshOffset + 209, mesh.skeleton === null || mesh.skeleton === undefined ? 0xff : mesh.skeleton);\n };\n\n const writeSkeleton = (target, skeletonOffset, skeleton) =>\n {\n if ((skeleton.bones || []).some((bone) => typeof bone !== \"string\"))\n {\n throw writeError(\n \"skeleton bones must be name strings; GR2-shaped skeletons need conversion (use writeShared) before writing\"\n );\n }\n target.string(skeletonOffset, skeleton.name);\n target.span(skeletonOffset + 16, skeleton.bones || [], 16, (boneTarget, boneOffset, bone) => boneTarget.string(boneOffset, bone));\n target.span(skeletonOffset + 32, skeleton.parents || [], 4, (parentTarget, parentOffset, parent) => parentTarget.u32(parentOffset, parent), { dedup: true });\n target.span(skeletonOffset + 48, skeleton.restTransforms || [], STRUCT_SIZE.Transform, (transformTarget, transformOffset, transform) =>\n {\n const position = transform.position || [ 0, 0, 0 ];\n const rotation = transform.rotation || [ 0, 0, 0, 1 ];\n const scale = transform.scale || [ 1, 1, 1 ];\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + i * 4, position[i]);\n for (let i = 0; i < 4; i++) transformTarget.f32(transformOffset + 12 + i * 4, rotation[i]);\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + 28 + i * 4, scale[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 64, skeleton.invBindTransforms || [], 64, (matrixTarget, matrixOffset, matrix) =>\n {\n for (let i = 0; i < 16; i++) matrixTarget.f32(matrixOffset + i * 4, matrix[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 80, skeleton.boneMasks || [], STRUCT_SIZE.BoneMask, (maskTarget, maskOffset, mask) =>\n {\n maskTarget.string(maskOffset, mask.name);\n maskTarget.span(maskOffset + 16, mask.weights || [], STRUCT_SIZE.BoneWeight, (weightTarget, weightOffset, weight) =>\n {\n weightTarget.u32(weightOffset, weight.index || 0);\n weightTarget.f32(weightOffset + 4, weight.weight ?? 1);\n }, { dedup: true });\n });\n };\n\n const writeAnimation = (target, animationOffset, animation) =>\n {\n target.string(animationOffset, animation.name);\n target.span(animationOffset + 16, animation.channels || [], STRUCT_SIZE.AnimationChannel, (channelTarget, channelOffset, channel) =>\n {\n channelTarget.string(channelOffset, channel.target);\n channelTarget.u8(channelOffset + 16, enumValue(AnimationChannelTargetType, channel.targetType, \"channel target type\"));\n channelTarget.u32(channelOffset + 20, channel.curveIndex || 0);\n });\n target.span(animationOffset + 32, animation.curves || [], STRUCT_SIZE.AnimationCurve, (curveTarget, curveOffset, curve) =>\n {\n curveTarget.u8(curveOffset, curve.valueDimension || 0);\n curveTarget.u8(curveOffset + 1, enumValue(Interpolation, curve.interpolation, \"interpolation\"));\n curveTarget.u8(curveOffset + 2, enumValue(ElementType, curve.knotType, \"knot type\"));\n curveTarget.u8(curveOffset + 3, enumValue(ElementType, curve.valueType, \"value type\"));\n curveTarget.u32(curveOffset + 4, curve.knotCount || 0);\n curveTarget.span(curveOffset + 8, curve.knots || [], 1, (knotTarget, knotOffset, knot) => knotTarget.u8(knotOffset, knot), { dedup: true });\n curveTarget.span(curveOffset + 24, curve.values || [], 1, (valueTarget, valueOffset, value) => valueTarget.u8(valueOffset, value), { dedup: true });\n });\n target.f32(animationOffset + 48, animation.duration || 0);\n };\n\n buffer.span(offset, graph.meshes || [], STRUCT_SIZE.Mesh, writeMesh);\n buffer.span(offset + 16, graph.skeletons || [], STRUCT_SIZE.Skeleton, writeSkeleton);\n buffer.span(offset + 32, graph.animations || [], STRUCT_SIZE.Animation, writeAnimation);\n}\n\n/**\n * Collect BufferView usage in reference-writer order and decide per-buffer\n * compression (conflicting stride/kind across views falls back to None).\n */\nfunction collectBufferRecords(graph, compress)\n{\n const records = [];\n const recordsByIndex = new Map();\n const visit = (view, compression) =>\n {\n if (!view || !view.size) return;\n const existing = recordsByIndex.get(view.index);\n if (!existing)\n {\n const record = {\n index: view.index,\n stride: view.stride || 0,\n compression: compress ? compression : \"None\"\n };\n records.push(record);\n recordsByIndex.set(view.index, record);\n }\n else if (existing.stride !== (view.stride || 0) || (compress ? compression : \"None\") !== existing.compression)\n {\n existing.stride = 0;\n existing.compression = \"None\";\n }\n };\n\n for (const mesh of graph.meshes || [])\n {\n for (const lod of mesh.lods || [])\n {\n visit(lod.vb, \"MeshOptimizerVertexBuffer\");\n visit(lod.ib, \"MeshOptimizerIndexBuffer\");\n for (const morph of lod.morphTargets || [])\n {\n visit(morph.vb, \"MeshOptimizerVertexBuffer\");\n }\n }\n }\n return records;\n}\n\nfunction resolveBufferBytes(graph, record)\n{\n const buffers = graph.buffers || [];\n const entry = buffers.find?.((buffer) => buffer && buffer.index === record.index) ?? buffers[record.index];\n const data = entry?.data ?? (entry instanceof Uint8Array ? entry : null);\n if (!data)\n {\n throw writeError(`no buffer data supplied for BufferView index ${record.index}`);\n }\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\nfunction compressBuffer(bytes, record)\n{\n if (record.compression === \"None\" || bytes.byteLength === 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n if (!encoderReady)\n {\n throw writeError(\"compressed output requires writeAsync/WriteAsync so meshoptimizer can initialize (or pass compress: false)\");\n }\n\n if (record.compression === \"MeshOptimizerVertexBuffer\")\n {\n if (record.stride === 0 || bytes.byteLength % record.stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n const count = bytes.byteLength / record.stride;\n const data = MeshoptEncoder.encodeVertexBuffer(bytes, count, record.stride);\n return { data, compression: \"MeshOptimizerVertexBuffer\", gpuAlignment: record.stride };\n }\n\n // index buffers: meshopt encodes triangle lists of u32; u16 sources widen\n const stride = record.stride;\n if ((stride !== 2 && stride !== 4) || bytes.byteLength % stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n const count = bytes.byteLength / stride;\n if (count % 3 !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n let source = bytes;\n if (stride === 2)\n {\n const wide = new Uint32Array(count);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let i = 0; i < count; i++) wide[i] = view.getUint16(i * 2, true);\n source = new Uint8Array(wide.buffer);\n }\n const data = MeshoptEncoder.encodeIndexBuffer(source, count, 4);\n return { data, compression: \"MeshOptimizerIndexBuffer\", gpuAlignment: stride };\n}\n\n/**\n * Serialize a CMF-native graph into .cmf bytes.\n *\n * @param {object} graph Native graph: `{ meshes, skeletons, animations, metadata?, buffers? }`\n * where `buffers` supplies uncompressed GPU bytes for each BufferView\n * `index` (as `{ index, data }` entries or an index-keyed array).\n * @param {object} [options] `compress` (default false for the sync writer)\n * enables meshoptimizer vertex/index compression.\n * @returns {Uint8Array} Complete .cmf file bytes.\n */\nexport function writeCmf(graph, options = {})\n{\n if (!graph || typeof graph !== \"object\")\n {\n throw writeError(\"input graph must be an object\");\n }\n const compress = options.compress === true;\n\n const records = collectBufferRecords(graph, compress);\n const compressed = records.map((record) =>\n {\n const bytes = resolveBufferBytes(graph, record);\n return { record, ...compressBuffer(bytes, record), uncompressedSize: bytes.byteLength };\n });\n const remap = new Map(records.map((record, position) => [ record.index, position + 1 ]));\n\n const data = new Flattener();\n data.reserve(STRUCT_SIZE.Data);\n writeData(data, 0, graph, remap);\n const dataBytes = data.bytes();\n\n let metadataBytes = null;\n if (graph.metadata && (graph.metadata.entries || []).length)\n {\n const metadata = new Flattener();\n metadata.reserve(STRUCT_SIZE.Metadata);\n metadata.span(0, graph.metadata.entries, STRUCT_SIZE.MetadataEntry, (target, offset, entry) =>\n {\n target.string(offset, entry.key);\n target.string(offset + 16, entry.value);\n });\n metadataBytes = metadata.bytes();\n }\n\n const sections = [\n { type: \"Data\", compression: \"None\", gpuAlignment: 0, compressedSize: dataBytes.byteLength, uncompressedSize: dataBytes.byteLength, data: dataBytes }\n ];\n for (const entry of compressed)\n {\n sections.push({\n type: \"GpuBuffer\",\n compression: entry.compression,\n gpuAlignment: entry.gpuAlignment,\n compressedSize: entry.data.byteLength,\n uncompressedSize: entry.uncompressedSize,\n data: entry.data\n });\n }\n if (metadataBytes)\n {\n sections.push({ type: \"Metadata\", compression: \"None\", gpuAlignment: 0, compressedSize: metadataBytes.byteLength, uncompressedSize: metadataBytes.byteLength, data: metadataBytes });\n }\n\n const header = new Flattener();\n header.reserve(STRUCT_SIZE.Header);\n header.u32(0, FILE_SIGNATURE);\n header.u32(4, FILE_VERSION);\n header.span(16, sections, STRUCT_SIZE.Section, () => {});\n const headerSize = header.size;\n header.u32(8, headerSize);\n\n let offset = headerSize;\n const sectionOffsets = sections.map((section) =>\n {\n offset = Math.ceil(offset / 8) * 8;\n const sectionOffset = offset;\n offset += section.compressedSize;\n return sectionOffset;\n });\n\n const sectionsChunk = headerSize - sections.length * STRUCT_SIZE.Section;\n sections.forEach((section, index) =>\n {\n const base = sectionsChunk + index * STRUCT_SIZE.Section;\n header.u32(base, sectionOffsets[index]);\n header.u32(base + 4, section.compressedSize);\n header.u32(base + 8, section.uncompressedSize);\n header.u16(base + 12, section.gpuAlignment || 0);\n header.u8(base + 14, enumValue(SectionType, section.type, \"section type\"));\n header.u8(base + 15, enumValue(SectionCompression, section.compression, \"section compression\"));\n });\n\n const total = offset;\n const file = new Uint8Array(total);\n file.set(header.bytes(), 0);\n sections.forEach((section, index) =>\n {\n file.set(section.data, sectionOffsets[index]);\n });\n\n const checksum = crc32(file, 16, file.byteLength);\n new DataView(file.buffer).setUint32(12, checksum, true);\n return file;\n}\n\n/**\n * Serialize a CMF-native graph asynchronously with compression enabled by\n * default (awaits meshoptimizer encoder initialization).\n *\n * @param {object} graph Native graph (see `writeCmf`).\n * @param {object} [options] `compress` defaults to true.\n * @returns {Promise<Uint8Array>} Complete .cmf file bytes.\n */\nexport async function writeCmfAsync(graph, options = {})\n{\n await MeshoptEncoder.ready;\n encoderReady = true;\n return writeCmf(graph, { ...options, compress: options.compress !== false });\n}\n"],"names":["textEncoder","TextEncoder","encoderReady","MeshoptEncoder","ready","then","writeError","message","error","Error","code","enumValue","names","value","label","index","indexOf","unknown","exec","String","Number","JSON","stringify","Flattener","Uint8Array","DataView","buffer","Map","size","#ensure","capacity","length","next","grown","set","subarray","reserve","byteLength","offset","fill","reserveAligned","alignment","padded","Math","ceil","u8","setUint8","u16","setUint16","u32","setUint32","f32","setFloat32","i64","setBigInt64","BigInt","u64","setBigUint64","setBytes","bytes","span","fieldOffset","elements","elementSize","writeElement","dedup","count","byteSize","scratch","scratchOffset","i","chunk","key","chunkKey","cached","get","undefined","bytesEqual","chunkOffset","string","encoded","encode","byte","slice","hash","imul","target","writeBounds","bounds","min","max","writeBufferView","view","remap","stride","writeVertexElement","element","Usage","usage","usageIndex","ElementType","type","elementCount","writeData","graph","writeMesh","meshOffset","mesh","name","decl","STRUCT_SIZE","VertexElement","lods","MeshLod","lodTarget","lodOffset","lod","vb","ib","areas","LodMeshArea","areaTarget","areaOffset","area","firstElement","morphTargets","LodMorphTarget","morphTarget","morphOffset","morph","threshold","MeshArea","bones","boneTarget","boneOffset","bone","affectedByBones","affectedByMorphTargets","boneBindings","BoneBinding","bindingTarget","bindingOffset","binding","targets","MorphTarget","maxDisplacement","uvDensities","densityTarget","densityOffset","occlusion","audioOcclusionMesh","vertices","vertexTarget","vertexOffset","vertex","indices","indexTarget","indexOffset","MeshTopology","topology","skeleton","writeSkeleton","skeletonOffset","some","parents","parentTarget","parentOffset","parent","restTransforms","Transform","transformTarget","transformOffset","transform","position","rotation","scale","invBindTransforms","matrixTarget","matrixOffset","matrix","boneMasks","BoneMask","maskTarget","maskOffset","mask","weights","BoneWeight","weightTarget","weightOffset","weight","writeAnimation","animationOffset","animation","channels","AnimationChannel","channelTarget","channelOffset","channel","AnimationChannelTargetType","targetType","curveIndex","curves","AnimationCurve","curveTarget","curveOffset","curve","valueDimension","Interpolation","interpolation","knotType","valueType","knotCount","knots","knotTarget","knotOffset","knot","values","valueTarget","valueOffset","duration","meshes","Mesh","skeletons","Skeleton","animations","Animation","collectBufferRecords","compress","records","recordsByIndex","visit","compression","existing","record","push","resolveBufferBytes","buffers","entry","find","data","compressBuffer","gpuAlignment","encodeVertexBuffer","source","wide","Uint32Array","byteOffset","getUint16","encodeIndexBuffer","writeCmf","options","compressed","map","uncompressedSize","Data","dataBytes","metadataBytes","metadata","entries","Metadata","MetadataEntry","sections","compressedSize","header","Header","FILE_SIGNATURE","FILE_VERSION","Section","headerSize","sectionOffsets","section","sectionOffset","sectionsChunk","forEach","base","SectionType","SectionCompression","total","file","checksum","crc32","writeCmfAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"writer.js","sources":["../../../../../src/formats/cmf/core/writer.js"],"sourcesContent":["import { MeshoptEncoder } from \"meshoptimizer/encoder\";\nimport {\n AnimationChannelTargetType,\n ElementType,\n FILE_SIGNATURE,\n FILE_VERSION,\n Interpolation,\n MeshTopology,\n STRUCT_SIZE,\n SectionCompression,\n SectionType,\n Usage\n} from \"./constants.js\";\nimport { crc32 } from \"./binary.js\";\n\n/**\n * Binary CMF v1 writer.\n *\n * Mirrors CarbonEngine's `cmf::BuildFile`: the object graph is flattened into\n * the Data section as structs with self-relative tagged span offsets\n * (depth-first in member order, 8-byte chunk alignment, identical leaf chunks\n * deduplicated), GPU buffers referenced by BufferViews become one section\n * each (remapped to section indices in first-encounter order, meshoptimizer\n * compressed by default), optional metadata flattens into a trailing section,\n * and the header CRC covers everything after the crc32 field.\n */\n\nconst textEncoder = new TextEncoder();\n\nlet encoderReady = false;\nMeshoptEncoder.ready.then(() => { encoderReady = true; });\n\nfunction writeError(message)\n{\n const error = new Error(`CMF write: ${message}`);\n error.code = \"CJS_FORMAT_WRITE_ERROR\";\n return error;\n}\n\nfunction enumValue(names, value, label)\n{\n if (typeof value === \"number\") return value;\n const index = names.indexOf(value);\n if (index >= 0) return index;\n const unknown = /^Unknown\\((\\d+)\\)$/u.exec(String(value ?? \"\"));\n if (unknown) return Number(unknown[1]);\n throw writeError(`unknown ${label} value ${JSON.stringify(value)}`);\n}\n\n/**\n * Growable little-endian struct buffer with tagged span support.\n */\nclass Flattener\n{\n #bytes = new Uint8Array(1024);\n #view = new DataView(this.#bytes.buffer);\n #chunkCache = new Map();\n size = 0;\n\n /**\n * Grows the output buffer when the requested write would exceed capacity for\n * the CMF binary writer.\n */\n #ensure(capacity)\n {\n if (capacity <= this.#bytes.length) return;\n let next = this.#bytes.length * 2;\n while (next < capacity) next *= 2;\n const grown = new Uint8Array(next);\n grown.set(this.#bytes.subarray(0, this.size));\n this.#bytes = grown;\n this.#view = new DataView(grown.buffer);\n }\n\n /** Reserves output storage in the current CMF binary writer. */\n reserve(byteLength)\n {\n const offset = this.size;\n this.#ensure(offset + byteLength);\n this.#bytes.fill(0, offset, offset + byteLength);\n this.size = offset + byteLength;\n return offset;\n }\n\n /** Reserves aligned in the current CMF binary writer. */\n reserveAligned(byteLength, alignment = 8)\n {\n const padded = Math.ceil(this.size / alignment) * alignment;\n this.#ensure(padded);\n this.#bytes.fill(0, this.size, padded);\n this.size = padded;\n return this.reserve(byteLength);\n }\n\n /**\n * Writes an unsigned 8-bit integer into the output buffer for the CMF binary\n * writer.\n */\n u8(offset, value) { this.#view.setUint8(offset, value); }\n\n /**\n * Writes an unsigned 16-bit little-endian integer into the output buffer for\n * the CMF binary writer.\n */\n u16(offset, value) { this.#view.setUint16(offset, value, true); }\n\n /**\n * Writes an unsigned 32-bit little-endian integer into the output buffer for\n * the CMF binary writer.\n */\n u32(offset, value) { this.#view.setUint32(offset, value >>> 0, true); }\n\n /**\n * Writes a 32-bit little-endian float into the output buffer for the CMF\n * binary writer.\n */\n f32(offset, value) { this.#view.setFloat32(offset, value || 0, true); }\n\n /**\n * Writes a signed 64-bit little-endian integer into the output buffer for\n * the CMF binary writer.\n */\n i64(offset, value) { this.#view.setBigInt64(offset, BigInt(value), true); }\n\n /**\n * Writes an unsigned 64-bit little-endian integer into the output buffer for\n * the CMF binary writer.\n */\n u64(offset, value) { this.#view.setBigUint64(offset, BigInt(value), true); }\n\n /**\n * Copies bytes into a previously reserved output range for the CMF binary\n * writer.\n */\n setBytes(offset, bytes)\n {\n this.#bytes.set(bytes, offset);\n }\n\n /**\n * Write a span field and append its element chunk.\n *\n * `writeElement(flattener, offset, element)` may itself append nested\n * chunks; leaf chunks (`dedup: true`) are shared when byte-identical,\n * matching the reference writer.\n */\n span(fieldOffset, elements, elementSize, writeElement, { dedup = false } = {})\n {\n const count = elements ? elements.length : 0;\n const byteSize = count * elementSize;\n if (byteSize === 0)\n {\n // tagged self-relative offset of 0 keeps span pointers valid\n this.i64(fieldOffset, 1);\n this.u64(fieldOffset + 8, 0);\n return;\n }\n\n if (dedup)\n {\n const scratch = new Flattener();\n const scratchOffset = scratch.reserve(byteSize);\n for (let i = 0; i < count; i++) writeElement(scratch, scratchOffset + i * elementSize, elements[i]);\n const chunk = scratch.bytes();\n const key = chunkKey(chunk);\n const cached = this.#chunkCache.get(key);\n if (cached !== undefined && bytesEqual(this.#bytes, cached, chunk))\n {\n this.i64(fieldOffset, ((cached - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n const chunkOffset = this.reserveAligned(byteSize);\n this.setBytes(chunkOffset, chunk);\n this.#chunkCache.set(key, chunkOffset);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n return;\n }\n\n const chunkOffset = this.reserveAligned(byteSize);\n this.i64(fieldOffset, ((chunkOffset - fieldOffset) | 1));\n this.u64(fieldOffset + 8, byteSize);\n for (let i = 0; i < count; i++) writeElement(this, chunkOffset + i * elementSize, elements[i]);\n }\n\n /**\n * Writes a length-prefixed UTF-8 string into the output buffer for the CMF\n * binary writer.\n */\n string(fieldOffset, value)\n {\n const encoded = textEncoder.encode(value || \"\");\n this.span(fieldOffset, encoded, 1, (buffer, offset, byte) => buffer.u8(offset, byte), { dedup: true });\n }\n\n /**\n * Writes a length-prefixed byte block into the output buffer for the CMF\n * binary writer.\n */\n bytes()\n {\n return this.#bytes.slice(0, this.size);\n }\n}\n\nfunction chunkKey(bytes)\n{\n let hash = 2166136261 >>> 0;\n for (let i = 0; i < bytes.length; i++)\n {\n hash = Math.imul(hash, 16777619) >>> 0;\n hash = (hash ^ bytes[i]) >>> 0;\n }\n return `${bytes.length}:${hash}`;\n}\n\nfunction bytesEqual(target, offset, chunk)\n{\n for (let i = 0; i < chunk.length; i++)\n {\n if (target[offset + i] !== chunk[i]) return false;\n }\n return true;\n}\n\nfunction writeBounds(buffer, offset, bounds)\n{\n const min = bounds?.min || [ 0, 0, 0 ];\n const max = bounds?.max || [ 0, 0, 0 ];\n for (let i = 0; i < 3; i++) buffer.f32(offset + i * 4, min[i]);\n for (let i = 0; i < 3; i++) buffer.f32(offset + 12 + i * 4, max[i]);\n}\n\nfunction writeBufferView(buffer, offset, view, remap)\n{\n const size = view?.size || 0;\n const index = view?.index || 0;\n buffer.u32(offset, size === 0 ? index : (remap.get(index) ?? index));\n buffer.u32(offset + 4, view?.offset || 0);\n buffer.u32(offset + 8, size);\n buffer.u32(offset + 12, view?.stride || 0);\n}\n\nfunction writeVertexElement(buffer, offset, element)\n{\n buffer.u8(offset, enumValue(Usage, element.usage, \"vertex usage\"));\n buffer.u8(offset + 1, element.usageIndex || 0);\n buffer.u8(offset + 2, enumValue(ElementType, element.type, \"element type\"));\n buffer.u8(offset + 3, element.elementCount || 0);\n buffer.u32(offset + 4, element.offset || 0);\n}\n\nfunction writeData(buffer, offset, graph, remap)\n{\n const writeMesh = (target, meshOffset, mesh) =>\n {\n target.string(meshOffset, mesh.name);\n target.span(meshOffset + 16, mesh.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 32, mesh.lods || [], STRUCT_SIZE.MeshLod, (lodTarget, lodOffset, lod) =>\n {\n writeBufferView(lodTarget, lodOffset, lod.vb, remap);\n writeBufferView(lodTarget, lodOffset + 16, lod.ib, remap);\n lodTarget.span(lodOffset + 32, lod.areas || [], STRUCT_SIZE.LodMeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.u32(areaOffset, area.firstElement || 0);\n areaTarget.u32(areaOffset + 4, area.elementCount || 0);\n }, { dedup: true });\n lodTarget.span(lodOffset + 48, lod.morphTargets || [], STRUCT_SIZE.LodMorphTarget, (morphTarget, morphOffset, morph) =>\n {\n writeBufferView(morphTarget, morphOffset, morph.vb, remap);\n });\n lodTarget.u32(lodOffset + 64, lod.threshold ?? 0xffffffff);\n });\n target.span(meshOffset + 48, mesh.areas || [], STRUCT_SIZE.MeshArea, (areaTarget, areaOffset, area) =>\n {\n areaTarget.string(areaOffset, area.name);\n writeBounds(areaTarget, areaOffset + 16, area.bounds);\n areaTarget.span(areaOffset + 40, area.bones || [], 2, (boneTarget, boneOffset, bone) => boneTarget.u16(boneOffset, bone), { dedup: true });\n areaTarget.u8(areaOffset + 56, area.affectedByBones ? 1 : 0);\n areaTarget.u8(areaOffset + 57, area.affectedByMorphTargets ? 1 : 0);\n });\n target.span(meshOffset + 64, mesh.boneBindings || [], STRUCT_SIZE.BoneBinding, (bindingTarget, bindingOffset, binding) =>\n {\n bindingTarget.string(bindingOffset, binding.name);\n writeBounds(bindingTarget, bindingOffset + 16, binding.bounds);\n });\n target.span(meshOffset + 80, mesh.morphTargets?.decl || [], STRUCT_SIZE.VertexElement, writeVertexElement, { dedup: true });\n target.span(meshOffset + 96, mesh.morphTargets?.targets || [], STRUCT_SIZE.MorphTarget, (morphTarget, morphOffset, morph) =>\n {\n morphTarget.string(morphOffset, morph.name);\n morphTarget.f32(morphOffset + 16, morph.maxDisplacement || 0);\n });\n target.span(meshOffset + 112, mesh.uvDensities || [], 4, (densityTarget, densityOffset, value) => densityTarget.f32(densityOffset, value), { dedup: true });\n writeBounds(target, meshOffset + 128, mesh.bounds);\n const occlusion = mesh.audioOcclusionMesh || {};\n target.span(meshOffset + 152, occlusion.vertices || [], 12, (vertexTarget, vertexOffset, vertex) =>\n {\n for (let i = 0; i < 3; i++) vertexTarget.f32(vertexOffset + i * 4, vertex[i]);\n }, { dedup: true });\n target.span(meshOffset + 168, occlusion.indices || [], 2, (indexTarget, indexOffset, index) => indexTarget.u16(indexOffset, index), { dedup: true });\n writeBounds(target, meshOffset + 184, occlusion.bounds);\n target.u8(meshOffset + 208, enumValue(MeshTopology, mesh.topology ?? \"TriangleList\", \"topology\"));\n target.u8(meshOffset + 209, mesh.skeleton === null || mesh.skeleton === undefined ? 0xff : mesh.skeleton);\n };\n\n const writeSkeleton = (target, skeletonOffset, skeleton) =>\n {\n if ((skeleton.bones || []).some((bone) => typeof bone !== \"string\"))\n {\n throw writeError(\n \"skeleton bones must be name strings; GR2-shaped skeletons need conversion (use writeShared) before writing\"\n );\n }\n target.string(skeletonOffset, skeleton.name);\n target.span(skeletonOffset + 16, skeleton.bones || [], 16, (boneTarget, boneOffset, bone) => boneTarget.string(boneOffset, bone));\n target.span(skeletonOffset + 32, skeleton.parents || [], 4, (parentTarget, parentOffset, parent) => parentTarget.u32(parentOffset, parent), { dedup: true });\n target.span(skeletonOffset + 48, skeleton.restTransforms || [], STRUCT_SIZE.Transform, (transformTarget, transformOffset, transform) =>\n {\n const position = transform.position || [ 0, 0, 0 ];\n const rotation = transform.rotation || [ 0, 0, 0, 1 ];\n const scale = transform.scale || [ 1, 1, 1 ];\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + i * 4, position[i]);\n for (let i = 0; i < 4; i++) transformTarget.f32(transformOffset + 12 + i * 4, rotation[i]);\n for (let i = 0; i < 3; i++) transformTarget.f32(transformOffset + 28 + i * 4, scale[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 64, skeleton.invBindTransforms || [], 64, (matrixTarget, matrixOffset, matrix) =>\n {\n for (let i = 0; i < 16; i++) matrixTarget.f32(matrixOffset + i * 4, matrix[i]);\n }, { dedup: true });\n target.span(skeletonOffset + 80, skeleton.boneMasks || [], STRUCT_SIZE.BoneMask, (maskTarget, maskOffset, mask) =>\n {\n maskTarget.string(maskOffset, mask.name);\n maskTarget.span(maskOffset + 16, mask.weights || [], STRUCT_SIZE.BoneWeight, (weightTarget, weightOffset, weight) =>\n {\n weightTarget.u32(weightOffset, weight.index || 0);\n weightTarget.f32(weightOffset + 4, weight.weight ?? 1);\n }, { dedup: true });\n });\n };\n\n const writeAnimation = (target, animationOffset, animation) =>\n {\n target.string(animationOffset, animation.name);\n target.span(animationOffset + 16, animation.channels || [], STRUCT_SIZE.AnimationChannel, (channelTarget, channelOffset, channel) =>\n {\n channelTarget.string(channelOffset, channel.target);\n channelTarget.u8(channelOffset + 16, enumValue(AnimationChannelTargetType, channel.targetType, \"channel target type\"));\n channelTarget.u32(channelOffset + 20, channel.curveIndex || 0);\n });\n target.span(animationOffset + 32, animation.curves || [], STRUCT_SIZE.AnimationCurve, (curveTarget, curveOffset, curve) =>\n {\n curveTarget.u8(curveOffset, curve.valueDimension || 0);\n curveTarget.u8(curveOffset + 1, enumValue(Interpolation, curve.interpolation, \"interpolation\"));\n curveTarget.u8(curveOffset + 2, enumValue(ElementType, curve.knotType, \"knot type\"));\n curveTarget.u8(curveOffset + 3, enumValue(ElementType, curve.valueType, \"value type\"));\n curveTarget.u32(curveOffset + 4, curve.knotCount || 0);\n curveTarget.span(curveOffset + 8, curve.knots || [], 1, (knotTarget, knotOffset, knot) => knotTarget.u8(knotOffset, knot), { dedup: true });\n curveTarget.span(curveOffset + 24, curve.values || [], 1, (valueTarget, valueOffset, value) => valueTarget.u8(valueOffset, value), { dedup: true });\n });\n target.f32(animationOffset + 48, animation.duration || 0);\n };\n\n buffer.span(offset, graph.meshes || [], STRUCT_SIZE.Mesh, writeMesh);\n buffer.span(offset + 16, graph.skeletons || [], STRUCT_SIZE.Skeleton, writeSkeleton);\n buffer.span(offset + 32, graph.animations || [], STRUCT_SIZE.Animation, writeAnimation);\n}\n\n/**\n * Collect BufferView usage in reference-writer order and decide per-buffer\n * compression (conflicting stride/kind across views falls back to None).\n */\nfunction collectBufferRecords(graph, compress)\n{\n const records = [];\n const recordsByIndex = new Map();\n const visit = (view, compression) =>\n {\n if (!view || !view.size) return;\n const existing = recordsByIndex.get(view.index);\n if (!existing)\n {\n const record = {\n index: view.index,\n stride: view.stride || 0,\n compression: compress ? compression : \"None\"\n };\n records.push(record);\n recordsByIndex.set(view.index, record);\n }\n else if (existing.stride !== (view.stride || 0) || (compress ? compression : \"None\") !== existing.compression)\n {\n existing.stride = 0;\n existing.compression = \"None\";\n }\n };\n\n for (const mesh of graph.meshes || [])\n {\n for (const lod of mesh.lods || [])\n {\n visit(lod.vb, \"MeshOptimizerVertexBuffer\");\n visit(lod.ib, \"MeshOptimizerIndexBuffer\");\n for (const morph of lod.morphTargets || [])\n {\n visit(morph.vb, \"MeshOptimizerVertexBuffer\");\n }\n }\n }\n return records;\n}\n\nfunction resolveBufferBytes(graph, record)\n{\n const buffers = graph.buffers || [];\n const entry = buffers.find?.((buffer) => buffer && buffer.index === record.index) ?? buffers[record.index];\n const data = entry?.data ?? (entry instanceof Uint8Array ? entry : null);\n if (!data)\n {\n throw writeError(`no buffer data supplied for BufferView index ${record.index}`);\n }\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\nfunction compressBuffer(bytes, record)\n{\n if (record.compression === \"None\" || bytes.byteLength === 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n if (!encoderReady)\n {\n throw writeError(\"compressed output requires writeAsync/WriteAsync so meshoptimizer can initialize (or pass compress: false)\");\n }\n\n if (record.compression === \"MeshOptimizerVertexBuffer\")\n {\n if (record.stride === 0 || bytes.byteLength % record.stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: record.stride };\n }\n const count = bytes.byteLength / record.stride;\n const data = MeshoptEncoder.encodeVertexBuffer(bytes, count, record.stride);\n return { data, compression: \"MeshOptimizerVertexBuffer\", gpuAlignment: record.stride };\n }\n\n // index buffers: meshopt encodes triangle lists of u32; u16 sources widen\n const stride = record.stride;\n if ((stride !== 2 && stride !== 4) || bytes.byteLength % stride !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n const count = bytes.byteLength / stride;\n if (count % 3 !== 0)\n {\n return { data: bytes, compression: \"None\", gpuAlignment: stride };\n }\n let source = bytes;\n if (stride === 2)\n {\n const wide = new Uint32Array(count);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let i = 0; i < count; i++) wide[i] = view.getUint16(i * 2, true);\n source = new Uint8Array(wide.buffer);\n }\n const data = MeshoptEncoder.encodeIndexBuffer(source, count, 4);\n return { data, compression: \"MeshOptimizerIndexBuffer\", gpuAlignment: stride };\n}\n\n/**\n * Serialize a CMF-native graph into .cmf bytes.\n *\n * @param {object} graph Native graph: `{ meshes, skeletons, animations, metadata?, buffers? }`\n * where `buffers` supplies uncompressed GPU bytes for each BufferView\n * `index` (as `{ index, data }` entries or an index-keyed array).\n * @param {object} [options] `compress` (default false for the sync writer)\n * enables meshoptimizer vertex/index compression.\n * @returns {Uint8Array} Complete .cmf file bytes.\n */\nexport function writeCmf(graph, options = {})\n{\n if (!graph || typeof graph !== \"object\")\n {\n throw writeError(\"input graph must be an object\");\n }\n const compress = options.compress === true;\n\n const records = collectBufferRecords(graph, compress);\n const compressed = records.map((record) =>\n {\n const bytes = resolveBufferBytes(graph, record);\n return { record, ...compressBuffer(bytes, record), uncompressedSize: bytes.byteLength };\n });\n const remap = new Map(records.map((record, position) => [ record.index, position + 1 ]));\n\n const data = new Flattener();\n data.reserve(STRUCT_SIZE.Data);\n writeData(data, 0, graph, remap);\n const dataBytes = data.bytes();\n\n let metadataBytes = null;\n if (graph.metadata && (graph.metadata.entries || []).length)\n {\n const metadata = new Flattener();\n metadata.reserve(STRUCT_SIZE.Metadata);\n metadata.span(0, graph.metadata.entries, STRUCT_SIZE.MetadataEntry, (target, offset, entry) =>\n {\n target.string(offset, entry.key);\n target.string(offset + 16, entry.value);\n });\n metadataBytes = metadata.bytes();\n }\n\n const sections = [\n { type: \"Data\", compression: \"None\", gpuAlignment: 0, compressedSize: dataBytes.byteLength, uncompressedSize: dataBytes.byteLength, data: dataBytes }\n ];\n for (const entry of compressed)\n {\n sections.push({\n type: \"GpuBuffer\",\n compression: entry.compression,\n gpuAlignment: entry.gpuAlignment,\n compressedSize: entry.data.byteLength,\n uncompressedSize: entry.uncompressedSize,\n data: entry.data\n });\n }\n if (metadataBytes)\n {\n sections.push({ type: \"Metadata\", compression: \"None\", gpuAlignment: 0, compressedSize: metadataBytes.byteLength, uncompressedSize: metadataBytes.byteLength, data: metadataBytes });\n }\n\n const header = new Flattener();\n header.reserve(STRUCT_SIZE.Header);\n header.u32(0, FILE_SIGNATURE);\n header.u32(4, FILE_VERSION);\n header.span(16, sections, STRUCT_SIZE.Section, () => {});\n const headerSize = header.size;\n header.u32(8, headerSize);\n\n let offset = headerSize;\n const sectionOffsets = sections.map((section) =>\n {\n offset = Math.ceil(offset / 8) * 8;\n const sectionOffset = offset;\n offset += section.compressedSize;\n return sectionOffset;\n });\n\n const sectionsChunk = headerSize - sections.length * STRUCT_SIZE.Section;\n sections.forEach((section, index) =>\n {\n const base = sectionsChunk + index * STRUCT_SIZE.Section;\n header.u32(base, sectionOffsets[index]);\n header.u32(base + 4, section.compressedSize);\n header.u32(base + 8, section.uncompressedSize);\n header.u16(base + 12, section.gpuAlignment || 0);\n header.u8(base + 14, enumValue(SectionType, section.type, \"section type\"));\n header.u8(base + 15, enumValue(SectionCompression, section.compression, \"section compression\"));\n });\n\n const total = offset;\n const file = new Uint8Array(total);\n file.set(header.bytes(), 0);\n sections.forEach((section, index) =>\n {\n file.set(section.data, sectionOffsets[index]);\n });\n\n const checksum = crc32(file, 16, file.byteLength);\n new DataView(file.buffer).setUint32(12, checksum, true);\n return file;\n}\n\n/**\n * Serialize a CMF-native graph asynchronously with compression enabled by\n * default (awaits meshoptimizer encoder initialization).\n *\n * @param {object} graph Native graph (see `writeCmf`).\n * @param {object} [options] `compress` defaults to true.\n * @returns {Promise<Uint8Array>} Complete .cmf file bytes.\n */\nexport async function writeCmfAsync(graph, options = {})\n{\n await MeshoptEncoder.ready;\n encoderReady = true;\n return writeCmf(graph, { ...options, compress: options.compress !== false });\n}\n"],"names":["textEncoder","TextEncoder","encoderReady","MeshoptEncoder","ready","then","writeError","message","error","Error","code","enumValue","names","value","label","index","indexOf","unknown","exec","String","Number","JSON","stringify","Flattener","Uint8Array","DataView","buffer","Map","size","#ensure","capacity","length","next","grown","set","subarray","reserve","byteLength","offset","fill","reserveAligned","alignment","padded","Math","ceil","u8","setUint8","u16","setUint16","u32","setUint32","f32","setFloat32","i64","setBigInt64","BigInt","u64","setBigUint64","setBytes","bytes","span","fieldOffset","elements","elementSize","writeElement","dedup","count","byteSize","scratch","scratchOffset","i","chunk","key","chunkKey","cached","get","undefined","bytesEqual","chunkOffset","string","encoded","encode","byte","slice","hash","imul","target","writeBounds","bounds","min","max","writeBufferView","view","remap","stride","writeVertexElement","element","Usage","usage","usageIndex","ElementType","type","elementCount","writeData","graph","writeMesh","meshOffset","mesh","name","decl","STRUCT_SIZE","VertexElement","lods","MeshLod","lodTarget","lodOffset","lod","vb","ib","areas","LodMeshArea","areaTarget","areaOffset","area","firstElement","morphTargets","LodMorphTarget","morphTarget","morphOffset","morph","threshold","MeshArea","bones","boneTarget","boneOffset","bone","affectedByBones","affectedByMorphTargets","boneBindings","BoneBinding","bindingTarget","bindingOffset","binding","targets","MorphTarget","maxDisplacement","uvDensities","densityTarget","densityOffset","occlusion","audioOcclusionMesh","vertices","vertexTarget","vertexOffset","vertex","indices","indexTarget","indexOffset","MeshTopology","topology","skeleton","writeSkeleton","skeletonOffset","some","parents","parentTarget","parentOffset","parent","restTransforms","Transform","transformTarget","transformOffset","transform","position","rotation","scale","invBindTransforms","matrixTarget","matrixOffset","matrix","boneMasks","BoneMask","maskTarget","maskOffset","mask","weights","BoneWeight","weightTarget","weightOffset","weight","writeAnimation","animationOffset","animation","channels","AnimationChannel","channelTarget","channelOffset","channel","AnimationChannelTargetType","targetType","curveIndex","curves","AnimationCurve","curveTarget","curveOffset","curve","valueDimension","Interpolation","interpolation","knotType","valueType","knotCount","knots","knotTarget","knotOffset","knot","values","valueTarget","valueOffset","duration","meshes","Mesh","skeletons","Skeleton","animations","Animation","collectBufferRecords","compress","records","recordsByIndex","visit","compression","existing","record","push","resolveBufferBytes","buffers","entry","find","data","compressBuffer","gpuAlignment","encodeVertexBuffer","source","wide","Uint32Array","byteOffset","getUint16","encodeIndexBuffer","writeCmf","options","compressed","map","uncompressedSize","Data","dataBytes","metadataBytes","metadata","entries","Metadata","MetadataEntry","sections","compressedSize","header","Header","FILE_SIGNATURE","FILE_VERSION","Section","headerSize","sectionOffsets","section","sectionOffset","sectionsChunk","forEach","base","SectionType","SectionCompression","total","file","checksum","crc32","writeCmfAsync"],"mappings":"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"}
|
|
@@ -137,6 +137,11 @@ const WEIGHTS_4 = new Uint8Array([0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 5
|
|
|
137
137
|
// partitions shared with BC7.
|
|
138
138
|
const PARTITIONS_2 = new Uint16Array([0xcccc, 0x8888, 0xeeee, 0xecc8, 0xc880, 0xfeec, 0xfec8, 0xec80, 0xc800, 0xffec, 0xfe80, 0xe800, 0xffe8, 0xff00, 0xfff0, 0xf000, 0xf710, 0x008e, 0x7100, 0x08ce, 0x008c, 0x7310, 0x3100, 0x8cce, 0x088c, 0x3110, 0x6666, 0x366c, 0x17e8, 0x0ff0, 0x718e, 0x399c]);
|
|
139
139
|
const ANCHOR_2 = new Uint8Array([15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 8, 2, 2, 8, 8, 15, 2, 8, 2, 2, 8, 8, 2, 2]);
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Decodes BC6H texture blocks into a normalized floating-point image for the DDS
|
|
143
|
+
* format reader.
|
|
144
|
+
*/
|
|
140
145
|
function decodeBc6h(source, width, height, rowPitch = Math.ceil(width / 4) * 16, signed = false) {
|
|
141
146
|
const rgba = new Float32Array(width * height * 4);
|
|
142
147
|
const blockRows = Math.ceil(height / 4);
|
|
@@ -150,6 +155,11 @@ function decodeBc6h(source, width, height, rowPitch = Math.ceil(width / 4) * 16,
|
|
|
150
155
|
}
|
|
151
156
|
return rgba;
|
|
152
157
|
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Decodes one BC6H texture block into destination pixels for the DDS format
|
|
161
|
+
* reader.
|
|
162
|
+
*/
|
|
153
163
|
function decodeBc6hBlock(block, signed = false) {
|
|
154
164
|
if (block.byteLength < 16) throw new RangeError("BC6H block must contain 16 bytes");
|
|
155
165
|
const lowMode = readBits(block, 0, 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bc6h.js","sources":["../../../../../src/formats/dds/core/bc6h.js"],"sourcesContent":["// BC6H is a little-endian 128-bit block format. MODE_LAYOUTS describes the\n// fixed endpoint bit assignments from the Khronos Data Format Specification,\n// section 20.2. The decoder and its numeric pipeline are CarbonEngineJS code.\n\nconst MODE_LAYOUTS = Object.freeze([\n \"M0 M1 GY4 BY4 BZ4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 GY5 GZ4 GZ5 RW0 RW1 RW2 RW3 RW4 RW5 RW6 BZ0 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 BY5 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BZ3 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RW10 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GW10 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BW10 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW10 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GW10 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BW10 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 BZ0 BZ2 RZ0 RZ1 RZ2 RZ3 GY4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW10 BY4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GW10 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BW10 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 BZ1 BZ2 RZ0 RZ1 RZ2 RZ3 BZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 GZ4 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BZ3 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 BZ0 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GY5 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 GZ5 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 BY5 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 GZ4 BZ0 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GY5 BY5 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 GZ5 BZ3 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RX8 RX9 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GX8 GX9 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BX8 BX9 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RX8 RW10 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GX8 GW10 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BX8 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RW11 RW10 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GW11 GW10 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BW11 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW15 RW14 RW13 RW12 RW11 RW10 GX0 GX1 GX2 GX3 GW15 GW14 GW13 GW12 GW11 GW10 BX0 BX1 BX2 BX3 BW15 BW14 BW13 BW12 BW11 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\"\n]);\n\nconst MODES = Object.freeze([\n { code: 0x00, subsets: 2, transformed: true, indexBits: 3, endpointBits: 10, deltaBits: [ 5, 5, 5 ] },\n { code: 0x01, subsets: 2, transformed: true, indexBits: 3, endpointBits: 7, deltaBits: [ 6, 6, 6 ] },\n { code: 0x02, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 5, 4, 4 ] },\n { code: 0x06, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 4, 5, 4 ] },\n { code: 0x0a, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 4, 4, 5 ] },\n { code: 0x0e, subsets: 2, transformed: true, indexBits: 3, endpointBits: 9, deltaBits: [ 5, 5, 5 ] },\n { code: 0x12, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 6, 5, 5 ] },\n { code: 0x16, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 5, 6, 5 ] },\n { code: 0x1a, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 5, 5, 6 ] },\n { code: 0x1e, subsets: 2, transformed: false, indexBits: 3, endpointBits: 6, deltaBits: [ 6, 6, 6 ] },\n { code: 0x03, subsets: 1, transformed: false, indexBits: 4, endpointBits: 10, deltaBits: [ 10, 10, 10 ] },\n { code: 0x07, subsets: 1, transformed: true, indexBits: 4, endpointBits: 11, deltaBits: [ 9, 9, 9 ] },\n { code: 0x0b, subsets: 1, transformed: true, indexBits: 4, endpointBits: 12, deltaBits: [ 8, 8, 8 ] },\n { code: 0x0f, subsets: 1, transformed: true, indexBits: 4, endpointBits: 16, deltaBits: [ 4, 4, 4 ] }\n]);\n\nconst MODE_BY_CODE = new Int8Array(32).fill(-1);\nfor (let index = 0; index < MODES.length; index++) MODE_BY_CODE[MODES[index].code] = index;\n\nconst FIELD_CHANNEL = Object.freeze({ R: 0, G: 1, B: 2 });\nconst FIELD_ENDPOINT = Object.freeze({ W: 0, X: 1, Y: 2, Z: 3 });\nconst DESCRIPTORS = MODE_LAYOUTS.map((layout) => layout.split(\" \").map((token) =>\n{\n const match = /^([A-Z]+)(\\d+)$/u.exec(token);\n const field = match[1];\n const bit = Number(match[2]);\n if (field === \"M\" || field === \"NA\") return null;\n if (field === \"D\") return { shape: true, bit };\n return {\n endpoint: FIELD_ENDPOINT[field[1]],\n channel: FIELD_CHANNEL[field[0]],\n bit\n };\n}));\n\nconst WEIGHTS_3 = new Uint8Array([ 0, 9, 18, 27, 37, 46, 55, 64 ]);\nconst WEIGHTS_4 = new Uint8Array([ 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 ]);\n\n// One bit per texel in y-major order. BC6H uses the first 32 two-subset\n// partitions shared with BC7.\nconst PARTITIONS_2 = new Uint16Array([\n 0xcccc, 0x8888, 0xeeee, 0xecc8, 0xc880, 0xfeec, 0xfec8, 0xec80,\n 0xc800, 0xffec, 0xfe80, 0xe800, 0xffe8, 0xff00, 0xfff0, 0xf000,\n 0xf710, 0x008e, 0x7100, 0x08ce, 0x008c, 0x7310, 0x3100, 0x8cce,\n 0x088c, 0x3110, 0x6666, 0x366c, 0x17e8, 0x0ff0, 0x718e, 0x399c\n]);\n\nconst ANCHOR_2 = new Uint8Array([\n 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n 15, 2, 8, 2, 2, 8, 8, 15, 2, 8, 2, 2, 8, 8, 2, 2\n]);\n\nexport function decodeBc6h(source, width, height, rowPitch = Math.ceil(width / 4) * 16, signed = false)\n{\n const rgba = new Float32Array(width * height * 4);\n const blockRows = Math.ceil(height / 4);\n const blockColumns = Math.ceil(width / 4);\n\n for (let blockY = 0; blockY < blockRows; blockY++)\n {\n for (let blockX = 0; blockX < blockColumns; blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 16;\n const pixels = decodeBc6hBlock(source.subarray(blockOffset, blockOffset + 16), signed);\n copyBlock(pixels, rgba, width, height, blockX, blockY);\n }\n }\n\n return rgba;\n}\n\nexport function decodeBc6hBlock(block, signed = false)\n{\n if (block.byteLength < 16) throw new RangeError(\"BC6H block must contain 16 bytes\");\n\n const lowMode = readBits(block, 0, 2);\n const modeCode = lowMode < 2 ? lowMode : readBits(block, 0, 5);\n const modeIndex = MODE_BY_CODE[modeCode];\n if (modeIndex < 0) return opaqueBlackBlock();\n\n const mode = MODES[modeIndex];\n const descriptor = DESCRIPTORS[modeIndex];\n const headerBits = mode.subsets === 2 ? 82 : 65;\n const endpoints = Array.from({ length: 4 }, () => [ 0, 0, 0 ]);\n let shape = 0;\n\n for (let sourceBit = 0; sourceBit < headerBits; sourceBit++)\n {\n if (!readBit(block, sourceBit)) continue;\n const target = descriptor[sourceBit];\n if (!target) continue;\n if (target.shape)\n {\n shape |= 1 << target.bit;\n }\n else\n {\n endpoints[target.endpoint][target.channel] |= 1 << target.bit;\n }\n }\n\n prepareEndpoints(endpoints, mode, signed);\n\n const output = new Float32Array(16 * 4);\n const weights = mode.indexBits === 3 ? WEIGHTS_3 : WEIGHTS_4;\n const partition = mode.subsets === 2 ? PARTITIONS_2[shape] : 0;\n const anchor = mode.subsets === 2 ? ANCHOR_2[shape] : -1;\n let sourceBit = headerBits;\n\n for (let pixel = 0; pixel < 16; pixel++)\n {\n const isAnchor = pixel === 0 || pixel === anchor;\n const indexBits = mode.indexBits - (isAnchor ? 1 : 0);\n const colorIndex = readBits(block, sourceBit, indexBits);\n sourceBit += indexBits;\n\n const subset = mode.subsets === 2 ? ((partition >>> pixel) & 1) : 0;\n const endpoint0 = endpoints[subset * 2];\n const endpoint1 = endpoints[subset * 2 + 1];\n const weight = weights[colorIndex];\n const outputOffset = pixel * 4;\n\n for (let channel = 0; channel < 3; channel++)\n {\n const value0 = unquantize(endpoint0[channel], mode.endpointBits, signed);\n const value1 = unquantize(endpoint1[channel], mode.endpointBits, signed);\n const interpolated = (value0 * (64 - weight) + value1 * weight + 32) >> 6;\n output[outputOffset + channel] = halfToFloat(finishHalf(interpolated, signed));\n }\n output[outputOffset + 3] = 1;\n }\n\n return output;\n}\n\nfunction prepareEndpoints(endpoints, mode, signed)\n{\n if (signed)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n endpoints[0][channel] = signExtend(endpoints[0][channel], mode.endpointBits);\n }\n }\n\n if (signed || mode.transformed)\n {\n for (let endpoint = 1; endpoint < mode.subsets * 2; endpoint++)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n endpoints[endpoint][channel] = signExtend(endpoints[endpoint][channel], mode.deltaBits[channel]);\n }\n }\n }\n\n if (!mode.transformed) return;\n\n const mask = (1 << mode.endpointBits) - 1;\n for (let endpoint = 1; endpoint < mode.subsets * 2; endpoint++)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n let value = (endpoints[0][channel] + endpoints[endpoint][channel]) & mask;\n if (signed) value = signExtend(value, mode.endpointBits);\n endpoints[endpoint][channel] = value;\n }\n }\n}\n\nfunction unquantize(component, bits, signed)\n{\n if (signed)\n {\n if (bits >= 16) return component;\n const negative = component < 0;\n const magnitude = negative ? -component : component;\n const maximum = (1 << (bits - 1)) - 1;\n const value = magnitude === 0\n ? 0\n : magnitude >= maximum\n ? 0x7fff\n : ((magnitude << 15) + 0x4000) >> (bits - 1);\n return negative ? -value : value;\n }\n\n if (bits >= 15) return component;\n if (component === 0) return 0;\n if (component === (1 << bits) - 1) return 0xffff;\n return ((component << 16) + 0x8000) >> bits;\n}\n\nfunction finishHalf(component, signed)\n{\n if (signed)\n {\n const magnitude = component < 0\n ? -(((-component) * 31) >> 5)\n : (component * 31) >> 5;\n return magnitude < 0 ? 0x8000 | -magnitude : magnitude;\n }\n return (component * 31) >> 6;\n}\n\nfunction signExtend(value, bits)\n{\n return (value << (32 - bits)) >> (32 - bits);\n}\n\nfunction readBit(source, bit)\n{\n return (source[bit >>> 3] >>> (bit & 7)) & 1;\n}\n\nfunction readBits(source, start, count)\n{\n let value = 0;\n for (let bit = 0; bit < count; bit++) value |= readBit(source, start + bit) << bit;\n return value;\n}\n\nfunction halfToFloat(value)\n{\n const sign = value & 0x8000 ? -1 : 1;\n const exponent = (value >>> 10) & 0x1f;\n const mantissa = value & 0x03ff;\n if (exponent === 0) return sign * Math.pow(2, -14) * (mantissa / 1024);\n if (exponent === 0x1f) return mantissa === 0 ? sign * Infinity : NaN;\n return sign * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction opaqueBlackBlock()\n{\n const output = new Float32Array(16 * 4);\n for (let pixel = 0; pixel < 16; pixel++) output[pixel * 4 + 3] = 1;\n return output;\n}\n\nfunction copyBlock(block, output, width, height, blockX, blockY)\n{\n for (let y = 0; y < 4; y++)\n {\n const outputY = blockY * 4 + y;\n if (outputY >= height) continue;\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n if (outputX >= width) continue;\n const sourceOffset = (y * 4 + x) * 4;\n const outputOffset = (outputY * width + outputX) * 4;\n output[outputOffset] = block[sourceOffset];\n output[outputOffset + 1] = block[sourceOffset + 1];\n output[outputOffset + 2] = block[sourceOffset + 2];\n output[outputOffset + 3] = block[sourceOffset + 3];\n }\n }\n}\n"],"names":["MODE_LAYOUTS","Object","freeze","MODES","code","subsets","transformed","indexBits","endpointBits","deltaBits","MODE_BY_CODE","Int8Array","fill","index","length","FIELD_CHANNEL","R","G","B","FIELD_ENDPOINT","W","X","Y","Z","DESCRIPTORS","map","layout","split","token","match","exec","field","bit","Number","shape","endpoint","channel","WEIGHTS_3","Uint8Array","WEIGHTS_4","PARTITIONS_2","Uint16Array","ANCHOR_2","decodeBc6h","source","width","height","rowPitch","Math","ceil","signed","rgba","Float32Array","blockRows","blockColumns","blockY","blockX","blockOffset","pixels","decodeBc6hBlock","subarray","copyBlock","block","byteLength","RangeError","lowMode","readBits","modeCode","modeIndex","opaqueBlackBlock","mode","descriptor","headerBits","endpoints","Array","from","sourceBit","readBit","target","prepareEndpoints","output","weights","partition","anchor","pixel","isAnchor","colorIndex","subset","endpoint0","endpoint1","weight","outputOffset","value0","unquantize","value1","interpolated","halfToFloat","finishHalf","signExtend","mask","value","component","bits","negative","magnitude","maximum","start","count","sign","exponent","mantissa","pow","Infinity","NaN","y","outputY","x","outputX","sourceOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bc6h.js","sources":["../../../../../src/formats/dds/core/bc6h.js"],"sourcesContent":["// BC6H is a little-endian 128-bit block format. MODE_LAYOUTS describes the\n// fixed endpoint bit assignments from the Khronos Data Format Specification,\n// section 20.2. The decoder and its numeric pipeline are CarbonEngineJS code.\n\nconst MODE_LAYOUTS = Object.freeze([\n \"M0 M1 GY4 BY4 BZ4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 GY5 GZ4 GZ5 RW0 RW1 RW2 RW3 RW4 RW5 RW6 BZ0 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 BY5 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BZ3 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RW10 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GW10 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BW10 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW10 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GW10 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BW10 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 BZ0 BZ2 RZ0 RZ1 RZ2 RZ3 GY4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW10 BY4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GW10 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BW10 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 BZ1 BZ2 RZ0 RZ1 RZ2 RZ3 BZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 GZ4 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BZ3 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 BZ0 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GY5 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 GZ5 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BZ1 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 BY5 GY4 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 GZ4 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 BZ0 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 BZ2 RZ0 RZ1 RZ2 RZ3 RZ4 BZ3 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 GZ4 BZ0 BZ1 BY4 GW0 GW1 GW2 GW3 GW4 GW5 GY5 BY5 BZ2 GY4 BW0 BW1 BW2 BW3 BW4 BW5 GZ5 BZ3 BZ5 BZ4 RX0 RX1 RX2 RX3 RX4 RX5 GY0 GY1 GY2 GY3 GX0 GX1 GX2 GX3 GX4 GX5 GZ0 GZ1 GZ2 GZ3 BX0 BX1 BX2 BX3 BX4 BX5 BY0 BY1 BY2 BY3 RY0 RY1 RY2 RY3 RY4 RY5 RZ0 RZ1 RZ2 RZ3 RZ4 RZ5 D0 D1 D2 D3 D4\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RX8 RX9 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GX8 GX9 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BX8 BX9 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RX8 RW10 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GX8 GW10 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BX8 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RX4 RX5 RX6 RX7 RW11 RW10 GX0 GX1 GX2 GX3 GX4 GX5 GX6 GX7 GW11 GW10 BX0 BX1 BX2 BX3 BX4 BX5 BX6 BX7 BW11 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\",\n \"M0 M1 M2 M3 M4 RW0 RW1 RW2 RW3 RW4 RW5 RW6 RW7 RW8 RW9 GW0 GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 BW0 BW1 BW2 BW3 BW4 BW5 BW6 BW7 BW8 BW9 RX0 RX1 RX2 RX3 RW15 RW14 RW13 RW12 RW11 RW10 GX0 GX1 GX2 GX3 GW15 GW14 GW13 GW12 GW11 GW10 BX0 BX1 BX2 BX3 BW15 BW14 BW13 BW12 BW11 BW10 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0 NA0\"\n]);\n\nconst MODES = Object.freeze([\n { code: 0x00, subsets: 2, transformed: true, indexBits: 3, endpointBits: 10, deltaBits: [ 5, 5, 5 ] },\n { code: 0x01, subsets: 2, transformed: true, indexBits: 3, endpointBits: 7, deltaBits: [ 6, 6, 6 ] },\n { code: 0x02, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 5, 4, 4 ] },\n { code: 0x06, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 4, 5, 4 ] },\n { code: 0x0a, subsets: 2, transformed: true, indexBits: 3, endpointBits: 11, deltaBits: [ 4, 4, 5 ] },\n { code: 0x0e, subsets: 2, transformed: true, indexBits: 3, endpointBits: 9, deltaBits: [ 5, 5, 5 ] },\n { code: 0x12, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 6, 5, 5 ] },\n { code: 0x16, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 5, 6, 5 ] },\n { code: 0x1a, subsets: 2, transformed: true, indexBits: 3, endpointBits: 8, deltaBits: [ 5, 5, 6 ] },\n { code: 0x1e, subsets: 2, transformed: false, indexBits: 3, endpointBits: 6, deltaBits: [ 6, 6, 6 ] },\n { code: 0x03, subsets: 1, transformed: false, indexBits: 4, endpointBits: 10, deltaBits: [ 10, 10, 10 ] },\n { code: 0x07, subsets: 1, transformed: true, indexBits: 4, endpointBits: 11, deltaBits: [ 9, 9, 9 ] },\n { code: 0x0b, subsets: 1, transformed: true, indexBits: 4, endpointBits: 12, deltaBits: [ 8, 8, 8 ] },\n { code: 0x0f, subsets: 1, transformed: true, indexBits: 4, endpointBits: 16, deltaBits: [ 4, 4, 4 ] }\n]);\n\nconst MODE_BY_CODE = new Int8Array(32).fill(-1);\nfor (let index = 0; index < MODES.length; index++) MODE_BY_CODE[MODES[index].code] = index;\n\nconst FIELD_CHANNEL = Object.freeze({ R: 0, G: 1, B: 2 });\nconst FIELD_ENDPOINT = Object.freeze({ W: 0, X: 1, Y: 2, Z: 3 });\nconst DESCRIPTORS = MODE_LAYOUTS.map((layout) => layout.split(\" \").map((token) =>\n{\n const match = /^([A-Z]+)(\\d+)$/u.exec(token);\n const field = match[1];\n const bit = Number(match[2]);\n if (field === \"M\" || field === \"NA\") return null;\n if (field === \"D\") return { shape: true, bit };\n return {\n endpoint: FIELD_ENDPOINT[field[1]],\n channel: FIELD_CHANNEL[field[0]],\n bit\n };\n}));\n\nconst WEIGHTS_3 = new Uint8Array([ 0, 9, 18, 27, 37, 46, 55, 64 ]);\nconst WEIGHTS_4 = new Uint8Array([ 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 ]);\n\n// One bit per texel in y-major order. BC6H uses the first 32 two-subset\n// partitions shared with BC7.\nconst PARTITIONS_2 = new Uint16Array([\n 0xcccc, 0x8888, 0xeeee, 0xecc8, 0xc880, 0xfeec, 0xfec8, 0xec80,\n 0xc800, 0xffec, 0xfe80, 0xe800, 0xffe8, 0xff00, 0xfff0, 0xf000,\n 0xf710, 0x008e, 0x7100, 0x08ce, 0x008c, 0x7310, 0x3100, 0x8cce,\n 0x088c, 0x3110, 0x6666, 0x366c, 0x17e8, 0x0ff0, 0x718e, 0x399c\n]);\n\nconst ANCHOR_2 = new Uint8Array([\n 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n 15, 2, 8, 2, 2, 8, 8, 15, 2, 8, 2, 2, 8, 8, 2, 2\n]);\n\n/**\n * Decodes BC6H texture blocks into a normalized floating-point image for the DDS\n * format reader.\n */\nexport function decodeBc6h(source, width, height, rowPitch = Math.ceil(width / 4) * 16, signed = false)\n{\n const rgba = new Float32Array(width * height * 4);\n const blockRows = Math.ceil(height / 4);\n const blockColumns = Math.ceil(width / 4);\n\n for (let blockY = 0; blockY < blockRows; blockY++)\n {\n for (let blockX = 0; blockX < blockColumns; blockX++)\n {\n const blockOffset = blockY * rowPitch + blockX * 16;\n const pixels = decodeBc6hBlock(source.subarray(blockOffset, blockOffset + 16), signed);\n copyBlock(pixels, rgba, width, height, blockX, blockY);\n }\n }\n\n return rgba;\n}\n\n/**\n * Decodes one BC6H texture block into destination pixels for the DDS format\n * reader.\n */\nexport function decodeBc6hBlock(block, signed = false)\n{\n if (block.byteLength < 16) throw new RangeError(\"BC6H block must contain 16 bytes\");\n\n const lowMode = readBits(block, 0, 2);\n const modeCode = lowMode < 2 ? lowMode : readBits(block, 0, 5);\n const modeIndex = MODE_BY_CODE[modeCode];\n if (modeIndex < 0) return opaqueBlackBlock();\n\n const mode = MODES[modeIndex];\n const descriptor = DESCRIPTORS[modeIndex];\n const headerBits = mode.subsets === 2 ? 82 : 65;\n const endpoints = Array.from({ length: 4 }, () => [ 0, 0, 0 ]);\n let shape = 0;\n\n for (let sourceBit = 0; sourceBit < headerBits; sourceBit++)\n {\n if (!readBit(block, sourceBit)) continue;\n const target = descriptor[sourceBit];\n if (!target) continue;\n if (target.shape)\n {\n shape |= 1 << target.bit;\n }\n else\n {\n endpoints[target.endpoint][target.channel] |= 1 << target.bit;\n }\n }\n\n prepareEndpoints(endpoints, mode, signed);\n\n const output = new Float32Array(16 * 4);\n const weights = mode.indexBits === 3 ? WEIGHTS_3 : WEIGHTS_4;\n const partition = mode.subsets === 2 ? PARTITIONS_2[shape] : 0;\n const anchor = mode.subsets === 2 ? ANCHOR_2[shape] : -1;\n let sourceBit = headerBits;\n\n for (let pixel = 0; pixel < 16; pixel++)\n {\n const isAnchor = pixel === 0 || pixel === anchor;\n const indexBits = mode.indexBits - (isAnchor ? 1 : 0);\n const colorIndex = readBits(block, sourceBit, indexBits);\n sourceBit += indexBits;\n\n const subset = mode.subsets === 2 ? ((partition >>> pixel) & 1) : 0;\n const endpoint0 = endpoints[subset * 2];\n const endpoint1 = endpoints[subset * 2 + 1];\n const weight = weights[colorIndex];\n const outputOffset = pixel * 4;\n\n for (let channel = 0; channel < 3; channel++)\n {\n const value0 = unquantize(endpoint0[channel], mode.endpointBits, signed);\n const value1 = unquantize(endpoint1[channel], mode.endpointBits, signed);\n const interpolated = (value0 * (64 - weight) + value1 * weight + 32) >> 6;\n output[outputOffset + channel] = halfToFloat(finishHalf(interpolated, signed));\n }\n output[outputOffset + 3] = 1;\n }\n\n return output;\n}\n\nfunction prepareEndpoints(endpoints, mode, signed)\n{\n if (signed)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n endpoints[0][channel] = signExtend(endpoints[0][channel], mode.endpointBits);\n }\n }\n\n if (signed || mode.transformed)\n {\n for (let endpoint = 1; endpoint < mode.subsets * 2; endpoint++)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n endpoints[endpoint][channel] = signExtend(endpoints[endpoint][channel], mode.deltaBits[channel]);\n }\n }\n }\n\n if (!mode.transformed) return;\n\n const mask = (1 << mode.endpointBits) - 1;\n for (let endpoint = 1; endpoint < mode.subsets * 2; endpoint++)\n {\n for (let channel = 0; channel < 3; channel++)\n {\n let value = (endpoints[0][channel] + endpoints[endpoint][channel]) & mask;\n if (signed) value = signExtend(value, mode.endpointBits);\n endpoints[endpoint][channel] = value;\n }\n }\n}\n\nfunction unquantize(component, bits, signed)\n{\n if (signed)\n {\n if (bits >= 16) return component;\n const negative = component < 0;\n const magnitude = negative ? -component : component;\n const maximum = (1 << (bits - 1)) - 1;\n const value = magnitude === 0\n ? 0\n : magnitude >= maximum\n ? 0x7fff\n : ((magnitude << 15) + 0x4000) >> (bits - 1);\n return negative ? -value : value;\n }\n\n if (bits >= 15) return component;\n if (component === 0) return 0;\n if (component === (1 << bits) - 1) return 0xffff;\n return ((component << 16) + 0x8000) >> bits;\n}\n\nfunction finishHalf(component, signed)\n{\n if (signed)\n {\n const magnitude = component < 0\n ? -(((-component) * 31) >> 5)\n : (component * 31) >> 5;\n return magnitude < 0 ? 0x8000 | -magnitude : magnitude;\n }\n return (component * 31) >> 6;\n}\n\nfunction signExtend(value, bits)\n{\n return (value << (32 - bits)) >> (32 - bits);\n}\n\nfunction readBit(source, bit)\n{\n return (source[bit >>> 3] >>> (bit & 7)) & 1;\n}\n\nfunction readBits(source, start, count)\n{\n let value = 0;\n for (let bit = 0; bit < count; bit++) value |= readBit(source, start + bit) << bit;\n return value;\n}\n\nfunction halfToFloat(value)\n{\n const sign = value & 0x8000 ? -1 : 1;\n const exponent = (value >>> 10) & 0x1f;\n const mantissa = value & 0x03ff;\n if (exponent === 0) return sign * Math.pow(2, -14) * (mantissa / 1024);\n if (exponent === 0x1f) return mantissa === 0 ? sign * Infinity : NaN;\n return sign * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction opaqueBlackBlock()\n{\n const output = new Float32Array(16 * 4);\n for (let pixel = 0; pixel < 16; pixel++) output[pixel * 4 + 3] = 1;\n return output;\n}\n\nfunction copyBlock(block, output, width, height, blockX, blockY)\n{\n for (let y = 0; y < 4; y++)\n {\n const outputY = blockY * 4 + y;\n if (outputY >= height) continue;\n for (let x = 0; x < 4; x++)\n {\n const outputX = blockX * 4 + x;\n if (outputX >= width) continue;\n const sourceOffset = (y * 4 + x) * 4;\n const outputOffset = (outputY * width + outputX) * 4;\n output[outputOffset] = block[sourceOffset];\n output[outputOffset + 1] = block[sourceOffset + 1];\n output[outputOffset + 2] = block[sourceOffset + 2];\n output[outputOffset + 3] = block[sourceOffset + 3];\n }\n }\n}\n"],"names":["MODE_LAYOUTS","Object","freeze","MODES","code","subsets","transformed","indexBits","endpointBits","deltaBits","MODE_BY_CODE","Int8Array","fill","index","length","FIELD_CHANNEL","R","G","B","FIELD_ENDPOINT","W","X","Y","Z","DESCRIPTORS","map","layout","split","token","match","exec","field","bit","Number","shape","endpoint","channel","WEIGHTS_3","Uint8Array","WEIGHTS_4","PARTITIONS_2","Uint16Array","ANCHOR_2","decodeBc6h","source","width","height","rowPitch","Math","ceil","signed","rgba","Float32Array","blockRows","blockColumns","blockY","blockX","blockOffset","pixels","decodeBc6hBlock","subarray","copyBlock","block","byteLength","RangeError","lowMode","readBits","modeCode","modeIndex","opaqueBlackBlock","mode","descriptor","headerBits","endpoints","Array","from","sourceBit","readBit","target","prepareEndpoints","output","weights","partition","anchor","pixel","isAnchor","colorIndex","subset","endpoint0","endpoint1","weight","outputOffset","value0","unquantize","value1","interpolated","halfToFloat","finishHalf","signExtend","mask","value","component","bits","negative","magnitude","maximum","start","count","sign","exponent","mantissa","pow","Infinity","NaN","y","outputY","x","outputX","sourceOffset"],"mappings":"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"}
|
|
@@ -105,6 +105,11 @@ const PARTITIONS_3 = new Uint32Array([0xaa685050, 0x6a5a5040, 0x5a5a4200, 0x5450
|
|
|
105
105
|
const ANCHOR_2 = new Uint8Array([15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 8, 2, 2, 8, 8, 15, 2, 8, 2, 2, 8, 8, 2, 2, 15, 15, 6, 8, 2, 8, 15, 15, 2, 8, 2, 2, 2, 15, 15, 6, 6, 2, 6, 8, 15, 15, 2, 2, 15, 15, 15, 15, 15, 2, 2, 15]);
|
|
106
106
|
const ANCHOR_3_SECOND = new Uint8Array([3, 3, 15, 15, 8, 3, 15, 15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8, 15, 3, 3, 6, 10, 5, 8, 8, 6, 8, 5, 15, 15, 8, 15, 3, 5, 6, 10, 8, 15, 15, 3, 15, 5, 15, 15, 15, 15, 3, 15, 5, 5, 5, 8, 5, 10, 5, 10, 8, 13, 15, 12, 3, 3]);
|
|
107
107
|
const ANCHOR_3_THIRD = new Uint8Array([15, 8, 8, 3, 15, 15, 3, 8, 15, 15, 15, 15, 15, 15, 15, 8, 15, 8, 15, 3, 15, 8, 15, 8, 3, 15, 6, 10, 15, 15, 10, 8, 15, 3, 15, 10, 10, 8, 9, 10, 6, 15, 8, 15, 3, 6, 6, 8, 15, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 15, 15, 8]);
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Decodes BC7 texture blocks into a normalized RGBA image for the DDS format
|
|
111
|
+
* reader.
|
|
112
|
+
*/
|
|
108
113
|
function decodeBc7(source, width, height, rowPitch = Math.ceil(width / 4) * 16) {
|
|
109
114
|
const rgba = new Uint8Array(width * height * 4);
|
|
110
115
|
const blockRows = Math.ceil(height / 4);
|
|
@@ -118,6 +123,11 @@ function decodeBc7(source, width, height, rowPitch = Math.ceil(width / 4) * 16)
|
|
|
118
123
|
}
|
|
119
124
|
return rgba;
|
|
120
125
|
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Decodes one BC7 texture block into destination pixels for the DDS format
|
|
129
|
+
* reader.
|
|
130
|
+
*/
|
|
121
131
|
function decodeBc7Block(block) {
|
|
122
132
|
if (block.byteLength < 16) throw new RangeError("BC7 block must contain 16 bytes");
|
|
123
133
|
if (block[0] === 0) return new Uint8Array(16 * 4);
|
|
@@ -237,10 +247,16 @@ function copyBlock(block, output, width, height, blockX, blockY) {
|
|
|
237
247
|
* software BC7 decoder.
|
|
238
248
|
*/
|
|
239
249
|
class Bc7BitReader {
|
|
250
|
+
/** Creates a Bc7BitReader over caller-provided DDS bytes and reader options. */
|
|
240
251
|
constructor(bytes) {
|
|
241
252
|
this.bytes = bytes;
|
|
242
253
|
this.offset = 0;
|
|
243
254
|
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Reads the requested number of bits from one BC7 block for the DDS binary
|
|
258
|
+
* reader.
|
|
259
|
+
*/
|
|
244
260
|
read(bitCount) {
|
|
245
261
|
let value = 0;
|
|
246
262
|
for (let bit = 0; bit < bitCount; bit++) {
|