@carbonenginejs/runtime-resource 0.13.0 → 0.14.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 +675 -675
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -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,122 +1,122 @@
|
|
|
1
|
-
# Decoded output contract
|
|
2
|
-
|
|
3
|
-
Status: Evolving
|
|
4
|
-
Scope: `@carbonenginejs/runtime-resource/formats/dxbc` JSON output
|
|
5
|
-
Audience: Shader-tool authors and lowering-backend authors
|
|
6
|
-
Summary: Defines the stable top-level JSON fields and the decoder records consumed by shader-lowering packages.
|
|
7
|
-
|
|
8
|
-
## Top-level result
|
|
9
|
-
|
|
10
|
-
`CjsDxbcFormat.read(bytes)` returns:
|
|
11
|
-
|
|
12
|
-
| Field | Meaning |
|
|
13
|
-
| --- | --- |
|
|
14
|
-
| `source` | Caller-provided diagnostic label. |
|
|
15
|
-
| `container` | Container version, declared size, and chunk summaries. |
|
|
16
|
-
| `program` | Shader stage, shader model, chunk tag, and token count, or `null`. |
|
|
17
|
-
| `inputSignature` | Input signature elements, or `null`. |
|
|
18
|
-
| `outputSignature` | Output signature elements, or `null`. |
|
|
19
|
-
| `patchSignature` | Patch-constant signature elements, or `null`. |
|
|
20
|
-
| `instructions` | Decoded instruction records, or `null` when disabled or absent. |
|
|
21
|
-
|
|
22
|
-
`Inspect` returns a smaller record containing the container/chunk summary,
|
|
23
|
-
stage name, shader model, and input/output element counts.
|
|
24
|
-
|
|
25
|
-
## Container records
|
|
26
|
-
|
|
27
|
-
The container summary includes `version`, `totalSize`, and ordered `chunks`.
|
|
28
|
-
Each chunk record includes its four-character code, byte offset, and payload
|
|
29
|
-
size. JSON output omits raw chunk bytes.
|
|
30
|
-
|
|
31
|
-
## Program records
|
|
32
|
-
|
|
33
|
-
Program metadata includes:
|
|
34
|
-
|
|
35
|
-
- `fourCC`: `SHEX` or `SHDR`;
|
|
36
|
-
- numeric and named program type;
|
|
37
|
-
- major and minor shader-model version; and
|
|
38
|
-
- declared program length in 32-bit words.
|
|
39
|
-
|
|
40
|
-
Recognized program names are pixel, vertex, geometry, hull, domain, and
|
|
41
|
-
compute. An unknown numeric type remains observable as `"unknown"`.
|
|
42
|
-
|
|
43
|
-
## Signature elements
|
|
44
|
-
|
|
45
|
-
Each signature element records its semantic name/index, system-value and
|
|
46
|
-
component types, register index, masks, stream, and minimum-precision value
|
|
47
|
-
when that signature layout provides one.
|
|
48
|
-
|
|
49
|
-
The reader supports the SM4 and SM5 signature chunk layouts used by `ISGN`,
|
|
50
|
-
`ISG1`, `OSGN`, `OSG1`, `OSG5`, `PCSG`, and `PSG1`.
|
|
51
|
-
|
|
52
|
-
## Instruction records
|
|
53
|
-
|
|
54
|
-
Each instruction begins with its source token offset, opcode number/name,
|
|
55
|
-
declared length, and decoded control bits. Depending on the opcode, the record
|
|
56
|
-
may also include:
|
|
57
|
-
|
|
58
|
-
- destination and source operands with component selection and index records;
|
|
59
|
-
- opcode and operand extensions;
|
|
60
|
-
- declaration-specific fields;
|
|
61
|
-
- resource dimensions and return types;
|
|
62
|
-
- sampler, interpolation, precision, topology, or system-value metadata;
|
|
63
|
-
- custom-data payloads; and
|
|
64
|
-
- unprojected declaration words in `tailTokens`.
|
|
65
|
-
|
|
66
|
-
Executable instructions reject leftover or missing operand words. Declaration
|
|
67
|
-
records may preserve unfamiliar trailing payload words when their instruction
|
|
68
|
-
framing is valid.
|
|
69
|
-
|
|
70
|
-
### Compute shared memory and synchronization
|
|
71
|
-
|
|
72
|
-
Compute thread-group shared-memory declarations expose their register and
|
|
73
|
-
complete allocation shape:
|
|
74
|
-
|
|
75
|
-
| Declaration | Fields |
|
|
76
|
-
| --- | --- |
|
|
77
|
-
| `dcl_thread_group_shared_memory_raw` | `registerIndex`, `byteCount` |
|
|
78
|
-
| `dcl_thread_group_shared_memory_structured` | `registerIndex`, `structureStride`, `structureCount` |
|
|
79
|
-
|
|
80
|
-
The declaration operand must identify one immediate thread-group shared-memory
|
|
81
|
-
register. Byte counts and structure strides are positive and DWORD-aligned;
|
|
82
|
-
structured element counts are positive. Any additional well-framed declaration
|
|
83
|
-
words remain observable through `tailTokens`.
|
|
84
|
-
|
|
85
|
-
The `sync` instruction exposes its numeric `syncFlags` mask and a canonical
|
|
86
|
-
bit-order `syncFlagNames` array. The recognized names are
|
|
87
|
-
`threads_in_group`, `thread_group_shared_memory`,
|
|
88
|
-
`thread_group_uav_memory`, and `global_uav_memory`. These control bits are
|
|
89
|
-
separate from arithmetic result controls, so `sync` never reports saturation.
|
|
90
|
-
Unknown bits remain set in the numeric eight-bit mask even though they have no
|
|
91
|
-
entry in the recognized-name array. Reserved operand and opcode-control bits
|
|
92
|
-
are rejected rather than projected onto the canonical records.
|
|
93
|
-
|
|
94
|
-
## Shader Model 5.1 bindings
|
|
95
|
-
|
|
96
|
-
SM5.1 resource declarations may include `bindingRange`:
|
|
97
|
-
|
|
98
|
-
| Field | Meaning |
|
|
99
|
-
| --- | --- |
|
|
100
|
-
| `rangeId` | Class-local binding-range identity. |
|
|
101
|
-
| `lowerBound` / `upperBound` | Declared register bounds. |
|
|
102
|
-
| `unbounded` | Whether the upper bound represents an unbounded range. |
|
|
103
|
-
| `registerCount` | Finite range size, otherwise `null`. |
|
|
104
|
-
| `registerSpace` | D3D register space. |
|
|
105
|
-
|
|
106
|
-
Executable resource, sampler, UAV, and constant-buffer operands may include a
|
|
107
|
-
`resourceReference` retaining the range identity, index records, and
|
|
108
|
-
non-uniform flag. Range identity remains separate from the actual register
|
|
109
|
-
index needed by an explicit-binding backend.
|
|
110
|
-
|
|
111
|
-
SM5.0 declarations keep their direct-register shape.
|
|
112
|
-
|
|
113
|
-
## JSON conversion
|
|
114
|
-
|
|
115
|
-
Typed arrays become number arrays, arrays are converted recursively, maps
|
|
116
|
-
become plain objects, sets become arrays, and objects with `toJSON` use that
|
|
117
|
-
projection.
|
|
118
|
-
|
|
119
|
-
## Related documentation
|
|
120
|
-
|
|
121
|
-
- [Public API reference](api.md)
|
|
122
|
-
- [Architecture and boundaries](../architecture.md)
|
|
1
|
+
# Decoded output contract
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats/dxbc` JSON output
|
|
5
|
+
Audience: Shader-tool authors and lowering-backend authors
|
|
6
|
+
Summary: Defines the stable top-level JSON fields and the decoder records consumed by shader-lowering packages.
|
|
7
|
+
|
|
8
|
+
## Top-level result
|
|
9
|
+
|
|
10
|
+
`CjsDxbcFormat.read(bytes)` returns:
|
|
11
|
+
|
|
12
|
+
| Field | Meaning |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `source` | Caller-provided diagnostic label. |
|
|
15
|
+
| `container` | Container version, declared size, and chunk summaries. |
|
|
16
|
+
| `program` | Shader stage, shader model, chunk tag, and token count, or `null`. |
|
|
17
|
+
| `inputSignature` | Input signature elements, or `null`. |
|
|
18
|
+
| `outputSignature` | Output signature elements, or `null`. |
|
|
19
|
+
| `patchSignature` | Patch-constant signature elements, or `null`. |
|
|
20
|
+
| `instructions` | Decoded instruction records, or `null` when disabled or absent. |
|
|
21
|
+
|
|
22
|
+
`Inspect` returns a smaller record containing the container/chunk summary,
|
|
23
|
+
stage name, shader model, and input/output element counts.
|
|
24
|
+
|
|
25
|
+
## Container records
|
|
26
|
+
|
|
27
|
+
The container summary includes `version`, `totalSize`, and ordered `chunks`.
|
|
28
|
+
Each chunk record includes its four-character code, byte offset, and payload
|
|
29
|
+
size. JSON output omits raw chunk bytes.
|
|
30
|
+
|
|
31
|
+
## Program records
|
|
32
|
+
|
|
33
|
+
Program metadata includes:
|
|
34
|
+
|
|
35
|
+
- `fourCC`: `SHEX` or `SHDR`;
|
|
36
|
+
- numeric and named program type;
|
|
37
|
+
- major and minor shader-model version; and
|
|
38
|
+
- declared program length in 32-bit words.
|
|
39
|
+
|
|
40
|
+
Recognized program names are pixel, vertex, geometry, hull, domain, and
|
|
41
|
+
compute. An unknown numeric type remains observable as `"unknown"`.
|
|
42
|
+
|
|
43
|
+
## Signature elements
|
|
44
|
+
|
|
45
|
+
Each signature element records its semantic name/index, system-value and
|
|
46
|
+
component types, register index, masks, stream, and minimum-precision value
|
|
47
|
+
when that signature layout provides one.
|
|
48
|
+
|
|
49
|
+
The reader supports the SM4 and SM5 signature chunk layouts used by `ISGN`,
|
|
50
|
+
`ISG1`, `OSGN`, `OSG1`, `OSG5`, `PCSG`, and `PSG1`.
|
|
51
|
+
|
|
52
|
+
## Instruction records
|
|
53
|
+
|
|
54
|
+
Each instruction begins with its source token offset, opcode number/name,
|
|
55
|
+
declared length, and decoded control bits. Depending on the opcode, the record
|
|
56
|
+
may also include:
|
|
57
|
+
|
|
58
|
+
- destination and source operands with component selection and index records;
|
|
59
|
+
- opcode and operand extensions;
|
|
60
|
+
- declaration-specific fields;
|
|
61
|
+
- resource dimensions and return types;
|
|
62
|
+
- sampler, interpolation, precision, topology, or system-value metadata;
|
|
63
|
+
- custom-data payloads; and
|
|
64
|
+
- unprojected declaration words in `tailTokens`.
|
|
65
|
+
|
|
66
|
+
Executable instructions reject leftover or missing operand words. Declaration
|
|
67
|
+
records may preserve unfamiliar trailing payload words when their instruction
|
|
68
|
+
framing is valid.
|
|
69
|
+
|
|
70
|
+
### Compute shared memory and synchronization
|
|
71
|
+
|
|
72
|
+
Compute thread-group shared-memory declarations expose their register and
|
|
73
|
+
complete allocation shape:
|
|
74
|
+
|
|
75
|
+
| Declaration | Fields |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `dcl_thread_group_shared_memory_raw` | `registerIndex`, `byteCount` |
|
|
78
|
+
| `dcl_thread_group_shared_memory_structured` | `registerIndex`, `structureStride`, `structureCount` |
|
|
79
|
+
|
|
80
|
+
The declaration operand must identify one immediate thread-group shared-memory
|
|
81
|
+
register. Byte counts and structure strides are positive and DWORD-aligned;
|
|
82
|
+
structured element counts are positive. Any additional well-framed declaration
|
|
83
|
+
words remain observable through `tailTokens`.
|
|
84
|
+
|
|
85
|
+
The `sync` instruction exposes its numeric `syncFlags` mask and a canonical
|
|
86
|
+
bit-order `syncFlagNames` array. The recognized names are
|
|
87
|
+
`threads_in_group`, `thread_group_shared_memory`,
|
|
88
|
+
`thread_group_uav_memory`, and `global_uav_memory`. These control bits are
|
|
89
|
+
separate from arithmetic result controls, so `sync` never reports saturation.
|
|
90
|
+
Unknown bits remain set in the numeric eight-bit mask even though they have no
|
|
91
|
+
entry in the recognized-name array. Reserved operand and opcode-control bits
|
|
92
|
+
are rejected rather than projected onto the canonical records.
|
|
93
|
+
|
|
94
|
+
## Shader Model 5.1 bindings
|
|
95
|
+
|
|
96
|
+
SM5.1 resource declarations may include `bindingRange`:
|
|
97
|
+
|
|
98
|
+
| Field | Meaning |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `rangeId` | Class-local binding-range identity. |
|
|
101
|
+
| `lowerBound` / `upperBound` | Declared register bounds. |
|
|
102
|
+
| `unbounded` | Whether the upper bound represents an unbounded range. |
|
|
103
|
+
| `registerCount` | Finite range size, otherwise `null`. |
|
|
104
|
+
| `registerSpace` | D3D register space. |
|
|
105
|
+
|
|
106
|
+
Executable resource, sampler, UAV, and constant-buffer operands may include a
|
|
107
|
+
`resourceReference` retaining the range identity, index records, and
|
|
108
|
+
non-uniform flag. Range identity remains separate from the actual register
|
|
109
|
+
index needed by an explicit-binding backend.
|
|
110
|
+
|
|
111
|
+
SM5.0 declarations keep their direct-register shape.
|
|
112
|
+
|
|
113
|
+
## JSON conversion
|
|
114
|
+
|
|
115
|
+
Typed arrays become number arrays, arrays are converted recursively, maps
|
|
116
|
+
become plain objects, sets become arrays, and objects with `toJSON` use that
|
|
117
|
+
projection.
|
|
118
|
+
|
|
119
|
+
## Related documentation
|
|
120
|
+
|
|
121
|
+
- [Public API reference](api.md)
|
|
122
|
+
- [Architecture and boundaries](../architecture.md)
|
package/docs/formats/gr2.md
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
# Granny GR2 and GSF
|
|
2
|
-
|
|
3
|
-
Status: Evolving
|
|
4
|
-
Scope: `@carbonenginejs/runtime-resource/formats/gr2`
|
|
5
|
-
Audience: Users and integrators
|
|
6
|
-
Summary: Defines the pure-JavaScript GR2/GSF reader, its output modes, conversion options, graph shape, and class-hydration boundary.
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
|
|
10
|
-
`CjsGr2Format` reads Granny 3D `.gr2` geometry, skeleton, animation, and
|
|
11
|
-
morph-target data, plus Granny State `.gsf` profiles. It runs in Node and the
|
|
12
|
-
browser without `granny2.dll`, native addons, a GPU, or private assets.
|
|
13
|
-
|
|
14
|
-
The reader owns Granny container parsing, reflected type-tree walking, section
|
|
15
|
-
decompression, JSON projection, optional curve and vertex-channel conversion,
|
|
16
|
-
GSF projection, and caller-class hydration. Resource caching and publication
|
|
17
|
-
remain with `CjsResMan`; GPU realization remains with engine packages.
|
|
18
|
-
|
|
19
|
-
Supported section compression is None, Oodle1, and the in-project clean-room
|
|
20
|
-
BitKnit2 decoder. Licensing and migration history are recorded in
|
|
21
|
-
[format provenance](provenance.md).
|
|
22
|
-
|
|
23
|
-
## Import and basic use
|
|
24
|
-
|
|
25
|
-
Import the runtime-resource wrapper from its explicit format subpath:
|
|
26
|
-
|
|
27
|
-
```js
|
|
28
|
-
import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
|
|
29
|
-
|
|
30
|
-
const graph = CjsGr2Format.read(bytes);
|
|
31
|
-
const summary = CjsGr2Format.inspect(bytes);
|
|
32
|
-
const asynchronousGraph = await CjsGr2Format.readAsync(bytes);
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
`CjsGr2Format` is the one public class: the reader engine plus the normal
|
|
36
|
-
runtime-resource format metadata and the `isSupported(bytes)` magic probe.
|
|
37
|
-
The barrel exports nothing else.
|
|
38
|
-
|
|
39
|
-
Register it with `CjsResMan` when GR2/GSF should participate in ordinary
|
|
40
|
-
resource loading:
|
|
41
|
-
|
|
42
|
-
```js
|
|
43
|
-
import { CjsResMan } from "@carbonenginejs/runtime-resource";
|
|
44
|
-
import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
|
|
45
|
-
|
|
46
|
-
const resMan = new CjsResMan().Register({
|
|
47
|
-
source,
|
|
48
|
-
formats: [ CjsGr2Format ]
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
const resource = resMan.GetResource("res:/model/ship.gr2");
|
|
52
|
-
const graph = await resource.Ready();
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Concrete formats are not imported or registered by the package root.
|
|
56
|
-
|
|
57
|
-
## Output modes
|
|
58
|
-
|
|
59
|
-
`emit` selects the representation:
|
|
60
|
-
|
|
61
|
-
| Value | Result |
|
|
62
|
-
|---|---|
|
|
63
|
-
| `"json"` | Default stable GR2 graph with plain objects |
|
|
64
|
-
| `"gr2Json"` | Explicit alias for the JSON graph |
|
|
65
|
-
| `"gr2"` | GR2 graph hydrated with caller-supplied classes |
|
|
66
|
-
| `"cmf"` | CMF-shaped graph hydrated with caller-supplied classes |
|
|
67
|
-
| `"raw"` | Low-level reflected `granny_file_info` result |
|
|
68
|
-
|
|
69
|
-
`"gr2"` and `"cmf"` require a non-empty `classes` map. Classes may also be
|
|
70
|
-
supplied with `"json"`/`"gr2Json"` to hydrate selected JSON nodes while
|
|
71
|
-
leaving omitted nodes as plain objects.
|
|
72
|
-
|
|
73
|
-
## Conversion options
|
|
74
|
-
|
|
75
|
-
| Option | Default | Effect |
|
|
76
|
-
|---|---:|---|
|
|
77
|
-
| `decompressCurves` | `false` | Adds decoded `knots`, `controls`, and `dimension` to supported compressed animation curves while retaining the raw curve fields |
|
|
78
|
-
| `unpackTangents` | `false` | Converts packed CCP tangent frames into separate normal, tangent, and binormal channels |
|
|
79
|
-
| `rebuildMissingNormals` | `false` | Generates absent normals from positions and triangle indices |
|
|
80
|
-
| `rebuildMissingTangents` | `false` | Generates absent tangents from positions, normals, UVs, and triangle indices |
|
|
81
|
-
| `rebuildMissingBiNormals` | `false` | Generates absent binormals from normals and tangents |
|
|
82
|
-
| `classes` | `{}` | Maps supported graph node keys to constructors |
|
|
83
|
-
|
|
84
|
-
Tangent unpacking and missing-channel rebuild options may be functions when a
|
|
85
|
-
caller needs per-mesh policy. Rebuild options fill absent data; they do not
|
|
86
|
-
repair authored channels that are present but incorrect.
|
|
87
|
-
|
|
88
|
-
A reusable reader profile can hold these defaults:
|
|
89
|
-
|
|
90
|
-
```js
|
|
91
|
-
const reader = new CjsGr2Format({
|
|
92
|
-
decompressCurves: true,
|
|
93
|
-
unpackTangents: true
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
const first = reader.Read(firstBytes);
|
|
97
|
-
const second = reader.Read(secondBytes);
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## JSON graph and hydration
|
|
101
|
-
|
|
102
|
-
The default graph has this general shape:
|
|
103
|
-
|
|
104
|
-
```text
|
|
105
|
-
Root
|
|
106
|
-
|-- grannyFileFormatRevision, grannyFileSource
|
|
107
|
-
|-- meshes
|
|
108
|
-
| |-- boneBindings, morphTargets
|
|
109
|
-
| |-- vertex: flat numeric channels
|
|
110
|
-
| `-- indices: triangle index groups
|
|
111
|
-
|-- models
|
|
112
|
-
| `-- skeleton -> bones
|
|
113
|
-
`-- animations
|
|
114
|
-
`-- trackGroups -> transformTracks -> curves
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Vertex channels include positions, normals, tangents, binormals, UVs, blend
|
|
118
|
-
indices, and blend weights when available. `IndexGroup.faces` is a flat array
|
|
119
|
-
of triangle indices. Sparse morph targets carry `vertexIndices`; native and
|
|
120
|
-
annotation-set morph targets share the same projected shape.
|
|
121
|
-
|
|
122
|
-
For each registered class key, hydration constructs the class without
|
|
123
|
-
arguments and calls:
|
|
124
|
-
|
|
125
|
-
```js
|
|
126
|
-
new Class().SetValues(nodeFields);
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Constructors must therefore support zero-argument construction and
|
|
130
|
-
`SetValues(values)`. Supported GR2 and CMF keys are exposed through
|
|
131
|
-
`CjsGr2Format.CLASS_KEYS`; use `SetClass`, `SetClasses`, `GetClass`, and
|
|
132
|
-
`HasClass` on reusable reader instances.
|
|
133
|
-
|
|
134
|
-
`ToJSON(value)` and static `toJSON(value)` convert hydrated output into a
|
|
135
|
-
JSON-compatible value. They do not write a binary `.gr2` file or return JSON
|
|
136
|
-
text.
|
|
137
|
-
|
|
138
|
-
## Granny State
|
|
139
|
-
|
|
140
|
-
GSF uses the ordinary Granny container with a GState root schema. The reader
|
|
141
|
-
provides dedicated classification, projection, and inspection:
|
|
142
|
-
|
|
143
|
-
```js
|
|
144
|
-
if (CjsGr2Format.isGsf(bytes)) {
|
|
145
|
-
const state = CjsGr2Format.readGsf(bytes);
|
|
146
|
-
const dependencies = CjsGr2Format.inspectGsf(bytes);
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
The stable GSF projection contains container revision data, model and
|
|
151
|
-
retarget hints, the state machine, animation slots and sets, referenced
|
|
152
|
-
relative `.gr2` files, token count, editor data, and extended data.
|
|
153
|
-
`readGsfAsync` provides the equivalent promise-facing entry point.
|
|
154
|
-
|
|
155
|
-
## Related documentation
|
|
156
|
-
|
|
157
|
-
- [Format subpaths](README.md)
|
|
158
|
-
- [Architecture and boundaries](../architecture.md)
|
|
159
|
-
- [Resource lifecycle](../concepts/resource-lifecycle.md)
|
|
160
|
-
- [Format ownership and provenance](provenance.md)
|
|
1
|
+
# Granny GR2 and GSF
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats/gr2`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Defines the pure-JavaScript GR2/GSF reader, its output modes, conversion options, graph shape, and class-hydration boundary.
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
`CjsGr2Format` reads Granny 3D `.gr2` geometry, skeleton, animation, and
|
|
11
|
+
morph-target data, plus Granny State `.gsf` profiles. It runs in Node and the
|
|
12
|
+
browser without `granny2.dll`, native addons, a GPU, or private assets.
|
|
13
|
+
|
|
14
|
+
The reader owns Granny container parsing, reflected type-tree walking, section
|
|
15
|
+
decompression, JSON projection, optional curve and vertex-channel conversion,
|
|
16
|
+
GSF projection, and caller-class hydration. Resource caching and publication
|
|
17
|
+
remain with `CjsResMan`; GPU realization remains with engine packages.
|
|
18
|
+
|
|
19
|
+
Supported section compression is None, Oodle1, and the in-project clean-room
|
|
20
|
+
BitKnit2 decoder. Licensing and migration history are recorded in
|
|
21
|
+
[format provenance](provenance.md).
|
|
22
|
+
|
|
23
|
+
## Import and basic use
|
|
24
|
+
|
|
25
|
+
Import the runtime-resource wrapper from its explicit format subpath:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
|
|
29
|
+
|
|
30
|
+
const graph = CjsGr2Format.read(bytes);
|
|
31
|
+
const summary = CjsGr2Format.inspect(bytes);
|
|
32
|
+
const asynchronousGraph = await CjsGr2Format.readAsync(bytes);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`CjsGr2Format` is the one public class: the reader engine plus the normal
|
|
36
|
+
runtime-resource format metadata and the `isSupported(bytes)` magic probe.
|
|
37
|
+
The barrel exports nothing else.
|
|
38
|
+
|
|
39
|
+
Register it with `CjsResMan` when GR2/GSF should participate in ordinary
|
|
40
|
+
resource loading:
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
import { CjsResMan } from "@carbonenginejs/runtime-resource";
|
|
44
|
+
import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
|
|
45
|
+
|
|
46
|
+
const resMan = new CjsResMan().Register({
|
|
47
|
+
source,
|
|
48
|
+
formats: [ CjsGr2Format ]
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const resource = resMan.GetResource("res:/model/ship.gr2");
|
|
52
|
+
const graph = await resource.Ready();
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Concrete formats are not imported or registered by the package root.
|
|
56
|
+
|
|
57
|
+
## Output modes
|
|
58
|
+
|
|
59
|
+
`emit` selects the representation:
|
|
60
|
+
|
|
61
|
+
| Value | Result |
|
|
62
|
+
|---|---|
|
|
63
|
+
| `"json"` | Default stable GR2 graph with plain objects |
|
|
64
|
+
| `"gr2Json"` | Explicit alias for the JSON graph |
|
|
65
|
+
| `"gr2"` | GR2 graph hydrated with caller-supplied classes |
|
|
66
|
+
| `"cmf"` | CMF-shaped graph hydrated with caller-supplied classes |
|
|
67
|
+
| `"raw"` | Low-level reflected `granny_file_info` result |
|
|
68
|
+
|
|
69
|
+
`"gr2"` and `"cmf"` require a non-empty `classes` map. Classes may also be
|
|
70
|
+
supplied with `"json"`/`"gr2Json"` to hydrate selected JSON nodes while
|
|
71
|
+
leaving omitted nodes as plain objects.
|
|
72
|
+
|
|
73
|
+
## Conversion options
|
|
74
|
+
|
|
75
|
+
| Option | Default | Effect |
|
|
76
|
+
|---|---:|---|
|
|
77
|
+
| `decompressCurves` | `false` | Adds decoded `knots`, `controls`, and `dimension` to supported compressed animation curves while retaining the raw curve fields |
|
|
78
|
+
| `unpackTangents` | `false` | Converts packed CCP tangent frames into separate normal, tangent, and binormal channels |
|
|
79
|
+
| `rebuildMissingNormals` | `false` | Generates absent normals from positions and triangle indices |
|
|
80
|
+
| `rebuildMissingTangents` | `false` | Generates absent tangents from positions, normals, UVs, and triangle indices |
|
|
81
|
+
| `rebuildMissingBiNormals` | `false` | Generates absent binormals from normals and tangents |
|
|
82
|
+
| `classes` | `{}` | Maps supported graph node keys to constructors |
|
|
83
|
+
|
|
84
|
+
Tangent unpacking and missing-channel rebuild options may be functions when a
|
|
85
|
+
caller needs per-mesh policy. Rebuild options fill absent data; they do not
|
|
86
|
+
repair authored channels that are present but incorrect.
|
|
87
|
+
|
|
88
|
+
A reusable reader profile can hold these defaults:
|
|
89
|
+
|
|
90
|
+
```js
|
|
91
|
+
const reader = new CjsGr2Format({
|
|
92
|
+
decompressCurves: true,
|
|
93
|
+
unpackTangents: true
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const first = reader.Read(firstBytes);
|
|
97
|
+
const second = reader.Read(secondBytes);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## JSON graph and hydration
|
|
101
|
+
|
|
102
|
+
The default graph has this general shape:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
Root
|
|
106
|
+
|-- grannyFileFormatRevision, grannyFileSource
|
|
107
|
+
|-- meshes
|
|
108
|
+
| |-- boneBindings, morphTargets
|
|
109
|
+
| |-- vertex: flat numeric channels
|
|
110
|
+
| `-- indices: triangle index groups
|
|
111
|
+
|-- models
|
|
112
|
+
| `-- skeleton -> bones
|
|
113
|
+
`-- animations
|
|
114
|
+
`-- trackGroups -> transformTracks -> curves
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Vertex channels include positions, normals, tangents, binormals, UVs, blend
|
|
118
|
+
indices, and blend weights when available. `IndexGroup.faces` is a flat array
|
|
119
|
+
of triangle indices. Sparse morph targets carry `vertexIndices`; native and
|
|
120
|
+
annotation-set morph targets share the same projected shape.
|
|
121
|
+
|
|
122
|
+
For each registered class key, hydration constructs the class without
|
|
123
|
+
arguments and calls:
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
new Class().SetValues(nodeFields);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Constructors must therefore support zero-argument construction and
|
|
130
|
+
`SetValues(values)`. Supported GR2 and CMF keys are exposed through
|
|
131
|
+
`CjsGr2Format.CLASS_KEYS`; use `SetClass`, `SetClasses`, `GetClass`, and
|
|
132
|
+
`HasClass` on reusable reader instances.
|
|
133
|
+
|
|
134
|
+
`ToJSON(value)` and static `toJSON(value)` convert hydrated output into a
|
|
135
|
+
JSON-compatible value. They do not write a binary `.gr2` file or return JSON
|
|
136
|
+
text.
|
|
137
|
+
|
|
138
|
+
## Granny State
|
|
139
|
+
|
|
140
|
+
GSF uses the ordinary Granny container with a GState root schema. The reader
|
|
141
|
+
provides dedicated classification, projection, and inspection:
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
if (CjsGr2Format.isGsf(bytes)) {
|
|
145
|
+
const state = CjsGr2Format.readGsf(bytes);
|
|
146
|
+
const dependencies = CjsGr2Format.inspectGsf(bytes);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The stable GSF projection contains container revision data, model and
|
|
151
|
+
retarget hints, the state machine, animation slots and sets, referenced
|
|
152
|
+
relative `.gr2` files, token count, editor data, and extended data.
|
|
153
|
+
`readGsfAsync` provides the equivalent promise-facing entry point.
|
|
154
|
+
|
|
155
|
+
## Related documentation
|
|
156
|
+
|
|
157
|
+
- [Format subpaths](README.md)
|
|
158
|
+
- [Architecture and boundaries](../architecture.md)
|
|
159
|
+
- [Resource lifecycle](../concepts/resource-lifecycle.md)
|
|
160
|
+
- [Format ownership and provenance](provenance.md)
|