@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,159 +1,159 @@
|
|
|
1
|
-
// Shared field accessors for Carbon v15 description records.
|
|
2
|
-
//
|
|
3
|
-
// The record tree is what the one Carbon effect reader emits
|
|
4
|
-
// (`format/carbonEffect/carbonEffectRecords.js`). Each reflection class maps its
|
|
5
|
-
// own record, but three field encodings recur across all of them and are worth
|
|
6
|
-
// naming once rather than open-coding at every call site:
|
|
7
|
-
//
|
|
8
|
-
// - a string is an arena reference `{offset, value}`, not a string;
|
|
9
|
-
// - an annotation value is four raw little-endian bytes, because Carbon writes
|
|
10
|
-
// it through one union member and reads it through another, so the bytes are
|
|
11
|
-
// the only faithful carrier;
|
|
12
|
-
// - a blob is `{size, offset, bytes}` with `offset === 0xffffffff` meaning the
|
|
13
|
-
// reference was never set, which is not the same as an empty payload.
|
|
14
|
-
//
|
|
15
|
-
// Both directions live here, as `recordX` and `toRecordX` pairs. They are held
|
|
16
|
-
// apart by the round trip rather than by separation: records in, classes, records
|
|
17
|
-
// out, compared byte for byte over the shipped corpus, so a mistake that
|
|
18
|
-
// satisfied both sides would have to be an exact inverse of itself.
|
|
19
|
-
|
|
20
|
-
const rawValueBuffer = new DataView(new ArrayBuffer(4));
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Reads the text out of an arena string reference.
|
|
24
|
-
*
|
|
25
|
-
* @param {{offset:number,value:string}|null|undefined} ref String reference.
|
|
26
|
-
* @returns {string} The referenced text, or "" when unset.
|
|
27
|
-
*/
|
|
28
|
-
function recordText(ref) {
|
|
29
|
-
return String(ref?.value ?? "");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Decodes an annotation record's four raw bytes as the `u32` bit pattern the
|
|
34
|
-
* reflection classes carry as `rawValue`.
|
|
35
|
-
*
|
|
36
|
-
* Carbon stores the value as a `{float,int32_t}` union and the type byte decides
|
|
37
|
-
* which member is meaningful, so the bits travel untyped and each annotation type
|
|
38
|
-
* reinterprets them itself. Decoding to a number here — rather than to a float —
|
|
39
|
-
* is what keeps a value like `-FLT_MAX` exact.
|
|
40
|
-
*
|
|
41
|
-
* @param {Uint8Array|null|undefined} bytes Four little-endian bytes.
|
|
42
|
-
* @returns {number} The unsigned 32-bit pattern those bytes carry.
|
|
43
|
-
*/
|
|
44
|
-
function recordRawValue(bytes) {
|
|
45
|
-
if (!bytes || bytes.length < 4) return 0;
|
|
46
|
-
rawValueBuffer.setUint8(0, bytes[0]);
|
|
47
|
-
rawValueBuffer.setUint8(1, bytes[1]);
|
|
48
|
-
rawValueBuffer.setUint8(2, bytes[2]);
|
|
49
|
-
rawValueBuffer.setUint8(3, bytes[3]);
|
|
50
|
-
return rawValueBuffer.getUint32(0, true);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Re-encodes a record's `float` as the `u32` bit pattern the reflection classes
|
|
55
|
-
* carry in their `*Raw` sampler fields.
|
|
56
|
-
*
|
|
57
|
-
* The container stores sampler LOD and border values as real floats, but the
|
|
58
|
-
* class keeps the bits, so a value like `-FLT_MAX` survives serialization without
|
|
59
|
-
* a decimal round trip. Reading the float and re-encoding it here is exact: the
|
|
60
|
-
* record's value came from a `f32` read, so it is already representable.
|
|
61
|
-
*
|
|
62
|
-
* @param {number} value Float value from a sampler record.
|
|
63
|
-
* @returns {number} The unsigned 32-bit pattern encoding that float.
|
|
64
|
-
*/
|
|
65
|
-
function recordRawBits(value) {
|
|
66
|
-
rawValueBuffer.setFloat32(0, Number.isFinite(value) ? value : 0, true);
|
|
67
|
-
return rawValueBuffer.getUint32(0, true);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Wraps text as the arena string reference the writer interns.
|
|
72
|
-
*
|
|
73
|
-
* The offset is always 0: the writer assigns real offsets while building the
|
|
74
|
-
* arena, and any value here would be discarded. Carrying the text is the whole
|
|
75
|
-
* job.
|
|
76
|
-
*
|
|
77
|
-
* @param {string} value Text value.
|
|
78
|
-
* @returns {{offset:number,value:string}} String reference.
|
|
79
|
-
*/
|
|
80
|
-
function toRecordText(value) {
|
|
81
|
-
return {
|
|
82
|
-
offset: 0,
|
|
83
|
-
value: String(value ?? "")
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Encodes a `u32` bit pattern as an annotation record's four raw bytes.
|
|
89
|
-
*
|
|
90
|
-
* The inverse of {@link recordRawValue}, and raw for the same reason: the value
|
|
91
|
-
* is written through one union member and read through another, so no numeric
|
|
92
|
-
* conversion may happen on the way out either.
|
|
93
|
-
*
|
|
94
|
-
* @param {number} rawValue Unsigned 32-bit pattern.
|
|
95
|
-
* @returns {Uint8Array} Four little-endian bytes.
|
|
96
|
-
*/
|
|
97
|
-
function toRecordRawValue(rawValue) {
|
|
98
|
-
const bytes = new Uint8Array(4);
|
|
99
|
-
rawValueBuffer.setUint32(0, rawValue >>> 0, true);
|
|
100
|
-
for (let index = 0; index < 4; index += 1) {
|
|
101
|
-
bytes[index] = rawValueBuffer.getUint8(index);
|
|
102
|
-
}
|
|
103
|
-
return bytes;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Decodes a `*Raw` sampler field back to the float the record stores.
|
|
108
|
-
*
|
|
109
|
-
* The inverse of {@link recordRawBits}. Assigning the raw `u32` straight across
|
|
110
|
-
* would write `4286578687.0` where the file says `-3.4028235e38`, and every
|
|
111
|
-
* structural check in the container would accept it.
|
|
112
|
-
*
|
|
113
|
-
* @param {number} bits Raw 32-bit pattern.
|
|
114
|
-
* @returns {number} The float those bits encode.
|
|
115
|
-
*/
|
|
116
|
-
function toRecordFloat(bits) {
|
|
117
|
-
rawValueBuffer.setUint32(0, (bits ?? 0) >>> 0, true);
|
|
118
|
-
return rawValueBuffer.getFloat32(0, true);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Wraps bytes as the record codec's sized blob reference.
|
|
123
|
-
*
|
|
124
|
-
* A zero-length blob keeps the offset word the file carried, because the writer
|
|
125
|
-
* passes it straight through rather than interning anything. That word is
|
|
126
|
-
* usually `0xffffffff`, but not always — measured across the shipped corpus,
|
|
127
|
-
* 150 of 4833 files carry a live-looking offset behind a zero size, and
|
|
128
|
-
* normalizing it changes the bytes and can make two distinct bodies collapse
|
|
129
|
-
* into one. An empty payload and an absent one are not the same thing.
|
|
130
|
-
*
|
|
131
|
-
* @param {Uint8Array} bytes Payload bytes.
|
|
132
|
-
* @param {number} [declaredSize] Size to declare when tracked separately.
|
|
133
|
-
* @param {number} [unsetOffset] Offset word to keep when the size is zero.
|
|
134
|
-
* @returns {{size:number,offset:number,bytes:Uint8Array}} Blob reference.
|
|
135
|
-
*/
|
|
136
|
-
function toRecordBlob(bytes, declaredSize, unsetOffset = 0xffffffff) {
|
|
137
|
-
const owned = bytes instanceof Uint8Array ? bytes : new Uint8Array(0);
|
|
138
|
-
const size = declaredSize ?? owned.byteLength;
|
|
139
|
-
return {
|
|
140
|
-
size,
|
|
141
|
-
offset: size === 0 ? unsetOffset >>> 0 : 0,
|
|
142
|
-
bytes: owned
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Returns a blob reference's payload bytes, or an empty view when the reference
|
|
148
|
-
* was never set.
|
|
149
|
-
*
|
|
150
|
-
* @param {{size:number,offset:number,bytes:Uint8Array}|null|undefined} ref Blob.
|
|
151
|
-
* @returns {Uint8Array} Owned-by-the-container view over the payload.
|
|
152
|
-
*/
|
|
153
|
-
function recordBytes(ref) {
|
|
154
|
-
const bytes = ref?.bytes;
|
|
155
|
-
return bytes instanceof Uint8Array ? bytes : new Uint8Array(0);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export { recordBytes, recordRawBits, recordRawValue, recordText, toRecordBlob, toRecordFloat, toRecordRawValue, toRecordText };
|
|
159
|
-
//# sourceMappingURL=carbonRecordFields.js.map
|
|
1
|
+
// Shared field accessors for Carbon v15 description records.
|
|
2
|
+
//
|
|
3
|
+
// The record tree is what the one Carbon effect reader emits
|
|
4
|
+
// (`format/carbonEffect/carbonEffectRecords.js`). Each reflection class maps its
|
|
5
|
+
// own record, but three field encodings recur across all of them and are worth
|
|
6
|
+
// naming once rather than open-coding at every call site:
|
|
7
|
+
//
|
|
8
|
+
// - a string is an arena reference `{offset, value}`, not a string;
|
|
9
|
+
// - an annotation value is four raw little-endian bytes, because Carbon writes
|
|
10
|
+
// it through one union member and reads it through another, so the bytes are
|
|
11
|
+
// the only faithful carrier;
|
|
12
|
+
// - a blob is `{size, offset, bytes}` with `offset === 0xffffffff` meaning the
|
|
13
|
+
// reference was never set, which is not the same as an empty payload.
|
|
14
|
+
//
|
|
15
|
+
// Both directions live here, as `recordX` and `toRecordX` pairs. They are held
|
|
16
|
+
// apart by the round trip rather than by separation: records in, classes, records
|
|
17
|
+
// out, compared byte for byte over the shipped corpus, so a mistake that
|
|
18
|
+
// satisfied both sides would have to be an exact inverse of itself.
|
|
19
|
+
|
|
20
|
+
const rawValueBuffer = new DataView(new ArrayBuffer(4));
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Reads the text out of an arena string reference.
|
|
24
|
+
*
|
|
25
|
+
* @param {{offset:number,value:string}|null|undefined} ref String reference.
|
|
26
|
+
* @returns {string} The referenced text, or "" when unset.
|
|
27
|
+
*/
|
|
28
|
+
function recordText(ref) {
|
|
29
|
+
return String(ref?.value ?? "");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Decodes an annotation record's four raw bytes as the `u32` bit pattern the
|
|
34
|
+
* reflection classes carry as `rawValue`.
|
|
35
|
+
*
|
|
36
|
+
* Carbon stores the value as a `{float,int32_t}` union and the type byte decides
|
|
37
|
+
* which member is meaningful, so the bits travel untyped and each annotation type
|
|
38
|
+
* reinterprets them itself. Decoding to a number here — rather than to a float —
|
|
39
|
+
* is what keeps a value like `-FLT_MAX` exact.
|
|
40
|
+
*
|
|
41
|
+
* @param {Uint8Array|null|undefined} bytes Four little-endian bytes.
|
|
42
|
+
* @returns {number} The unsigned 32-bit pattern those bytes carry.
|
|
43
|
+
*/
|
|
44
|
+
function recordRawValue(bytes) {
|
|
45
|
+
if (!bytes || bytes.length < 4) return 0;
|
|
46
|
+
rawValueBuffer.setUint8(0, bytes[0]);
|
|
47
|
+
rawValueBuffer.setUint8(1, bytes[1]);
|
|
48
|
+
rawValueBuffer.setUint8(2, bytes[2]);
|
|
49
|
+
rawValueBuffer.setUint8(3, bytes[3]);
|
|
50
|
+
return rawValueBuffer.getUint32(0, true);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Re-encodes a record's `float` as the `u32` bit pattern the reflection classes
|
|
55
|
+
* carry in their `*Raw` sampler fields.
|
|
56
|
+
*
|
|
57
|
+
* The container stores sampler LOD and border values as real floats, but the
|
|
58
|
+
* class keeps the bits, so a value like `-FLT_MAX` survives serialization without
|
|
59
|
+
* a decimal round trip. Reading the float and re-encoding it here is exact: the
|
|
60
|
+
* record's value came from a `f32` read, so it is already representable.
|
|
61
|
+
*
|
|
62
|
+
* @param {number} value Float value from a sampler record.
|
|
63
|
+
* @returns {number} The unsigned 32-bit pattern encoding that float.
|
|
64
|
+
*/
|
|
65
|
+
function recordRawBits(value) {
|
|
66
|
+
rawValueBuffer.setFloat32(0, Number.isFinite(value) ? value : 0, true);
|
|
67
|
+
return rawValueBuffer.getUint32(0, true);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Wraps text as the arena string reference the writer interns.
|
|
72
|
+
*
|
|
73
|
+
* The offset is always 0: the writer assigns real offsets while building the
|
|
74
|
+
* arena, and any value here would be discarded. Carrying the text is the whole
|
|
75
|
+
* job.
|
|
76
|
+
*
|
|
77
|
+
* @param {string} value Text value.
|
|
78
|
+
* @returns {{offset:number,value:string}} String reference.
|
|
79
|
+
*/
|
|
80
|
+
function toRecordText(value) {
|
|
81
|
+
return {
|
|
82
|
+
offset: 0,
|
|
83
|
+
value: String(value ?? "")
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Encodes a `u32` bit pattern as an annotation record's four raw bytes.
|
|
89
|
+
*
|
|
90
|
+
* The inverse of {@link recordRawValue}, and raw for the same reason: the value
|
|
91
|
+
* is written through one union member and read through another, so no numeric
|
|
92
|
+
* conversion may happen on the way out either.
|
|
93
|
+
*
|
|
94
|
+
* @param {number} rawValue Unsigned 32-bit pattern.
|
|
95
|
+
* @returns {Uint8Array} Four little-endian bytes.
|
|
96
|
+
*/
|
|
97
|
+
function toRecordRawValue(rawValue) {
|
|
98
|
+
const bytes = new Uint8Array(4);
|
|
99
|
+
rawValueBuffer.setUint32(0, rawValue >>> 0, true);
|
|
100
|
+
for (let index = 0; index < 4; index += 1) {
|
|
101
|
+
bytes[index] = rawValueBuffer.getUint8(index);
|
|
102
|
+
}
|
|
103
|
+
return bytes;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Decodes a `*Raw` sampler field back to the float the record stores.
|
|
108
|
+
*
|
|
109
|
+
* The inverse of {@link recordRawBits}. Assigning the raw `u32` straight across
|
|
110
|
+
* would write `4286578687.0` where the file says `-3.4028235e38`, and every
|
|
111
|
+
* structural check in the container would accept it.
|
|
112
|
+
*
|
|
113
|
+
* @param {number} bits Raw 32-bit pattern.
|
|
114
|
+
* @returns {number} The float those bits encode.
|
|
115
|
+
*/
|
|
116
|
+
function toRecordFloat(bits) {
|
|
117
|
+
rawValueBuffer.setUint32(0, (bits ?? 0) >>> 0, true);
|
|
118
|
+
return rawValueBuffer.getFloat32(0, true);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Wraps bytes as the record codec's sized blob reference.
|
|
123
|
+
*
|
|
124
|
+
* A zero-length blob keeps the offset word the file carried, because the writer
|
|
125
|
+
* passes it straight through rather than interning anything. That word is
|
|
126
|
+
* usually `0xffffffff`, but not always — measured across the shipped corpus,
|
|
127
|
+
* 150 of 4833 files carry a live-looking offset behind a zero size, and
|
|
128
|
+
* normalizing it changes the bytes and can make two distinct bodies collapse
|
|
129
|
+
* into one. An empty payload and an absent one are not the same thing.
|
|
130
|
+
*
|
|
131
|
+
* @param {Uint8Array} bytes Payload bytes.
|
|
132
|
+
* @param {number} [declaredSize] Size to declare when tracked separately.
|
|
133
|
+
* @param {number} [unsetOffset] Offset word to keep when the size is zero.
|
|
134
|
+
* @returns {{size:number,offset:number,bytes:Uint8Array}} Blob reference.
|
|
135
|
+
*/
|
|
136
|
+
function toRecordBlob(bytes, declaredSize, unsetOffset = 0xffffffff) {
|
|
137
|
+
const owned = bytes instanceof Uint8Array ? bytes : new Uint8Array(0);
|
|
138
|
+
const size = declaredSize ?? owned.byteLength;
|
|
139
|
+
return {
|
|
140
|
+
size,
|
|
141
|
+
offset: size === 0 ? unsetOffset >>> 0 : 0,
|
|
142
|
+
bytes: owned
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Returns a blob reference's payload bytes, or an empty view when the reference
|
|
148
|
+
* was never set.
|
|
149
|
+
*
|
|
150
|
+
* @param {{size:number,offset:number,bytes:Uint8Array}|null|undefined} ref Blob.
|
|
151
|
+
* @returns {Uint8Array} Owned-by-the-container view over the payload.
|
|
152
|
+
*/
|
|
153
|
+
function recordBytes(ref) {
|
|
154
|
+
const bytes = ref?.bytes;
|
|
155
|
+
return bytes instanceof Uint8Array ? bytes : new Uint8Array(0);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export { recordBytes, recordRawBits, recordRawValue, recordText, toRecordBlob, toRecordFloat, toRecordRawValue, toRecordText };
|
|
159
|
+
//# sourceMappingURL=carbonRecordFields.js.map
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/** Number of shader stages Carbon's fixed-width stage array holds. */
|
|
2
|
-
const SHADER_STAGE_COUNT = 6;
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Require one of Carbon's six authored shader-stage indices.
|
|
6
|
-
*
|
|
7
|
-
* Carbon addresses stages positionally through a fixed-width array on the pass
|
|
8
|
-
* (`Tr2EffectDescription.h`), so a stage type is an index into that array and
|
|
9
|
-
* nothing outside `[0, 5]` addresses anything.
|
|
10
|
-
*
|
|
11
|
-
* @param {number} value Candidate stage type.
|
|
12
|
-
* @returns {number} The validated stage type.
|
|
13
|
-
*/
|
|
14
|
-
function requireShaderStageType(value) {
|
|
15
|
-
if (!Number.isSafeInteger(value) || value < 0 || value >= SHADER_STAGE_COUNT) {
|
|
16
|
-
throw new RangeError(`Shader stage type must be in [0, ${SHADER_STAGE_COUNT - 1}]`);
|
|
17
|
-
}
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { SHADER_STAGE_COUNT, requireShaderStageType };
|
|
22
|
-
//# sourceMappingURL=shaderStage.js.map
|
|
1
|
+
/** Number of shader stages Carbon's fixed-width stage array holds. */
|
|
2
|
+
const SHADER_STAGE_COUNT = 6;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Require one of Carbon's six authored shader-stage indices.
|
|
6
|
+
*
|
|
7
|
+
* Carbon addresses stages positionally through a fixed-width array on the pass
|
|
8
|
+
* (`Tr2EffectDescription.h`), so a stage type is an index into that array and
|
|
9
|
+
* nothing outside `[0, 5]` addresses anything.
|
|
10
|
+
*
|
|
11
|
+
* @param {number} value Candidate stage type.
|
|
12
|
+
* @returns {number} The validated stage type.
|
|
13
|
+
*/
|
|
14
|
+
function requireShaderStageType(value) {
|
|
15
|
+
if (!Number.isSafeInteger(value) || value < 0 || value >= SHADER_STAGE_COUNT) {
|
|
16
|
+
throw new RangeError(`Shader stage type must be in [0, ${SHADER_STAGE_COUNT - 1}]`);
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { SHADER_STAGE_COUNT, requireShaderStageType };
|
|
22
|
+
//# sourceMappingURL=shaderStage.js.map
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
import { CjsSchema, impl, type } from '@carbonenginejs/runtime-utils/schema';
|
|
2
|
-
import { CjsModel } from '@carbonenginejs/runtime-utils/model';
|
|
3
|
-
import { isPlainObject } from '@carbonenginejs/runtime-utils/is';
|
|
4
|
-
import { recordText, recordRawBits, toRecordFloat, toRecordText } from '../reflection/carbonRecordFields.js';
|
|
5
|
-
|
|
6
|
-
// Source: trinity/trinity/Shader/Tr2EffectDescription.h
|
|
7
|
-
|
|
8
|
-
/** Reflected sampler name and complete device-free sampler descriptor. */
|
|
9
|
-
class Tr2SamplerSetup extends CjsModel {
|
|
10
|
-
/** name (const char*) */
|
|
11
|
-
name = "";
|
|
12
|
-
|
|
13
|
-
/** Whether the source sampler carried a name rather than authored null. */
|
|
14
|
-
hasName = false;
|
|
15
|
-
|
|
16
|
-
/** sampler (Tr2SamplerStateAL) */
|
|
17
|
-
sampler = null;
|
|
18
|
-
|
|
19
|
-
/** Whether the sampler occupies a dynamic register rather than static signature state. */
|
|
20
|
-
isDynamic = false;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Construct a canonical sampler record from JS/JSON model values.
|
|
24
|
-
*
|
|
25
|
-
* @param {object} values Canonical model values.
|
|
26
|
-
* @param {object} options CjsModel import options.
|
|
27
|
-
* @returns {Tr2SamplerSetup} Hydrated sampler.
|
|
28
|
-
*/
|
|
29
|
-
static from(values = {}, options = {}) {
|
|
30
|
-
let normalized = values;
|
|
31
|
-
if (values && Object.hasOwn(values, "name") && !Object.hasOwn(values, "hasName")) {
|
|
32
|
-
normalized = {
|
|
33
|
-
...values,
|
|
34
|
-
hasName: values.name !== null,
|
|
35
|
-
name: values.name === null ? "" : values.name
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return super.from(normalized, options);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Build one dynamic sampler from its Carbon v15 description record.
|
|
43
|
-
*
|
|
44
|
-
* The name is kept whatever `isDynamic` says. Carbon nulls a non-dynamic
|
|
45
|
-
* sampler's name while reading (`Tr2EffectDescription.cpp:430-433`), but that
|
|
46
|
-
* is a runtime decision made on the way to a device — the file still carries
|
|
47
|
-
* the string, and this graph has to be able to re-emit the file it came from.
|
|
48
|
-
* Dropping it loses arena content: measured across the shipped corpus, this
|
|
49
|
-
* single rule accounted for every non-byte-identical re-emission.
|
|
50
|
-
*
|
|
51
|
-
* A consumer that wants Carbon's runtime view asks for it: the name is
|
|
52
|
-
* meaningful only when `isDynamic`.
|
|
53
|
-
*
|
|
54
|
-
* @param {object} record Carbon sampler record.
|
|
55
|
-
* @returns {Tr2SamplerSetup} Reflected sampler.
|
|
56
|
-
*/
|
|
57
|
-
static fromCarbonBinary(record) {
|
|
58
|
-
if (!isPlainObject(record)) {
|
|
59
|
-
throw new TypeError("Carbon effect sampler record must be an object");
|
|
60
|
-
}
|
|
61
|
-
const sampler = new this();
|
|
62
|
-
sampler.isDynamic = !!record.isDynamic;
|
|
63
|
-
sampler.name = recordText(record.name);
|
|
64
|
-
sampler.hasName = sampler.name !== "";
|
|
65
|
-
sampler.sampler = {
|
|
66
|
-
comparison: !!record.comparison,
|
|
67
|
-
minFilter: record.minFilter,
|
|
68
|
-
magFilter: record.magFilter,
|
|
69
|
-
mipFilter: record.mipFilter,
|
|
70
|
-
addressU: record.addressU,
|
|
71
|
-
addressV: record.addressV,
|
|
72
|
-
addressW: record.addressW,
|
|
73
|
-
mipLODBiasRaw: recordRawBits(record.mipLODBias),
|
|
74
|
-
maxAnisotropy: record.maxAnisotropy,
|
|
75
|
-
comparisonFunc: record.comparisonFunc,
|
|
76
|
-
borderColorRaw: (record.borderColor ?? []).map(recordRawBits),
|
|
77
|
-
minLODRaw: recordRawBits(record.minLOD),
|
|
78
|
-
maxLODRaw: recordRawBits(record.maxLOD)
|
|
79
|
-
};
|
|
80
|
-
return sampler;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Emit this sampler as a Carbon v15 record.
|
|
85
|
-
*
|
|
86
|
-
* The name is written whether or not it is meaningful: Carbon's writer always
|
|
87
|
-
* emits the field, and the string it emits is the one the compiler authored,
|
|
88
|
-
* not the one Carbon's reader keeps.
|
|
89
|
-
*
|
|
90
|
-
* @param {number} registerIndex Register this sampler is bound at.
|
|
91
|
-
* @returns {object} Carbon sampler record.
|
|
92
|
-
*/
|
|
93
|
-
toCarbonBinary(registerIndex) {
|
|
94
|
-
const descriptor = this.sampler ?? {};
|
|
95
|
-
return {
|
|
96
|
-
registerIndex,
|
|
97
|
-
name: toRecordText(this.name),
|
|
98
|
-
comparison: descriptor.comparison ? 1 : 0,
|
|
99
|
-
minFilter: descriptor.minFilter,
|
|
100
|
-
magFilter: descriptor.magFilter,
|
|
101
|
-
mipFilter: descriptor.mipFilter,
|
|
102
|
-
addressU: descriptor.addressU,
|
|
103
|
-
addressV: descriptor.addressV,
|
|
104
|
-
addressW: descriptor.addressW,
|
|
105
|
-
mipLODBias: toRecordFloat(descriptor.mipLODBiasRaw),
|
|
106
|
-
maxAnisotropy: descriptor.maxAnisotropy,
|
|
107
|
-
comparisonFunc: descriptor.comparisonFunc,
|
|
108
|
-
// On one line deliberately: the raw-field guard requires the
|
|
109
|
-
// reinterpretation to be visible on the same line as the raw access.
|
|
110
|
-
borderColor: (descriptor.borderColorRaw ?? [0, 0, 0, 0]).slice(0, 4).map(toRecordFloat),
|
|
111
|
-
minLOD: toRecordFloat(descriptor.minLODRaw),
|
|
112
|
-
maxLOD: toRecordFloat(descriptor.maxLODRaw),
|
|
113
|
-
isDynamic: this.isDynamic ? 1 : 0
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Declared imperatively rather than with decorators, so this module stays
|
|
119
|
-
// plain ESM that loads from source without a transform. The decorator
|
|
120
|
-
// expressions are reused verbatim, so the registered metadata is identical.
|
|
121
|
-
// Statics belong in `methods`: decorateMethod targets the prototype and
|
|
122
|
-
// would register a static as an instance field.
|
|
123
|
-
CjsSchema.define(Tr2SamplerSetup, {
|
|
124
|
-
className: "Tr2SamplerSetup",
|
|
125
|
-
family: "shader",
|
|
126
|
-
fields: {
|
|
127
|
-
name: type.string,
|
|
128
|
-
hasName: [impl.adapted, impl.reason("The schema string field cannot distinguish an authored null sampler name from an empty name; portable reflection must retain that distinction for static sampler records."), type.boolean],
|
|
129
|
-
sampler: type.rawStruct("Tr2SamplerStateAL"),
|
|
130
|
-
isDynamic: [impl.adapted, impl.reason("The portable effect contract distinguishes dynamic and static sampler declarations before an engine creates sampler state."), type.boolean]
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
export { Tr2SamplerSetup };
|
|
135
|
-
//# sourceMappingURL=Tr2SamplerSetup.js.map
|
|
1
|
+
import { CjsSchema, impl, type } from '@carbonenginejs/runtime-utils/schema';
|
|
2
|
+
import { CjsModel } from '@carbonenginejs/runtime-utils/model';
|
|
3
|
+
import { isPlainObject } from '@carbonenginejs/runtime-utils/is';
|
|
4
|
+
import { recordText, recordRawBits, toRecordFloat, toRecordText } from '../reflection/carbonRecordFields.js';
|
|
5
|
+
|
|
6
|
+
// Source: trinity/trinity/Shader/Tr2EffectDescription.h
|
|
7
|
+
|
|
8
|
+
/** Reflected sampler name and complete device-free sampler descriptor. */
|
|
9
|
+
class Tr2SamplerSetup extends CjsModel {
|
|
10
|
+
/** name (const char*) */
|
|
11
|
+
name = "";
|
|
12
|
+
|
|
13
|
+
/** Whether the source sampler carried a name rather than authored null. */
|
|
14
|
+
hasName = false;
|
|
15
|
+
|
|
16
|
+
/** sampler (Tr2SamplerStateAL) */
|
|
17
|
+
sampler = null;
|
|
18
|
+
|
|
19
|
+
/** Whether the sampler occupies a dynamic register rather than static signature state. */
|
|
20
|
+
isDynamic = false;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Construct a canonical sampler record from JS/JSON model values.
|
|
24
|
+
*
|
|
25
|
+
* @param {object} values Canonical model values.
|
|
26
|
+
* @param {object} options CjsModel import options.
|
|
27
|
+
* @returns {Tr2SamplerSetup} Hydrated sampler.
|
|
28
|
+
*/
|
|
29
|
+
static from(values = {}, options = {}) {
|
|
30
|
+
let normalized = values;
|
|
31
|
+
if (values && Object.hasOwn(values, "name") && !Object.hasOwn(values, "hasName")) {
|
|
32
|
+
normalized = {
|
|
33
|
+
...values,
|
|
34
|
+
hasName: values.name !== null,
|
|
35
|
+
name: values.name === null ? "" : values.name
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return super.from(normalized, options);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Build one dynamic sampler from its Carbon v15 description record.
|
|
43
|
+
*
|
|
44
|
+
* The name is kept whatever `isDynamic` says. Carbon nulls a non-dynamic
|
|
45
|
+
* sampler's name while reading (`Tr2EffectDescription.cpp:430-433`), but that
|
|
46
|
+
* is a runtime decision made on the way to a device — the file still carries
|
|
47
|
+
* the string, and this graph has to be able to re-emit the file it came from.
|
|
48
|
+
* Dropping it loses arena content: measured across the shipped corpus, this
|
|
49
|
+
* single rule accounted for every non-byte-identical re-emission.
|
|
50
|
+
*
|
|
51
|
+
* A consumer that wants Carbon's runtime view asks for it: the name is
|
|
52
|
+
* meaningful only when `isDynamic`.
|
|
53
|
+
*
|
|
54
|
+
* @param {object} record Carbon sampler record.
|
|
55
|
+
* @returns {Tr2SamplerSetup} Reflected sampler.
|
|
56
|
+
*/
|
|
57
|
+
static fromCarbonBinary(record) {
|
|
58
|
+
if (!isPlainObject(record)) {
|
|
59
|
+
throw new TypeError("Carbon effect sampler record must be an object");
|
|
60
|
+
}
|
|
61
|
+
const sampler = new this();
|
|
62
|
+
sampler.isDynamic = !!record.isDynamic;
|
|
63
|
+
sampler.name = recordText(record.name);
|
|
64
|
+
sampler.hasName = sampler.name !== "";
|
|
65
|
+
sampler.sampler = {
|
|
66
|
+
comparison: !!record.comparison,
|
|
67
|
+
minFilter: record.minFilter,
|
|
68
|
+
magFilter: record.magFilter,
|
|
69
|
+
mipFilter: record.mipFilter,
|
|
70
|
+
addressU: record.addressU,
|
|
71
|
+
addressV: record.addressV,
|
|
72
|
+
addressW: record.addressW,
|
|
73
|
+
mipLODBiasRaw: recordRawBits(record.mipLODBias),
|
|
74
|
+
maxAnisotropy: record.maxAnisotropy,
|
|
75
|
+
comparisonFunc: record.comparisonFunc,
|
|
76
|
+
borderColorRaw: (record.borderColor ?? []).map(recordRawBits),
|
|
77
|
+
minLODRaw: recordRawBits(record.minLOD),
|
|
78
|
+
maxLODRaw: recordRawBits(record.maxLOD)
|
|
79
|
+
};
|
|
80
|
+
return sampler;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Emit this sampler as a Carbon v15 record.
|
|
85
|
+
*
|
|
86
|
+
* The name is written whether or not it is meaningful: Carbon's writer always
|
|
87
|
+
* emits the field, and the string it emits is the one the compiler authored,
|
|
88
|
+
* not the one Carbon's reader keeps.
|
|
89
|
+
*
|
|
90
|
+
* @param {number} registerIndex Register this sampler is bound at.
|
|
91
|
+
* @returns {object} Carbon sampler record.
|
|
92
|
+
*/
|
|
93
|
+
toCarbonBinary(registerIndex) {
|
|
94
|
+
const descriptor = this.sampler ?? {};
|
|
95
|
+
return {
|
|
96
|
+
registerIndex,
|
|
97
|
+
name: toRecordText(this.name),
|
|
98
|
+
comparison: descriptor.comparison ? 1 : 0,
|
|
99
|
+
minFilter: descriptor.minFilter,
|
|
100
|
+
magFilter: descriptor.magFilter,
|
|
101
|
+
mipFilter: descriptor.mipFilter,
|
|
102
|
+
addressU: descriptor.addressU,
|
|
103
|
+
addressV: descriptor.addressV,
|
|
104
|
+
addressW: descriptor.addressW,
|
|
105
|
+
mipLODBias: toRecordFloat(descriptor.mipLODBiasRaw),
|
|
106
|
+
maxAnisotropy: descriptor.maxAnisotropy,
|
|
107
|
+
comparisonFunc: descriptor.comparisonFunc,
|
|
108
|
+
// On one line deliberately: the raw-field guard requires the
|
|
109
|
+
// reinterpretation to be visible on the same line as the raw access.
|
|
110
|
+
borderColor: (descriptor.borderColorRaw ?? [0, 0, 0, 0]).slice(0, 4).map(toRecordFloat),
|
|
111
|
+
minLOD: toRecordFloat(descriptor.minLODRaw),
|
|
112
|
+
maxLOD: toRecordFloat(descriptor.maxLODRaw),
|
|
113
|
+
isDynamic: this.isDynamic ? 1 : 0
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Declared imperatively rather than with decorators, so this module stays
|
|
119
|
+
// plain ESM that loads from source without a transform. The decorator
|
|
120
|
+
// expressions are reused verbatim, so the registered metadata is identical.
|
|
121
|
+
// Statics belong in `methods`: decorateMethod targets the prototype and
|
|
122
|
+
// would register a static as an instance field.
|
|
123
|
+
CjsSchema.define(Tr2SamplerSetup, {
|
|
124
|
+
className: "Tr2SamplerSetup",
|
|
125
|
+
family: "shader",
|
|
126
|
+
fields: {
|
|
127
|
+
name: type.string,
|
|
128
|
+
hasName: [impl.adapted, impl.reason("The schema string field cannot distinguish an authored null sampler name from an empty name; portable reflection must retain that distinction for static sampler records."), type.boolean],
|
|
129
|
+
sampler: type.rawStruct("Tr2SamplerStateAL"),
|
|
130
|
+
isDynamic: [impl.adapted, impl.reason("The portable effect contract distinguishes dynamic and static sampler declarations before an engine creates sampler state."), type.boolean]
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
export { Tr2SamplerSetup };
|
|
135
|
+
//# sourceMappingURL=Tr2SamplerSetup.js.map
|