@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,352 +1,352 @@
|
|
|
1
|
-
import { readGr2Raw } from './reader.js';
|
|
2
|
-
import { CLASS_KEYS as CLASS_KEYS$1, emitJson } from './json.js';
|
|
3
|
-
import { tangents } from './tangents.js';
|
|
4
|
-
import { decompressAnimationCurves } from './curves.js';
|
|
5
|
-
import { CMF_CLASS_KEYS, hydrateCmf, buildCmfFromShared } from './targets.js';
|
|
6
|
-
|
|
7
|
-
const CLASS_KEYS = Object.freeze(Array.from(new Set([...CLASS_KEYS$1, ...CMF_CLASS_KEYS])));
|
|
8
|
-
const OUTPUT_JSON = "json";
|
|
9
|
-
const OUTPUT_GR2 = "gr2";
|
|
10
|
-
const OUTPUT_GR2_JSON = "gr2Json";
|
|
11
|
-
const OUTPUT_CMF = "cmf";
|
|
12
|
-
const OUTPUT_RAW = "raw";
|
|
13
|
-
const DEFAULT_VALUES = Object.freeze({
|
|
14
|
-
emit: OUTPUT_JSON,
|
|
15
|
-
decompressCurves: false,
|
|
16
|
-
unpackTangents: false,
|
|
17
|
-
rebuildMissingNormals: false,
|
|
18
|
-
rebuildMissingTangents: false,
|
|
19
|
-
rebuildMissingBiNormals: false,
|
|
20
|
-
classes: Object.freeze({})
|
|
21
|
-
});
|
|
22
|
-
const OPTION_KEYS = new Set(["emit", "decompressCurves", "unpackTangents", "rebuildMissingNormals", "rebuildMissingTangents", "rebuildMissingBiNormals", "classes"]);
|
|
23
|
-
function normalizeEmit(emit) {
|
|
24
|
-
if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;
|
|
25
|
-
if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;
|
|
26
|
-
if (emit === OUTPUT_GR2) return OUTPUT_GR2;
|
|
27
|
-
if (emit === OUTPUT_CMF) return OUTPUT_CMF;
|
|
28
|
-
if (emit === OUTPUT_RAW) return OUTPUT_RAW;
|
|
29
|
-
throw new Error(`CjsGr2Format unknown emit value "${emit}"`);
|
|
30
|
-
}
|
|
31
|
-
function hasOwn(value, key) {
|
|
32
|
-
return Object.prototype.hasOwnProperty.call(value, key);
|
|
33
|
-
}
|
|
34
|
-
function classMap(values) {
|
|
35
|
-
return values && values.classes ? values.classes : {};
|
|
36
|
-
}
|
|
37
|
-
function cloneValues(values) {
|
|
38
|
-
return {
|
|
39
|
-
emit: values.emit,
|
|
40
|
-
decompressCurves: values.decompressCurves,
|
|
41
|
-
unpackTangents: values.unpackTangents,
|
|
42
|
-
rebuildMissingNormals: values.rebuildMissingNormals,
|
|
43
|
-
rebuildMissingTangents: values.rebuildMissingTangents,
|
|
44
|
-
rebuildMissingBiNormals: values.rebuildMissingBiNormals,
|
|
45
|
-
classes: {
|
|
46
|
-
...classMap(values)
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function assertKnownOptions(options) {
|
|
51
|
-
for (const key of Object.keys(options)) {
|
|
52
|
-
if (!OPTION_KEYS.has(key)) {
|
|
53
|
-
throw new TypeError(`CjsGr2Format unknown option "${key}"`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function validateBoolean(name, value) {
|
|
58
|
-
if (typeof value !== "boolean") {
|
|
59
|
-
throw new TypeError(`CjsGr2Format ${name} option must be true or false`);
|
|
60
|
-
}
|
|
61
|
-
return value;
|
|
62
|
-
}
|
|
63
|
-
function validateRule(name, value) {
|
|
64
|
-
if (typeof value === "boolean" || typeof value === "function") return value;
|
|
65
|
-
throw new TypeError(`CjsGr2Format ${name} option must be true, false, or a function`);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Validates a requested runtime class key for the GR2 format reader. */
|
|
69
|
-
function validateClassKey(key) {
|
|
70
|
-
if (!CLASS_KEYS.includes(key)) {
|
|
71
|
-
throw new Error(`CjsGr2Format unknown class type "${key}"`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/** Validates a resolved runtime class constructor for the GR2 format reader. */
|
|
76
|
-
function validateClass(type, Class) {
|
|
77
|
-
validateClassKey(type);
|
|
78
|
-
if (typeof Class !== "function") {
|
|
79
|
-
throw new TypeError(`CjsGr2Format class "${type}" must be a constructor`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function mergeClasses(values, classes) {
|
|
83
|
-
if (!classes || typeof classes !== "object") {
|
|
84
|
-
throw new TypeError("CjsGr2Format classes option must be an object");
|
|
85
|
-
}
|
|
86
|
-
const next = {
|
|
87
|
-
...values.classes
|
|
88
|
-
};
|
|
89
|
-
for (const [type, Class] of Object.entries(classes)) {
|
|
90
|
-
validateClass(type, Class);
|
|
91
|
-
next[type] = Class;
|
|
92
|
-
}
|
|
93
|
-
values.classes = next;
|
|
94
|
-
}
|
|
95
|
-
function optionValue(options, keys) {
|
|
96
|
-
for (const key of keys) {
|
|
97
|
-
if (hasOwn(options, key)) return options[key];
|
|
98
|
-
}
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Normalizes reader options against their supported defaults for the GR2 format
|
|
104
|
-
* reader.
|
|
105
|
-
*/
|
|
106
|
-
function normalizeValues(base = DEFAULT_VALUES, options = {}) {
|
|
107
|
-
if (!options || typeof options !== "object") {
|
|
108
|
-
throw new TypeError("CjsGr2Format options must be an object");
|
|
109
|
-
}
|
|
110
|
-
assertKnownOptions(options);
|
|
111
|
-
const values = cloneValues(base);
|
|
112
|
-
if (hasOwn(options, "emit")) values.emit = normalizeEmit(options.emit);
|
|
113
|
-
if (hasOwn(options, "decompressCurves")) {
|
|
114
|
-
values.decompressCurves = validateBoolean("decompressCurves", options.decompressCurves);
|
|
115
|
-
}
|
|
116
|
-
const unpackTangents = optionValue(options, ["unpackTangents"]);
|
|
117
|
-
if (unpackTangents !== undefined) {
|
|
118
|
-
values.unpackTangents = validateRule("unpackTangents", unpackTangents);
|
|
119
|
-
}
|
|
120
|
-
const rebuildMissingNormals = optionValue(options, ["rebuildMissingNormals"]);
|
|
121
|
-
if (rebuildMissingNormals !== undefined) {
|
|
122
|
-
values.rebuildMissingNormals = validateRule("rebuildMissingNormals", rebuildMissingNormals);
|
|
123
|
-
}
|
|
124
|
-
const rebuildMissingTangents = optionValue(options, ["rebuildMissingTangents"]);
|
|
125
|
-
if (rebuildMissingTangents !== undefined) {
|
|
126
|
-
values.rebuildMissingTangents = validateRule("rebuildMissingTangents", rebuildMissingTangents);
|
|
127
|
-
}
|
|
128
|
-
const rebuildMissingBiNormals = optionValue(options, ["rebuildMissingBiNormals"]);
|
|
129
|
-
if (rebuildMissingBiNormals !== undefined) {
|
|
130
|
-
values.rebuildMissingBiNormals = validateRule("rebuildMissingBiNormals", rebuildMissingBiNormals);
|
|
131
|
-
}
|
|
132
|
-
if (hasOwn(options, "classes")) {
|
|
133
|
-
mergeClasses(values, options.classes);
|
|
134
|
-
}
|
|
135
|
-
if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes)) {
|
|
136
|
-
throw new TypeError(`CjsGr2Format emit "${values.emit}" requires explicit classes`);
|
|
137
|
-
}
|
|
138
|
-
return values;
|
|
139
|
-
}
|
|
140
|
-
function hasClasses(classes) {
|
|
141
|
-
return !!classes && Object.values(classes).some(Class => typeof Class === "function");
|
|
142
|
-
}
|
|
143
|
-
function isRawGr2Result(value) {
|
|
144
|
-
return !!value && typeof value === "object" && "fileInfo" in value && typeof value.version === "number";
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,
|
|
149
|
-
* `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw
|
|
150
|
-
* ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which
|
|
151
|
-
* is how ccpwgl's resource loader supplies bytes) must be wrapped in a
|
|
152
|
-
* view before it reaches readGr2Raw, not passed straight through.
|
|
153
|
-
*
|
|
154
|
-
* @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.
|
|
155
|
-
* @returns {Uint8Array} A Uint8Array view over the same bytes.
|
|
156
|
-
*/
|
|
157
|
-
function toBytes(input) {
|
|
158
|
-
if (input instanceof Uint8Array) return input;
|
|
159
|
-
if (typeof ArrayBuffer !== "undefined" && input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
160
|
-
if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
161
|
-
throw new TypeError("CjsGr2Format: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/** Reads and validates raw input bytes for the GR2 format reader. */
|
|
165
|
-
function readRawInput(input) {
|
|
166
|
-
return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));
|
|
167
|
-
}
|
|
168
|
-
function meshName(mesh, meshIndex) {
|
|
169
|
-
return mesh && mesh.name ? `"${mesh.name}"` : `#${meshIndex}`;
|
|
170
|
-
}
|
|
171
|
-
function vertexChannel(mesh, channel) {
|
|
172
|
-
return mesh && mesh.vertex && mesh.vertex[channel];
|
|
173
|
-
}
|
|
174
|
-
function hasVertexChannel(mesh, channel) {
|
|
175
|
-
const value = vertexChannel(mesh, channel);
|
|
176
|
-
return !!value && value.length > 0;
|
|
177
|
-
}
|
|
178
|
-
function requireVertexChannel(mesh, meshIndex, channel, feature) {
|
|
179
|
-
const value = vertexChannel(mesh, channel);
|
|
180
|
-
if (!value || value.length === 0) {
|
|
181
|
-
throw new Error(`CjsGr2Format ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);
|
|
182
|
-
}
|
|
183
|
-
return value;
|
|
184
|
-
}
|
|
185
|
-
function triangleFaces(mesh, meshIndex, feature) {
|
|
186
|
-
const faces = [];
|
|
187
|
-
for (const group of mesh.indices || []) {
|
|
188
|
-
if (group && group.faces) faces.push(...group.faces);
|
|
189
|
-
}
|
|
190
|
-
if (faces.length === 0) {
|
|
191
|
-
throw new Error(`CjsGr2Format ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);
|
|
192
|
-
}
|
|
193
|
-
return faces;
|
|
194
|
-
}
|
|
195
|
-
function shouldApplyMeshRule(reader, rule, context) {
|
|
196
|
-
const fullContext = {
|
|
197
|
-
reader,
|
|
198
|
-
...context
|
|
199
|
-
};
|
|
200
|
-
if (typeof rule === "function") {
|
|
201
|
-
const result = rule(fullContext);
|
|
202
|
-
if (typeof result !== "boolean") {
|
|
203
|
-
throw new TypeError(`CjsGr2Format ${context.feature} rule must return true or false`);
|
|
204
|
-
}
|
|
205
|
-
return result;
|
|
206
|
-
}
|
|
207
|
-
return rule;
|
|
208
|
-
}
|
|
209
|
-
function unpackMeshTangents(reader, json, raw, values) {
|
|
210
|
-
for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++) {
|
|
211
|
-
const mesh = json.meshes[meshIndex];
|
|
212
|
-
if (shouldApplyMeshRule(reader, values.unpackTangents, {
|
|
213
|
-
options: values,
|
|
214
|
-
raw,
|
|
215
|
-
json,
|
|
216
|
-
mesh,
|
|
217
|
-
meshIndex,
|
|
218
|
-
feature: "unpackTangents",
|
|
219
|
-
channel: "tangent"
|
|
220
|
-
})) {
|
|
221
|
-
tangents.unpack(mesh);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
function rebuildMeshNormals(mesh, meshIndex) {
|
|
226
|
-
const positions = requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingNormals"),
|
|
227
|
-
faces = triangleFaces(mesh, meshIndex, "rebuildMissingNormals");
|
|
228
|
-
mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));
|
|
229
|
-
}
|
|
230
|
-
function rebuildMeshTangents(mesh, meshIndex) {
|
|
231
|
-
const positions = requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingTangents"),
|
|
232
|
-
normals = requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingTangents"),
|
|
233
|
-
uvs = requireVertexChannel(mesh, meshIndex, "texcoord0", "rebuildMissingTangents"),
|
|
234
|
-
faces = triangleFaces(mesh, meshIndex, "rebuildMissingTangents");
|
|
235
|
-
mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));
|
|
236
|
-
}
|
|
237
|
-
function rebuildMeshBiNormals(mesh, meshIndex) {
|
|
238
|
-
const normals = requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingBiNormals"),
|
|
239
|
-
tangentValues = requireVertexChannel(mesh, meshIndex, "tangent", "rebuildMissingBiNormals");
|
|
240
|
-
mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);
|
|
241
|
-
}
|
|
242
|
-
function rebuildMissingMeshData(reader, json, raw, values) {
|
|
243
|
-
for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++) {
|
|
244
|
-
const mesh = json.meshes[meshIndex];
|
|
245
|
-
if (!hasVertexChannel(mesh, "normal") && shouldApplyMeshRule(reader, values.rebuildMissingNormals, {
|
|
246
|
-
options: values,
|
|
247
|
-
raw,
|
|
248
|
-
json,
|
|
249
|
-
mesh,
|
|
250
|
-
meshIndex,
|
|
251
|
-
feature: "rebuildMissingNormals",
|
|
252
|
-
channel: "normal"
|
|
253
|
-
})) {
|
|
254
|
-
rebuildMeshNormals(mesh, meshIndex);
|
|
255
|
-
}
|
|
256
|
-
if (!hasVertexChannel(mesh, "tangent") && shouldApplyMeshRule(reader, values.rebuildMissingTangents, {
|
|
257
|
-
options: values,
|
|
258
|
-
raw,
|
|
259
|
-
json,
|
|
260
|
-
mesh,
|
|
261
|
-
meshIndex,
|
|
262
|
-
feature: "rebuildMissingTangents",
|
|
263
|
-
channel: "tangent"
|
|
264
|
-
})) {
|
|
265
|
-
rebuildMeshTangents(mesh, meshIndex);
|
|
266
|
-
}
|
|
267
|
-
if (!hasVertexChannel(mesh, "binormal") && shouldApplyMeshRule(reader, values.rebuildMissingBiNormals, {
|
|
268
|
-
options: values,
|
|
269
|
-
raw,
|
|
270
|
-
json,
|
|
271
|
-
mesh,
|
|
272
|
-
meshIndex,
|
|
273
|
-
feature: "rebuildMissingBiNormals",
|
|
274
|
-
channel: "binormal"
|
|
275
|
-
})) {
|
|
276
|
-
rebuildMeshBiNormals(mesh, meshIndex);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
function processMeshData(reader, json, raw, values) {
|
|
281
|
-
unpackMeshTangents(reader, json, raw, values);
|
|
282
|
-
rebuildMissingMeshData(reader, json, raw, values);
|
|
283
|
-
}
|
|
284
|
-
function buildJson(reader, raw, values) {
|
|
285
|
-
const json = emitJson(raw.fileInfo, raw.version, {
|
|
286
|
-
classes: values.emit === OUTPUT_GR2 || (values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes) ? values.classes : {}
|
|
287
|
-
});
|
|
288
|
-
if (values.decompressCurves) {
|
|
289
|
-
decompressAnimationCurves(json);
|
|
290
|
-
}
|
|
291
|
-
processMeshData(reader, json, raw, values);
|
|
292
|
-
return json;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/** Reads input using normalized format options for the GR2 format reader. */
|
|
296
|
-
function readWithValues(reader, input, values) {
|
|
297
|
-
const parsed = readRawInput(input);
|
|
298
|
-
if (values.emit === OUTPUT_RAW) return parsed;
|
|
299
|
-
const json = buildJson(reader, parsed, values);
|
|
300
|
-
return values.emit === OUTPUT_CMF ? hydrateCmf(buildCmfFromShared(json), values.classes, {
|
|
301
|
-
source: values.source
|
|
302
|
-
}) : json;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/** Converts a parsed payload into a JSON-safe value for the GR2 format reader. */
|
|
306
|
-
function toJsonValue(value, seen = new WeakSet()) {
|
|
307
|
-
if (value === null || typeof value !== "object") return value;
|
|
308
|
-
if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));
|
|
309
|
-
if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));
|
|
310
|
-
if (seen.has(value)) {
|
|
311
|
-
throw new TypeError("CjsGr2Format.toJSON cannot convert circular data");
|
|
312
|
-
}
|
|
313
|
-
if (typeof value.toJSON === "function") {
|
|
314
|
-
seen.add(value);
|
|
315
|
-
const json = toJsonValue(value.toJSON(), seen);
|
|
316
|
-
seen.delete(value);
|
|
317
|
-
return json;
|
|
318
|
-
}
|
|
319
|
-
seen.add(value);
|
|
320
|
-
const out = {};
|
|
321
|
-
for (const key of Object.keys(value)) {
|
|
322
|
-
out[key] = toJsonValue(value[key], seen);
|
|
323
|
-
}
|
|
324
|
-
seen.delete(value);
|
|
325
|
-
return out;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Inspects raw GR2 result without materializing the full GR2 format reader
|
|
330
|
-
* payload.
|
|
331
|
-
*/
|
|
332
|
-
function inspectRawGr2Result(parsed) {
|
|
333
|
-
const fileInfo = parsed.fileInfo || {},
|
|
334
|
-
count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;
|
|
335
|
-
return {
|
|
336
|
-
reader: "CjsGr2Format",
|
|
337
|
-
format: "gr2",
|
|
338
|
-
version: parsed.version | 0,
|
|
339
|
-
sectionCount: parsed.secCount | 0,
|
|
340
|
-
source: fileInfo.FromFileName ?? "",
|
|
341
|
-
counts: {
|
|
342
|
-
meshes: count(fileInfo.Meshes),
|
|
343
|
-
models: count(fileInfo.Models),
|
|
344
|
-
animations: count(fileInfo.Animations),
|
|
345
|
-
materials: count(fileInfo.Materials),
|
|
346
|
-
textures: count(fileInfo.Textures)
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
export { CLASS_KEYS, DEFAULT_VALUES, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_GR2_JSON, OUTPUT_JSON, OUTPUT_RAW, inspectRawGr2Result, normalizeValues, readRawInput, readWithValues, toJsonValue, validateClass, validateClassKey };
|
|
352
|
-
//# sourceMappingURL=helpers.js.map
|
|
1
|
+
import { readGr2Raw } from './reader.js';
|
|
2
|
+
import { CLASS_KEYS as CLASS_KEYS$1, emitJson } from './json.js';
|
|
3
|
+
import { tangents } from './tangents.js';
|
|
4
|
+
import { decompressAnimationCurves } from './curves.js';
|
|
5
|
+
import { CMF_CLASS_KEYS, hydrateCmf, buildCmfFromShared } from './targets.js';
|
|
6
|
+
|
|
7
|
+
const CLASS_KEYS = Object.freeze(Array.from(new Set([...CLASS_KEYS$1, ...CMF_CLASS_KEYS])));
|
|
8
|
+
const OUTPUT_JSON = "json";
|
|
9
|
+
const OUTPUT_GR2 = "gr2";
|
|
10
|
+
const OUTPUT_GR2_JSON = "gr2Json";
|
|
11
|
+
const OUTPUT_CMF = "cmf";
|
|
12
|
+
const OUTPUT_RAW = "raw";
|
|
13
|
+
const DEFAULT_VALUES = Object.freeze({
|
|
14
|
+
emit: OUTPUT_JSON,
|
|
15
|
+
decompressCurves: false,
|
|
16
|
+
unpackTangents: false,
|
|
17
|
+
rebuildMissingNormals: false,
|
|
18
|
+
rebuildMissingTangents: false,
|
|
19
|
+
rebuildMissingBiNormals: false,
|
|
20
|
+
classes: Object.freeze({})
|
|
21
|
+
});
|
|
22
|
+
const OPTION_KEYS = new Set(["emit", "decompressCurves", "unpackTangents", "rebuildMissingNormals", "rebuildMissingTangents", "rebuildMissingBiNormals", "classes"]);
|
|
23
|
+
function normalizeEmit(emit) {
|
|
24
|
+
if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;
|
|
25
|
+
if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;
|
|
26
|
+
if (emit === OUTPUT_GR2) return OUTPUT_GR2;
|
|
27
|
+
if (emit === OUTPUT_CMF) return OUTPUT_CMF;
|
|
28
|
+
if (emit === OUTPUT_RAW) return OUTPUT_RAW;
|
|
29
|
+
throw new Error(`CjsGr2Format unknown emit value "${emit}"`);
|
|
30
|
+
}
|
|
31
|
+
function hasOwn(value, key) {
|
|
32
|
+
return Object.prototype.hasOwnProperty.call(value, key);
|
|
33
|
+
}
|
|
34
|
+
function classMap(values) {
|
|
35
|
+
return values && values.classes ? values.classes : {};
|
|
36
|
+
}
|
|
37
|
+
function cloneValues(values) {
|
|
38
|
+
return {
|
|
39
|
+
emit: values.emit,
|
|
40
|
+
decompressCurves: values.decompressCurves,
|
|
41
|
+
unpackTangents: values.unpackTangents,
|
|
42
|
+
rebuildMissingNormals: values.rebuildMissingNormals,
|
|
43
|
+
rebuildMissingTangents: values.rebuildMissingTangents,
|
|
44
|
+
rebuildMissingBiNormals: values.rebuildMissingBiNormals,
|
|
45
|
+
classes: {
|
|
46
|
+
...classMap(values)
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function assertKnownOptions(options) {
|
|
51
|
+
for (const key of Object.keys(options)) {
|
|
52
|
+
if (!OPTION_KEYS.has(key)) {
|
|
53
|
+
throw new TypeError(`CjsGr2Format unknown option "${key}"`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function validateBoolean(name, value) {
|
|
58
|
+
if (typeof value !== "boolean") {
|
|
59
|
+
throw new TypeError(`CjsGr2Format ${name} option must be true or false`);
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
function validateRule(name, value) {
|
|
64
|
+
if (typeof value === "boolean" || typeof value === "function") return value;
|
|
65
|
+
throw new TypeError(`CjsGr2Format ${name} option must be true, false, or a function`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Validates a requested runtime class key for the GR2 format reader. */
|
|
69
|
+
function validateClassKey(key) {
|
|
70
|
+
if (!CLASS_KEYS.includes(key)) {
|
|
71
|
+
throw new Error(`CjsGr2Format unknown class type "${key}"`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Validates a resolved runtime class constructor for the GR2 format reader. */
|
|
76
|
+
function validateClass(type, Class) {
|
|
77
|
+
validateClassKey(type);
|
|
78
|
+
if (typeof Class !== "function") {
|
|
79
|
+
throw new TypeError(`CjsGr2Format class "${type}" must be a constructor`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function mergeClasses(values, classes) {
|
|
83
|
+
if (!classes || typeof classes !== "object") {
|
|
84
|
+
throw new TypeError("CjsGr2Format classes option must be an object");
|
|
85
|
+
}
|
|
86
|
+
const next = {
|
|
87
|
+
...values.classes
|
|
88
|
+
};
|
|
89
|
+
for (const [type, Class] of Object.entries(classes)) {
|
|
90
|
+
validateClass(type, Class);
|
|
91
|
+
next[type] = Class;
|
|
92
|
+
}
|
|
93
|
+
values.classes = next;
|
|
94
|
+
}
|
|
95
|
+
function optionValue(options, keys) {
|
|
96
|
+
for (const key of keys) {
|
|
97
|
+
if (hasOwn(options, key)) return options[key];
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Normalizes reader options against their supported defaults for the GR2 format
|
|
104
|
+
* reader.
|
|
105
|
+
*/
|
|
106
|
+
function normalizeValues(base = DEFAULT_VALUES, options = {}) {
|
|
107
|
+
if (!options || typeof options !== "object") {
|
|
108
|
+
throw new TypeError("CjsGr2Format options must be an object");
|
|
109
|
+
}
|
|
110
|
+
assertKnownOptions(options);
|
|
111
|
+
const values = cloneValues(base);
|
|
112
|
+
if (hasOwn(options, "emit")) values.emit = normalizeEmit(options.emit);
|
|
113
|
+
if (hasOwn(options, "decompressCurves")) {
|
|
114
|
+
values.decompressCurves = validateBoolean("decompressCurves", options.decompressCurves);
|
|
115
|
+
}
|
|
116
|
+
const unpackTangents = optionValue(options, ["unpackTangents"]);
|
|
117
|
+
if (unpackTangents !== undefined) {
|
|
118
|
+
values.unpackTangents = validateRule("unpackTangents", unpackTangents);
|
|
119
|
+
}
|
|
120
|
+
const rebuildMissingNormals = optionValue(options, ["rebuildMissingNormals"]);
|
|
121
|
+
if (rebuildMissingNormals !== undefined) {
|
|
122
|
+
values.rebuildMissingNormals = validateRule("rebuildMissingNormals", rebuildMissingNormals);
|
|
123
|
+
}
|
|
124
|
+
const rebuildMissingTangents = optionValue(options, ["rebuildMissingTangents"]);
|
|
125
|
+
if (rebuildMissingTangents !== undefined) {
|
|
126
|
+
values.rebuildMissingTangents = validateRule("rebuildMissingTangents", rebuildMissingTangents);
|
|
127
|
+
}
|
|
128
|
+
const rebuildMissingBiNormals = optionValue(options, ["rebuildMissingBiNormals"]);
|
|
129
|
+
if (rebuildMissingBiNormals !== undefined) {
|
|
130
|
+
values.rebuildMissingBiNormals = validateRule("rebuildMissingBiNormals", rebuildMissingBiNormals);
|
|
131
|
+
}
|
|
132
|
+
if (hasOwn(options, "classes")) {
|
|
133
|
+
mergeClasses(values, options.classes);
|
|
134
|
+
}
|
|
135
|
+
if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes)) {
|
|
136
|
+
throw new TypeError(`CjsGr2Format emit "${values.emit}" requires explicit classes`);
|
|
137
|
+
}
|
|
138
|
+
return values;
|
|
139
|
+
}
|
|
140
|
+
function hasClasses(classes) {
|
|
141
|
+
return !!classes && Object.values(classes).some(Class => typeof Class === "function");
|
|
142
|
+
}
|
|
143
|
+
function isRawGr2Result(value) {
|
|
144
|
+
return !!value && typeof value === "object" && "fileInfo" in value && typeof value.version === "number";
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,
|
|
149
|
+
* `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw
|
|
150
|
+
* ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which
|
|
151
|
+
* is how ccpwgl's resource loader supplies bytes) must be wrapped in a
|
|
152
|
+
* view before it reaches readGr2Raw, not passed straight through.
|
|
153
|
+
*
|
|
154
|
+
* @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.
|
|
155
|
+
* @returns {Uint8Array} A Uint8Array view over the same bytes.
|
|
156
|
+
*/
|
|
157
|
+
function toBytes(input) {
|
|
158
|
+
if (input instanceof Uint8Array) return input;
|
|
159
|
+
if (typeof ArrayBuffer !== "undefined" && input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
160
|
+
if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
161
|
+
throw new TypeError("CjsGr2Format: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Reads and validates raw input bytes for the GR2 format reader. */
|
|
165
|
+
function readRawInput(input) {
|
|
166
|
+
return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));
|
|
167
|
+
}
|
|
168
|
+
function meshName(mesh, meshIndex) {
|
|
169
|
+
return mesh && mesh.name ? `"${mesh.name}"` : `#${meshIndex}`;
|
|
170
|
+
}
|
|
171
|
+
function vertexChannel(mesh, channel) {
|
|
172
|
+
return mesh && mesh.vertex && mesh.vertex[channel];
|
|
173
|
+
}
|
|
174
|
+
function hasVertexChannel(mesh, channel) {
|
|
175
|
+
const value = vertexChannel(mesh, channel);
|
|
176
|
+
return !!value && value.length > 0;
|
|
177
|
+
}
|
|
178
|
+
function requireVertexChannel(mesh, meshIndex, channel, feature) {
|
|
179
|
+
const value = vertexChannel(mesh, channel);
|
|
180
|
+
if (!value || value.length === 0) {
|
|
181
|
+
throw new Error(`CjsGr2Format ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);
|
|
182
|
+
}
|
|
183
|
+
return value;
|
|
184
|
+
}
|
|
185
|
+
function triangleFaces(mesh, meshIndex, feature) {
|
|
186
|
+
const faces = [];
|
|
187
|
+
for (const group of mesh.indices || []) {
|
|
188
|
+
if (group && group.faces) faces.push(...group.faces);
|
|
189
|
+
}
|
|
190
|
+
if (faces.length === 0) {
|
|
191
|
+
throw new Error(`CjsGr2Format ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);
|
|
192
|
+
}
|
|
193
|
+
return faces;
|
|
194
|
+
}
|
|
195
|
+
function shouldApplyMeshRule(reader, rule, context) {
|
|
196
|
+
const fullContext = {
|
|
197
|
+
reader,
|
|
198
|
+
...context
|
|
199
|
+
};
|
|
200
|
+
if (typeof rule === "function") {
|
|
201
|
+
const result = rule(fullContext);
|
|
202
|
+
if (typeof result !== "boolean") {
|
|
203
|
+
throw new TypeError(`CjsGr2Format ${context.feature} rule must return true or false`);
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
return rule;
|
|
208
|
+
}
|
|
209
|
+
function unpackMeshTangents(reader, json, raw, values) {
|
|
210
|
+
for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++) {
|
|
211
|
+
const mesh = json.meshes[meshIndex];
|
|
212
|
+
if (shouldApplyMeshRule(reader, values.unpackTangents, {
|
|
213
|
+
options: values,
|
|
214
|
+
raw,
|
|
215
|
+
json,
|
|
216
|
+
mesh,
|
|
217
|
+
meshIndex,
|
|
218
|
+
feature: "unpackTangents",
|
|
219
|
+
channel: "tangent"
|
|
220
|
+
})) {
|
|
221
|
+
tangents.unpack(mesh);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function rebuildMeshNormals(mesh, meshIndex) {
|
|
226
|
+
const positions = requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingNormals"),
|
|
227
|
+
faces = triangleFaces(mesh, meshIndex, "rebuildMissingNormals");
|
|
228
|
+
mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));
|
|
229
|
+
}
|
|
230
|
+
function rebuildMeshTangents(mesh, meshIndex) {
|
|
231
|
+
const positions = requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingTangents"),
|
|
232
|
+
normals = requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingTangents"),
|
|
233
|
+
uvs = requireVertexChannel(mesh, meshIndex, "texcoord0", "rebuildMissingTangents"),
|
|
234
|
+
faces = triangleFaces(mesh, meshIndex, "rebuildMissingTangents");
|
|
235
|
+
mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));
|
|
236
|
+
}
|
|
237
|
+
function rebuildMeshBiNormals(mesh, meshIndex) {
|
|
238
|
+
const normals = requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingBiNormals"),
|
|
239
|
+
tangentValues = requireVertexChannel(mesh, meshIndex, "tangent", "rebuildMissingBiNormals");
|
|
240
|
+
mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);
|
|
241
|
+
}
|
|
242
|
+
function rebuildMissingMeshData(reader, json, raw, values) {
|
|
243
|
+
for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++) {
|
|
244
|
+
const mesh = json.meshes[meshIndex];
|
|
245
|
+
if (!hasVertexChannel(mesh, "normal") && shouldApplyMeshRule(reader, values.rebuildMissingNormals, {
|
|
246
|
+
options: values,
|
|
247
|
+
raw,
|
|
248
|
+
json,
|
|
249
|
+
mesh,
|
|
250
|
+
meshIndex,
|
|
251
|
+
feature: "rebuildMissingNormals",
|
|
252
|
+
channel: "normal"
|
|
253
|
+
})) {
|
|
254
|
+
rebuildMeshNormals(mesh, meshIndex);
|
|
255
|
+
}
|
|
256
|
+
if (!hasVertexChannel(mesh, "tangent") && shouldApplyMeshRule(reader, values.rebuildMissingTangents, {
|
|
257
|
+
options: values,
|
|
258
|
+
raw,
|
|
259
|
+
json,
|
|
260
|
+
mesh,
|
|
261
|
+
meshIndex,
|
|
262
|
+
feature: "rebuildMissingTangents",
|
|
263
|
+
channel: "tangent"
|
|
264
|
+
})) {
|
|
265
|
+
rebuildMeshTangents(mesh, meshIndex);
|
|
266
|
+
}
|
|
267
|
+
if (!hasVertexChannel(mesh, "binormal") && shouldApplyMeshRule(reader, values.rebuildMissingBiNormals, {
|
|
268
|
+
options: values,
|
|
269
|
+
raw,
|
|
270
|
+
json,
|
|
271
|
+
mesh,
|
|
272
|
+
meshIndex,
|
|
273
|
+
feature: "rebuildMissingBiNormals",
|
|
274
|
+
channel: "binormal"
|
|
275
|
+
})) {
|
|
276
|
+
rebuildMeshBiNormals(mesh, meshIndex);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function processMeshData(reader, json, raw, values) {
|
|
281
|
+
unpackMeshTangents(reader, json, raw, values);
|
|
282
|
+
rebuildMissingMeshData(reader, json, raw, values);
|
|
283
|
+
}
|
|
284
|
+
function buildJson(reader, raw, values) {
|
|
285
|
+
const json = emitJson(raw.fileInfo, raw.version, {
|
|
286
|
+
classes: values.emit === OUTPUT_GR2 || (values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes) ? values.classes : {}
|
|
287
|
+
});
|
|
288
|
+
if (values.decompressCurves) {
|
|
289
|
+
decompressAnimationCurves(json);
|
|
290
|
+
}
|
|
291
|
+
processMeshData(reader, json, raw, values);
|
|
292
|
+
return json;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/** Reads input using normalized format options for the GR2 format reader. */
|
|
296
|
+
function readWithValues(reader, input, values) {
|
|
297
|
+
const parsed = readRawInput(input);
|
|
298
|
+
if (values.emit === OUTPUT_RAW) return parsed;
|
|
299
|
+
const json = buildJson(reader, parsed, values);
|
|
300
|
+
return values.emit === OUTPUT_CMF ? hydrateCmf(buildCmfFromShared(json), values.classes, {
|
|
301
|
+
source: values.source
|
|
302
|
+
}) : json;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** Converts a parsed payload into a JSON-safe value for the GR2 format reader. */
|
|
306
|
+
function toJsonValue(value, seen = new WeakSet()) {
|
|
307
|
+
if (value === null || typeof value !== "object") return value;
|
|
308
|
+
if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));
|
|
309
|
+
if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));
|
|
310
|
+
if (seen.has(value)) {
|
|
311
|
+
throw new TypeError("CjsGr2Format.toJSON cannot convert circular data");
|
|
312
|
+
}
|
|
313
|
+
if (typeof value.toJSON === "function") {
|
|
314
|
+
seen.add(value);
|
|
315
|
+
const json = toJsonValue(value.toJSON(), seen);
|
|
316
|
+
seen.delete(value);
|
|
317
|
+
return json;
|
|
318
|
+
}
|
|
319
|
+
seen.add(value);
|
|
320
|
+
const out = {};
|
|
321
|
+
for (const key of Object.keys(value)) {
|
|
322
|
+
out[key] = toJsonValue(value[key], seen);
|
|
323
|
+
}
|
|
324
|
+
seen.delete(value);
|
|
325
|
+
return out;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Inspects raw GR2 result without materializing the full GR2 format reader
|
|
330
|
+
* payload.
|
|
331
|
+
*/
|
|
332
|
+
function inspectRawGr2Result(parsed) {
|
|
333
|
+
const fileInfo = parsed.fileInfo || {},
|
|
334
|
+
count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;
|
|
335
|
+
return {
|
|
336
|
+
reader: "CjsGr2Format",
|
|
337
|
+
format: "gr2",
|
|
338
|
+
version: parsed.version | 0,
|
|
339
|
+
sectionCount: parsed.secCount | 0,
|
|
340
|
+
source: fileInfo.FromFileName ?? "",
|
|
341
|
+
counts: {
|
|
342
|
+
meshes: count(fileInfo.Meshes),
|
|
343
|
+
models: count(fileInfo.Models),
|
|
344
|
+
animations: count(fileInfo.Animations),
|
|
345
|
+
materials: count(fileInfo.Materials),
|
|
346
|
+
textures: count(fileInfo.Textures)
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export { CLASS_KEYS, DEFAULT_VALUES, OUTPUT_CMF, OUTPUT_GR2, OUTPUT_GR2_JSON, OUTPUT_JSON, OUTPUT_RAW, inspectRawGr2Result, normalizeValues, readRawInput, readWithValues, toJsonValue, validateClass, validateClassKey };
|
|
352
|
+
//# sourceMappingURL=helpers.js.map
|