@carbonenginejs/runtime-resource 0.12.2 → 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
package/docs/reference/queues.md
CHANGED
|
@@ -1,110 +1,194 @@
|
|
|
1
|
-
# Queues, publication, and the Wait fence
|
|
2
|
-
|
|
3
|
-
Status: Evolving
|
|
4
|
-
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
-
Audience: Users and integrators
|
|
6
|
-
Summary: Defines the two manager-owned queues, publication budgeting, registration, and the `Wait()` fence semantics.
|
|
7
|
-
|
|
8
|
-
## Queued CPU load and publication
|
|
9
|
-
|
|
10
|
-
`GetObject()`, `LoadObject()`, and resource `Ready()` use two manager-owned
|
|
11
|
-
queues:
|
|
12
|
-
|
|
13
|
-
```text
|
|
14
|
-
BACKGROUND: deduplicated source load, limited by maxConcurrentLoads
|
|
15
|
-
MAIN: reader/format conversion -> resource publication
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Without worker execution, the main reader/format operation and publication
|
|
19
|
-
are separate queue items.
|
|
20
|
-
`maxPrepareTime` is a per-pump budget in seconds limiting synchronous
|
|
21
|
-
main-queue work started in one pump, and `maxPrepareItemsPerTick` can add an
|
|
22
|
-
item-count limit. Promise-returning format work remains in flight without
|
|
23
|
-
blocking the JavaScript event loop. The default scheduler keeps promise-based
|
|
24
|
-
calls working; a `CjsLibrary` or direct caller can provide its frame
|
|
25
|
-
scheduler:
|
|
26
|
-
|
|
27
|
-
```js
|
|
28
|
-
const resMan = new CjsResMan({
|
|
29
|
-
source,
|
|
30
|
-
maxConcurrentLoads: 8,
|
|
31
|
-
maxPrepareTime: 0.005,
|
|
32
|
-
queueScheduler: callback => requestAnimationFrame(callback)
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
await resMan.FetchResource("res:/model/ship.gr2", {
|
|
36
|
-
requirement: "geometry",
|
|
37
|
-
emit: "cmf"
|
|
38
|
-
});
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
The selected format class owns conversion to the promised CPU output.
|
|
42
|
-
`CjsResMan` does not inspect WebGL, WebGPU, texture, geometry, or codec
|
|
43
|
-
support, and it does not run backend realization. An engine consumes the
|
|
44
|
-
published CPU resource afterward through its own explicit operation.
|
|
45
|
-
|
|
46
|
-
When worker loading is selected, a declared worker-safe format read runs on
|
|
47
|
-
the module worker rather than occupying a main-queue item. The guarded
|
|
48
|
-
publication item remains on the main queue. `GetPendingWorkers()` and
|
|
49
|
-
`IsLoading()` include unresolved worker requests, and a queued resource
|
|
50
|
-
operation keeps the worker descendant within its `Wait()` lineage.
|
|
51
|
-
|
|
52
|
-
## Queue controls
|
|
53
|
-
|
|
54
|
-
Blue-compatible queue controls are exposed directly on `CjsResMan`:
|
|
55
|
-
`AddToQueue`, `CancelFromQueue`, `GetNextIdForQueue`, `PumpMainThreadQueue`,
|
|
56
|
-
`PauseQueue`, `ResumeQueue`, `GetPendingLoads`, and `GetPendingPrepares`.
|
|
57
|
-
`Update()`/`Tick()` pump work.
|
|
58
|
-
|
|
59
|
-
## The Wait fence
|
|
60
|
-
|
|
61
|
-
`Wait()` synchronously captures queued resource-operation roots and low-level
|
|
62
|
-
queue tasks that already exist when it is called. Captured resource roots
|
|
63
|
-
include publication work enqueued after an asynchronous read; unrelated later
|
|
64
|
-
roots/tasks do not postpone the fence. Failure and queued cancellation count
|
|
65
|
-
as settlement, remain observable through their original operation promises,
|
|
66
|
-
and cross the fence without making `Wait()` reject.
|
|
67
|
-
|
|
68
|
-
By default `Wait()` pumps the two queues directly within their ordinary
|
|
69
|
-
budgets and never runs automatic purge housekeeping. It preserves pause
|
|
70
|
-
state; `{ pump: false }` leaves all progress to an external driver. A
|
|
71
|
-
standalone canonical `PrepareResourceObjectQueued()` call is a queued root.
|
|
72
|
-
Direct `LoadResourceObject()`, direct `PrepareResourceObject()`, standalone
|
|
73
|
-
`ReadResource()`, and standalone `ReadFormatOnce()` calls bypass both queues
|
|
74
|
-
and are outside this fence unless they own a captured queue task, although
|
|
75
|
-
direct resource mutations are still tracked for safe MotherLode replacement.
|
|
76
|
-
`WaitUrgent()` remains deferred until the queue has real per-item priority
|
|
77
|
-
and urgent-membership semantics.
|
|
78
|
-
|
|
79
|
-
## Registration
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
1
|
+
# Queues, publication, and the Wait fence
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Defines the two manager-owned queues, publication budgeting, registration, and the `Wait()` fence semantics.
|
|
7
|
+
|
|
8
|
+
## Queued CPU load and publication
|
|
9
|
+
|
|
10
|
+
`GetObject()`, `LoadObject()`, and resource `Ready()` use two manager-owned
|
|
11
|
+
queues:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
BACKGROUND: deduplicated source load, limited by maxConcurrentLoads
|
|
15
|
+
MAIN: reader/format conversion -> resource publication
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Without worker execution, the main reader/format operation and publication
|
|
19
|
+
are separate queue items.
|
|
20
|
+
`maxPrepareTime` is a per-pump budget in seconds limiting synchronous
|
|
21
|
+
main-queue work started in one pump, and `maxPrepareItemsPerTick` can add an
|
|
22
|
+
item-count limit. Promise-returning format work remains in flight without
|
|
23
|
+
blocking the JavaScript event loop. The default scheduler keeps promise-based
|
|
24
|
+
calls working; a `CjsLibrary` or direct caller can provide its frame
|
|
25
|
+
scheduler:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
const resMan = new CjsResMan({
|
|
29
|
+
source,
|
|
30
|
+
maxConcurrentLoads: 8,
|
|
31
|
+
maxPrepareTime: 0.005,
|
|
32
|
+
queueScheduler: callback => requestAnimationFrame(callback)
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
await resMan.FetchResource("res:/model/ship.gr2", {
|
|
36
|
+
requirement: "geometry",
|
|
37
|
+
emit: "cmf"
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The selected format class owns conversion to the promised CPU output.
|
|
42
|
+
`CjsResMan` does not inspect WebGL, WebGPU, texture, geometry, or codec
|
|
43
|
+
support, and it does not run backend realization. An engine consumes the
|
|
44
|
+
published CPU resource afterward through its own explicit operation.
|
|
45
|
+
|
|
46
|
+
When worker loading is selected, a declared worker-safe format read runs on
|
|
47
|
+
the module worker rather than occupying a main-queue item. The guarded
|
|
48
|
+
publication item remains on the main queue. `GetPendingWorkers()` and
|
|
49
|
+
`IsLoading()` include unresolved worker requests, and a queued resource
|
|
50
|
+
operation keeps the worker descendant within its `Wait()` lineage.
|
|
51
|
+
|
|
52
|
+
## Queue controls
|
|
53
|
+
|
|
54
|
+
Blue-compatible queue controls are exposed directly on `CjsResMan`:
|
|
55
|
+
`AddToQueue`, `CancelFromQueue`, `GetNextIdForQueue`, `PumpMainThreadQueue`,
|
|
56
|
+
`PauseQueue`, `ResumeQueue`, `GetPendingLoads`, and `GetPendingPrepares`.
|
|
57
|
+
`Update()`/`Tick()` pump work.
|
|
58
|
+
|
|
59
|
+
## The Wait fence
|
|
60
|
+
|
|
61
|
+
`Wait()` synchronously captures queued resource-operation roots and low-level
|
|
62
|
+
queue tasks that already exist when it is called. Captured resource roots
|
|
63
|
+
include publication work enqueued after an asynchronous read; unrelated later
|
|
64
|
+
roots/tasks do not postpone the fence. Failure and queued cancellation count
|
|
65
|
+
as settlement, remain observable through their original operation promises,
|
|
66
|
+
and cross the fence without making `Wait()` reject.
|
|
67
|
+
|
|
68
|
+
By default `Wait()` pumps the two queues directly within their ordinary
|
|
69
|
+
budgets and never runs automatic purge housekeeping. It preserves pause
|
|
70
|
+
state; `{ pump: false }` leaves all progress to an external driver. A
|
|
71
|
+
standalone canonical `PrepareResourceObjectQueued()` call is a queued root.
|
|
72
|
+
Direct `LoadResourceObject()`, direct `PrepareResourceObject()`, standalone
|
|
73
|
+
`ReadResource()`, and standalone `ReadFormatOnce()` calls bypass both queues
|
|
74
|
+
and are outside this fence unless they own a captured queue task, although
|
|
75
|
+
direct resource mutations are still tracked for safe MotherLode replacement.
|
|
76
|
+
`WaitUrgent()` remains deferred until the queue has real per-item priority
|
|
77
|
+
and urgent-membership semantics.
|
|
78
|
+
|
|
79
|
+
## Registration
|
|
80
|
+
|
|
81
|
+
The Carbon-shaped primary route binds an extension to a resource-compatible
|
|
82
|
+
handler and a format. The handler declares whether the public result is a
|
|
83
|
+
stable resource or a constructed object:
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
import {
|
|
87
|
+
CjsLoadingObject,
|
|
88
|
+
CjsResMan
|
|
89
|
+
} from "@carbonenginejs/runtime-resource";
|
|
90
|
+
import { CjsBlackFormat } from "@carbonenginejs/runtime-resource/formats/black";
|
|
91
|
+
import { CjsRedFormat } from "@carbonenginejs/runtime-resource/formats/red";
|
|
92
|
+
|
|
93
|
+
const resMan = new CjsResMan({ source });
|
|
94
|
+
|
|
95
|
+
resMan.RegisterExtension(".red", CjsLoadingObject, [
|
|
96
|
+
CjsBlackFormat,
|
|
97
|
+
CjsRedFormat
|
|
98
|
+
]);
|
|
99
|
+
resMan.RegisterExtension(".black", CjsLoadingObject, [
|
|
100
|
+
CjsBlackFormat,
|
|
101
|
+
CjsRedFormat
|
|
102
|
+
]);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Ordered arrays apply request output/media filters first, then evaluate support
|
|
106
|
+
probes in order. The first supported format wins. One format without a probe
|
|
107
|
+
may be the final fallback; it cannot precede another entry. After selection,
|
|
108
|
+
reader failure is final and does not advance to the fallback. Both `.red` and
|
|
109
|
+
`.black` therefore use Black magic first and Red/YAML otherwise, independent
|
|
110
|
+
of the suffix.
|
|
111
|
+
|
|
112
|
+
A fixed `Target` may hydrate parsed values through its static `from` or
|
|
113
|
+
`fromYAML` method. `Identify(values, context)` may instead return a target
|
|
114
|
+
constructor, `true` to accept the reader result unchanged, or false/null to
|
|
115
|
+
fail. `Target` and `Identify` are mutually exclusive and only valid for object
|
|
116
|
+
handlers. These functions remain on the main thread even when the selected
|
|
117
|
+
format is worker-safe.
|
|
118
|
+
|
|
119
|
+
The normalized context supplied to formats as the third
|
|
120
|
+
`read(input, options, context)` argument, direct object loaders, `Identify`,
|
|
121
|
+
and `fromYAML` contains the same resource identity fields:
|
|
122
|
+
|
|
123
|
+
- `ext`: normalized lowercase extension without a leading dot;
|
|
124
|
+
- `resFilePath`: normalized lowercase logical resource path;
|
|
125
|
+
- `fileName`: normalized lowercase final path component; and
|
|
126
|
+
- `url`: the exact translated URL used by a URL-backed source, or `null` for
|
|
127
|
+
sources that read logical resource paths directly.
|
|
128
|
+
|
|
129
|
+
`path` remains a compatibility alias for `resFilePath`. URL text is not
|
|
130
|
+
lowercased independently: paths translated from `res:/` already use the
|
|
131
|
+
normalized resource path, while configured URL-base or resolver casing is
|
|
132
|
+
preserved.
|
|
133
|
+
|
|
134
|
+
The single-format short form:
|
|
135
|
+
|
|
136
|
+
```js
|
|
137
|
+
import { TriTextureRes } from "@carbonenginejs/runtime-resource/resource/texture";
|
|
138
|
+
import { CjsDdsFormat } from "@carbonenginejs/runtime-resource/formats/dds";
|
|
139
|
+
|
|
140
|
+
resMan.RegisterExtension("dds", TriTextureRes, CjsDdsFormat);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
is equivalent to:
|
|
144
|
+
|
|
145
|
+
```js
|
|
146
|
+
resMan.RegisterExtension("dds", TriTextureRes, {
|
|
147
|
+
Format: CjsDdsFormat
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`Register({ extensions })` accepts the same route objects keyed by extension.
|
|
152
|
+
Re-registration replaces the route for future uncached handles; an existing
|
|
153
|
+
canonical handle retains the complete route it captured.
|
|
154
|
+
|
|
155
|
+
The older registries remain independent compatibility and specialization
|
|
156
|
+
seams. `RegisterFormat` adds a format under its self-declared input extensions.
|
|
157
|
+
`RegisterResourceType` selects a resource class from a semantic requirement or
|
|
158
|
+
payload and takes precedence over the extension handler:
|
|
159
|
+
|
|
160
|
+
```js
|
|
161
|
+
import { CjsResMan } from "@carbonenginejs/runtime-resource";
|
|
162
|
+
import {
|
|
163
|
+
Tr2ImageRes,
|
|
164
|
+
TriTextureRes
|
|
165
|
+
} from "@carbonenginejs/runtime-resource/resource/texture";
|
|
166
|
+
import { CjsDdsFormat } from "@carbonenginejs/runtime-resource/formats/dds";
|
|
167
|
+
import { CjsPngFormat } from "@carbonenginejs/runtime-resource/formats/png";
|
|
168
|
+
|
|
169
|
+
const resMan = new CjsResMan().Register({
|
|
170
|
+
source,
|
|
171
|
+
formats: [ CjsDdsFormat, CjsPngFormat ],
|
|
172
|
+
resourceTypes: [ TriTextureRes, Tr2ImageRes ]
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
const texture = resMan.GetResource("res:/image/ship.png", {
|
|
176
|
+
requirement: "texture",
|
|
177
|
+
emit: "image"
|
|
178
|
+
});
|
|
179
|
+
const image = resMan.GetResource("res:/image/ship.png", {
|
|
180
|
+
requirement: "image",
|
|
181
|
+
emit: "image"
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Those are distinct resource identities but share the normalized source-byte
|
|
186
|
+
operation. `RegisterObjectLoader` remains the direct legacy byte-to-value
|
|
187
|
+
registration for an extension without an explicit route.
|
|
188
|
+
|
|
189
|
+
## Related documentation
|
|
190
|
+
|
|
191
|
+
- [Resource lifecycle concepts](../concepts/resource-lifecycle.md)
|
|
192
|
+
- [Browser worker execution](workers.md)
|
|
193
|
+
- [MotherLode identity, cache, and retention](motherlode-cache.md)
|
|
194
|
+
- [Format subpaths](../formats/README.md)
|
package/docs/reference/reload.md
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
# Candidate-first atomic reload
|
|
2
|
-
|
|
3
|
-
Status: Evolving
|
|
4
|
-
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
-
Audience: Users and integrators
|
|
6
|
-
Summary: Defines the reload contract that keeps the last published good handle canonical until a distinct candidate has fully succeeded.
|
|
7
|
-
|
|
8
|
-
## Contract
|
|
9
|
-
|
|
10
|
-
Reload is candidate-first. When an owner already exists,
|
|
11
|
-
`GetResource(path, { reload: true })` constructs and initializes a distinct
|
|
12
|
-
off-registry candidate without changing ordinary lookup. Calling `Ready()` on
|
|
13
|
-
that candidate, using `GetObject()` / `FetchResource()` with `reload: true`,
|
|
14
|
-
or calling the explicit `ReloadObject()` / `ReloadResource()` helpers starts
|
|
15
|
-
one shared candidate operation that runs the same queued contract:
|
|
16
|
-
|
|
17
|
-
1. purge-lock the exact former owner and invalidate reusable reads once;
|
|
18
|
-
2. read, convert through the selected format, and publish payload state only
|
|
19
|
-
on the detached candidate;
|
|
20
|
-
3. require the newest per-key reload token and exact former ownership;
|
|
21
|
-
4. compare-and-swap the fully loaded CPU candidate into MotherLode;
|
|
22
|
-
5. invalidate and clean the displaced handle after the lookup switch.
|
|
23
|
-
|
|
24
|
-
The manager captures the exact MotherLode, key, former handle, former
|
|
25
|
-
ownership generation, and a newest-request token. Reader, prepare, and
|
|
26
|
-
publication stages mutate only the detached candidate and validate candidate
|
|
27
|
-
authority before and after asynchronous boundaries. A fully loaded CPU
|
|
28
|
-
candidate commits through `CjsMotherLode.ReplaceExpected()` only if the exact
|
|
29
|
-
former owner and newest token still match. The final authority callback and
|
|
30
|
-
exact-record check run immediately before the synchronous map switch, with no
|
|
31
|
-
user cleanup or `await` between the comparison and publication.
|
|
32
|
-
|
|
33
|
-
After the switch, the displaced ownership generation is invalidated, the
|
|
34
|
-
candidate receives ordinary lifecycle/reconstruction callbacks, and the former
|
|
35
|
-
handle is cleaned exactly once. Existing JavaScript references are not
|
|
36
|
-
retargeted; they keep the displaced handle, while fresh lookup sees the
|
|
37
|
-
committed candidate.
|
|
38
|
-
|
|
39
|
-
## Failure behavior
|
|
40
|
-
|
|
41
|
-
Source, format, or publication failure leaves the former handle, state,
|
|
42
|
-
payload, and adapters canonical; the failed candidate's attached payload and
|
|
43
|
-
adapters are cleaned and its original error is retained. An otherwise-
|
|
44
|
-
successful candidate that was superseded, deleted, cleared, or replaced
|
|
45
|
-
rejects with `CJS_RESMAN_STALE_RELOAD_CANDIDATE` and cannot resurrect the
|
|
46
|
-
key. Constructors that return the former singleton are rejected before
|
|
47
|
-
`Initialize()` can mutate it because staging requires a distinct handle.
|
|
48
|
-
|
|
49
|
-
Failed freshness attempts still invalidate reusable source/format records
|
|
50
|
-
when their work begins; the already-published canonical payload is not
|
|
51
|
-
dependent on those records.
|
|
52
|
-
|
|
53
|
-
Cleanup errors have explicit sides. Candidate cleanup failure aggregates with
|
|
54
|
-
the original preparation/stale error as
|
|
55
|
-
`CJS_RESMAN_RELOAD_CANDIDATE_CLEANUP_FAILED` while the former owner remains
|
|
56
|
-
canonical. A displaced-owner cleanup failure occurs after publication and
|
|
57
|
-
rejects as `CJS_MOTHERLODE_REPLACE_CLEANUP_FAILED`, whose result explicitly
|
|
58
|
-
reports `committed: true`; the already-good candidate remains canonical.
|
|
59
|
-
|
|
60
|
-
## Read-cache interaction
|
|
61
|
-
|
|
62
|
-
`reload: true` synchronously detaches every queued/source/format read record
|
|
63
|
-
for the selected source/path before fresh work starts. Existing consumers
|
|
64
|
-
keep their detached promises; reload does not abort them. Fresh success
|
|
65
|
-
repopulates only caches explicitly requested with `cacheSource: true` or
|
|
66
|
-
`cacheFormat: true`. `InvalidateReadCache(path, { source, sourceRevision })`
|
|
67
|
-
provides the same no-abort invalidation explicitly; omitting
|
|
68
|
-
`sourceRevision` removes all revisions for that source/path. `Delete()`
|
|
69
|
-
remains canonical resource-identity-only, while `Clear()` resets all read
|
|
70
|
-
ledgers. A failed reload preserves the former payload but does not restore
|
|
71
|
-
reusable read-cache entries detached by its explicit freshness request.
|
|
72
|
-
|
|
73
|
-
## Publication authority and staleness
|
|
74
|
-
|
|
75
|
-
Every queued, direct, standalone, and candidate resource preparation captures
|
|
76
|
-
an immutable publication authority: the exact MotherLode, canonical key,
|
|
77
|
-
resource handle, and a manager-local ownership generation. The manager
|
|
78
|
-
validates that authority before and after state changes, asynchronous
|
|
79
|
-
reader/format work, and publication. Delete, Clear, successful reload commit,
|
|
80
|
-
or exact-handle reinsertion therefore makes older work reject with
|
|
81
|
-
`CJS_RESMAN_STALE_RESOURCE_OPERATION` before it can enter another state or
|
|
82
|
-
publish. If stale work independently rejects, its original source/format
|
|
83
|
-
error is preserved and `SetError()` is suppressed on the detached handle.
|
|
84
|
-
|
|
85
|
-
Candidate work is a normal `Wait()` root and blocks synchronous MotherLode
|
|
86
|
-
replacement while active. `Register({ motherLode })` rejects with
|
|
87
|
-
`CJS_RESMAN_ACTIVE_RESOURCE_OPERATIONS` while queued or direct mutations are
|
|
88
|
-
active, including a reload candidate. Normal `Wait()` drains queued roots and
|
|
89
|
-
candidate lineages; a direct caller must await its own load/prepare promise
|
|
90
|
-
before retrying replacement. Canonical and candidate authority prevent late
|
|
91
|
-
publication, but started source or format work is not yet aborted;
|
|
92
|
-
deterministic cleanup applies to the staged candidate resource itself.
|
|
93
|
-
|
|
94
|
-
## Divergence from Carbon
|
|
95
|
-
|
|
96
|
-
This availability contract intentionally differs from Carbon.
|
|
97
|
-
`BlueAsyncRes::Reload` cancels/joins work, releases dependent cached data, and
|
|
98
|
-
reloads the same canonical object in place; failure can therefore leave that
|
|
99
|
-
stable handle bad. Carbon MotherLode replacement also switches immediately and
|
|
100
|
-
has no prepare-success gate or rollback. Runtime-resource instead preserves
|
|
101
|
-
the last published good handle until a distinct candidate has succeeded, and
|
|
102
|
-
never silently retargets existing JavaScript references.
|
|
103
|
-
|
|
104
|
-
## Related documentation
|
|
105
|
-
|
|
106
|
-
- [MotherLode identity, cache, and retention](motherlode-cache.md)
|
|
107
|
-
- [Queues and the Wait fence](queues.md)
|
|
1
|
+
# Candidate-first atomic reload
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Defines the reload contract that keeps the last published good handle canonical until a distinct candidate has fully succeeded.
|
|
7
|
+
|
|
8
|
+
## Contract
|
|
9
|
+
|
|
10
|
+
Reload is candidate-first. When an owner already exists,
|
|
11
|
+
`GetResource(path, { reload: true })` constructs and initializes a distinct
|
|
12
|
+
off-registry candidate without changing ordinary lookup. Calling `Ready()` on
|
|
13
|
+
that candidate, using `GetObject()` / `FetchResource()` with `reload: true`,
|
|
14
|
+
or calling the explicit `ReloadObject()` / `ReloadResource()` helpers starts
|
|
15
|
+
one shared candidate operation that runs the same queued contract:
|
|
16
|
+
|
|
17
|
+
1. purge-lock the exact former owner and invalidate reusable reads once;
|
|
18
|
+
2. read, convert through the selected format, and publish payload state only
|
|
19
|
+
on the detached candidate;
|
|
20
|
+
3. require the newest per-key reload token and exact former ownership;
|
|
21
|
+
4. compare-and-swap the fully loaded CPU candidate into MotherLode;
|
|
22
|
+
5. invalidate and clean the displaced handle after the lookup switch.
|
|
23
|
+
|
|
24
|
+
The manager captures the exact MotherLode, key, former handle, former
|
|
25
|
+
ownership generation, and a newest-request token. Reader, prepare, and
|
|
26
|
+
publication stages mutate only the detached candidate and validate candidate
|
|
27
|
+
authority before and after asynchronous boundaries. A fully loaded CPU
|
|
28
|
+
candidate commits through `CjsMotherLode.ReplaceExpected()` only if the exact
|
|
29
|
+
former owner and newest token still match. The final authority callback and
|
|
30
|
+
exact-record check run immediately before the synchronous map switch, with no
|
|
31
|
+
user cleanup or `await` between the comparison and publication.
|
|
32
|
+
|
|
33
|
+
After the switch, the displaced ownership generation is invalidated, the
|
|
34
|
+
candidate receives ordinary lifecycle/reconstruction callbacks, and the former
|
|
35
|
+
handle is cleaned exactly once. Existing JavaScript references are not
|
|
36
|
+
retargeted; they keep the displaced handle, while fresh lookup sees the
|
|
37
|
+
committed candidate.
|
|
38
|
+
|
|
39
|
+
## Failure behavior
|
|
40
|
+
|
|
41
|
+
Source, format, or publication failure leaves the former handle, state,
|
|
42
|
+
payload, and adapters canonical; the failed candidate's attached payload and
|
|
43
|
+
adapters are cleaned and its original error is retained. An otherwise-
|
|
44
|
+
successful candidate that was superseded, deleted, cleared, or replaced
|
|
45
|
+
rejects with `CJS_RESMAN_STALE_RELOAD_CANDIDATE` and cannot resurrect the
|
|
46
|
+
key. Constructors that return the former singleton are rejected before
|
|
47
|
+
`Initialize()` can mutate it because staging requires a distinct handle.
|
|
48
|
+
|
|
49
|
+
Failed freshness attempts still invalidate reusable source/format records
|
|
50
|
+
when their work begins; the already-published canonical payload is not
|
|
51
|
+
dependent on those records.
|
|
52
|
+
|
|
53
|
+
Cleanup errors have explicit sides. Candidate cleanup failure aggregates with
|
|
54
|
+
the original preparation/stale error as
|
|
55
|
+
`CJS_RESMAN_RELOAD_CANDIDATE_CLEANUP_FAILED` while the former owner remains
|
|
56
|
+
canonical. A displaced-owner cleanup failure occurs after publication and
|
|
57
|
+
rejects as `CJS_MOTHERLODE_REPLACE_CLEANUP_FAILED`, whose result explicitly
|
|
58
|
+
reports `committed: true`; the already-good candidate remains canonical.
|
|
59
|
+
|
|
60
|
+
## Read-cache interaction
|
|
61
|
+
|
|
62
|
+
`reload: true` synchronously detaches every queued/source/format read record
|
|
63
|
+
for the selected source/path before fresh work starts. Existing consumers
|
|
64
|
+
keep their detached promises; reload does not abort them. Fresh success
|
|
65
|
+
repopulates only caches explicitly requested with `cacheSource: true` or
|
|
66
|
+
`cacheFormat: true`. `InvalidateReadCache(path, { source, sourceRevision })`
|
|
67
|
+
provides the same no-abort invalidation explicitly; omitting
|
|
68
|
+
`sourceRevision` removes all revisions for that source/path. `Delete()`
|
|
69
|
+
remains canonical resource-identity-only, while `Clear()` resets all read
|
|
70
|
+
ledgers. A failed reload preserves the former payload but does not restore
|
|
71
|
+
reusable read-cache entries detached by its explicit freshness request.
|
|
72
|
+
|
|
73
|
+
## Publication authority and staleness
|
|
74
|
+
|
|
75
|
+
Every queued, direct, standalone, and candidate resource preparation captures
|
|
76
|
+
an immutable publication authority: the exact MotherLode, canonical key,
|
|
77
|
+
resource handle, and a manager-local ownership generation. The manager
|
|
78
|
+
validates that authority before and after state changes, asynchronous
|
|
79
|
+
reader/format work, and publication. Delete, Clear, successful reload commit,
|
|
80
|
+
or exact-handle reinsertion therefore makes older work reject with
|
|
81
|
+
`CJS_RESMAN_STALE_RESOURCE_OPERATION` before it can enter another state or
|
|
82
|
+
publish. If stale work independently rejects, its original source/format
|
|
83
|
+
error is preserved and `SetError()` is suppressed on the detached handle.
|
|
84
|
+
|
|
85
|
+
Candidate work is a normal `Wait()` root and blocks synchronous MotherLode
|
|
86
|
+
replacement while active. `Register({ motherLode })` rejects with
|
|
87
|
+
`CJS_RESMAN_ACTIVE_RESOURCE_OPERATIONS` while queued or direct mutations are
|
|
88
|
+
active, including a reload candidate. Normal `Wait()` drains queued roots and
|
|
89
|
+
candidate lineages; a direct caller must await its own load/prepare promise
|
|
90
|
+
before retrying replacement. Canonical and candidate authority prevent late
|
|
91
|
+
publication, but started source or format work is not yet aborted;
|
|
92
|
+
deterministic cleanup applies to the staged candidate resource itself.
|
|
93
|
+
|
|
94
|
+
## Divergence from Carbon
|
|
95
|
+
|
|
96
|
+
This availability contract intentionally differs from Carbon.
|
|
97
|
+
`BlueAsyncRes::Reload` cancels/joins work, releases dependent cached data, and
|
|
98
|
+
reloads the same canonical object in place; failure can therefore leave that
|
|
99
|
+
stable handle bad. Carbon MotherLode replacement also switches immediately and
|
|
100
|
+
has no prepare-success gate or rollback. Runtime-resource instead preserves
|
|
101
|
+
the last published good handle until a distinct candidate has succeeded, and
|
|
102
|
+
never silently retargets existing JavaScript references.
|
|
103
|
+
|
|
104
|
+
## Related documentation
|
|
105
|
+
|
|
106
|
+
- [MotherLode identity, cache, and retention](motherlode-cache.md)
|
|
107
|
+
- [Queues and the Wait fence](queues.md)
|