@carbonenginejs/runtime-resource 0.12.1 → 0.13.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/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -108
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3494
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +408 -361
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -427
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -955
- package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -0
- package/dist/format/effect/effectBodyInventory.js.map +1 -0
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/effectPermutationGraph.js.map +1 -1
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -292
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -156
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/busNodes.js +252 -0
- package/dist/formats/bnk/core/busNodes.js.map +1 -0
- package/dist/formats/bnk/core/effectNodes.js +147 -0
- package/dist/formats/bnk/core/effectNodes.js.map +1 -0
- package/dist/formats/bnk/core/eventAction.js +416 -305
- package/dist/formats/bnk/core/eventAction.js.map +1 -1
- package/dist/formats/bnk/core/globalSettings.js +215 -0
- package/dist/formats/bnk/core/globalSettings.js.map +1 -0
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -480
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +533 -509
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/nodeBase.js +553 -532
- package/dist/formats/bnk/core/nodeBase.js.map +1 -1
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +862 -862
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +142 -142
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +290 -290
- package/dist/formats/gltf/core/helpers.js +307 -307
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +254 -254
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -781
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
- package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -0
- package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -314
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -742
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -31
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +253 -253
- package/dist/formats/obj/core/helpers.js +573 -573
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -0
- package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
- package/dist/formats/pickle/index.js +2 -0
- package/dist/formats/pickle/index.js.map +1 -0
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -68
- package/dist/formats/red/core/redGraph.js.map +1 -1
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +365 -365
- package/dist/formats/stl/core/helpers.js +261 -261
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -221
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
- package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +900 -792
- package/dist/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/errors.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2678
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -428
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
- package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
- package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
- package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +85 -81
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +167 -306
- package/dist/formats/webgl/core/helpers.js.map +1 -1
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js +303 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -197
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
- package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +354 -368
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +289 -289
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/errors.js.map +1 -1
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -385
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +320 -320
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -402
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +196 -170
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -62
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsLoadingObject.js +19 -0
- package/dist/resource/CjsLoadingObject.js.map +1 -0
- package/dist/resource/CjsResource.js +801 -797
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/ResourceHandlerMode.js +14 -0
- package/dist/resource/ResourceHandlerMode.js.map +1 -0
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +675 -675
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -52
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -431
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -261
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -135
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -109
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -147
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -105
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -86
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -241
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -68
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -111
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
- package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
- package/dist/resource/shader/reflection/shaderStage.js +22 -0
- package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -77
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -87
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
- package/dist/worker/CjsResManWorker.js +218 -217
- package/dist/worker/CjsResManWorker.js.map +1 -1
- package/dist/worker/CjsResManWorkerLoader.js +437 -434
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -109
- package/docs/concepts/resource-lifecycle.md +226 -225
- package/docs/concepts/shader-resource-model.md +111 -114
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -136
- package/docs/formats/carbon-effect-container.md +553 -452
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +77 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +65 -67
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -62
- package/docs/formats/hlsl/guides/reading-effects.md +64 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -66
- package/docs/formats/hlsl/reference/api.md +92 -98
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -100
- package/docs/formats/pickle.md +82 -0
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -57
- package/docs/formats/webgl/architecture.md +69 -70
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -871
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -96
- package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +215 -216
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -191
- package/docs/formats/webgpu/reference/api.md +196 -197
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1543
- package/docs/formats/wwise.md +146 -85
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -206
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -952
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -110
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -135
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
- package/dist/format/effect/effectReflectionPackage.js +0 -636
- package/dist/format/effect/effectReflectionPackage.js.map +0 -1
- package/dist/formats/hlsl/core/HlslReader.js +0 -16
- package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
- package/dist/formats/hlsl/core/portableReflection.js +0 -848
- package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
- package/dist/formats/hlsl/portable.js +0 -2
- package/dist/formats/hlsl/portable.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
- package/dist/formats/webgl/core/cewg/binary.js +0 -19
- package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
- package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
- package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
- package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
- package/dist/resource/shader/portable.js +0 -33
- package/dist/resource/shader/portable.js.map +0 -1
- package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
- package/docs/formats/webgl/effect-reflection.md +0 -127
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groups a Carbon effect's permutation rows onto the distinct bodies they
|
|
3
|
+
* address.
|
|
4
|
+
*
|
|
5
|
+
* A container's offset table is dense and positionally indexed, and rows alias:
|
|
6
|
+
* several permutations routinely point at one compiled body. Anything that walks
|
|
7
|
+
* bodies rather than permutations needs that grouping first, or it does the same
|
|
8
|
+
* work once per row — a 4,096-row file with 128 distinct bodies would translate
|
|
9
|
+
* each of them thirty-two times.
|
|
10
|
+
*
|
|
11
|
+
* This is pure container geometry: offsets, byte ranges, and byte equality. It
|
|
12
|
+
* carried no reflection when it lived beside the effect-reflection document, and
|
|
13
|
+
* it outlived that document for exactly that reason.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const EFFECT_VERSION = 15;
|
|
17
|
+
const EFFECT_BODY_COUNT_MAX = 0x10000;
|
|
18
|
+
const UINT32_MAX = 0xffffffff;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Validates one offset-table row against the file it indexes.
|
|
22
|
+
*
|
|
23
|
+
* @param {object} record Offset-table row.
|
|
24
|
+
* @param {number} permutationIndex Position of the row in the table.
|
|
25
|
+
* @param {number} sourceByteLength Size of the source file.
|
|
26
|
+
* @returns {{offset:number, byteLength:number}} Normalized source record.
|
|
27
|
+
*/
|
|
28
|
+
function normalizeBodySourceRecord(record, permutationIndex, sourceByteLength) {
|
|
29
|
+
const end = record?.offset + record?.size;
|
|
30
|
+
if (!record || record.index !== permutationIndex || !Number.isSafeInteger(record.offset) || record.offset < 0 || record.offset > UINT32_MAX || !Number.isSafeInteger(record.size) || record.size < 1 || record.size > UINT32_MAX || !Number.isSafeInteger(end) || record.end !== end || !Number.isSafeInteger(sourceByteLength) || end > sourceByteLength) {
|
|
31
|
+
throw new Error(`Effect body index ${permutationIndex} disagrees with its source record`);
|
|
32
|
+
}
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
offset: record.offset,
|
|
35
|
+
byteLength: record.size
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Rejects source records that partially overlap.
|
|
41
|
+
*
|
|
42
|
+
* Rows may alias exactly — that is how a container shares one body between
|
|
43
|
+
* permutations — but a partial overlap means two bodies claim the same bytes
|
|
44
|
+
* with different extents, which no reading of the file can satisfy.
|
|
45
|
+
*
|
|
46
|
+
* @param {Array<{offset:number, byteLength:number}>} sourceRecords Records.
|
|
47
|
+
*/
|
|
48
|
+
function validateDisjointBodySourceRecords(sourceRecords) {
|
|
49
|
+
const unique = new Map();
|
|
50
|
+
for (const record of sourceRecords) {
|
|
51
|
+
const key = `${record.offset}:${record.byteLength}`;
|
|
52
|
+
if (!unique.has(key)) unique.set(key, record);
|
|
53
|
+
}
|
|
54
|
+
const ordered = Array.from(unique.values()).sort((left, right) => left.offset - right.offset || left.byteLength - right.byteLength);
|
|
55
|
+
for (let index = 1; index < ordered.length; index += 1) {
|
|
56
|
+
const previous = ordered[index - 1];
|
|
57
|
+
const current = ordered[index];
|
|
58
|
+
if (current.offset < previous.offset + previous.byteLength) {
|
|
59
|
+
throw new Error("Effect body source records partially overlap");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A cheap content key, used only to shrink the set of byte-equality comparisons.
|
|
66
|
+
*
|
|
67
|
+
* @param {Uint8Array} bytes Body bytes.
|
|
68
|
+
* @returns {string} Length-qualified FNV-1a fingerprint.
|
|
69
|
+
*/
|
|
70
|
+
function fingerprintBytes(bytes) {
|
|
71
|
+
let hash = 0x811c9dc5;
|
|
72
|
+
for (const value of bytes) {
|
|
73
|
+
hash = Math.imul(hash ^ value, 0x01000193) >>> 0;
|
|
74
|
+
}
|
|
75
|
+
return `${bytes.byteLength}:${hash.toString(16).padStart(8, "0")}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Byte equality. The fingerprint narrows candidates; this decides.
|
|
80
|
+
*
|
|
81
|
+
* @param {Uint8Array} left Left bytes.
|
|
82
|
+
* @param {Uint8Array} right Right bytes.
|
|
83
|
+
* @returns {boolean} Whether the two are byte-identical.
|
|
84
|
+
*/
|
|
85
|
+
function bytesEqual(left, right) {
|
|
86
|
+
return left.byteLength === right.byteLength && left.every((value, index) => value === right[index]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Groups permutation rows onto the distinct bodies they address.
|
|
91
|
+
*
|
|
92
|
+
* Rows are grouped by byte range first, then by content: two ranges holding
|
|
93
|
+
* identical bytes are one body, which is what makes the count "unique bodies"
|
|
94
|
+
* rather than "distinct offsets".
|
|
95
|
+
*
|
|
96
|
+
* @param {object} effectRes Loaded version-15 effect resource.
|
|
97
|
+
* @returns {ReadonlyArray<object>} Frozen groups, each with its representative
|
|
98
|
+
* permutation index, source record, and every variant that shares it.
|
|
99
|
+
*/
|
|
100
|
+
function enumerateUniqueEffectBodies(effectRes) {
|
|
101
|
+
if (!effectRes || typeof effectRes !== "object" || effectRes.m_version !== EFFECT_VERSION || !(effectRes.m_data instanceof Uint8Array) || !Array.isArray(effectRes.m_offsets) || effectRes.m_offsetCount !== effectRes.m_offsets.length || !effectRes.m_offsets.length) {
|
|
102
|
+
throw new TypeError("Effect body inventory requires a loaded version-15 effect resource");
|
|
103
|
+
}
|
|
104
|
+
if (effectRes.m_offsets.length > EFFECT_BODY_COUNT_MAX) {
|
|
105
|
+
throw new RangeError(`Effect body inventory exceeds ${EFFECT_BODY_COUNT_MAX} records`);
|
|
106
|
+
}
|
|
107
|
+
const sourceRecords = effectRes.m_offsets.map((record, permutationIndex) => normalizeBodySourceRecord(record, permutationIndex, effectRes.m_data.byteLength));
|
|
108
|
+
validateDisjointBodySourceRecords(sourceRecords);
|
|
109
|
+
const groups = [];
|
|
110
|
+
const groupByRange = new Map();
|
|
111
|
+
const groupsByFingerprint = new Map();
|
|
112
|
+
for (const [permutationIndex, sourceRecord] of sourceRecords.entries()) {
|
|
113
|
+
const rangeKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;
|
|
114
|
+
let group = groupByRange.get(rangeKey);
|
|
115
|
+
if (!group) {
|
|
116
|
+
const bytes = effectRes.m_data.subarray(sourceRecord.offset, sourceRecord.offset + sourceRecord.byteLength);
|
|
117
|
+
const fingerprint = fingerprintBytes(bytes);
|
|
118
|
+
const candidates = groupsByFingerprint.get(fingerprint) ?? [];
|
|
119
|
+
group = candidates.find(candidate => bytesEqual(candidate.bytes, bytes));
|
|
120
|
+
if (!group) {
|
|
121
|
+
group = {
|
|
122
|
+
bytes,
|
|
123
|
+
permutationIndex,
|
|
124
|
+
sourceRecord,
|
|
125
|
+
variants: []
|
|
126
|
+
};
|
|
127
|
+
candidates.push(group);
|
|
128
|
+
groupsByFingerprint.set(fingerprint, candidates);
|
|
129
|
+
groups.push(group);
|
|
130
|
+
}
|
|
131
|
+
groupByRange.set(rangeKey, group);
|
|
132
|
+
}
|
|
133
|
+
group.variants.push({
|
|
134
|
+
permutationIndex,
|
|
135
|
+
sourceRecord
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return Object.freeze(groups.map(group => Object.freeze({
|
|
139
|
+
permutationIndex: group.permutationIndex,
|
|
140
|
+
sourceRecord: group.sourceRecord,
|
|
141
|
+
variants: Object.freeze(group.variants.map(variant => Object.freeze(variant)))
|
|
142
|
+
})));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { enumerateUniqueEffectBodies };
|
|
146
|
+
//# sourceMappingURL=effectBodyInventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectBodyInventory.js","sources":["../../../../src/format/effect/effectBodyInventory.js"],"sourcesContent":["/**\n * Groups a Carbon effect's permutation rows onto the distinct bodies they\n * address.\n *\n * A container's offset table is dense and positionally indexed, and rows alias:\n * several permutations routinely point at one compiled body. Anything that walks\n * bodies rather than permutations needs that grouping first, or it does the same\n * work once per row — a 4,096-row file with 128 distinct bodies would translate\n * each of them thirty-two times.\n *\n * This is pure container geometry: offsets, byte ranges, and byte equality. It\n * carried no reflection when it lived beside the effect-reflection document, and\n * it outlived that document for exactly that reason.\n */\n\nconst EFFECT_VERSION = 15;\nconst EFFECT_BODY_COUNT_MAX = 0x10000;\nconst UINT32_MAX = 0xffffffff;\n\n/**\n * Validates one offset-table row against the file it indexes.\n *\n * @param {object} record Offset-table row.\n * @param {number} permutationIndex Position of the row in the table.\n * @param {number} sourceByteLength Size of the source file.\n * @returns {{offset:number, byteLength:number}} Normalized source record.\n */\nfunction normalizeBodySourceRecord(record, permutationIndex, sourceByteLength)\n{\n const end = record?.offset + record?.size;\n if (!record || record.index !== permutationIndex\n || !Number.isSafeInteger(record.offset) || record.offset < 0\n || record.offset > UINT32_MAX\n || !Number.isSafeInteger(record.size) || record.size < 1\n || record.size > UINT32_MAX\n || !Number.isSafeInteger(end)\n || record.end !== end\n || !Number.isSafeInteger(sourceByteLength)\n || end > sourceByteLength)\n {\n throw new Error(\n `Effect body index ${permutationIndex} disagrees with its source record`\n );\n }\n return Object.freeze({\n offset: record.offset,\n byteLength: record.size\n });\n}\n\n/**\n * Rejects source records that partially overlap.\n *\n * Rows may alias exactly — that is how a container shares one body between\n * permutations — but a partial overlap means two bodies claim the same bytes\n * with different extents, which no reading of the file can satisfy.\n *\n * @param {Array<{offset:number, byteLength:number}>} sourceRecords Records.\n */\nfunction validateDisjointBodySourceRecords(sourceRecords)\n{\n const unique = new Map();\n for (const record of sourceRecords)\n {\n const key = `${record.offset}:${record.byteLength}`;\n if (!unique.has(key)) unique.set(key, record);\n }\n const ordered = Array.from(unique.values()).sort((left, right) =>\n left.offset - right.offset || left.byteLength - right.byteLength);\n for (let index = 1; index < ordered.length; index += 1)\n {\n const previous = ordered[index - 1];\n const current = ordered[index];\n if (current.offset < previous.offset + previous.byteLength)\n {\n throw new Error(\n \"Effect body source records partially overlap\"\n );\n }\n }\n}\n\n/**\n * A cheap content key, used only to shrink the set of byte-equality comparisons.\n *\n * @param {Uint8Array} bytes Body bytes.\n * @returns {string} Length-qualified FNV-1a fingerprint.\n */\nfunction fingerprintBytes(bytes)\n{\n let hash = 0x811c9dc5;\n for (const value of bytes)\n {\n hash = Math.imul(hash ^ value, 0x01000193) >>> 0;\n }\n return `${bytes.byteLength}:${hash.toString(16).padStart(8, \"0\")}`;\n}\n\n/**\n * Byte equality. The fingerprint narrows candidates; this decides.\n *\n * @param {Uint8Array} left Left bytes.\n * @param {Uint8Array} right Right bytes.\n * @returns {boolean} Whether the two are byte-identical.\n */\nfunction bytesEqual(left, right)\n{\n return left.byteLength === right.byteLength\n && left.every((value, index) => value === right[index]);\n}\n\n/**\n * Groups permutation rows onto the distinct bodies they address.\n *\n * Rows are grouped by byte range first, then by content: two ranges holding\n * identical bytes are one body, which is what makes the count \"unique bodies\"\n * rather than \"distinct offsets\".\n *\n * @param {object} effectRes Loaded version-15 effect resource.\n * @returns {ReadonlyArray<object>} Frozen groups, each with its representative\n * permutation index, source record, and every variant that shares it.\n */\nexport function enumerateUniqueEffectBodies(effectRes)\n{\n if (!effectRes || typeof effectRes !== \"object\"\n || effectRes.m_version !== EFFECT_VERSION\n || !(effectRes.m_data instanceof Uint8Array)\n || !Array.isArray(effectRes.m_offsets)\n || effectRes.m_offsetCount !== effectRes.m_offsets.length\n || !effectRes.m_offsets.length)\n {\n throw new TypeError(\n \"Effect body inventory requires a loaded version-15 effect resource\"\n );\n }\n if (effectRes.m_offsets.length > EFFECT_BODY_COUNT_MAX)\n {\n throw new RangeError(\n `Effect body inventory exceeds ${EFFECT_BODY_COUNT_MAX} records`\n );\n }\n\n const sourceRecords = effectRes.m_offsets.map((record, permutationIndex) =>\n normalizeBodySourceRecord(\n record,\n permutationIndex,\n effectRes.m_data.byteLength\n ));\n validateDisjointBodySourceRecords(sourceRecords);\n\n const groups = [];\n const groupByRange = new Map();\n const groupsByFingerprint = new Map();\n for (const [ permutationIndex, sourceRecord ] of sourceRecords.entries())\n {\n const rangeKey = `${sourceRecord.offset}:${sourceRecord.byteLength}`;\n let group = groupByRange.get(rangeKey);\n if (!group)\n {\n const bytes = effectRes.m_data.subarray(\n sourceRecord.offset,\n sourceRecord.offset + sourceRecord.byteLength\n );\n const fingerprint = fingerprintBytes(bytes);\n const candidates = groupsByFingerprint.get(fingerprint) ?? [];\n group = candidates.find((candidate) =>\n bytesEqual(candidate.bytes, bytes));\n if (!group)\n {\n group = {\n bytes,\n permutationIndex,\n sourceRecord,\n variants: []\n };\n candidates.push(group);\n groupsByFingerprint.set(fingerprint, candidates);\n groups.push(group);\n }\n groupByRange.set(rangeKey, group);\n }\n group.variants.push({\n permutationIndex,\n sourceRecord\n });\n }\n\n return Object.freeze(groups.map((group) => Object.freeze({\n permutationIndex: group.permutationIndex,\n sourceRecord: group.sourceRecord,\n variants: Object.freeze(group.variants.map((variant) =>\n Object.freeze(variant)))\n })));\n}\n\nexport default enumerateUniqueEffectBodies;\n"],"names":["EFFECT_VERSION","EFFECT_BODY_COUNT_MAX","UINT32_MAX","normalizeBodySourceRecord","record","permutationIndex","sourceByteLength","end","offset","size","index","Number","isSafeInteger","Error","Object","freeze","byteLength","validateDisjointBodySourceRecords","sourceRecords","unique","Map","key","has","set","ordered","Array","from","values","sort","left","right","length","previous","current","fingerprintBytes","bytes","hash","value","Math","imul","toString","padStart","bytesEqual","every","enumerateUniqueEffectBodies","effectRes","m_version","m_data","Uint8Array","isArray","m_offsets","m_offsetCount","TypeError","RangeError","map","groups","groupByRange","groupsByFingerprint","sourceRecord","entries","rangeKey","group","get","subarray","fingerprint","candidates","find","candidate","variants","push","variant"],"mappings":"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"}
|