@carbonenginejs/runtime-resource 0.13.0 → 0.15.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 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- 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 +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- 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 -310
- 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 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- 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 +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- 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/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- 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 +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- 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 +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- 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 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- 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 -133
- 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 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- 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 -33
- 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 +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- 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 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- 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 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- 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 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- 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 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- 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/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- 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/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- 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 +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- 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 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- 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 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- 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 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -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 +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- 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 -890
- 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 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- 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 -194
- 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 -142
- 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
|
@@ -1,226 +1,226 @@
|
|
|
1
|
-
# Resource lifecycle
|
|
2
|
-
|
|
3
|
-
Status: Evolving
|
|
4
|
-
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
-
Audience: Users and integrators
|
|
6
|
-
Summary: Explains resource states, the load/prepare split, and how a resource request flows from path to published CPU payload.
|
|
7
|
-
|
|
8
|
-
## Carbon and ccpwgl background
|
|
9
|
-
|
|
10
|
-
Carbon's resource model separates load from prepare. The source schemas expose
|
|
11
|
-
resource classes through `BlueAsyncRes`, and Carbon notes distinguish
|
|
12
|
-
background load work from main-thread/device prepare work.
|
|
13
|
-
|
|
14
|
-
ccpwgl makes that split visible in `Tw2Resource`:
|
|
15
|
-
|
|
16
|
-
```text
|
|
17
|
-
NO_INIT -> REQUESTED -> LOADED -> PREPARED
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Additional terminal or cleanup states include `ERROR`, `UNLOADED`, and
|
|
21
|
-
`PURGED`. The important behavior is:
|
|
22
|
-
|
|
23
|
-
- `Tw2ResMan.LoadResource()` requests a resource.
|
|
24
|
-
- The raw fetch resolves.
|
|
25
|
-
- `Tw2Resource.OnLoaded()` marks bytes or source data as loaded.
|
|
26
|
-
- The resource is queued for prepare.
|
|
27
|
-
- The manager tick later calls `res.Prepare(data)`.
|
|
28
|
-
- The concrete resource calls `OnPrepared()` after prepare work succeeds.
|
|
29
|
-
|
|
30
|
-
Some ccpwgl concrete `Prepare()` implementations also create WebGL objects.
|
|
31
|
-
That is a historical engine/runtime coupling, not the boundary CarbonEngineJS
|
|
32
|
-
keeps; see [architecture](../architecture.md).
|
|
33
|
-
|
|
34
|
-
## CarbonEngineJS states
|
|
35
|
-
|
|
36
|
-
```text
|
|
37
|
-
EMPTY -> REQUESTED/LOADING -> LOADED (runtime-resource)
|
|
38
|
-
LOADED -> PREPARING -> PREPARED (engine adapters)
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
- `EMPTY`: resource identity exists, but no payload has been read.
|
|
42
|
-
- `REQUESTED`: the resource is waiting on a queued or shared source load.
|
|
43
|
-
- `LOADING`: source bytes are available and CPU reader/format work is active.
|
|
44
|
-
- `LOADED`: CPU payload or hydrated object graph exists.
|
|
45
|
-
- `PREPARING`: an engine adapter is realizing backend-owned resources.
|
|
46
|
-
- `PREPARED`: preparation completed successfully and the resource is usable.
|
|
47
|
-
- `FAILED`: CPU loading, conversion, validation, or publication failed before
|
|
48
|
-
a valid payload was published.
|
|
49
|
-
- `UNLOADED`: resource payload was released.
|
|
50
|
-
- `PURGED`: an inactivity or recorded-byte cache policy evicted the resource
|
|
51
|
-
from active ownership. Ordinary replacement, `Delete()`, `Clear()`,
|
|
52
|
-
`ClearCached()`, and shutdown clean owned payloads/adapters but preserve the
|
|
53
|
-
detached handle's last valid state.
|
|
54
|
-
|
|
55
|
-
`CjsResMan.LoadObject()` queues one deduplicated background source operation
|
|
56
|
-
per source/path and limits active source operations with
|
|
57
|
-
`maxConcurrentLoads`. After bytes arrive, object construction is split into
|
|
58
|
-
separate main-queue items (`reader/format conversion -> publish`). Publication
|
|
59
|
-
moves the resource to `LOADED`, then stops. ResMan never performs backend
|
|
60
|
-
realization or marks the resource `PREPARED`/`GOOD`. See
|
|
61
|
-
[reference/queues.md](../reference/queues.md) for the queue contract and
|
|
62
|
-
[reference/motherlode-cache.md](../reference/motherlode-cache.md) for
|
|
63
|
-
identity, retention, and release behavior.
|
|
64
|
-
|
|
65
|
-
## Request workflow
|
|
66
|
-
|
|
67
|
-
The normal direct resource-path flow is:
|
|
68
|
-
|
|
69
|
-
```text
|
|
70
|
-
Application / runtime object
|
|
71
|
-
|
|
|
72
|
-
| requests "res:/model/ship.gr2"
|
|
73
|
-
| with optional per-request overrides
|
|
74
|
-
v
|
|
75
|
-
+-----------------------------------------------+
|
|
76
|
-
| CjsLibrary |
|
|
77
|
-
| |
|
|
78
|
-
| - starts from registered default behavior |
|
|
79
|
-
| - considers registered capability reports |
|
|
80
|
-
| - chooses requirement / emit / format |
|
|
81
|
-
| - applies explicit request overrides |
|
|
82
|
-
+-----------------------------------------------+
|
|
83
|
-
|
|
|
84
|
-
| path + resolved request options
|
|
85
|
-
v
|
|
86
|
-
+-----------------------------------------------+
|
|
87
|
-
| CjsResMan.GetResource(path, options) |
|
|
88
|
-
| |
|
|
89
|
-
| - normalize source path and extension |
|
|
90
|
-
| - resolve the promised output tag |
|
|
91
|
-
| - capture the registered extension route |
|
|
92
|
-
+-----------------------------------------------+
|
|
93
|
-
|
|
|
94
|
-
v
|
|
95
|
-
+-----------------------------------------------+
|
|
96
|
-
| CjsMotherLode.Lookup(resolved key) |
|
|
97
|
-
+-----------------------------------------------+
|
|
98
|
-
|
|
|
99
|
-
+--- cache hit ------------------------------+
|
|
100
|
-
| |
|
|
101
|
-
| reuse the CjsResource and any active |
|
|
102
|
-
| load/build operation |
|
|
103
|
-
| |
|
|
104
|
-
`--- cache miss -----------------------------+
|
|
105
|
-
| |
|
|
106
|
-
| semantic class or extension Handler |
|
|
107
|
-
| construct + Initialize() |
|
|
108
|
-
| insert into CjsMotherLode |
|
|
109
|
-
v |
|
|
110
|
-
new CjsResource -------------------------------+
|
|
111
|
-
|
|
|
112
|
-
| Ready() / GetObject()
|
|
113
|
-
v
|
|
114
|
-
+===============================================+
|
|
115
|
-
| BACKGROUND LOAD QUEUE |
|
|
116
|
-
| |
|
|
117
|
-
| - mark resource REQUESTED |
|
|
118
|
-
| - share one source operation per source/path |
|
|
119
|
-
| - obey maxConcurrentLoads |
|
|
120
|
-
| - CjsResMan builds URL when provider needs it |
|
|
121
|
-
| - provider.Read(sourcePath) |
|
|
122
|
-
+===============================================+
|
|
123
|
-
|
|
|
124
|
-
| source bytes
|
|
125
|
-
v
|
|
126
|
-
+===============================================+
|
|
127
|
-
| MAIN PREPARE QUEUE |
|
|
128
|
-
| |
|
|
129
|
-
| every box below is a separately budgeted item |
|
|
130
|
-
+===============================================+
|
|
131
|
-
|
|
|
132
|
-
v
|
|
133
|
-
+-----------------------------------------------+
|
|
134
|
-
| Read stage |
|
|
135
|
-
| |
|
|
136
|
-
| explicit extension route? |
|
|
137
|
-
| yes -> ordered Formats/content probes |
|
|
138
|
-
| no -> direct loader or legacy formats |
|
|
139
|
-
| target/identify -> hydrate on caller thread |
|
|
140
|
-
+-----------------------------------------------+
|
|
141
|
-
|
|
|
142
|
-
| plain payload / hydrated object
|
|
143
|
-
v
|
|
144
|
-
+-----------------------------------------------+
|
|
145
|
-
| Publish stage |
|
|
146
|
-
| |
|
|
147
|
-
| RESOURCE handler -> SetPayload + return handle|
|
|
148
|
-
| OBJECT handler -> SetPayload + return object|
|
|
149
|
-
| legacy path -> preserve current behavior |
|
|
150
|
-
+-----------------------------------------------+
|
|
151
|
-
|
|
|
152
|
-
+--- validation failure --------------------+
|
|
153
|
-
| |
|
|
154
|
-
| resource -> FAILED |
|
|
155
|
-
| Ready() rejects |
|
|
156
|
-
| |
|
|
157
|
-
`--- publication succeeds -----------------+
|
|
158
|
-
|
|
|
159
|
-
| resource -> LOADED
|
|
160
|
-
v
|
|
161
|
-
CjsLibrary returns
|
|
162
|
-
the built CjsResource/object
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
Device realization is a separate continuation selected outside ResMan. It can
|
|
166
|
-
run again after adapter eviction or device loss while the CPU payload remains
|
|
167
|
-
resident:
|
|
168
|
-
|
|
169
|
-
```text
|
|
170
|
-
CjsResource LOADED
|
|
171
|
-
|
|
|
172
|
-
| selected engine adapter
|
|
173
|
-
v
|
|
174
|
-
PREPARING
|
|
175
|
-
|
|
|
176
|
-
| create candidate -> verify current target -> synchronous attach
|
|
177
|
-
v
|
|
178
|
-
PREPARED
|
|
179
|
-
|
|
180
|
-
failure: destroy candidate -> LOADED (CPU payload retained)
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
## Retention model
|
|
184
|
-
|
|
185
|
-
ccpwgl keeps every resource in `Tw2MotherLode` until it is explicitly cleared
|
|
186
|
-
or auto-purged, and its `IsGood()` implicitly calls `KeepAlive()`, so many
|
|
187
|
-
read/check paths keep resources resident. CarbonEngineJS retains that behavior
|
|
188
|
-
for the resource being queried, while keeping payload retention and hard locks
|
|
189
|
-
explicit:
|
|
190
|
-
|
|
191
|
-
- `IsGood()` calls `KeepAlive()` before checking preparation. It renews this
|
|
192
|
-
handle and starts its bounded reload path when the handle is `PURGED`.
|
|
193
|
-
- `IsPrepared()` and `HasLoaded()` remain pure state checks.
|
|
194
|
-
- `KeepAlive()` and `KeepPayloadAlive()` are the explicit liveness operations.
|
|
195
|
-
- `Lock()` / `Unlock()` maintain a non-underflowing count and prevent identity
|
|
196
|
-
and payload eviction during a sweep.
|
|
197
|
-
- MotherLode tracks separate identity and CPU-payload frame/time observations.
|
|
198
|
-
- `CjsMotherLode.PurgeInactive()` scans only when explicitly requested and
|
|
199
|
-
never infers JavaScript reachability. `CjsResMan.Update()` may request it
|
|
200
|
-
only under an explicitly configured automatic policy.
|
|
201
|
-
|
|
202
|
-
Generic liveness never walks arbitrary child fields. `IsGood()` renews only the
|
|
203
|
-
handle on which it is called; an aggregate consumer that owns child resources
|
|
204
|
-
must query or retain those children explicitly.
|
|
205
|
-
|
|
206
|
-
The CPU/GPU split adds an axis that ccpwgl blurs: CPU payload memory and
|
|
207
|
-
device memory are different budgets. Retention therefore distinguishes:
|
|
208
|
-
|
|
209
|
-
- resource identity: path, extension, state, error summary, lightweight
|
|
210
|
-
metadata;
|
|
211
|
-
- CPU payload: plain reader/converter objects, hydrated object graphs, decoded
|
|
212
|
-
typed arrays;
|
|
213
|
-
- adapter payload: WebGL/WebGPU textures, buffers, shader modules, pipelines.
|
|
214
|
-
|
|
215
|
-
Identity and lightweight metadata stay resident while CPU payloads and adapter
|
|
216
|
-
payloads release independently. Engine adapters own adapter-resource
|
|
217
|
-
destruction; runtime-resource provides lifecycle hooks and opaque adapter
|
|
218
|
-
slots so cleanup has a consistent place to run. The exact contracts live in
|
|
219
|
-
[reference/motherlode-cache.md](../reference/motherlode-cache.md).
|
|
220
|
-
|
|
221
|
-
## Related documentation
|
|
222
|
-
|
|
223
|
-
- [Architecture and boundaries](../architecture.md)
|
|
224
|
-
- [MotherLode identity, cache, and retention](../reference/motherlode-cache.md)
|
|
225
|
-
- [Candidate-first atomic reload](../reference/reload.md)
|
|
226
|
-
- [Queues and the Wait fence](../reference/queues.md)
|
|
1
|
+
# Resource lifecycle
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Explains resource states, the load/prepare split, and how a resource request flows from path to published CPU payload.
|
|
7
|
+
|
|
8
|
+
## Carbon and ccpwgl background
|
|
9
|
+
|
|
10
|
+
Carbon's resource model separates load from prepare. The source schemas expose
|
|
11
|
+
resource classes through `BlueAsyncRes`, and Carbon notes distinguish
|
|
12
|
+
background load work from main-thread/device prepare work.
|
|
13
|
+
|
|
14
|
+
ccpwgl makes that split visible in `Tw2Resource`:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
NO_INIT -> REQUESTED -> LOADED -> PREPARED
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Additional terminal or cleanup states include `ERROR`, `UNLOADED`, and
|
|
21
|
+
`PURGED`. The important behavior is:
|
|
22
|
+
|
|
23
|
+
- `Tw2ResMan.LoadResource()` requests a resource.
|
|
24
|
+
- The raw fetch resolves.
|
|
25
|
+
- `Tw2Resource.OnLoaded()` marks bytes or source data as loaded.
|
|
26
|
+
- The resource is queued for prepare.
|
|
27
|
+
- The manager tick later calls `res.Prepare(data)`.
|
|
28
|
+
- The concrete resource calls `OnPrepared()` after prepare work succeeds.
|
|
29
|
+
|
|
30
|
+
Some ccpwgl concrete `Prepare()` implementations also create WebGL objects.
|
|
31
|
+
That is a historical engine/runtime coupling, not the boundary CarbonEngineJS
|
|
32
|
+
keeps; see [architecture](../architecture.md).
|
|
33
|
+
|
|
34
|
+
## CarbonEngineJS states
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
EMPTY -> REQUESTED/LOADING -> LOADED (runtime-resource)
|
|
38
|
+
LOADED -> PREPARING -> PREPARED (engine adapters)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- `EMPTY`: resource identity exists, but no payload has been read.
|
|
42
|
+
- `REQUESTED`: the resource is waiting on a queued or shared source load.
|
|
43
|
+
- `LOADING`: source bytes are available and CPU reader/format work is active.
|
|
44
|
+
- `LOADED`: CPU payload or hydrated object graph exists.
|
|
45
|
+
- `PREPARING`: an engine adapter is realizing backend-owned resources.
|
|
46
|
+
- `PREPARED`: preparation completed successfully and the resource is usable.
|
|
47
|
+
- `FAILED`: CPU loading, conversion, validation, or publication failed before
|
|
48
|
+
a valid payload was published.
|
|
49
|
+
- `UNLOADED`: resource payload was released.
|
|
50
|
+
- `PURGED`: an inactivity or recorded-byte cache policy evicted the resource
|
|
51
|
+
from active ownership. Ordinary replacement, `Delete()`, `Clear()`,
|
|
52
|
+
`ClearCached()`, and shutdown clean owned payloads/adapters but preserve the
|
|
53
|
+
detached handle's last valid state.
|
|
54
|
+
|
|
55
|
+
`CjsResMan.LoadObject()` queues one deduplicated background source operation
|
|
56
|
+
per source/path and limits active source operations with
|
|
57
|
+
`maxConcurrentLoads`. After bytes arrive, object construction is split into
|
|
58
|
+
separate main-queue items (`reader/format conversion -> publish`). Publication
|
|
59
|
+
moves the resource to `LOADED`, then stops. ResMan never performs backend
|
|
60
|
+
realization or marks the resource `PREPARED`/`GOOD`. See
|
|
61
|
+
[reference/queues.md](../reference/queues.md) for the queue contract and
|
|
62
|
+
[reference/motherlode-cache.md](../reference/motherlode-cache.md) for
|
|
63
|
+
identity, retention, and release behavior.
|
|
64
|
+
|
|
65
|
+
## Request workflow
|
|
66
|
+
|
|
67
|
+
The normal direct resource-path flow is:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Application / runtime object
|
|
71
|
+
|
|
|
72
|
+
| requests "res:/model/ship.gr2"
|
|
73
|
+
| with optional per-request overrides
|
|
74
|
+
v
|
|
75
|
+
+-----------------------------------------------+
|
|
76
|
+
| CjsLibrary |
|
|
77
|
+
| |
|
|
78
|
+
| - starts from registered default behavior |
|
|
79
|
+
| - considers registered capability reports |
|
|
80
|
+
| - chooses requirement / emit / format |
|
|
81
|
+
| - applies explicit request overrides |
|
|
82
|
+
+-----------------------------------------------+
|
|
83
|
+
|
|
|
84
|
+
| path + resolved request options
|
|
85
|
+
v
|
|
86
|
+
+-----------------------------------------------+
|
|
87
|
+
| CjsResMan.GetResource(path, options) |
|
|
88
|
+
| |
|
|
89
|
+
| - normalize source path and extension |
|
|
90
|
+
| - resolve the promised output tag |
|
|
91
|
+
| - capture the registered extension route |
|
|
92
|
+
+-----------------------------------------------+
|
|
93
|
+
|
|
|
94
|
+
v
|
|
95
|
+
+-----------------------------------------------+
|
|
96
|
+
| CjsMotherLode.Lookup(resolved key) |
|
|
97
|
+
+-----------------------------------------------+
|
|
98
|
+
|
|
|
99
|
+
+--- cache hit ------------------------------+
|
|
100
|
+
| |
|
|
101
|
+
| reuse the CjsResource and any active |
|
|
102
|
+
| load/build operation |
|
|
103
|
+
| |
|
|
104
|
+
`--- cache miss -----------------------------+
|
|
105
|
+
| |
|
|
106
|
+
| semantic class or extension Handler |
|
|
107
|
+
| construct + Initialize() |
|
|
108
|
+
| insert into CjsMotherLode |
|
|
109
|
+
v |
|
|
110
|
+
new CjsResource -------------------------------+
|
|
111
|
+
|
|
|
112
|
+
| Ready() / GetObject()
|
|
113
|
+
v
|
|
114
|
+
+===============================================+
|
|
115
|
+
| BACKGROUND LOAD QUEUE |
|
|
116
|
+
| |
|
|
117
|
+
| - mark resource REQUESTED |
|
|
118
|
+
| - share one source operation per source/path |
|
|
119
|
+
| - obey maxConcurrentLoads |
|
|
120
|
+
| - CjsResMan builds URL when provider needs it |
|
|
121
|
+
| - provider.Read(sourcePath) |
|
|
122
|
+
+===============================================+
|
|
123
|
+
|
|
|
124
|
+
| source bytes
|
|
125
|
+
v
|
|
126
|
+
+===============================================+
|
|
127
|
+
| MAIN PREPARE QUEUE |
|
|
128
|
+
| |
|
|
129
|
+
| every box below is a separately budgeted item |
|
|
130
|
+
+===============================================+
|
|
131
|
+
|
|
|
132
|
+
v
|
|
133
|
+
+-----------------------------------------------+
|
|
134
|
+
| Read stage |
|
|
135
|
+
| |
|
|
136
|
+
| explicit extension route? |
|
|
137
|
+
| yes -> ordered Formats/content probes |
|
|
138
|
+
| no -> direct loader or legacy formats |
|
|
139
|
+
| target/identify -> hydrate on caller thread |
|
|
140
|
+
+-----------------------------------------------+
|
|
141
|
+
|
|
|
142
|
+
| plain payload / hydrated object
|
|
143
|
+
v
|
|
144
|
+
+-----------------------------------------------+
|
|
145
|
+
| Publish stage |
|
|
146
|
+
| |
|
|
147
|
+
| RESOURCE handler -> SetPayload + return handle|
|
|
148
|
+
| OBJECT handler -> SetPayload + return object|
|
|
149
|
+
| legacy path -> preserve current behavior |
|
|
150
|
+
+-----------------------------------------------+
|
|
151
|
+
|
|
|
152
|
+
+--- validation failure --------------------+
|
|
153
|
+
| |
|
|
154
|
+
| resource -> FAILED |
|
|
155
|
+
| Ready() rejects |
|
|
156
|
+
| |
|
|
157
|
+
`--- publication succeeds -----------------+
|
|
158
|
+
|
|
|
159
|
+
| resource -> LOADED
|
|
160
|
+
v
|
|
161
|
+
CjsLibrary returns
|
|
162
|
+
the built CjsResource/object
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Device realization is a separate continuation selected outside ResMan. It can
|
|
166
|
+
run again after adapter eviction or device loss while the CPU payload remains
|
|
167
|
+
resident:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
CjsResource LOADED
|
|
171
|
+
|
|
|
172
|
+
| selected engine adapter
|
|
173
|
+
v
|
|
174
|
+
PREPARING
|
|
175
|
+
|
|
|
176
|
+
| create candidate -> verify current target -> synchronous attach
|
|
177
|
+
v
|
|
178
|
+
PREPARED
|
|
179
|
+
|
|
180
|
+
failure: destroy candidate -> LOADED (CPU payload retained)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Retention model
|
|
184
|
+
|
|
185
|
+
ccpwgl keeps every resource in `Tw2MotherLode` until it is explicitly cleared
|
|
186
|
+
or auto-purged, and its `IsGood()` implicitly calls `KeepAlive()`, so many
|
|
187
|
+
read/check paths keep resources resident. CarbonEngineJS retains that behavior
|
|
188
|
+
for the resource being queried, while keeping payload retention and hard locks
|
|
189
|
+
explicit:
|
|
190
|
+
|
|
191
|
+
- `IsGood()` calls `KeepAlive()` before checking preparation. It renews this
|
|
192
|
+
handle and starts its bounded reload path when the handle is `PURGED`.
|
|
193
|
+
- `IsPrepared()` and `HasLoaded()` remain pure state checks.
|
|
194
|
+
- `KeepAlive()` and `KeepPayloadAlive()` are the explicit liveness operations.
|
|
195
|
+
- `Lock()` / `Unlock()` maintain a non-underflowing count and prevent identity
|
|
196
|
+
and payload eviction during a sweep.
|
|
197
|
+
- MotherLode tracks separate identity and CPU-payload frame/time observations.
|
|
198
|
+
- `CjsMotherLode.PurgeInactive()` scans only when explicitly requested and
|
|
199
|
+
never infers JavaScript reachability. `CjsResMan.Update()` may request it
|
|
200
|
+
only under an explicitly configured automatic policy.
|
|
201
|
+
|
|
202
|
+
Generic liveness never walks arbitrary child fields. `IsGood()` renews only the
|
|
203
|
+
handle on which it is called; an aggregate consumer that owns child resources
|
|
204
|
+
must query or retain those children explicitly.
|
|
205
|
+
|
|
206
|
+
The CPU/GPU split adds an axis that ccpwgl blurs: CPU payload memory and
|
|
207
|
+
device memory are different budgets. Retention therefore distinguishes:
|
|
208
|
+
|
|
209
|
+
- resource identity: path, extension, state, error summary, lightweight
|
|
210
|
+
metadata;
|
|
211
|
+
- CPU payload: plain reader/converter objects, hydrated object graphs, decoded
|
|
212
|
+
typed arrays;
|
|
213
|
+
- adapter payload: WebGL/WebGPU textures, buffers, shader modules, pipelines.
|
|
214
|
+
|
|
215
|
+
Identity and lightweight metadata stay resident while CPU payloads and adapter
|
|
216
|
+
payloads release independently. Engine adapters own adapter-resource
|
|
217
|
+
destruction; runtime-resource provides lifecycle hooks and opaque adapter
|
|
218
|
+
slots so cleanup has a consistent place to run. The exact contracts live in
|
|
219
|
+
[reference/motherlode-cache.md](../reference/motherlode-cache.md).
|
|
220
|
+
|
|
221
|
+
## Related documentation
|
|
222
|
+
|
|
223
|
+
- [Architecture and boundaries](../architecture.md)
|
|
224
|
+
- [MotherLode identity, cache, and retention](../reference/motherlode-cache.md)
|
|
225
|
+
- [Candidate-first atomic reload](../reference/reload.md)
|
|
226
|
+
- [Queues and the Wait fence](../reference/queues.md)
|