@carbonenginejs/runtime-resource 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -310
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -133
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -33
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -890
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -194
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -142
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { CjsSchema, carbon, impl, type, io } from '@carbonenginejs/runtime-utils/schema';
|
|
2
|
-
import { box3 } from '@carbonenginejs/runtime-utils/box3';
|
|
3
|
-
import { triangleNormalTo } from '@carbonenginejs/runtime-utils/mesh';
|
|
4
|
-
import { ray3 } from '@carbonenginejs/runtime-utils/ray3';
|
|
5
|
-
import { sph3 } from '@carbonenginejs/runtime-utils/sph3';
|
|
6
|
-
import { vec3 } from '@carbonenginejs/runtime-utils/vec3';
|
|
7
|
-
import { vec4 } from '@carbonenginejs/runtime-utils/vec4';
|
|
8
|
-
import { CjsResource } from '../CjsResource.js';
|
|
9
|
-
import { assertResourcePayloadObject, assertResourcePayloadArray, resourcePayloadError, resourceBoundaryError } from '../resourceBoundary.js';
|
|
10
|
-
|
|
11
|
-
// Source: trinity/trinity/Resources/TriGeometryRes.h
|
|
12
|
-
// Source: trinity/trinity/Resources/TriGeometryRes.cpp
|
|
13
|
-
// Source: trinity/trinity/Resources/TriGeometryRes_Blue.cpp
|
|
14
|
-
|
|
1
|
+
import { CjsSchema, carbon, impl, type, io } from '@carbonenginejs/runtime-utils/schema';
|
|
2
|
+
import { box3 } from '@carbonenginejs/runtime-utils/box3';
|
|
3
|
+
import { triangleNormalTo } from '@carbonenginejs/runtime-utils/mesh';
|
|
4
|
+
import { ray3 } from '@carbonenginejs/runtime-utils/ray3';
|
|
5
|
+
import { sph3 } from '@carbonenginejs/runtime-utils/sph3';
|
|
6
|
+
import { vec3 } from '@carbonenginejs/runtime-utils/vec3';
|
|
7
|
+
import { vec4 } from '@carbonenginejs/runtime-utils/vec4';
|
|
8
|
+
import { CjsResource } from '../CjsResource.js';
|
|
9
|
+
import { assertResourcePayloadObject, assertResourcePayloadArray, resourcePayloadError, resourceBoundaryError } from '../resourceBoundary.js';
|
|
10
|
+
|
|
11
|
+
// Source: trinity/trinity/Resources/TriGeometryRes.h
|
|
12
|
+
// Source: trinity/trinity/Resources/TriGeometryRes.cpp
|
|
13
|
+
// Source: trinity/trinity/Resources/TriGeometryRes_Blue.cpp
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Resource record that owns geometry payload facts (meshes, optional
|
|
17
17
|
* skeletons and animations) and LOD-force metadata, while engine packages
|
|
@@ -19,119 +19,186 @@ import { assertResourcePayloadObject, assertResourcePayloadArray, resourcePayloa
|
|
|
19
19
|
*
|
|
20
20
|
* Geometry inspection composes the generic math supplied by runtime-utils
|
|
21
21
|
* with resource-specific payload traversal.
|
|
22
|
-
*/
|
|
23
|
-
class TriGeometryRes extends CjsResource {
|
|
24
|
-
forceLod = false;
|
|
25
|
-
forcedLodIndex = -1;
|
|
26
|
-
name = "";
|
|
27
|
-
|
|
28
|
-
/** Creates a TriGeometryRes with caller-provided initial state. */
|
|
29
|
-
constructor(values = null) {
|
|
30
|
-
super();
|
|
31
|
-
this.SetValues(values || {}, {
|
|
32
|
-
markDirty: false,
|
|
33
|
-
skipUpdate: true,
|
|
34
|
-
skipEvents: true
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
22
|
+
*/
|
|
23
|
+
class TriGeometryRes extends CjsResource {
|
|
24
|
+
forceLod = false;
|
|
25
|
+
forcedLodIndex = -1;
|
|
26
|
+
name = "";
|
|
27
|
+
|
|
28
|
+
/** Creates a TriGeometryRes with caller-provided initial state. */
|
|
29
|
+
constructor(values = null) {
|
|
30
|
+
super();
|
|
31
|
+
this.SetValues(values || {}, {
|
|
32
|
+
markDirty: false,
|
|
33
|
+
skipUpdate: true,
|
|
34
|
+
skipEvents: true
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
38
|
/**
|
|
39
39
|
* Attach a plain geometry payload.
|
|
40
40
|
*
|
|
41
41
|
* @param {object|null} payload
|
|
42
42
|
* @param {object|null} options
|
|
43
43
|
* @returns {TriGeometryRes}
|
|
44
|
-
*/
|
|
45
|
-
SetPayload(payload = null, options = null) {
|
|
46
|
-
if (payload === null) {
|
|
47
|
-
super.SetPayload(null);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
assertResourcePayloadObject("TriGeometryRes", payload);
|
|
51
|
-
assertResourcePayloadArray("TriGeometryRes", payload, "meshes");
|
|
52
|
-
for (const field of ["skeletons", "animations"]) {
|
|
53
|
-
if (payload[field] !== undefined && !Array.isArray(payload[field])) {
|
|
54
|
-
throw resourcePayloadError("TriGeometryRes", "Expected an array when provided.", field);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
super.SetPayload(payload);
|
|
58
|
-
this.SetValues(options || {});
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
|
|
44
|
+
*/
|
|
45
|
+
SetPayload(payload = null, options = null) {
|
|
46
|
+
if (payload === null) {
|
|
47
|
+
super.SetPayload(null);
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
assertResourcePayloadObject("TriGeometryRes", payload);
|
|
51
|
+
assertResourcePayloadArray("TriGeometryRes", payload, "meshes");
|
|
52
|
+
for (const field of ["skeletons", "animations"]) {
|
|
53
|
+
if (payload[field] !== undefined && !Array.isArray(payload[field])) {
|
|
54
|
+
throw resourcePayloadError("TriGeometryRes", "Expected an array when provided.", field);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
super.SetPayload(payload);
|
|
58
|
+
this.SetValues(options || {});
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
62
|
/**
|
|
63
63
|
* Get mesh count from the CPU geometry payload.
|
|
64
64
|
*
|
|
65
65
|
* @returns {number}
|
|
66
|
-
*/
|
|
67
|
-
GetMeshCount() {
|
|
68
|
-
return this.GetPayload()?.meshes?.length || 0;
|
|
69
|
-
}
|
|
70
|
-
|
|
66
|
+
*/
|
|
67
|
+
GetMeshCount() {
|
|
68
|
+
return this.GetPayload()?.meshes?.length || 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
71
|
/**
|
|
72
72
|
* Get animation count from the CPU geometry payload.
|
|
73
73
|
*
|
|
74
74
|
* @returns {number}
|
|
75
|
-
*/
|
|
76
|
-
GetAnimationCount() {
|
|
77
|
-
return this.GetPayload()?.animations?.length || 0;
|
|
78
|
-
}
|
|
79
|
-
|
|
75
|
+
*/
|
|
76
|
+
GetAnimationCount() {
|
|
77
|
+
return this.GetPayload()?.animations?.length || 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
80
|
/**
|
|
81
81
|
* Get skeleton count from the CPU geometry payload.
|
|
82
82
|
*
|
|
83
83
|
* @returns {number}
|
|
84
|
-
*/
|
|
85
|
-
GetSkeletonCount() {
|
|
86
|
-
return this.GetPayload()?.skeletons?.length || 0;
|
|
87
|
-
}
|
|
88
|
-
|
|
84
|
+
*/
|
|
85
|
+
GetSkeletonCount() {
|
|
86
|
+
return this.GetPayload()?.skeletons?.length || 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
89
|
/**
|
|
90
90
|
* Get one resource-owned skeleton from the CPU geometry payload.
|
|
91
91
|
*
|
|
92
92
|
* @param {number} skeletonIndex
|
|
93
93
|
* @returns {*}
|
|
94
|
-
*/
|
|
95
|
-
GetSkeletonData(skeletonIndex = 0) {
|
|
96
|
-
const index = Number(skeletonIndex);
|
|
97
|
-
if (!Number.isInteger(index) || index < 0) {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
return this.GetPayload()?.skeletons?.[index] || null;
|
|
101
|
-
}
|
|
102
|
-
|
|
94
|
+
*/
|
|
95
|
+
GetSkeletonData(skeletonIndex = 0) {
|
|
96
|
+
const index = Number(skeletonIndex);
|
|
97
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return this.GetPayload()?.skeletons?.[index] || null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
103
|
/**
|
|
104
104
|
* Get mesh area count from a CPU geometry payload mesh.
|
|
105
105
|
*
|
|
106
106
|
* @param {number} meshIndex
|
|
107
107
|
* @returns {number}
|
|
108
|
-
*/
|
|
109
|
-
GetMeshAreaCount(meshIndex = 0) {
|
|
110
|
-
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
111
|
-
return mesh?.areas?.length || 0;
|
|
112
|
-
}
|
|
113
|
-
|
|
108
|
+
*/
|
|
109
|
+
GetMeshAreaCount(meshIndex = 0) {
|
|
110
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
111
|
+
return mesh?.areas?.length || 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Carbon TriGeometryRes.cpp:294-319. Walks LODs from the LOWEST quality up
|
|
115
|
+
// and takes the first whose authored maxScreenSize still covers the requested
|
|
116
|
+
// size; a request larger than the best LOD falls back to LOD 0, which Carbon
|
|
117
|
+
// comments explicitly. forceLod pins the index instead, clamped to the last
|
|
118
|
+
// LOD.
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The LOD index this mesh should be drawn at for a screen size, or -1 when the
|
|
122
|
+
* mesh does not exist.
|
|
123
|
+
*
|
|
124
|
+
* @param {number} meshIndex
|
|
125
|
+
* @param {number} screenSize
|
|
126
|
+
* @returns {number}
|
|
127
|
+
*/
|
|
128
|
+
GetLodIndexForScreenSize(meshIndex = 0, screenSize = Infinity) {
|
|
129
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
130
|
+
if (!mesh) return -1;
|
|
131
|
+
|
|
132
|
+
// A decoder may flatten a single-LOD mesh, putting the areas on the mesh
|
|
133
|
+
// itself; that mesh IS its own only LOD (see getMeshAreas).
|
|
134
|
+
const lods = mesh.lods?.length ? mesh.lods : null;
|
|
135
|
+
const lastLod = lods ? lods.length - 1 : 0;
|
|
136
|
+
if (this.forceLod && this.forcedLodIndex >= 0) {
|
|
137
|
+
return Math.min(this.forcedLodIndex, lastLod);
|
|
138
|
+
}
|
|
139
|
+
for (let index = lastLod; index >= 0; index--) {
|
|
140
|
+
const maxScreenSize = (lods ? lods[index]?.maxScreenSize : mesh.maxScreenSize) ?? 0;
|
|
141
|
+
if (maxScreenSize >= screenSize) return index;
|
|
142
|
+
}
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Carbon TriGeometryRes.cpp:268-279. Carbon overloads this on float
|
|
147
|
+
// screenSize versus int lodIndex; JavaScript cannot, so the index form is
|
|
148
|
+
// GetMeshLodByIndex. Carbon indexes m_lods with the result unguarded, so a
|
|
149
|
+
// mesh with an EMPTY lod list reads out of bounds there; this port returns
|
|
150
|
+
// null (docs/research/carbon-known-defects.md).
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The LOD data this mesh should be drawn at for a screen size, or null when
|
|
154
|
+
* the mesh has no LODs.
|
|
155
|
+
*
|
|
156
|
+
* @param {number} meshIndex
|
|
157
|
+
* @param {number} screenSize
|
|
158
|
+
* @returns {object|null}
|
|
159
|
+
*/
|
|
160
|
+
GetMeshLod(meshIndex = 0, screenSize = Infinity) {
|
|
161
|
+
return this.GetMeshLodByIndex(meshIndex, this.GetLodIndexForScreenSize(meshIndex, screenSize));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* The LOD data at an explicit index, or null when the mesh or index does not
|
|
166
|
+
* exist (Carbon TriGeometryRes.cpp:281-292).
|
|
167
|
+
*
|
|
168
|
+
* @param {number} meshIndex
|
|
169
|
+
* @param {number} lodIndex
|
|
170
|
+
* @returns {object|null}
|
|
171
|
+
*/
|
|
172
|
+
GetMeshLodByIndex(meshIndex = 0, lodIndex = 0) {
|
|
173
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
174
|
+
if (!mesh || lodIndex < 0) return null;
|
|
175
|
+
if (mesh.lods?.length) {
|
|
176
|
+
return lodIndex < mesh.lods.length ? mesh.lods[lodIndex] : null;
|
|
177
|
+
}
|
|
178
|
+
return lodIndex === 0 && mesh.areas ? mesh : null;
|
|
179
|
+
}
|
|
180
|
+
|
|
114
181
|
/**
|
|
115
182
|
* Get mesh name from a CPU geometry payload.
|
|
116
183
|
*
|
|
117
184
|
* @param {number} meshIndex
|
|
118
185
|
* @returns {string}
|
|
119
|
-
*/
|
|
120
|
-
GetMeshName(meshIndex = 0) {
|
|
121
|
-
return this.GetPayload()?.meshes?.[meshIndex]?.name || "";
|
|
122
|
-
}
|
|
123
|
-
|
|
186
|
+
*/
|
|
187
|
+
GetMeshName(meshIndex = 0) {
|
|
188
|
+
return this.GetPayload()?.meshes?.[meshIndex]?.name || "";
|
|
189
|
+
}
|
|
190
|
+
|
|
124
191
|
/**
|
|
125
192
|
* Get mesh area name from a CPU geometry payload.
|
|
126
193
|
*
|
|
127
194
|
* @param {number} meshIndex
|
|
128
195
|
* @param {number} areaIndex
|
|
129
196
|
* @returns {string}
|
|
130
|
-
*/
|
|
131
|
-
GetMeshAreaName(meshIndex = 0, areaIndex = 0) {
|
|
132
|
-
return this.GetPayload()?.meshes?.[meshIndex]?.areas?.[areaIndex]?.name || "";
|
|
133
|
-
}
|
|
134
|
-
|
|
197
|
+
*/
|
|
198
|
+
GetMeshAreaName(meshIndex = 0, areaIndex = 0) {
|
|
199
|
+
return this.GetPayload()?.meshes?.[meshIndex]?.areas?.[areaIndex]?.name || "";
|
|
200
|
+
}
|
|
201
|
+
|
|
135
202
|
/**
|
|
136
203
|
* Get area bounding box from geometry payload data.
|
|
137
204
|
*
|
|
@@ -140,41 +207,41 @@ class TriGeometryRes extends CjsResource {
|
|
|
140
207
|
* @param {ArrayLike<number>|null} outMin
|
|
141
208
|
* @param {ArrayLike<number>|null} outMax
|
|
142
209
|
* @returns {*|boolean}
|
|
143
|
-
*/
|
|
144
|
-
GetAreaBoundingBox(meshIndex = 0, areaIndex = 0, outMin = null, outMax = null) {
|
|
145
|
-
const area = TriGeometryRes.getMeshAreas(this.GetPayload()?.meshes?.[meshIndex])?.[areaIndex];
|
|
146
|
-
const bounds = TriGeometryRes.getBounds(area);
|
|
147
|
-
return TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
148
|
-
}
|
|
149
|
-
|
|
210
|
+
*/
|
|
211
|
+
GetAreaBoundingBox(meshIndex = 0, areaIndex = 0, outMin = null, outMax = null) {
|
|
212
|
+
const area = TriGeometryRes.getMeshAreas(this.GetPayload()?.meshes?.[meshIndex])?.[areaIndex];
|
|
213
|
+
const bounds = TriGeometryRes.getBounds(area);
|
|
214
|
+
return TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
215
|
+
}
|
|
216
|
+
|
|
150
217
|
/**
|
|
151
218
|
* Get mesh bounding box from geometry payload data.
|
|
152
219
|
* @param {number} meshIndex
|
|
153
220
|
* @param {ArrayLike<number>|null} outMin
|
|
154
221
|
* @param {ArrayLike<number>|null} outMax
|
|
155
222
|
* @returns {*|boolean}
|
|
156
|
-
*/
|
|
157
|
-
GetBoundingBox(meshIndex = 0, outMin = null, outMax = null) {
|
|
158
|
-
const payload = this.GetPayload();
|
|
159
|
-
const bounds = TriGeometryRes.getBounds(payload?.meshes?.[meshIndex]) || TriGeometryRes.getBounds(payload);
|
|
160
|
-
return TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
161
|
-
}
|
|
162
|
-
|
|
223
|
+
*/
|
|
224
|
+
GetBoundingBox(meshIndex = 0, outMin = null, outMax = null) {
|
|
225
|
+
const payload = this.GetPayload();
|
|
226
|
+
const bounds = TriGeometryRes.getBounds(payload?.meshes?.[meshIndex]) || TriGeometryRes.getBounds(payload);
|
|
227
|
+
return TriGeometryRes.copyBounds(bounds, outMin, outMax);
|
|
228
|
+
}
|
|
229
|
+
|
|
163
230
|
/**
|
|
164
231
|
* Get mesh bounding sphere from geometry payload data.
|
|
165
232
|
* @param {number} meshIndex
|
|
166
233
|
* @param {ArrayLike<number>|null} out
|
|
167
234
|
* @returns {*|boolean}
|
|
168
|
-
*/
|
|
169
|
-
GetBoundingSphere(meshIndex = 0, out = null) {
|
|
170
|
-
const payload = this.GetPayload();
|
|
171
|
-
const sphere = TriGeometryRes.getSphere(payload?.meshes?.[meshIndex]) || TriGeometryRes.getSphere(payload);
|
|
172
|
-
if (!out) return sphere;
|
|
173
|
-
if (!sphere) return false;
|
|
174
|
-
vec4.copy(out, sphere);
|
|
175
|
-
return true;
|
|
176
|
-
}
|
|
177
|
-
|
|
235
|
+
*/
|
|
236
|
+
GetBoundingSphere(meshIndex = 0, out = null) {
|
|
237
|
+
const payload = this.GetPayload();
|
|
238
|
+
const sphere = TriGeometryRes.getSphere(payload?.meshes?.[meshIndex]) || TriGeometryRes.getSphere(payload);
|
|
239
|
+
if (!out) return sphere;
|
|
240
|
+
if (!sphere) return false;
|
|
241
|
+
vec4.copy(out, sphere);
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
|
|
178
245
|
/**
|
|
179
246
|
* Calculate a transformed bounding box from canonical CPU vertex data.
|
|
180
247
|
*
|
|
@@ -184,77 +251,77 @@ class TriGeometryRes extends CjsResource {
|
|
|
184
251
|
* @param {number} meshIndex
|
|
185
252
|
* @param {ArrayLike<number>} transform
|
|
186
253
|
* @returns {{min: number[], max: number[]}|null}
|
|
187
|
-
*/
|
|
188
|
-
CalculateBoundingBoxFromTransform(meshIndex = 0, transform = null) {
|
|
189
|
-
if (!transform || transform.length < 16) {
|
|
190
|
-
throw new TypeError("TriGeometryRes transform must contain 16 matrix elements.");
|
|
191
|
-
}
|
|
192
|
-
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
193
|
-
if (!mesh) return null;
|
|
194
|
-
const positions = TriGeometryRes.getMeshPositions(mesh);
|
|
195
|
-
const sourceBounds = TriGeometryRes.getBounds(mesh);
|
|
196
|
-
if (!positions && !sourceBounds) return null;
|
|
197
|
-
const bounds = box3.alloc(),
|
|
198
|
-
point = vec3.alloc();
|
|
199
|
-
try {
|
|
200
|
-
if (!TriGeometryRes.setBoundsFromPositions(bounds, positions, point)) {
|
|
201
|
-
if (!sourceBounds) return null;
|
|
202
|
-
box3.fromBounds(bounds, sourceBounds.min, sourceBounds.max);
|
|
203
|
-
}
|
|
204
|
-
box3.transformMat4(bounds, bounds, transform);
|
|
205
|
-
return {
|
|
206
|
-
min: [bounds[0], bounds[1], bounds[2]],
|
|
207
|
-
max: [bounds[3], bounds[4], bounds[5]]
|
|
208
|
-
};
|
|
209
|
-
} finally {
|
|
210
|
-
vec3.unalloc(point);
|
|
211
|
-
box3.unalloc(bounds);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
254
|
+
*/
|
|
255
|
+
CalculateBoundingBoxFromTransform(meshIndex = 0, transform = null) {
|
|
256
|
+
if (!transform || transform.length < 16) {
|
|
257
|
+
throw new TypeError("TriGeometryRes transform must contain 16 matrix elements.");
|
|
258
|
+
}
|
|
259
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
260
|
+
if (!mesh) return null;
|
|
261
|
+
const positions = TriGeometryRes.getMeshPositions(mesh);
|
|
262
|
+
const sourceBounds = TriGeometryRes.getBounds(mesh);
|
|
263
|
+
if (!positions && !sourceBounds) return null;
|
|
264
|
+
const bounds = box3.alloc(),
|
|
265
|
+
point = vec3.alloc();
|
|
266
|
+
try {
|
|
267
|
+
if (!TriGeometryRes.setBoundsFromPositions(bounds, positions, point)) {
|
|
268
|
+
if (!sourceBounds) return null;
|
|
269
|
+
box3.fromBounds(bounds, sourceBounds.min, sourceBounds.max);
|
|
270
|
+
}
|
|
271
|
+
box3.transformMat4(bounds, bounds, transform);
|
|
272
|
+
return {
|
|
273
|
+
min: [bounds[0], bounds[1], bounds[2]],
|
|
274
|
+
max: [bounds[3], bounds[4], bounds[5]]
|
|
275
|
+
};
|
|
276
|
+
} finally {
|
|
277
|
+
vec3.unalloc(point);
|
|
278
|
+
box3.unalloc(bounds);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
215
282
|
/**
|
|
216
283
|
* Recalculate bounding sphere data from canonical CPU vertex positions.
|
|
217
284
|
*
|
|
218
285
|
* @returns {boolean}
|
|
219
|
-
*/
|
|
220
|
-
RecalculateBoundingSphere() {
|
|
221
|
-
let updated = false;
|
|
222
|
-
const sphere = sph3.alloc(),
|
|
223
|
-
point = vec3.alloc();
|
|
224
|
-
try {
|
|
225
|
-
for (const mesh of this.GetPayload()?.meshes || []) {
|
|
226
|
-
if (!TriGeometryRes.calculateMeshSphere(sphere, mesh, point)) continue;
|
|
227
|
-
TriGeometryRes.setMeshSphere(mesh, sphere);
|
|
228
|
-
updated = true;
|
|
229
|
-
}
|
|
230
|
-
return updated;
|
|
231
|
-
} finally {
|
|
232
|
-
vec3.unalloc(point);
|
|
233
|
-
sph3.unalloc(sphere);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
286
|
+
*/
|
|
287
|
+
RecalculateBoundingSphere() {
|
|
288
|
+
let updated = false;
|
|
289
|
+
const sphere = sph3.alloc(),
|
|
290
|
+
point = vec3.alloc();
|
|
291
|
+
try {
|
|
292
|
+
for (const mesh of this.GetPayload()?.meshes || []) {
|
|
293
|
+
if (!TriGeometryRes.calculateMeshSphere(sphere, mesh, point)) continue;
|
|
294
|
+
TriGeometryRes.setMeshSphere(mesh, sphere);
|
|
295
|
+
updated = true;
|
|
296
|
+
}
|
|
297
|
+
return updated;
|
|
298
|
+
} finally {
|
|
299
|
+
vec3.unalloc(point);
|
|
300
|
+
sph3.unalloc(sphere);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
237
304
|
/**
|
|
238
305
|
* Reloading belongs to the resource manager because it owns source and
|
|
239
306
|
* canonical replacement policy.
|
|
240
307
|
*
|
|
241
308
|
* @throws {Error}
|
|
242
|
-
*/
|
|
243
|
-
Reload() {
|
|
244
|
-
throw resourceBoundaryError("TriGeometryRes", "Reload", "Request a reload through CjsResMan so source reads and canonical replacement remain manager-owned.");
|
|
245
|
-
}
|
|
246
|
-
|
|
309
|
+
*/
|
|
310
|
+
Reload() {
|
|
311
|
+
throw resourceBoundaryError("TriGeometryRes", "Reload", "Request a reload through CjsResMan so source reads and canonical replacement remain manager-owned.");
|
|
312
|
+
}
|
|
313
|
+
|
|
247
314
|
/**
|
|
248
315
|
* Intersect a ray with canonical CPU triangle data.
|
|
249
316
|
*
|
|
250
317
|
* @param {ArrayLike<number>} position
|
|
251
318
|
* @param {ArrayLike<number>} direction
|
|
252
319
|
* @returns {object}
|
|
253
|
-
*/
|
|
254
|
-
GetIntersectionPointNormalBone(position, direction) {
|
|
255
|
-
return TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, -1);
|
|
256
|
-
}
|
|
257
|
-
|
|
320
|
+
*/
|
|
321
|
+
GetIntersectionPointNormalBone(position, direction) {
|
|
322
|
+
return TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, -1);
|
|
323
|
+
}
|
|
324
|
+
|
|
258
325
|
/**
|
|
259
326
|
* Intersect a ray with one area index across canonical CPU meshes.
|
|
260
327
|
*
|
|
@@ -262,73 +329,106 @@ class TriGeometryRes extends CjsResource {
|
|
|
262
329
|
* @param {ArrayLike<number>} direction
|
|
263
330
|
* @param {number} areaIndex
|
|
264
331
|
* @returns {object}
|
|
265
|
-
*/
|
|
266
|
-
GetAreaIntersectionPointNormalBone(position, direction, areaIndex = -1) {
|
|
267
|
-
if (!Number.isInteger(areaIndex) || areaIndex < -1) {
|
|
268
|
-
throw new RangeError("TriGeometryRes area index must be -1 or a non-negative integer.");
|
|
269
|
-
}
|
|
270
|
-
return TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, areaIndex);
|
|
271
|
-
}
|
|
272
|
-
|
|
332
|
+
*/
|
|
333
|
+
GetAreaIntersectionPointNormalBone(position, direction, areaIndex = -1) {
|
|
334
|
+
if (!Number.isInteger(areaIndex) || areaIndex < -1) {
|
|
335
|
+
throw new RangeError("TriGeometryRes area index must be -1 or a non-negative integer.");
|
|
336
|
+
}
|
|
337
|
+
return TriGeometryRes.intersectGeometry(this.GetPayload()?.meshes, position, direction, areaIndex);
|
|
338
|
+
}
|
|
339
|
+
|
|
273
340
|
/**
|
|
274
341
|
* Get vertex element descriptors for a mesh.
|
|
275
342
|
*
|
|
276
343
|
* @param {number} meshIndex
|
|
277
344
|
* @returns {Array<*>}
|
|
278
|
-
*/
|
|
279
|
-
GetMeshVertexElements(meshIndex = 0) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
345
|
+
*/
|
|
346
|
+
GetMeshVertexElements(meshIndex = 0) {
|
|
347
|
+
// The CMF reader emits the element list as `decl`, matching the CMF struct
|
|
348
|
+
// field; this accessor read only `vertexElements`, which no reader in this
|
|
349
|
+
// package populates, so it returned an empty list for every real decoded
|
|
350
|
+
// payload. Both names are accepted because the name is the producer's.
|
|
351
|
+
const mesh = this.GetPayload()?.meshes?.[meshIndex];
|
|
352
|
+
return mesh?.decl || mesh?.vertexElements || [];
|
|
353
|
+
}
|
|
354
|
+
|
|
283
355
|
/**
|
|
284
356
|
* Saving belongs to the selected geometry format writer and destination.
|
|
285
357
|
*
|
|
286
358
|
* @throws {Error}
|
|
287
|
-
*/
|
|
288
|
-
SaveMesh() {
|
|
289
|
-
throw resourceBoundaryError("TriGeometryRes", "SaveMesh", "Use a geometry format writer with the resource payload and a caller-owned destination.");
|
|
290
|
-
}
|
|
291
|
-
static payload = "geometry";
|
|
292
|
-
|
|
359
|
+
*/
|
|
360
|
+
SaveMesh() {
|
|
361
|
+
throw resourceBoundaryError("TriGeometryRes", "SaveMesh", "Use a geometry format writer with the resource payload and a caller-owned destination.");
|
|
362
|
+
}
|
|
363
|
+
static payload = "geometry";
|
|
364
|
+
|
|
365
|
+
// Carbon TriGeometryRes.cpp:158-178, declared beside the class
|
|
366
|
+
// (TriGeometryRes.h:202) because it reads LOD data rather than resource
|
|
367
|
+
// state - which is why it is static here. It returns a PLAIN SUM and does not
|
|
368
|
+
// multiply by three: the *3 belongs to the caller, so triangles-only is a
|
|
369
|
+
// property of the mesh draw path rather than of the geometry layer.
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* The summed primitive count over `count` areas of a LOD starting at `index`,
|
|
373
|
+
* with the run clamped to the area list as Carbon clamps it; zero when the
|
|
374
|
+
* index is out of range, which callers treat as "emit no draw".
|
|
375
|
+
*
|
|
376
|
+
* @param {object|null} lod
|
|
377
|
+
* @param {number} index
|
|
378
|
+
* @param {number} count
|
|
379
|
+
* @returns {number}
|
|
380
|
+
*/
|
|
381
|
+
static getPrimitiveCount(lod, index, count) {
|
|
382
|
+
const areas = lod?.areas ?? null;
|
|
383
|
+
const areaCount = areas?.length ?? 0;
|
|
384
|
+
if (!areaCount || index >= areaCount) return 0;
|
|
385
|
+
const run = index + count > areaCount ? areaCount - index : count;
|
|
386
|
+
let primitiveCount = 0;
|
|
387
|
+
for (let offset = 0; offset < run; offset++) {
|
|
388
|
+
primitiveCount += areas[index + offset]?.primitiveCount ?? 0;
|
|
389
|
+
}
|
|
390
|
+
return primitiveCount;
|
|
391
|
+
}
|
|
392
|
+
|
|
293
393
|
/**
|
|
294
394
|
* Gets the canonical area list from a mesh or its first LOD.
|
|
295
395
|
*
|
|
296
396
|
* @param {object|null} mesh
|
|
297
397
|
* @returns {Array<*>|null}
|
|
298
|
-
*/
|
|
299
|
-
static getMeshAreas(mesh) {
|
|
300
|
-
return mesh?.areas || mesh?.lods?.[0]?.areas || null;
|
|
301
|
-
}
|
|
302
|
-
|
|
398
|
+
*/
|
|
399
|
+
static getMeshAreas(mesh) {
|
|
400
|
+
return mesh?.areas || mesh?.lods?.[0]?.areas || null;
|
|
401
|
+
}
|
|
402
|
+
|
|
303
403
|
/**
|
|
304
404
|
* Gets canonical bounds from a geometry payload object.
|
|
305
405
|
*
|
|
306
406
|
* @param {object|null} value
|
|
307
407
|
* @returns {{min: ArrayLike<number>, max: ArrayLike<number>}|null}
|
|
308
|
-
*/
|
|
309
|
-
static getBounds(value) {
|
|
310
|
-
if (!value || typeof value !== "object") return null;
|
|
311
|
-
if (value.bounds?.min && value.bounds?.max) return value.bounds;
|
|
312
|
-
if (value.minBounds && value.maxBounds) {
|
|
313
|
-
return {
|
|
314
|
-
min: value.minBounds,
|
|
315
|
-
max: value.maxBounds
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
|
|
408
|
+
*/
|
|
409
|
+
static getBounds(value) {
|
|
410
|
+
if (!value || typeof value !== "object") return null;
|
|
411
|
+
if (value.bounds?.min && value.bounds?.max) return value.bounds;
|
|
412
|
+
if (value.minBounds && value.maxBounds) {
|
|
413
|
+
return {
|
|
414
|
+
min: value.minBounds,
|
|
415
|
+
max: value.maxBounds
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
|
|
321
421
|
/**
|
|
322
422
|
* Gets the canonical bounding sphere from a geometry payload object.
|
|
323
423
|
*
|
|
324
424
|
* @param {object|null} value
|
|
325
425
|
* @returns {ArrayLike<number>|null}
|
|
326
|
-
*/
|
|
327
|
-
static getSphere(value) {
|
|
328
|
-
if (!value || typeof value !== "object") return null;
|
|
329
|
-
return value.sphere || value.boundingSphere || null;
|
|
330
|
-
}
|
|
331
|
-
|
|
426
|
+
*/
|
|
427
|
+
static getSphere(value) {
|
|
428
|
+
if (!value || typeof value !== "object") return null;
|
|
429
|
+
return value.sphere || value.boundingSphere || null;
|
|
430
|
+
}
|
|
431
|
+
|
|
332
432
|
/**
|
|
333
433
|
* Copies bounds into caller-owned outputs, or returns the source object.
|
|
334
434
|
*
|
|
@@ -336,36 +436,36 @@ class TriGeometryRes extends CjsResource {
|
|
|
336
436
|
* @param {ArrayLike<number>|null} outMin
|
|
337
437
|
* @param {ArrayLike<number>|null} outMax
|
|
338
438
|
* @returns {*|boolean}
|
|
339
|
-
*/
|
|
340
|
-
static copyBounds(bounds, outMin, outMax) {
|
|
341
|
-
if (!outMin && !outMax) return bounds;
|
|
342
|
-
if (!bounds || !outMin || !outMax) return false;
|
|
343
|
-
vec3.copy(outMin, bounds.min);
|
|
344
|
-
vec3.copy(outMax, bounds.max);
|
|
345
|
-
return true;
|
|
346
|
-
}
|
|
347
|
-
|
|
439
|
+
*/
|
|
440
|
+
static copyBounds(bounds, outMin, outMax) {
|
|
441
|
+
if (!outMin && !outMax) return bounds;
|
|
442
|
+
if (!bounds || !outMin || !outMax) return false;
|
|
443
|
+
vec3.copy(outMin, bounds.min);
|
|
444
|
+
vec3.copy(outMax, bounds.max);
|
|
445
|
+
return true;
|
|
446
|
+
}
|
|
447
|
+
|
|
348
448
|
/**
|
|
349
449
|
* Gets canonical positions from a mesh or its first LOD.
|
|
350
450
|
*
|
|
351
451
|
* @param {object|null} mesh
|
|
352
452
|
* @returns {ArrayLike<number>|Array<ArrayLike<number>>|null}
|
|
353
|
-
*/
|
|
354
|
-
static getMeshPositions(mesh) {
|
|
355
|
-
return mesh?.vertex?.position || mesh?.positions || mesh?.lods?.[0]?.vertex?.position || mesh?.lods?.[0]?.positions || null;
|
|
356
|
-
}
|
|
357
|
-
|
|
453
|
+
*/
|
|
454
|
+
static getMeshPositions(mesh) {
|
|
455
|
+
return mesh?.vertex?.position || mesh?.positions || mesh?.lods?.[0]?.vertex?.position || mesh?.lods?.[0]?.positions || null;
|
|
456
|
+
}
|
|
457
|
+
|
|
358
458
|
/**
|
|
359
459
|
* Gets the number of vertices represented by flat or nested positions.
|
|
360
460
|
*
|
|
361
461
|
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
362
462
|
* @returns {number}
|
|
363
|
-
*/
|
|
364
|
-
static getPositionCount(positions) {
|
|
365
|
-
if (!positions) return 0;
|
|
366
|
-
return typeof positions[0] === "number" ? Math.floor(positions.length / 3) : positions.length;
|
|
367
|
-
}
|
|
368
|
-
|
|
463
|
+
*/
|
|
464
|
+
static getPositionCount(positions) {
|
|
465
|
+
if (!positions) return 0;
|
|
466
|
+
return typeof positions[0] === "number" ? Math.floor(positions.length / 3) : positions.length;
|
|
467
|
+
}
|
|
468
|
+
|
|
369
469
|
/**
|
|
370
470
|
* Calculates bounds from canonical positions using caller-owned scratch.
|
|
371
471
|
*
|
|
@@ -373,29 +473,29 @@ class TriGeometryRes extends CjsResource {
|
|
|
373
473
|
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
374
474
|
* @param {ArrayLike<number>} point
|
|
375
475
|
* @returns {boolean}
|
|
376
|
-
*/
|
|
377
|
-
static setBoundsFromPositions(out, positions, point) {
|
|
378
|
-
const count = this.getPositionCount(positions);
|
|
379
|
-
let found = false;
|
|
380
|
-
for (let index = 0; index < count; index++) {
|
|
381
|
-
if (!this.copyPosition(point, positions, index)) continue;
|
|
382
|
-
if (!found) {
|
|
383
|
-
out[0] = out[3] = point[0];
|
|
384
|
-
out[1] = out[4] = point[1];
|
|
385
|
-
out[2] = out[5] = point[2];
|
|
386
|
-
found = true;
|
|
387
|
-
continue;
|
|
388
|
-
}
|
|
389
|
-
out[0] = Math.min(out[0], point[0]);
|
|
390
|
-
out[1] = Math.min(out[1], point[1]);
|
|
391
|
-
out[2] = Math.min(out[2], point[2]);
|
|
392
|
-
out[3] = Math.max(out[3], point[0]);
|
|
393
|
-
out[4] = Math.max(out[4], point[1]);
|
|
394
|
-
out[5] = Math.max(out[5], point[2]);
|
|
395
|
-
}
|
|
396
|
-
return found;
|
|
397
|
-
}
|
|
398
|
-
|
|
476
|
+
*/
|
|
477
|
+
static setBoundsFromPositions(out, positions, point) {
|
|
478
|
+
const count = this.getPositionCount(positions);
|
|
479
|
+
let found = false;
|
|
480
|
+
for (let index = 0; index < count; index++) {
|
|
481
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
482
|
+
if (!found) {
|
|
483
|
+
out[0] = out[3] = point[0];
|
|
484
|
+
out[1] = out[4] = point[1];
|
|
485
|
+
out[2] = out[5] = point[2];
|
|
486
|
+
found = true;
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
out[0] = Math.min(out[0], point[0]);
|
|
490
|
+
out[1] = Math.min(out[1], point[1]);
|
|
491
|
+
out[2] = Math.min(out[2], point[2]);
|
|
492
|
+
out[3] = Math.max(out[3], point[0]);
|
|
493
|
+
out[4] = Math.max(out[4], point[1]);
|
|
494
|
+
out[5] = Math.max(out[5], point[2]);
|
|
495
|
+
}
|
|
496
|
+
return found;
|
|
497
|
+
}
|
|
498
|
+
|
|
399
499
|
/**
|
|
400
500
|
* Calculates a bounding sphere from positions using caller-owned scratch.
|
|
401
501
|
*
|
|
@@ -403,42 +503,42 @@ class TriGeometryRes extends CjsResource {
|
|
|
403
503
|
* @param {ArrayLike<number>|Array<ArrayLike<number>>|null} positions
|
|
404
504
|
* @param {ArrayLike<number>} point
|
|
405
505
|
* @returns {boolean}
|
|
406
|
-
*/
|
|
407
|
-
static setSphereFromPositions(out, positions, point) {
|
|
408
|
-
const count = this.getPositionCount(positions);
|
|
409
|
-
let found = false,
|
|
410
|
-
minX = Infinity,
|
|
411
|
-
minY = Infinity,
|
|
412
|
-
minZ = Infinity,
|
|
413
|
-
maxX = -Infinity,
|
|
414
|
-
maxY = -Infinity,
|
|
415
|
-
maxZ = -Infinity;
|
|
416
|
-
for (let index = 0; index < count; index++) {
|
|
417
|
-
if (!this.copyPosition(point, positions, index)) continue;
|
|
418
|
-
minX = Math.min(minX, point[0]);
|
|
419
|
-
minY = Math.min(minY, point[1]);
|
|
420
|
-
minZ = Math.min(minZ, point[2]);
|
|
421
|
-
maxX = Math.max(maxX, point[0]);
|
|
422
|
-
maxY = Math.max(maxY, point[1]);
|
|
423
|
-
maxZ = Math.max(maxZ, point[2]);
|
|
424
|
-
found = true;
|
|
425
|
-
}
|
|
426
|
-
if (!found) return false;
|
|
427
|
-
out[0] = (minX + maxX) * 0.5;
|
|
428
|
-
out[1] = (minY + maxY) * 0.5;
|
|
429
|
-
out[2] = (minZ + maxZ) * 0.5;
|
|
430
|
-
let maxSquaredRadius = 0;
|
|
431
|
-
for (let index = 0; index < count; index++) {
|
|
432
|
-
if (!this.copyPosition(point, positions, index)) continue;
|
|
433
|
-
const x = out[0] - point[0],
|
|
434
|
-
y = out[1] - point[1],
|
|
435
|
-
z = out[2] - point[2];
|
|
436
|
-
maxSquaredRadius = Math.max(maxSquaredRadius, x * x + y * y + z * z);
|
|
437
|
-
}
|
|
438
|
-
out[3] = Math.sqrt(maxSquaredRadius);
|
|
439
|
-
return true;
|
|
440
|
-
}
|
|
441
|
-
|
|
506
|
+
*/
|
|
507
|
+
static setSphereFromPositions(out, positions, point) {
|
|
508
|
+
const count = this.getPositionCount(positions);
|
|
509
|
+
let found = false,
|
|
510
|
+
minX = Infinity,
|
|
511
|
+
minY = Infinity,
|
|
512
|
+
minZ = Infinity,
|
|
513
|
+
maxX = -Infinity,
|
|
514
|
+
maxY = -Infinity,
|
|
515
|
+
maxZ = -Infinity;
|
|
516
|
+
for (let index = 0; index < count; index++) {
|
|
517
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
518
|
+
minX = Math.min(minX, point[0]);
|
|
519
|
+
minY = Math.min(minY, point[1]);
|
|
520
|
+
minZ = Math.min(minZ, point[2]);
|
|
521
|
+
maxX = Math.max(maxX, point[0]);
|
|
522
|
+
maxY = Math.max(maxY, point[1]);
|
|
523
|
+
maxZ = Math.max(maxZ, point[2]);
|
|
524
|
+
found = true;
|
|
525
|
+
}
|
|
526
|
+
if (!found) return false;
|
|
527
|
+
out[0] = (minX + maxX) * 0.5;
|
|
528
|
+
out[1] = (minY + maxY) * 0.5;
|
|
529
|
+
out[2] = (minZ + maxZ) * 0.5;
|
|
530
|
+
let maxSquaredRadius = 0;
|
|
531
|
+
for (let index = 0; index < count; index++) {
|
|
532
|
+
if (!this.copyPosition(point, positions, index)) continue;
|
|
533
|
+
const x = out[0] - point[0],
|
|
534
|
+
y = out[1] - point[1],
|
|
535
|
+
z = out[2] - point[2];
|
|
536
|
+
maxSquaredRadius = Math.max(maxSquaredRadius, x * x + y * y + z * z);
|
|
537
|
+
}
|
|
538
|
+
out[3] = Math.sqrt(maxSquaredRadius);
|
|
539
|
+
return true;
|
|
540
|
+
}
|
|
541
|
+
|
|
442
542
|
/**
|
|
443
543
|
* Calculates a mesh sphere from positions or existing bounds.
|
|
444
544
|
*
|
|
@@ -446,31 +546,31 @@ class TriGeometryRes extends CjsResource {
|
|
|
446
546
|
* @param {object} mesh
|
|
447
547
|
* @param {ArrayLike<number>} point
|
|
448
548
|
* @returns {boolean}
|
|
449
|
-
*/
|
|
450
|
-
static calculateMeshSphere(out, mesh, point) {
|
|
451
|
-
if (this.setSphereFromPositions(out, this.getMeshPositions(mesh), point)) return true;
|
|
452
|
-
const bounds = this.getBounds(mesh);
|
|
453
|
-
if (!bounds) return false;
|
|
454
|
-
sph3.fromBounds(out, bounds.min, bounds.max);
|
|
455
|
-
return true;
|
|
456
|
-
}
|
|
457
|
-
|
|
549
|
+
*/
|
|
550
|
+
static calculateMeshSphere(out, mesh, point) {
|
|
551
|
+
if (this.setSphereFromPositions(out, this.getMeshPositions(mesh), point)) return true;
|
|
552
|
+
const bounds = this.getBounds(mesh);
|
|
553
|
+
if (!bounds) return false;
|
|
554
|
+
sph3.fromBounds(out, bounds.min, bounds.max);
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
557
|
+
|
|
458
558
|
/**
|
|
459
559
|
* Stores a calculated sphere in the mesh's canonical sphere fields.
|
|
460
560
|
*
|
|
461
561
|
* @param {object} mesh
|
|
462
562
|
* @param {ArrayLike<number>} sphere
|
|
463
563
|
* @returns {void}
|
|
464
|
-
*/
|
|
465
|
-
static setMeshSphere(mesh, sphere) {
|
|
466
|
-
if (mesh.sphere && typeof mesh.sphere.set === "function") mesh.sphere.set(sphere);else mesh.sphere = [...sphere];
|
|
467
|
-
if (mesh.boundingSphere && typeof mesh.boundingSphere.set === "function") {
|
|
468
|
-
mesh.boundingSphere.set(sphere);
|
|
469
|
-
} else if ("boundingSphere" in mesh) {
|
|
470
|
-
mesh.boundingSphere = [...sphere];
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
|
|
564
|
+
*/
|
|
565
|
+
static setMeshSphere(mesh, sphere) {
|
|
566
|
+
if (mesh.sphere && typeof mesh.sphere.set === "function") mesh.sphere.set(sphere);else mesh.sphere = [...sphere];
|
|
567
|
+
if (mesh.boundingSphere && typeof mesh.boundingSphere.set === "function") {
|
|
568
|
+
mesh.boundingSphere.set(sphere);
|
|
569
|
+
} else if ("boundingSphere" in mesh) {
|
|
570
|
+
mesh.boundingSphere = [...sphere];
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
|
|
474
574
|
/**
|
|
475
575
|
* Intersects a ray with canonical CPU geometry.
|
|
476
576
|
*
|
|
@@ -479,72 +579,72 @@ class TriGeometryRes extends CjsResource {
|
|
|
479
579
|
* @param {ArrayLike<number>} direction
|
|
480
580
|
* @param {number} areaIndex
|
|
481
581
|
* @returns {object}
|
|
482
|
-
*/
|
|
483
|
-
static intersectGeometry(meshes, position, direction, areaIndex) {
|
|
484
|
-
this.validateRayVector(position, "position");
|
|
485
|
-
this.validateRayVector(direction, "direction");
|
|
486
|
-
const ray = ray3.from(ray3.alloc(), position, direction),
|
|
487
|
-
point = vec3.alloc(),
|
|
488
|
-
vertexA = vec3.alloc(),
|
|
489
|
-
vertexB = vec3.alloc(),
|
|
490
|
-
vertexC = vec3.alloc(),
|
|
491
|
-
normal = vec3.alloc();
|
|
492
|
-
let nearest = null;
|
|
493
|
-
try {
|
|
494
|
-
for (let meshIndex = 0; meshIndex < (meshes?.length || 0); meshIndex++) {
|
|
495
|
-
const mesh = meshes[meshIndex];
|
|
496
|
-
const positions = this.getMeshPositions(mesh);
|
|
497
|
-
if (!positions) continue;
|
|
498
|
-
const groups = mesh?.indices || mesh?.lods?.[0]?.indices || null;
|
|
499
|
-
if (ArrayBuffer.isView(groups) || Array.isArray(groups) && typeof groups[0] === "number") {
|
|
500
|
-
if (areaIndex !== -1 && areaIndex !== 0) continue;
|
|
501
|
-
nearest = this.intersectFaces(nearest, groups, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
502
|
-
continue;
|
|
503
|
-
}
|
|
504
|
-
if (Array.isArray(groups)) {
|
|
505
|
-
for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {
|
|
506
|
-
if (areaIndex !== -1 && areaIndex !== groupIndex) continue;
|
|
507
|
-
const faces = groups[groupIndex]?.faces || groups[groupIndex]?.indices || [];
|
|
508
|
-
nearest = this.intersectFaces(nearest, faces, groupIndex, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
509
|
-
}
|
|
510
|
-
continue;
|
|
511
|
-
}
|
|
512
|
-
if (areaIndex === -1 || areaIndex === 0) {
|
|
513
|
-
nearest = this.intersectFaces(nearest, null, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
return nearest || {
|
|
517
|
-
hit: false,
|
|
518
|
-
boneIndex: -1,
|
|
519
|
-
point: [0, 0, 0],
|
|
520
|
-
normal: [0, 0, 0],
|
|
521
|
-
distance: Infinity,
|
|
522
|
-
meshIndex: -1,
|
|
523
|
-
areaIndex
|
|
524
|
-
};
|
|
525
|
-
} finally {
|
|
526
|
-
vec3.unalloc(normal);
|
|
527
|
-
vec3.unalloc(vertexC);
|
|
528
|
-
vec3.unalloc(vertexB);
|
|
529
|
-
vec3.unalloc(vertexA);
|
|
530
|
-
vec3.unalloc(point);
|
|
531
|
-
ray3.unalloc(ray);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
|
|
582
|
+
*/
|
|
583
|
+
static intersectGeometry(meshes, position, direction, areaIndex) {
|
|
584
|
+
this.validateRayVector(position, "position");
|
|
585
|
+
this.validateRayVector(direction, "direction");
|
|
586
|
+
const ray = ray3.from(ray3.alloc(), position, direction),
|
|
587
|
+
point = vec3.alloc(),
|
|
588
|
+
vertexA = vec3.alloc(),
|
|
589
|
+
vertexB = vec3.alloc(),
|
|
590
|
+
vertexC = vec3.alloc(),
|
|
591
|
+
normal = vec3.alloc();
|
|
592
|
+
let nearest = null;
|
|
593
|
+
try {
|
|
594
|
+
for (let meshIndex = 0; meshIndex < (meshes?.length || 0); meshIndex++) {
|
|
595
|
+
const mesh = meshes[meshIndex];
|
|
596
|
+
const positions = this.getMeshPositions(mesh);
|
|
597
|
+
if (!positions) continue;
|
|
598
|
+
const groups = mesh?.indices || mesh?.lods?.[0]?.indices || null;
|
|
599
|
+
if (ArrayBuffer.isView(groups) || Array.isArray(groups) && typeof groups[0] === "number") {
|
|
600
|
+
if (areaIndex !== -1 && areaIndex !== 0) continue;
|
|
601
|
+
nearest = this.intersectFaces(nearest, groups, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
if (Array.isArray(groups)) {
|
|
605
|
+
for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {
|
|
606
|
+
if (areaIndex !== -1 && areaIndex !== groupIndex) continue;
|
|
607
|
+
const faces = groups[groupIndex]?.faces || groups[groupIndex]?.indices || [];
|
|
608
|
+
nearest = this.intersectFaces(nearest, faces, groupIndex, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
609
|
+
}
|
|
610
|
+
continue;
|
|
611
|
+
}
|
|
612
|
+
if (areaIndex === -1 || areaIndex === 0) {
|
|
613
|
+
nearest = this.intersectFaces(nearest, null, 0, mesh, meshIndex, positions, position, ray, point, vertexA, vertexB, vertexC, normal);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
return nearest || {
|
|
617
|
+
hit: false,
|
|
618
|
+
boneIndex: -1,
|
|
619
|
+
point: [0, 0, 0],
|
|
620
|
+
normal: [0, 0, 0],
|
|
621
|
+
distance: Infinity,
|
|
622
|
+
meshIndex: -1,
|
|
623
|
+
areaIndex
|
|
624
|
+
};
|
|
625
|
+
} finally {
|
|
626
|
+
vec3.unalloc(normal);
|
|
627
|
+
vec3.unalloc(vertexC);
|
|
628
|
+
vec3.unalloc(vertexB);
|
|
629
|
+
vec3.unalloc(vertexA);
|
|
630
|
+
vec3.unalloc(point);
|
|
631
|
+
ray3.unalloc(ray);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
535
635
|
/**
|
|
536
636
|
* Validates a caller-provided ray vector.
|
|
537
637
|
*
|
|
538
638
|
* @param {ArrayLike<number>} value
|
|
539
639
|
* @param {string} name
|
|
540
640
|
* @returns {void}
|
|
541
|
-
*/
|
|
542
|
-
static validateRayVector(value, name) {
|
|
543
|
-
if (!value || value.length < 3 || !Number.isFinite(value[0]) || !Number.isFinite(value[1]) || !Number.isFinite(value[2])) {
|
|
544
|
-
throw new TypeError(`TriGeometryRes ray ${name} must contain three finite numbers.`);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
641
|
+
*/
|
|
642
|
+
static validateRayVector(value, name) {
|
|
643
|
+
if (!value || value.length < 3 || !Number.isFinite(value[0]) || !Number.isFinite(value[1]) || !Number.isFinite(value[2])) {
|
|
644
|
+
throw new TypeError(`TriGeometryRes ray ${name} must contain three finite numbers.`);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
548
648
|
/**
|
|
549
649
|
* Intersects a ray with one flat face list.
|
|
550
650
|
*
|
|
@@ -562,40 +662,40 @@ class TriGeometryRes extends CjsResource {
|
|
|
562
662
|
* @param {ArrayLike<number>} vertexC
|
|
563
663
|
* @param {ArrayLike<number>} normal
|
|
564
664
|
* @returns {object|null}
|
|
565
|
-
*/
|
|
566
|
-
static intersectFaces(nearest, faces, areaIndex, mesh, meshIndex, positions, rayOrigin, ray, point, vertexA, vertexB, vertexC, normal) {
|
|
567
|
-
const count = faces?.length ?? this.getPositionCount(positions);
|
|
568
|
-
for (let index = 0; index + 2 < count; index += 3) {
|
|
569
|
-
const vertexIndexA = faces ? faces[index] : index,
|
|
570
|
-
vertexIndexB = faces ? faces[index + 1] : index + 1,
|
|
571
|
-
vertexIndexC = faces ? faces[index + 2] : index + 2;
|
|
572
|
-
if (!this.copyPosition(vertexA, positions, vertexIndexA) || !this.copyPosition(vertexB, positions, vertexIndexB) || !this.copyPosition(vertexC, positions, vertexIndexC) || !ray3.getIntersectVertices(point, ray, vertexA, vertexB, vertexC, false)) {
|
|
573
|
-
continue;
|
|
574
|
-
}
|
|
575
|
-
const distance = vec3.distance(rayOrigin, point);
|
|
576
|
-
if (nearest && nearest.distance <= distance) continue;
|
|
577
|
-
if (!nearest) {
|
|
578
|
-
nearest = {
|
|
579
|
-
hit: true,
|
|
580
|
-
boneIndex: -1,
|
|
581
|
-
point: [0, 0, 0],
|
|
582
|
-
normal: [0, 0, 0],
|
|
583
|
-
distance,
|
|
584
|
-
meshIndex,
|
|
585
|
-
areaIndex
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
|
-
nearest.boneIndex = this.getMeshBoneIndex(mesh, vertexIndexA);
|
|
589
|
-
vec3.copy(nearest.point, point);
|
|
590
|
-
triangleNormalTo(normal, vertexA, vertexB, vertexC);
|
|
591
|
-
vec3.copy(nearest.normal, normal);
|
|
592
|
-
nearest.distance = distance;
|
|
593
|
-
nearest.meshIndex = meshIndex;
|
|
594
|
-
nearest.areaIndex = areaIndex;
|
|
595
|
-
}
|
|
596
|
-
return nearest;
|
|
597
|
-
}
|
|
598
|
-
|
|
665
|
+
*/
|
|
666
|
+
static intersectFaces(nearest, faces, areaIndex, mesh, meshIndex, positions, rayOrigin, ray, point, vertexA, vertexB, vertexC, normal) {
|
|
667
|
+
const count = faces?.length ?? this.getPositionCount(positions);
|
|
668
|
+
for (let index = 0; index + 2 < count; index += 3) {
|
|
669
|
+
const vertexIndexA = faces ? faces[index] : index,
|
|
670
|
+
vertexIndexB = faces ? faces[index + 1] : index + 1,
|
|
671
|
+
vertexIndexC = faces ? faces[index + 2] : index + 2;
|
|
672
|
+
if (!this.copyPosition(vertexA, positions, vertexIndexA) || !this.copyPosition(vertexB, positions, vertexIndexB) || !this.copyPosition(vertexC, positions, vertexIndexC) || !ray3.getIntersectVertices(point, ray, vertexA, vertexB, vertexC, false)) {
|
|
673
|
+
continue;
|
|
674
|
+
}
|
|
675
|
+
const distance = vec3.distance(rayOrigin, point);
|
|
676
|
+
if (nearest && nearest.distance <= distance) continue;
|
|
677
|
+
if (!nearest) {
|
|
678
|
+
nearest = {
|
|
679
|
+
hit: true,
|
|
680
|
+
boneIndex: -1,
|
|
681
|
+
point: [0, 0, 0],
|
|
682
|
+
normal: [0, 0, 0],
|
|
683
|
+
distance,
|
|
684
|
+
meshIndex,
|
|
685
|
+
areaIndex
|
|
686
|
+
};
|
|
687
|
+
}
|
|
688
|
+
nearest.boneIndex = this.getMeshBoneIndex(mesh, vertexIndexA);
|
|
689
|
+
vec3.copy(nearest.point, point);
|
|
690
|
+
triangleNormalTo(normal, vertexA, vertexB, vertexC);
|
|
691
|
+
vec3.copy(nearest.normal, normal);
|
|
692
|
+
nearest.distance = distance;
|
|
693
|
+
nearest.meshIndex = meshIndex;
|
|
694
|
+
nearest.areaIndex = areaIndex;
|
|
695
|
+
}
|
|
696
|
+
return nearest;
|
|
697
|
+
}
|
|
698
|
+
|
|
599
699
|
/**
|
|
600
700
|
* Copies one flat or nested position into caller-owned output.
|
|
601
701
|
*
|
|
@@ -603,73 +703,76 @@ class TriGeometryRes extends CjsResource {
|
|
|
603
703
|
* @param {ArrayLike<number>|Array<ArrayLike<number>>} positions
|
|
604
704
|
* @param {number} index
|
|
605
705
|
* @returns {boolean}
|
|
606
|
-
*/
|
|
607
|
-
static copyPosition(out, positions, index) {
|
|
608
|
-
if (!Number.isInteger(index) || index < 0) return false;
|
|
609
|
-
if (typeof positions[0] === "number") {
|
|
610
|
-
const offset = index * 3;
|
|
611
|
-
if (offset + 2 >= positions.length) return false;
|
|
612
|
-
out[0] = positions[offset];
|
|
613
|
-
out[1] = positions[offset + 1];
|
|
614
|
-
out[2] = positions[offset + 2];
|
|
615
|
-
return true;
|
|
616
|
-
}
|
|
617
|
-
const point = positions[index];
|
|
618
|
-
if (!point || point.length < 3) return false;
|
|
619
|
-
out[0] = point[0];
|
|
620
|
-
out[1] = point[1];
|
|
621
|
-
out[2] = point[2];
|
|
622
|
-
return true;
|
|
623
|
-
}
|
|
624
|
-
|
|
706
|
+
*/
|
|
707
|
+
static copyPosition(out, positions, index) {
|
|
708
|
+
if (!Number.isInteger(index) || index < 0) return false;
|
|
709
|
+
if (typeof positions[0] === "number") {
|
|
710
|
+
const offset = index * 3;
|
|
711
|
+
if (offset + 2 >= positions.length) return false;
|
|
712
|
+
out[0] = positions[offset];
|
|
713
|
+
out[1] = positions[offset + 1];
|
|
714
|
+
out[2] = positions[offset + 2];
|
|
715
|
+
return true;
|
|
716
|
+
}
|
|
717
|
+
const point = positions[index];
|
|
718
|
+
if (!point || point.length < 3) return false;
|
|
719
|
+
out[0] = point[0];
|
|
720
|
+
out[1] = point[1];
|
|
721
|
+
out[2] = point[2];
|
|
722
|
+
return true;
|
|
723
|
+
}
|
|
724
|
+
|
|
625
725
|
/**
|
|
626
726
|
* Gets the first blend index for a mesh vertex.
|
|
627
727
|
*
|
|
628
728
|
* @param {object} mesh
|
|
629
729
|
* @param {number} vertexIndex
|
|
630
730
|
* @returns {number}
|
|
631
|
-
*/
|
|
632
|
-
static getMeshBoneIndex(mesh, vertexIndex) {
|
|
633
|
-
const indices = mesh?.vertex?.blendIndices || mesh?.blendIndices;
|
|
634
|
-
if (!indices) return -1;
|
|
635
|
-
if (typeof indices[0] === "number") {
|
|
636
|
-
return Number(indices[vertexIndex * 4] ?? indices[vertexIndex] ?? -1);
|
|
637
|
-
}
|
|
638
|
-
return Number(indices[vertexIndex]?.[0] ?? -1);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
// Declared as data rather than with decorators, so the resource tree loads from
|
|
643
|
-
// source without a transform. Field order is key order, and GetValues() exports
|
|
644
|
-
// in that order.
|
|
645
|
-
CjsSchema.define(TriGeometryRes, {
|
|
646
|
-
className: "TriGeometryRes",
|
|
647
|
-
family: "resources",
|
|
648
|
-
fields: {
|
|
649
|
-
forceLod: [type.boolean, io.readwrite],
|
|
650
|
-
forcedLodIndex: [type.int32, io.readwrite],
|
|
651
|
-
name: [type.string, io.readwrite]
|
|
652
|
-
},
|
|
653
|
-
methods: {
|
|
654
|
-
GetMeshCount: [carbon.method, impl.adapted],
|
|
655
|
-
GetAnimationCount: [carbon.method, impl.adapted],
|
|
656
|
-
GetSkeletonCount: [carbon.method, impl.adapted],
|
|
657
|
-
GetSkeletonData: [carbon.method, impl.adapted],
|
|
658
|
-
GetMeshAreaCount: [carbon.method, impl.adapted],
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
731
|
+
*/
|
|
732
|
+
static getMeshBoneIndex(mesh, vertexIndex) {
|
|
733
|
+
const indices = mesh?.vertex?.blendIndices || mesh?.blendIndices;
|
|
734
|
+
if (!indices) return -1;
|
|
735
|
+
if (typeof indices[0] === "number") {
|
|
736
|
+
return Number(indices[vertexIndex * 4] ?? indices[vertexIndex] ?? -1);
|
|
737
|
+
}
|
|
738
|
+
return Number(indices[vertexIndex]?.[0] ?? -1);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// Declared as data rather than with decorators, so the resource tree loads from
|
|
743
|
+
// source without a transform. Field order is key order, and GetValues() exports
|
|
744
|
+
// in that order.
|
|
745
|
+
CjsSchema.define(TriGeometryRes, {
|
|
746
|
+
className: "TriGeometryRes",
|
|
747
|
+
family: "resources",
|
|
748
|
+
fields: {
|
|
749
|
+
forceLod: [type.boolean, io.readwrite],
|
|
750
|
+
forcedLodIndex: [type.int32, io.readwrite],
|
|
751
|
+
name: [type.string, io.readwrite]
|
|
752
|
+
},
|
|
753
|
+
methods: {
|
|
754
|
+
GetMeshCount: [carbon.method, impl.adapted],
|
|
755
|
+
GetAnimationCount: [carbon.method, impl.adapted],
|
|
756
|
+
GetSkeletonCount: [carbon.method, impl.adapted],
|
|
757
|
+
GetSkeletonData: [carbon.method, impl.adapted],
|
|
758
|
+
GetMeshAreaCount: [carbon.method, impl.adapted],
|
|
759
|
+
GetLodIndexForScreenSize: [carbon.method, impl.adapted],
|
|
760
|
+
GetMeshLod: [carbon.method, impl.adapted],
|
|
761
|
+
GetMeshLodByIndex: [carbon.method, impl.adapted],
|
|
762
|
+
GetMeshName: [carbon.method, impl.adapted],
|
|
763
|
+
GetMeshAreaName: [carbon.method, impl.adapted],
|
|
764
|
+
GetAreaBoundingBox: [carbon.method, impl.adapted],
|
|
765
|
+
GetBoundingBox: [carbon.method, impl.adapted],
|
|
766
|
+
GetBoundingSphere: [carbon.method, impl.adapted],
|
|
767
|
+
CalculateBoundingBoxFromTransform: [carbon.method, impl.adapted],
|
|
768
|
+
RecalculateBoundingSphere: [carbon.method, impl.adapted],
|
|
769
|
+
Reload: [carbon.method, impl.notSupported],
|
|
770
|
+
GetIntersectionPointNormalBone: [carbon.method, impl.adapted],
|
|
771
|
+
GetAreaIntersectionPointNormalBone: [carbon.method, impl.adapted],
|
|
772
|
+
GetMeshVertexElements: [carbon.method, impl.adapted],
|
|
773
|
+
SaveMesh: [carbon.method, impl.notSupported]
|
|
774
|
+
}
|
|
775
|
+
});
|
|
776
|
+
|
|
777
|
+
export { TriGeometryRes };
|
|
778
|
+
//# sourceMappingURL=TriGeometryRes.js.map
|