@carbonenginejs/runtime 0.1.0-alpha.4 → 0.1.0-alpha.5
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/dist/global/blue/BlueClasses.js +200 -0
- package/dist/global/blue/BlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueClasses.js +79 -0
- package/dist/global/blue/IBlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js +16 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js.map +1 -1
- package/dist/global/blue/blue.js +8 -2
- package/dist/global/blue/blue.js.map +1 -1
- package/dist/global/blue/index.js +2 -0
- package/dist/global/blue/index.js.map +1 -1
- package/dist/global/consts/index.js +0 -1
- package/dist/global/consts/index.js.map +1 -1
- package/dist/global/consts/renderContext/formats.js +26 -25
- package/dist/global/consts/renderContext/formats.js.map +1 -1
- package/dist/{trinityal/Tr2BitmapDimensions.js → global/imageio/BitmapDimensions.js} +19 -15
- package/dist/global/imageio/BitmapDimensions.js.map +1 -0
- package/dist/global/imageio/Cutout.js +28 -0
- package/dist/global/imageio/Cutout.js.map +1 -0
- package/dist/global/imageio/HostBitmap.js +1106 -0
- package/dist/global/imageio/HostBitmap.js.map +1 -0
- package/dist/global/imageio/ImageIOResult.js +99 -0
- package/dist/global/imageio/ImageIOResult.js.map +1 -0
- package/dist/global/imageio/ImageUtility.js +205 -0
- package/dist/global/imageio/ImageUtility.js.map +1 -0
- package/dist/global/imageio/LoadParameters.js +86 -0
- package/dist/global/imageio/LoadParameters.js.map +1 -0
- package/dist/global/imageio/Metadata.js +22 -0
- package/dist/global/imageio/Metadata.js.map +1 -0
- package/dist/global/imageio/index.js +8 -0
- package/dist/global/{consts/webgpu → imageio}/index.js.map +1 -1
- package/dist/global/index.js +2 -1
- package/dist/global/index.js.map +1 -1
- package/dist/global/math/color.js +1 -1
- package/dist/global/math/color.js.map +1 -1
- package/dist/global/schema/CjsSchema.js +8 -0
- package/dist/global/schema/CjsSchema.js.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsResMan.js +47 -7
- package/dist/resource/CjsResMan.js.map +1 -1
- package/dist/resource/Tr2LightProfileRes.js +37 -0
- package/dist/resource/Tr2LightProfileRes.js.map +1 -1
- package/dist/resource/format/CjsByteWriter.js +46 -46
- package/dist/resource/format/CjsByteWriter.js.map +1 -1
- package/dist/resource/format/CjsFormat.js +7 -8
- package/dist/resource/format/CjsFormat.js.map +1 -1
- package/dist/resource/format/CjsFormatStore.js +8 -8
- package/dist/resource/format/CjsFormatStore.js.map +1 -1
- package/dist/resource/format/CjsGeometryFormat.js +114 -0
- package/dist/resource/format/CjsGeometryFormat.js.map +1 -0
- package/dist/resource/format/CjsImageFormat.js +282 -0
- package/dist/resource/format/CjsImageFormat.js.map +1 -0
- package/dist/resource/format/CjsResourceProbe.js +12 -48
- package/dist/resource/format/CjsResourceProbe.js.map +1 -1
- package/dist/resource/format/CjsStringTable.js +37 -37
- package/dist/resource/format/CjsStringTable.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js +10 -10
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js +37 -37
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +35 -7
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/resource/format/index.js +3 -1
- package/dist/resource/format/index.js.map +1 -1
- package/dist/resource/formats/black/CjsBlackFormat.js +130 -137
- package/dist/resource/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/resource/formats/bnk/CjsBnkFormat.js +12 -19
- package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/resource/formats/bnk/core/helpers.js +1 -3
- package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/CjsCmfFormat.js +19 -82
- package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
- package/dist/resource/formats/cmf/core/constants.js +1 -2
- package/dist/resource/formats/cmf/core/constants.js.map +1 -1
- package/dist/resource/formats/{stl/core/targets.js → cmf/core/flatShared.js} +9 -8
- package/dist/resource/formats/cmf/core/flatShared.js.map +1 -0
- package/dist/resource/formats/cmf/core/helpers.js +13 -13
- package/dist/resource/formats/cmf/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/core/writer.js +24 -24
- package/dist/resource/formats/cmf/core/writer.js.map +1 -1
- package/dist/resource/formats/dds/CjsDdsFormat.js +134 -17
- package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/resource/formats/dds/core/helpers.js +125 -40
- package/dist/resource/formats/dds/core/helpers.js.map +1 -1
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js +14 -16
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{container.js → DxbcContainer.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcContainer.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{errors.js → DxbcReadError.js} +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReadError.js.map +1 -0
- package/dist/resource/formats/dxbc/core/DxbcReader.js +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReader.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{program.js → DxbcShaderProgram.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcShaderProgram.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{signature.js → DxbcSignatureChunk.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcSignatureChunk.js.map +1 -0
- package/dist/resource/formats/dxbc/core/decoder.js +2 -2
- package/dist/resource/formats/dxbc/core/decoder.js.map +1 -1
- package/dist/resource/formats/dxbc/core/helpers.js +3 -3
- package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
- package/dist/resource/formats/fbx/CjsFbxFormat.js +18 -20
- package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/resource/formats/flac/CjsFlacFormat.js +7 -13
- package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js +29 -29
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js +3 -3
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js +23 -23
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js +8 -8
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -1
- package/dist/resource/formats/fsd/CjsFsdFormat.js +23 -23
- package/dist/resource/formats/fsd/CjsFsdFormat.js.map +1 -1
- package/dist/resource/formats/gif/CjsGifFormat.js +24 -15
- package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/resource/formats/gltf/CjsGltfFormat.js +33 -98
- package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/resource/formats/gltf/core/helpers.js +3 -12
- package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
- package/dist/resource/formats/gr2/CjsGr2Format.js +27 -91
- package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/resource/formats/hlsl/CjsHlslFormat.js +22 -25
- package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +3 -3
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -1
- package/dist/resource/formats/ies/CjsIESFormat.js +29 -29
- package/dist/resource/formats/ies/CjsIESFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/CjsJpegFormat.js +24 -15
- package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/core/helpers.js +3 -5
- package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/resource/formats/jpeg/core/jpeg.js +58 -58
- package/dist/resource/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js +3 -3
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js.map +1 -1
- package/dist/resource/formats/mp3/CjsMp3Format.js +7 -14
- package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/resource/formats/mp3/core/helpers.js +3 -5
- package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
- package/dist/resource/formats/mp4/CjsMp4Format.js +7 -13
- package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/resource/formats/mp4/core/helpers.js +3 -5
- package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
- package/dist/resource/formats/obj/CjsObjFormat.js +92 -157
- package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/resource/formats/obj/core/helpers.js +5 -113
- package/dist/resource/formats/obj/core/helpers.js.map +1 -1
- package/dist/resource/formats/ogg/CjsOggFormat.js +7 -14
- package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/resource/formats/pickle/CjsPickleFormat.js +7 -12
- package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js.map +1 -1
- package/dist/resource/formats/png/CjsPngFormat.js +40 -15
- package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/resource/formats/png/core/helpers.js +4 -6
- package/dist/resource/formats/png/core/helpers.js.map +1 -1
- package/dist/resource/formats/red/CjsRedFormat.js +22 -28
- package/dist/resource/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js +3 -7
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js +5 -0
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js.map +1 -1
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js +4 -9
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js.map +1 -1
- package/dist/resource/formats/static/CjsStaticFormat.js +4 -4
- package/dist/resource/formats/static/CjsStaticFormat.js.map +1 -1
- package/dist/resource/formats/stl/CjsStlFormat.js +39 -104
- package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/resource/formats/stl/core/helpers.js +5 -19
- package/dist/resource/formats/stl/core/helpers.js.map +1 -1
- package/dist/resource/formats/tga/CjsTgaFormat.js +26 -15
- package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/resource/formats/tga/core/helpers.js +3 -5
- package/dist/resource/formats/tga/core/helpers.js.map +1 -1
- package/dist/resource/formats/vta/CjsVtaFormat.js +8 -15
- package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
- package/dist/resource/formats/wav/CjsWavFormat.js +7 -14
- package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/resource/formats/wav/core/helpers.js +3 -5
- package/dist/resource/formats/wav/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgl/CjsWebglFormat.js +103 -105
- package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/resource/formats/webgl/core/{errors.js → WebglReadError.js} +1 -1
- package/dist/resource/formats/webgl/core/WebglReadError.js.map +1 -0
- package/dist/resource/formats/webgl/core/effectPackage.js +1 -1
- package/dist/resource/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +3 -3
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/{DxbcGlslHelpers.js → DxbcGlslHelperRegistry.js} +2 -2
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelperRegistry.js.map +1 -0
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js.map +1 -1
- package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +28 -29
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/resource/formats/webgpu/core/{errors.js → WebgpuReadError.js} +1 -1
- package/dist/resource/formats/webgpu/core/WebgpuReadError.js.map +1 -0
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js +1 -1
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js +18 -6
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +39 -13
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +16 -14
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -1
- package/dist/resource/formats/webm/CjsWebmFormat.js +8 -13
- package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/resource/formats/webm/core/helpers.js +3 -5
- package/dist/resource/formats/webm/core/helpers.js.map +1 -1
- package/dist/resource/formats/webp/CjsWebpFormat.js +8 -12
- package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/resource/formats/wem/CjsWemFormat.js +9 -17
- package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/resource/formats/wem/core/bitStream.js +35 -35
- package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
- package/dist/resource/formats/wem/core/helpers.js +1 -3
- package/dist/resource/formats/wem/core/helpers.js.map +1 -1
- package/dist/resource/formats/yaml/CjsYamlFormat.js +28 -37
- package/dist/resource/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/resource/imageio/ImageIO.js +142 -0
- package/dist/resource/imageio/ImageIO.js.map +1 -0
- package/dist/resource/imageio/index.js +17 -0
- package/dist/resource/imageio/index.js.map +1 -0
- package/dist/resource/index.js +7 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +24 -2
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +76 -5
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayConstructor.js +97 -0
- package/dist/resource/texture/CjsTextureArrayConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js +160 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js +72 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js +73 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js +71 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js +123 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js.map +1 -0
- package/dist/resource/texture/SolidColorTextureConstructor.js +11 -1
- package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -1
- package/dist/resource/texture/Tr2ImageRes.js +100 -68
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipeline.js +45 -25
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +34 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +30 -3
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +81 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +36 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +146 -24
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
- package/dist/resource/texture/TriTextureRes.js +151 -29
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/dist/resource/texture/index.js +7 -0
- package/dist/resource/texture/index.js.map +1 -1
- package/dist/resource/texture/registerTextureResources.js +83 -0
- package/dist/resource/texture/registerTextureResources.js.map +1 -0
- package/dist/resource/texture/solidColorTexture.js +10 -19
- package/dist/resource/texture/solidColorTexture.js.map +1 -1
- package/dist/sof/EveSOF.js +39 -7
- package/dist/sof/EveSOF.js.map +1 -1
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js +2 -2
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -1
- package/dist/trinity/core/Tr2ImageIOHelpers.js +80 -17
- package/dist/trinity/core/Tr2ImageIOHelpers.js.map +1 -1
- package/dist/trinity/core/Tr2RenderUtils.js +1 -1
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js +49 -62
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -1
- package/dist/trinity/core/Tr2TextureReference.js +114 -0
- package/dist/trinity/core/Tr2TextureReference.js.map +1 -0
- package/dist/trinity/core/device/Tr2DepthStencil.js +2 -2
- package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js +1 -1
- package/dist/trinity/core/index.js +1 -0
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +5 -4
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/core/procedural/GradientTextureConstructor.js +5 -4
- package/dist/trinity/core/procedural/GradientTextureConstructor.js.map +1 -1
- package/dist/trinity/core/procedural/gradientTexture.js +10 -13
- package/dist/trinity/core/procedural/gradientTexture.js.map +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
- package/dist/trinity/eve/EveImpactOverlay.js +102 -50
- package/dist/trinity/eve/EveImpactOverlay.js.map +1 -1
- package/dist/trinity/eve/EveModularObjectModifier.js +9 -18
- package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +175 -157
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js +100 -83
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +26 -20
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js +368 -179
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -1
- package/dist/trinity/eve/child/EveChildMesh.js +242 -234
- package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildTurret.js +57 -16
- package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js +28 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js.map +1 -1
- package/dist/trinity/eve/index.js +2 -2
- package/dist/trinity/eve/overlays/EveDamageOverlay.js +5 -1
- package/dist/trinity/eve/overlays/EveDamageOverlay.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceScene.js +234 -233
- package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +2 -0
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +492 -437
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -1
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +3 -3
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +10 -1
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
- package/dist/trinity/shader/Tr2DataTextureManager.js +152 -66
- package/dist/trinity/shader/Tr2DataTextureManager.js.map +1 -1
- package/dist/trinity/shader/Tr2Material.js +1 -1
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js +5 -5
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -1
- package/dist/trinityal/index.js +1 -1
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js +2 -2
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2SwapChainALStub.js +45 -45
- package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2TextureALStub.js +170 -170
- package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js +234 -164
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +7 -0
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +78 -14
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +94 -0
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -0
- package/dist/trinityal/webgpu/internal.js +1 -0
- package/dist/trinityal/webgpu/internal.js.map +1 -1
- package/docs/global/reference/classes/README.md +90 -0
- package/docs/resource/concepts/format-capabilities.md +3 -3
- package/docs/resource/formats/README.md +1 -1
- package/docs/resource/reference/classes/core.md +31 -1
- package/docs/resource/reference/classes/formats.md +7 -7
- package/docs/resource/reference/classes/resources.md +76 -16
- package/docs/trinity/reference/classes/generated.md +0 -10
- package/docs/trinity/reference/classes/trinity-core.md +1692 -1682
- package/docs/trinityal/reference/classes/README.md +0 -10
- package/docs/trinityal/webgpu/reference/classes/README.md +276 -266
- package/package.json +4 -3
- package/dist/global/consts/webgpu/index.js +0 -2
- package/dist/global/consts/webgpu/textureFormats.js +0 -180
- package/dist/global/consts/webgpu/textureFormats.js.map +0 -1
- package/dist/resource/formats/dxbc/core/container.js.map +0 -1
- package/dist/resource/formats/dxbc/core/errors.js.map +0 -1
- package/dist/resource/formats/dxbc/core/program.js.map +0 -1
- package/dist/resource/formats/dxbc/core/signature.js.map +0 -1
- package/dist/resource/formats/stl/core/targets.js.map +0 -1
- package/dist/resource/formats/webgl/core/errors.js.map +0 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +0 -1
- package/dist/resource/formats/webgpu/core/errors.js.map +0 -1
- package/dist/resource/texture/texturePipelineBehavior.js +0 -332
- package/dist/resource/texture/texturePipelineBehavior.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js +0 -40
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js.map +0 -1
- package/dist/trinityal/Tr2BitmapDimensions.js.map +0 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { CjsFormat } from './CjsFormat.js';
|
|
2
|
+
import { ImageIOResult, Cutout, HostBitmap, BitmapDimensions } from '#imageio';
|
|
3
|
+
import { PixelFormatFromCanonical, PixelFormat, IsCompressedFormat } from '#consts/render-context';
|
|
4
|
+
import { canDecodeDdsBlockFormat, decodeDdsSlice } from '../formats/dds/core/helpers.js';
|
|
5
|
+
|
|
6
|
+
/** PixelFormat -> the block decoders' format string (the inverse of PixelFormatFromCanonical). */
|
|
7
|
+
const CANONICAL_BY_PIXEL_FORMAT = new Map(Object.entries(PixelFormatFromCanonical).map(([name, value]) => [value, name]));
|
|
8
|
+
|
|
9
|
+
/** sRGB block formats decode to the sRGB variant of RGBA8; everything else to linear. */
|
|
10
|
+
const SRGB_BLOCK_FORMATS = new Set([PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB, PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB]);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The base of every image format: it gives each subclass Carbon's image-handler
|
|
14
|
+
* table and the step that turns a native read into the format a caller asked
|
|
15
|
+
* for.
|
|
16
|
+
*
|
|
17
|
+
* `Format.carbon` IS Carbon's `ImageIO::ImageFormatFunctions`
|
|
18
|
+
* (imageio/include/Tr2ImageHandler.h:74-80) - `checkExtension`, `readImage`,
|
|
19
|
+
* `isSaveSupported`, `save` - built per subclass from its hooks, so the ImageIO
|
|
20
|
+
* registry in resource/imageio can register any image format the way Carbon's
|
|
21
|
+
* `RegisterImageIOHandlers` registers its handlers. Carbon has seven handlers;
|
|
22
|
+
* we have more formats, and each one gets the table by extending this class.
|
|
23
|
+
*
|
|
24
|
+
* A subclass supplies:
|
|
25
|
+
* - `static extensions` (already declared by every format) for checkExtension;
|
|
26
|
+
* - `static readImageNative(bytes, loadParameters, bitmap, metadata)`, which
|
|
27
|
+
* fills the bitmap it is handed in its natural format and returns an
|
|
28
|
+
* ImageIOResult. It calls methods on the bitmap; it never imports HostBitmap.
|
|
29
|
+
*
|
|
30
|
+
* NOT CARBON: `LoadParameters.requestedFormat`. When a caller asks for a format
|
|
31
|
+
* other than the native one, `readImage` converts after the native read
|
|
32
|
+
* (`convertImage`): HostBitmap's own ConvertFormat, then block decode. Encoding
|
|
33
|
+
* to a block format is the next step here, so every image format inherits it
|
|
34
|
+
* from this one place (/docs/projects/hostbitmap-port.md).
|
|
35
|
+
*/
|
|
36
|
+
class CjsImageFormat extends CjsFormat {
|
|
37
|
+
/**
|
|
38
|
+
* Carbon's handler table for this format class, built once per subclass.
|
|
39
|
+
*
|
|
40
|
+
* @returns {{checkExtension: Function, readImage: Function, isSaveSupported: Function, save: Function}} The table.
|
|
41
|
+
*/
|
|
42
|
+
static get carbon() {
|
|
43
|
+
if (!Object.hasOwn(this, "_carbon")) {
|
|
44
|
+
this._carbon = {
|
|
45
|
+
checkExtension: extension => this.checkExtension(extension),
|
|
46
|
+
readImage: (bytes, loadParameters, bitmap, metadata = null) => this.readImage(bytes, loadParameters, bitmap, metadata),
|
|
47
|
+
// Not Carbon: see readImageAsync.
|
|
48
|
+
readImageAsync: (bytes, loadParameters, bitmap, metadata = null) => this.readImageAsync(bytes, loadParameters, bitmap, metadata),
|
|
49
|
+
isSaveSupported: dimensions => this.isSaveSupported(dimensions),
|
|
50
|
+
save: (bitmap, metadata = null) => this.save(bitmap, metadata)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return this._carbon;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Whether an extension (without the dot) is one of this format's, case-insensitively.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} extension Extension.
|
|
60
|
+
* @returns {boolean} Whether this format reads it.
|
|
61
|
+
*/
|
|
62
|
+
static checkExtension(extension) {
|
|
63
|
+
const wanted = `.${extension.toLowerCase()}`;
|
|
64
|
+
return this.extensions.includes(wanted);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Fill `bitmap` in the format's natural pixel format. Every image format
|
|
69
|
+
* implements this.
|
|
70
|
+
*
|
|
71
|
+
* @param {Uint8Array} _bytes File bytes.
|
|
72
|
+
* @param {LoadParameters} _loadParameters Load parameters.
|
|
73
|
+
* @param {object} _bitmap Destination HostBitmap.
|
|
74
|
+
* @param {object|null} _metadata Optional Metadata out.
|
|
75
|
+
* @returns {ImageIOResult} The result.
|
|
76
|
+
*/
|
|
77
|
+
static readImageNative(_bytes, _loadParameters, _bitmap, _metadata) {
|
|
78
|
+
throw new Error(`${this.name}.readImageNative is not implemented`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Fill a bitmap from one of our readers' RGBA8 outputs (`read(bytes, { emit: "rgba" })`),
|
|
83
|
+
* for the formats whose decoders already produce one: PNG, JPEG, TGA, GIF.
|
|
84
|
+
*
|
|
85
|
+
* The bitmap is a single-mip 2D B8G8R8A8_UNORM image, as Carbon's JPEG handler
|
|
86
|
+
* and its PNG/TGA handlers for images with alpha produce, and as the texture
|
|
87
|
+
* pipeline's pack step requires of its inputs (BGRA, BGRX or R8).
|
|
88
|
+
*
|
|
89
|
+
* adapted: Carbon's PNG/TGA handlers keep an opaque RGB image as BGRX and a
|
|
90
|
+
* grey one as R8 (Tr2PngHandler.cpp:125-160, Tr2TgaHandler.cpp:98-110); our
|
|
91
|
+
* decoders report RGBA only, so those arrive as BGRA with their alpha. The
|
|
92
|
+
* metadata cutout is the default: the PNG cutout chunk is not read yet.
|
|
93
|
+
*
|
|
94
|
+
* @param {object} payload An RGBA8 payload: width, height, data, strideBytes.
|
|
95
|
+
* @param {object} bitmap Destination HostBitmap.
|
|
96
|
+
* @param {object|null} [metadata] Optional Metadata out.
|
|
97
|
+
* @returns {ImageIOResult} The result.
|
|
98
|
+
*/
|
|
99
|
+
static readImageFromRgbaPayload(payload, bitmap, metadata = null) {
|
|
100
|
+
if (!(payload.data instanceof Uint8Array)) {
|
|
101
|
+
return new ImageIOResult(ImageIOResult.Code.HEADER_NOT_SUPPORTED, `${payload.pixelFormat} is not an 8-bit image`);
|
|
102
|
+
}
|
|
103
|
+
if (!bitmap.Create(payload.width, payload.height, 1, PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM)) {
|
|
104
|
+
return new ImageIOResult(ImageIOResult.Code.ERROR_CREATING_BITMAP);
|
|
105
|
+
}
|
|
106
|
+
const dst = bitmap.GetRawData();
|
|
107
|
+
const row = payload.width * 4;
|
|
108
|
+
const stride = payload.strideBytes || row;
|
|
109
|
+
for (let y = 0; y < payload.height; y++) {
|
|
110
|
+
dst.set(payload.data.subarray(y * stride, y * stride + row), y * row);
|
|
111
|
+
}
|
|
112
|
+
bitmap.ConvertFormat(PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM);
|
|
113
|
+
if (metadata) metadata.cutout = new Cutout();
|
|
114
|
+
return new ImageIOResult(ImageIOResult.Code.OK);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* The asynchronous native read. Defaults to the synchronous one; a format
|
|
119
|
+
* whose decoder is asynchronous (PNG, which inflates through the browser's
|
|
120
|
+
* DecompressionStream) overrides this instead.
|
|
121
|
+
*
|
|
122
|
+
* @param {Uint8Array} bytes File bytes.
|
|
123
|
+
* @param {LoadParameters} loadParameters Load parameters.
|
|
124
|
+
* @param {object} bitmap Destination HostBitmap.
|
|
125
|
+
* @param {object|null} metadata Optional Metadata out.
|
|
126
|
+
* @returns {Promise<ImageIOResult>} The result.
|
|
127
|
+
*/
|
|
128
|
+
static async readImageNativeAsync(bytes, loadParameters, bitmap, metadata) {
|
|
129
|
+
return this.readImageNative(bytes, loadParameters, bitmap, metadata);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* `readImage` for any image format, including those whose decoder is
|
|
134
|
+
* asynchronous.
|
|
135
|
+
*
|
|
136
|
+
* Not Carbon: Carbon's ReadImage is synchronous because its zlib is. In a
|
|
137
|
+
* browser, inflation is DecompressionStream, which has only an asynchronous
|
|
138
|
+
* API, so PNG cannot answer the synchronous call. Resource loading is
|
|
139
|
+
* asynchronous anyway; every format answers this one.
|
|
140
|
+
*
|
|
141
|
+
* @param {Uint8Array} bytes File bytes.
|
|
142
|
+
* @param {LoadParameters} loadParameters Load parameters.
|
|
143
|
+
* @param {object} bitmap Destination HostBitmap.
|
|
144
|
+
* @param {object|null} [metadata] Optional Metadata out.
|
|
145
|
+
* @returns {Promise<ImageIOResult>} The result.
|
|
146
|
+
*/
|
|
147
|
+
static async readImageAsync(bytes, loadParameters, bitmap, metadata = null) {
|
|
148
|
+
const result = await this.readImageNativeAsync(bytes, loadParameters, bitmap, metadata);
|
|
149
|
+
return this._finishRead(result, loadParameters, bitmap);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Read an image into `bitmap`, then convert it to `loadParameters.requestedFormat`
|
|
154
|
+
* when one is asked for.
|
|
155
|
+
*
|
|
156
|
+
* @param {Uint8Array} bytes File bytes.
|
|
157
|
+
* @param {LoadParameters} loadParameters Load parameters.
|
|
158
|
+
* @param {object} bitmap Destination HostBitmap.
|
|
159
|
+
* @param {object|null} [metadata] Optional Metadata out.
|
|
160
|
+
* @returns {ImageIOResult} The result.
|
|
161
|
+
*/
|
|
162
|
+
static readImage(bytes, loadParameters, bitmap, metadata = null) {
|
|
163
|
+
return this._finishRead(this.readImageNative(bytes, loadParameters, bitmap, metadata), loadParameters, bitmap);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** The conversion to the requested format, shared by both reads. */
|
|
167
|
+
static _finishRead(result, loadParameters, bitmap) {
|
|
168
|
+
if (!result.IsOk()) return result;
|
|
169
|
+
const requested = loadParameters.requestedFormat;
|
|
170
|
+
if (requested === null || requested === bitmap.GetFormat()) return result;
|
|
171
|
+
if (!this.convertImage(bitmap, requested)) {
|
|
172
|
+
return new ImageIOResult(ImageIOResult.Code.ERROR_CONVERTING_FORMAT, `cannot convert pixel format ${bitmap.GetFormat()} to ${requested} yet`);
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Convert a bitmap in place to a pixel format, for every image format.
|
|
179
|
+
*
|
|
180
|
+
* First HostBitmap's own conversions (Carbon's ConvertFormat); then, for
|
|
181
|
+
* block-compressed data, a decode of every mip of every array element (and
|
|
182
|
+
* every slice of a volume) to RGBA8 - or RGBA32F for BC6H - followed by
|
|
183
|
+
* Carbon's conversion from there when the request was, say, BGRA. sRGB is
|
|
184
|
+
* kept: an sRGB block format decodes to R8G8B8A8_UNORM_SRGB.
|
|
185
|
+
*
|
|
186
|
+
* Not Carbon: D3D takes block formats directly, so Carbon never decodes. A
|
|
187
|
+
* browser may refuse a block format (/docs/projects/hostbitmap-port.md,
|
|
188
|
+
* "Declared divergence"). Encoding to a block format is the next step.
|
|
189
|
+
*
|
|
190
|
+
* @param {HostBitmap} bitmap Bitmap to convert in place.
|
|
191
|
+
* @param {number} requested A `PixelFormat` value.
|
|
192
|
+
* @returns {boolean} Whether the bitmap is now in the requested format.
|
|
193
|
+
*/
|
|
194
|
+
static convertImage(bitmap, requested) {
|
|
195
|
+
if (bitmap.ConvertFormat(requested)) return true;
|
|
196
|
+
const source = bitmap.GetFormat();
|
|
197
|
+
const name = CANONICAL_BY_PIXEL_FORMAT.get(source);
|
|
198
|
+
if (!IsCompressedFormat(source) || !canDecodeDdsBlockFormat(name)) return false;
|
|
199
|
+
const decoded = this.decodeBlocks(bitmap, name);
|
|
200
|
+
if (!decoded) return false;
|
|
201
|
+
if (decoded.GetFormat() !== requested && !decoded.ConvertFormat(requested)) return false;
|
|
202
|
+
bitmap.Swap(decoded);
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Decode a block-compressed bitmap into a new uncompressed one.
|
|
208
|
+
*
|
|
209
|
+
* @param {HostBitmap} bitmap Block-compressed source.
|
|
210
|
+
* @param {string} name The source's block format string, e.g. "bc7-rgba-unorm".
|
|
211
|
+
* @returns {HostBitmap|null} The decoded bitmap.
|
|
212
|
+
*/
|
|
213
|
+
static decodeBlocks(bitmap, name) {
|
|
214
|
+
const isFloat = name.startsWith("bc6h-");
|
|
215
|
+
const format = isFloat ? PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT : SRGB_BLOCK_FORMATS.has(bitmap.GetFormat()) ? PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB : PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM;
|
|
216
|
+
const target = new HostBitmap();
|
|
217
|
+
const created = target.CreateFromBitmapDimensions(new BitmapDimensions({
|
|
218
|
+
type: bitmap.GetType(),
|
|
219
|
+
format,
|
|
220
|
+
width: bitmap.GetWidth(),
|
|
221
|
+
height: bitmap.GetHeight(),
|
|
222
|
+
depth: bitmap.GetDepth(),
|
|
223
|
+
mipCount: bitmap.GetMipCount(),
|
|
224
|
+
arraySize: bitmap.GetArraySize()
|
|
225
|
+
}));
|
|
226
|
+
if (!created) return null;
|
|
227
|
+
const mips = bitmap.GetTrueMipCount();
|
|
228
|
+
for (let element = 0; element < bitmap.GetArraySize(); element++) {
|
|
229
|
+
for (let mip = 0; mip < mips; mip++) {
|
|
230
|
+
const width = Math.max(bitmap.GetWidth() >>> mip, 1);
|
|
231
|
+
const height = Math.max(bitmap.GetHeight() >>> mip, 1);
|
|
232
|
+
const depth = bitmap.GetMipDepth(mip);
|
|
233
|
+
const sliceBytes = bitmap.GetMipSize(mip) / depth;
|
|
234
|
+
const rowPitch = bitmap.GetMipPitch(mip);
|
|
235
|
+
const src = bitmap.GetMipRawData(mip, element);
|
|
236
|
+
const dst = target.GetMipRawData(mip, element);
|
|
237
|
+
const dstSlice = target.GetMipSize(mip) / depth;
|
|
238
|
+
for (let slice = 0; slice < depth; slice++) {
|
|
239
|
+
const pixels = decodeDdsSlice(src.subarray(slice * sliceBytes, (slice + 1) * sliceBytes), {
|
|
240
|
+
width,
|
|
241
|
+
height,
|
|
242
|
+
pixelFormat: name
|
|
243
|
+
}, {
|
|
244
|
+
rowPitch
|
|
245
|
+
});
|
|
246
|
+
dst.set(new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength), slice * dstSlice);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return target;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Whether this format can save a bitmap of these dimensions. Formats that
|
|
255
|
+
* write override this.
|
|
256
|
+
*
|
|
257
|
+
* @param {object} _dimensions BitmapDimensions.
|
|
258
|
+
* @returns {ImageIOResult} METHOD_NOT_SUPPORTED unless overridden.
|
|
259
|
+
*/
|
|
260
|
+
static isSaveSupported(_dimensions) {
|
|
261
|
+
return new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Save a bitmap. Formats that write override this.
|
|
266
|
+
*
|
|
267
|
+
* adapted: Carbon writes to a stream; this returns `{result, bytes}`.
|
|
268
|
+
*
|
|
269
|
+
* @param {object} _bitmap HostBitmap.
|
|
270
|
+
* @param {object|null} _metadata Optional Metadata.
|
|
271
|
+
* @returns {{result: ImageIOResult, bytes: Uint8Array|null}} The outcome.
|
|
272
|
+
*/
|
|
273
|
+
static save(_bitmap, _metadata = null) {
|
|
274
|
+
return {
|
|
275
|
+
result: new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED),
|
|
276
|
+
bytes: null
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export { CjsImageFormat };
|
|
282
|
+
//# sourceMappingURL=CjsImageFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CjsImageFormat.js","sources":["../../../../src/resource/format/CjsImageFormat.js"],"sourcesContent":["import { CjsFormat } from \"./CjsFormat.js\";\nimport { BitmapDimensions, Cutout, HostBitmap, ImageIOResult, LoadParameters } from \"#imageio\";\nimport { IsCompressedFormat, PixelFormat, PixelFormatFromCanonical } from \"#consts/render-context\";\nimport { canDecodeDdsBlockFormat, decodeDdsSlice } from \"../formats/dds/core/helpers.js\";\n\n/** PixelFormat -> the block decoders' format string (the inverse of PixelFormatFromCanonical). */\nconst CANONICAL_BY_PIXEL_FORMAT = new Map(Object.entries(PixelFormatFromCanonical).map(([ name, value ]) => [ value, name ]));\n\n/** sRGB block formats decode to the sRGB variant of RGBA8; everything else to linear. */\nconst SRGB_BLOCK_FORMATS = new Set([\n PixelFormat.PIXEL_FORMAT_BC1_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC2_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC3_UNORM_SRGB,\n PixelFormat.PIXEL_FORMAT_BC7_UNORM_SRGB\n]);\n\n/**\n * The base of every image format: it gives each subclass Carbon's image-handler\n * table and the step that turns a native read into the format a caller asked\n * for.\n *\n * `Format.carbon` IS Carbon's `ImageIO::ImageFormatFunctions`\n * (imageio/include/Tr2ImageHandler.h:74-80) - `checkExtension`, `readImage`,\n * `isSaveSupported`, `save` - built per subclass from its hooks, so the ImageIO\n * registry in resource/imageio can register any image format the way Carbon's\n * `RegisterImageIOHandlers` registers its handlers. Carbon has seven handlers;\n * we have more formats, and each one gets the table by extending this class.\n *\n * A subclass supplies:\n * - `static extensions` (already declared by every format) for checkExtension;\n * - `static readImageNative(bytes, loadParameters, bitmap, metadata)`, which\n * fills the bitmap it is handed in its natural format and returns an\n * ImageIOResult. It calls methods on the bitmap; it never imports HostBitmap.\n *\n * NOT CARBON: `LoadParameters.requestedFormat`. When a caller asks for a format\n * other than the native one, `readImage` converts after the native read\n * (`convertImage`): HostBitmap's own ConvertFormat, then block decode. Encoding\n * to a block format is the next step here, so every image format inherits it\n * from this one place (/docs/projects/hostbitmap-port.md).\n */\nexport class CjsImageFormat extends CjsFormat\n{\n\n /**\n * Carbon's handler table for this format class, built once per subclass.\n *\n * @returns {{checkExtension: Function, readImage: Function, isSaveSupported: Function, save: Function}} The table.\n */\n static get carbon()\n {\n if (!Object.hasOwn(this, \"_carbon\"))\n {\n this._carbon = {\n checkExtension: extension => this.checkExtension(extension),\n readImage: (bytes, loadParameters, bitmap, metadata = null) => this.readImage(bytes, loadParameters, bitmap, metadata),\n // Not Carbon: see readImageAsync.\n readImageAsync: (bytes, loadParameters, bitmap, metadata = null) => this.readImageAsync(bytes, loadParameters, bitmap, metadata),\n isSaveSupported: dimensions => this.isSaveSupported(dimensions),\n save: (bitmap, metadata = null) => this.save(bitmap, metadata)\n };\n }\n\n return this._carbon;\n }\n\n /**\n * Whether an extension (without the dot) is one of this format's, case-insensitively.\n *\n * @param {string} extension Extension.\n * @returns {boolean} Whether this format reads it.\n */\n static checkExtension(extension)\n {\n const wanted = `.${extension.toLowerCase()}`;\n\n return this.extensions.includes(wanted);\n }\n\n /**\n * Fill `bitmap` in the format's natural pixel format. Every image format\n * implements this.\n *\n * @param {Uint8Array} _bytes File bytes.\n * @param {LoadParameters} _loadParameters Load parameters.\n * @param {object} _bitmap Destination HostBitmap.\n * @param {object|null} _metadata Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImageNative(_bytes, _loadParameters, _bitmap, _metadata)\n {\n throw new Error(`${this.name}.readImageNative is not implemented`);\n }\n\n /**\n * Fill a bitmap from one of our readers' RGBA8 outputs (`read(bytes, { emit: \"rgba\" })`),\n * for the formats whose decoders already produce one: PNG, JPEG, TGA, GIF.\n *\n * The bitmap is a single-mip 2D B8G8R8A8_UNORM image, as Carbon's JPEG handler\n * and its PNG/TGA handlers for images with alpha produce, and as the texture\n * pipeline's pack step requires of its inputs (BGRA, BGRX or R8).\n *\n * adapted: Carbon's PNG/TGA handlers keep an opaque RGB image as BGRX and a\n * grey one as R8 (Tr2PngHandler.cpp:125-160, Tr2TgaHandler.cpp:98-110); our\n * decoders report RGBA only, so those arrive as BGRA with their alpha. The\n * metadata cutout is the default: the PNG cutout chunk is not read yet.\n *\n * @param {object} payload An RGBA8 payload: width, height, data, strideBytes.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImageFromRgbaPayload(payload, bitmap, metadata = null)\n {\n if (!(payload.data instanceof Uint8Array))\n {\n return new ImageIOResult(ImageIOResult.Code.HEADER_NOT_SUPPORTED, `${payload.pixelFormat} is not an 8-bit image`);\n }\n\n if (!bitmap.Create(payload.width, payload.height, 1, PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM))\n {\n return new ImageIOResult(ImageIOResult.Code.ERROR_CREATING_BITMAP);\n }\n\n const dst = bitmap.GetRawData();\n const row = payload.width * 4;\n const stride = payload.strideBytes || row;\n\n for (let y = 0; y < payload.height; y++)\n {\n dst.set(payload.data.subarray(y * stride, y * stride + row), y * row);\n }\n\n bitmap.ConvertFormat(PixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM);\n\n if (metadata) metadata.cutout = new Cutout();\n\n return new ImageIOResult(ImageIOResult.Code.OK);\n }\n\n /**\n * The asynchronous native read. Defaults to the synchronous one; a format\n * whose decoder is asynchronous (PNG, which inflates through the browser's\n * DecompressionStream) overrides this instead.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} metadata Optional Metadata out.\n * @returns {Promise<ImageIOResult>} The result.\n */\n static async readImageNativeAsync(bytes, loadParameters, bitmap, metadata)\n {\n return this.readImageNative(bytes, loadParameters, bitmap, metadata);\n }\n\n /**\n * `readImage` for any image format, including those whose decoder is\n * asynchronous.\n *\n * Not Carbon: Carbon's ReadImage is synchronous because its zlib is. In a\n * browser, inflation is DecompressionStream, which has only an asynchronous\n * API, so PNG cannot answer the synchronous call. Resource loading is\n * asynchronous anyway; every format answers this one.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {Promise<ImageIOResult>} The result.\n */\n static async readImageAsync(bytes, loadParameters, bitmap, metadata = null)\n {\n const result = await this.readImageNativeAsync(bytes, loadParameters, bitmap, metadata);\n\n return this._finishRead(result, loadParameters, bitmap);\n }\n\n /**\n * Read an image into `bitmap`, then convert it to `loadParameters.requestedFormat`\n * when one is asked for.\n *\n * @param {Uint8Array} bytes File bytes.\n * @param {LoadParameters} loadParameters Load parameters.\n * @param {object} bitmap Destination HostBitmap.\n * @param {object|null} [metadata] Optional Metadata out.\n * @returns {ImageIOResult} The result.\n */\n static readImage(bytes, loadParameters, bitmap, metadata = null)\n {\n return this._finishRead(this.readImageNative(bytes, loadParameters, bitmap, metadata), loadParameters, bitmap);\n }\n\n /** The conversion to the requested format, shared by both reads. */\n static _finishRead(result, loadParameters, bitmap)\n {\n if (!result.IsOk()) return result;\n\n const requested = loadParameters.requestedFormat;\n\n if (requested === null || requested === bitmap.GetFormat()) return result;\n\n if (!this.convertImage(bitmap, requested))\n {\n return new ImageIOResult(ImageIOResult.Code.ERROR_CONVERTING_FORMAT,\n `cannot convert pixel format ${bitmap.GetFormat()} to ${requested} yet`);\n }\n\n return result;\n }\n\n /**\n * Convert a bitmap in place to a pixel format, for every image format.\n *\n * First HostBitmap's own conversions (Carbon's ConvertFormat); then, for\n * block-compressed data, a decode of every mip of every array element (and\n * every slice of a volume) to RGBA8 - or RGBA32F for BC6H - followed by\n * Carbon's conversion from there when the request was, say, BGRA. sRGB is\n * kept: an sRGB block format decodes to R8G8B8A8_UNORM_SRGB.\n *\n * Not Carbon: D3D takes block formats directly, so Carbon never decodes. A\n * browser may refuse a block format (/docs/projects/hostbitmap-port.md,\n * \"Declared divergence\"). Encoding to a block format is the next step.\n *\n * @param {HostBitmap} bitmap Bitmap to convert in place.\n * @param {number} requested A `PixelFormat` value.\n * @returns {boolean} Whether the bitmap is now in the requested format.\n */\n static convertImage(bitmap, requested)\n {\n if (bitmap.ConvertFormat(requested)) return true;\n\n const source = bitmap.GetFormat();\n const name = CANONICAL_BY_PIXEL_FORMAT.get(source);\n\n if (!IsCompressedFormat(source) || !canDecodeDdsBlockFormat(name)) return false;\n\n const decoded = this.decodeBlocks(bitmap, name);\n if (!decoded) return false;\n\n if (decoded.GetFormat() !== requested && !decoded.ConvertFormat(requested)) return false;\n\n bitmap.Swap(decoded);\n\n return true;\n }\n\n /**\n * Decode a block-compressed bitmap into a new uncompressed one.\n *\n * @param {HostBitmap} bitmap Block-compressed source.\n * @param {string} name The source's block format string, e.g. \"bc7-rgba-unorm\".\n * @returns {HostBitmap|null} The decoded bitmap.\n */\n static decodeBlocks(bitmap, name)\n {\n const isFloat = name.startsWith(\"bc6h-\");\n const format = isFloat\n ? PixelFormat.PIXEL_FORMAT_R32G32B32A32_FLOAT\n : (SRGB_BLOCK_FORMATS.has(bitmap.GetFormat()) ? PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB : PixelFormat.PIXEL_FORMAT_R8G8B8A8_UNORM);\n\n const target = new HostBitmap();\n const created = target.CreateFromBitmapDimensions(new BitmapDimensions({\n type: bitmap.GetType(),\n format,\n width: bitmap.GetWidth(),\n height: bitmap.GetHeight(),\n depth: bitmap.GetDepth(),\n mipCount: bitmap.GetMipCount(),\n arraySize: bitmap.GetArraySize()\n }));\n\n if (!created) return null;\n\n const mips = bitmap.GetTrueMipCount();\n\n for (let element = 0; element < bitmap.GetArraySize(); element++)\n {\n for (let mip = 0; mip < mips; mip++)\n {\n const width = Math.max(bitmap.GetWidth() >>> mip, 1);\n const height = Math.max(bitmap.GetHeight() >>> mip, 1);\n const depth = bitmap.GetMipDepth(mip);\n const sliceBytes = bitmap.GetMipSize(mip) / depth;\n const rowPitch = bitmap.GetMipPitch(mip);\n const src = bitmap.GetMipRawData(mip, element);\n const dst = target.GetMipRawData(mip, element);\n const dstSlice = target.GetMipSize(mip) / depth;\n\n for (let slice = 0; slice < depth; slice++)\n {\n const pixels = decodeDdsSlice(src.subarray(slice * sliceBytes, (slice + 1) * sliceBytes), { width, height, pixelFormat: name }, { rowPitch });\n dst.set(new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength), slice * dstSlice);\n }\n }\n }\n\n return target;\n }\n\n /**\n * Whether this format can save a bitmap of these dimensions. Formats that\n * write override this.\n *\n * @param {object} _dimensions BitmapDimensions.\n * @returns {ImageIOResult} METHOD_NOT_SUPPORTED unless overridden.\n */\n static isSaveSupported(_dimensions)\n {\n return new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED);\n }\n\n /**\n * Save a bitmap. Formats that write override this.\n *\n * adapted: Carbon writes to a stream; this returns `{result, bytes}`.\n *\n * @param {object} _bitmap HostBitmap.\n * @param {object|null} _metadata Optional Metadata.\n * @returns {{result: ImageIOResult, bytes: Uint8Array|null}} The outcome.\n */\n static save(_bitmap, _metadata = null)\n {\n return { result: new ImageIOResult(ImageIOResult.Code.METHOD_NOT_SUPPORTED), bytes: null };\n }\n\n}\n"],"names":["CANONICAL_BY_PIXEL_FORMAT","Map","Object","entries","PixelFormatFromCanonical","map","name","value","SRGB_BLOCK_FORMATS","Set","PixelFormat","PIXEL_FORMAT_BC1_UNORM_SRGB","PIXEL_FORMAT_BC2_UNORM_SRGB","PIXEL_FORMAT_BC3_UNORM_SRGB","PIXEL_FORMAT_BC7_UNORM_SRGB","CjsImageFormat","CjsFormat","carbon","hasOwn","_carbon","checkExtension","extension","readImage","bytes","loadParameters","bitmap","metadata","readImageAsync","isSaveSupported","dimensions","save","wanted","toLowerCase","extensions","includes","readImageNative","_bytes","_loadParameters","_bitmap","_metadata","Error","readImageFromRgbaPayload","payload","data","Uint8Array","ImageIOResult","Code","HEADER_NOT_SUPPORTED","pixelFormat","Create","width","height","PIXEL_FORMAT_R8G8B8A8_UNORM","ERROR_CREATING_BITMAP","dst","GetRawData","row","stride","strideBytes","y","set","subarray","ConvertFormat","PIXEL_FORMAT_B8G8R8A8_UNORM","cutout","Cutout","OK","readImageNativeAsync","result","_finishRead","IsOk","requested","requestedFormat","GetFormat","convertImage","ERROR_CONVERTING_FORMAT","source","get","IsCompressedFormat","canDecodeDdsBlockFormat","decoded","decodeBlocks","Swap","isFloat","startsWith","format","PIXEL_FORMAT_R32G32B32A32_FLOAT","has","PIXEL_FORMAT_R8G8B8A8_UNORM_SRGB","target","HostBitmap","created","CreateFromBitmapDimensions","BitmapDimensions","type","GetType","GetWidth","GetHeight","depth","GetDepth","mipCount","GetMipCount","arraySize","GetArraySize","mips","GetTrueMipCount","element","mip","Math","max","GetMipDepth","sliceBytes","GetMipSize","rowPitch","GetMipPitch","src","GetMipRawData","dstSlice","slice","pixels","decodeDdsSlice","buffer","byteOffset","byteLength","_dimensions","METHOD_NOT_SUPPORTED"],"mappings":"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"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Concrete formats return decorator-free plain objects so their direct
|
|
8
|
-
* subpaths stay importable without a build transform. Consumers that need a
|
|
9
|
-
* model normalize those reports here with {@link CjsResourceProbe.from}.
|
|
1
|
+
/**
|
|
2
|
+
* A format support report, normalized.
|
|
3
|
+
*
|
|
4
|
+
* Formats return plain report objects; this gives every field its type and
|
|
5
|
+
* default, and answers the two questions a caller asks of one. It is a plain
|
|
6
|
+
* record, never persisted or hydrated, so it carries no schema.
|
|
10
7
|
*/
|
|
11
|
-
class CjsResourceProbe
|
|
8
|
+
class CjsResourceProbe {
|
|
12
9
|
format = "";
|
|
13
10
|
source = "";
|
|
14
11
|
recognized = false;
|
|
@@ -24,29 +21,16 @@ class CjsResourceProbe extends CjsModel {
|
|
|
24
21
|
errors = [];
|
|
25
22
|
error = null;
|
|
26
23
|
|
|
27
|
-
/**
|
|
28
|
-
* Create a normalized resource-layer support report.
|
|
29
|
-
* @param {object|null} [values] Plain format support report.
|
|
24
|
+
/**
|
|
25
|
+
* Create a normalized resource-layer support report.
|
|
26
|
+
* @param {object|null} [values] Plain format support report.
|
|
30
27
|
*/
|
|
31
28
|
constructor(values = null) {
|
|
32
|
-
|
|
33
|
-
this.SetValues(normalizeReport(values), {
|
|
34
|
-
skipUpdate: true,
|
|
35
|
-
skipEvents: true
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Replace this report from a plain format result. */
|
|
40
|
-
Initialize(values = null) {
|
|
41
|
-
this.SetValues(normalizeReport(values), {
|
|
42
|
-
skipEvents: true
|
|
43
|
-
});
|
|
44
|
-
return this;
|
|
29
|
+
Object.assign(this, normalizeReport(values));
|
|
45
30
|
}
|
|
46
31
|
|
|
47
|
-
/** Normalize a plain format report at the
|
|
32
|
+
/** Normalize a plain format report at the resource boundary. */
|
|
48
33
|
static from(input) {
|
|
49
|
-
if (input instanceof CjsResourceProbe) return input;
|
|
50
34
|
if (input && typeof input.toJSON === "function") return new this(input.toJSON());
|
|
51
35
|
return new this(input);
|
|
52
36
|
}
|
|
@@ -95,26 +79,6 @@ function normalizeCapability(input) {
|
|
|
95
79
|
requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []
|
|
96
80
|
};
|
|
97
81
|
}
|
|
98
|
-
CjsSchema.define(CjsResourceProbe, {
|
|
99
|
-
className: "CjsResourceProbe",
|
|
100
|
-
family: "resource",
|
|
101
|
-
fields: {
|
|
102
|
-
format: [edit.persist, type.string],
|
|
103
|
-
source: [edit.persist, type.string],
|
|
104
|
-
recognized: [edit.persist, type.boolean],
|
|
105
|
-
output: [edit.persist, type.string],
|
|
106
|
-
supported: [edit.persist, type.boolean],
|
|
107
|
-
verified: [edit.persist, type.boolean],
|
|
108
|
-
preferredOutput: [edit.persist, type.string],
|
|
109
|
-
reason: [edit.persist, type.string],
|
|
110
|
-
metadata: [edit.persist, type.unknown],
|
|
111
|
-
capability: [edit.persist, type.unknown],
|
|
112
|
-
outputs: [edit.persist, type.list("unknown")],
|
|
113
|
-
warnings: [edit.persist, type.list("string")],
|
|
114
|
-
errors: [edit.persist, type.list("string")],
|
|
115
|
-
error: [edit.persist, type.unknown]
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
82
|
|
|
119
83
|
export { CjsResourceProbe };
|
|
120
84
|
//# sourceMappingURL=CjsResourceProbe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsResourceProbe.js","sources":["../../../../src/resource/format/CjsResourceProbe.js"],"sourcesContent":["import { CjsModel } from \"#model\";\r\nimport { CjsSchema, edit, type } from \"#schema\";\r\n\r\n/**\r\n * Persistable resource-layer view of a format support report.\r\n *\r\n * Concrete formats return decorator-free plain objects so their direct\r\n * subpaths stay importable without a build transform. Consumers that need a\r\n * model normalize those reports here with {@link CjsResourceProbe.from}.\r\n */\r\nexport class CjsResourceProbe extends CjsModel\r\n{\r\n format = \"\";\r\n\r\n source = \"\";\r\n\r\n recognized = false;\r\n\r\n output = \"\";\r\n\r\n supported = false;\r\n\r\n verified = false;\r\n\r\n preferredOutput = \"\";\r\n\r\n reason = \"\";\r\n\r\n metadata = null;\r\n\r\n capability = null;\r\n\r\n outputs = [];\r\n\r\n warnings = [];\r\n\r\n errors = [];\r\n\r\n error = null;\r\n\r\n /**\r\n * Create a normalized resource-layer support report.\r\n * @param {object|null} [values] Plain format support report.\r\n */\r\n constructor(values = null)\r\n {\r\n super();\r\n this.SetValues(normalizeReport(values), {\r\n skipUpdate: true,\r\n skipEvents: true\r\n });\r\n }\r\n\r\n /** Replace this report from a plain format result. */\r\n Initialize(values = null)\r\n {\r\n this.SetValues(normalizeReport(values), { skipEvents: true });\r\n return this;\r\n }\r\n\r\n /** Normalize a plain format report at the decorated resource boundary. */\r\n static from(input)\r\n {\r\n if (input instanceof CjsResourceProbe) return input;\r\n if (input && typeof input.toJSON === \"function\") return new this(input.toJSON());\r\n return new this(input);\r\n }\r\n\r\n /** Whether the selected output is usable, optionally requiring real proof. */\r\n canUseSelected(options = null)\r\n {\r\n return this.supported === true && (!options?.verified || this.verified === true);\r\n }\r\n\r\n /** Whether one declared output is usable, optionally requiring real proof. */\r\n canUse(output, options = null)\r\n {\r\n const normalized = String(output || \"\").toLowerCase();\r\n const capability = this.outputs.find(entry =>\r\n String(entry?.output || \"\").toLowerCase() === normalized);\r\n return capability?.supported === true\r\n && (!options?.verified || capability.verified === true);\r\n }\r\n}\r\n\r\nfunction normalizeReport(input)\r\n{\r\n const report = input && typeof input === \"object\" ? input : {};\r\n const outputs = Array.isArray(report.outputs)\r\n ? report.outputs.map(normalizeCapability)\r\n : [];\r\n const selected = report.capability && typeof report.capability === \"object\"\r\n ? normalizeCapability(report.capability)\r\n : outputs.find(entry => entry.output === report.output) || null;\r\n return {\r\n format: String(report.format || \"\"),\r\n source: String(report.source || \"\"),\r\n recognized: report.recognized === true,\r\n output: String(report.output || \"\"),\r\n supported: report.supported === true,\r\n verified: report.verified === true,\r\n preferredOutput: String(report.preferredOutput || \"\"),\r\n reason: String(report.reason || \"\"),\r\n metadata: report.metadata ?? null,\r\n capability: selected,\r\n outputs,\r\n warnings: Array.isArray(report.warnings) ? report.warnings.map(String) : [],\r\n errors: Array.isArray(report.errors) ? report.errors.map(String) : [],\r\n error: report.error ?? null\r\n };\r\n}\r\n\r\nfunction normalizeCapability(input)\r\n{\r\n const capability = input && typeof input === \"object\" ? input : {};\r\n return {\r\n ...capability,\r\n output: String(capability.output || \"\"),\r\n payloadType: String(capability.payloadType || capability.output || \"\"),\r\n supported: capability.supported === true,\r\n verified: capability.verified === true,\r\n requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []\r\n };\r\n}\r\n\r\nexport default CjsResourceProbe;\r\n\r\nCjsSchema.define(CjsResourceProbe, {\r\n className: \"CjsResourceProbe\", family: \"resource\",\r\n fields: {\r\n format: [ edit.persist, type.string ],\r\n source: [ edit.persist, type.string ],\r\n recognized: [ edit.persist, type.boolean ],\r\n output: [ edit.persist, type.string ],\r\n supported: [ edit.persist, type.boolean ],\r\n verified: [ edit.persist, type.boolean ],\r\n preferredOutput: [ edit.persist, type.string ],\r\n reason: [ edit.persist, type.string ],\r\n metadata: [ edit.persist, type.unknown ],\r\n capability: [ edit.persist, type.unknown ],\r\n outputs: [ edit.persist, type.list(\"unknown\") ],\r\n warnings: [ edit.persist, type.list(\"string\") ],\r\n errors: [ edit.persist, type.list(\"string\") ],\r\n error: [ edit.persist, type.unknown ]\r\n }\r\n});\r\n"],"names":["CjsResourceProbe","CjsModel","format","source","recognized","output","supported","verified","preferredOutput","reason","metadata","capability","outputs","warnings","errors","error","constructor","values","SetValues","normalizeReport","skipUpdate","skipEvents","Initialize","from","input","toJSON","canUseSelected","options","canUse","normalized","String","toLowerCase","find","entry","report","Array","isArray","map","normalizeCapability","selected","payloadType","requires","CjsSchema","define","className","family","fields","edit","persist","type","string","boolean","unknown","list"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CjsResourceProbe.js","sources":["../../../../src/resource/format/CjsResourceProbe.js"],"sourcesContent":["/**\n * A format support report, normalized.\n *\n * Formats return plain report objects; this gives every field its type and\n * default, and answers the two questions a caller asks of one. It is a plain\n * record, never persisted or hydrated, so it carries no schema.\n */\nexport class CjsResourceProbe\n{\n format = \"\";\n\n source = \"\";\n\n recognized = false;\n\n output = \"\";\n\n supported = false;\n\n verified = false;\n\n preferredOutput = \"\";\n\n reason = \"\";\n\n metadata = null;\n\n capability = null;\n\n outputs = [];\n\n warnings = [];\n\n errors = [];\n\n error = null;\n\n /**\n * Create a normalized resource-layer support report.\n * @param {object|null} [values] Plain format support report.\n */\n constructor(values = null)\n {\n Object.assign(this, normalizeReport(values));\n }\n\n /** Normalize a plain format report at the resource boundary. */\n static from(input)\n {\n if (input && typeof input.toJSON === \"function\") return new this(input.toJSON());\n return new this(input);\n }\n\n /** Whether the selected output is usable, optionally requiring real proof. */\n canUseSelected(options = null)\n {\n return this.supported === true && (!options?.verified || this.verified === true);\n }\n\n /** Whether one declared output is usable, optionally requiring real proof. */\n canUse(output, options = null)\n {\n const normalized = String(output || \"\").toLowerCase();\n const capability = this.outputs.find(entry =>\n String(entry?.output || \"\").toLowerCase() === normalized);\n return capability?.supported === true\n && (!options?.verified || capability.verified === true);\n }\n}\n\nfunction normalizeReport(input)\n{\n const report = input && typeof input === \"object\" ? input : {};\n const outputs = Array.isArray(report.outputs)\n ? report.outputs.map(normalizeCapability)\n : [];\n const selected = report.capability && typeof report.capability === \"object\"\n ? normalizeCapability(report.capability)\n : outputs.find(entry => entry.output === report.output) || null;\n return {\n format: String(report.format || \"\"),\n source: String(report.source || \"\"),\n recognized: report.recognized === true,\n output: String(report.output || \"\"),\n supported: report.supported === true,\n verified: report.verified === true,\n preferredOutput: String(report.preferredOutput || \"\"),\n reason: String(report.reason || \"\"),\n metadata: report.metadata ?? null,\n capability: selected,\n outputs,\n warnings: Array.isArray(report.warnings) ? report.warnings.map(String) : [],\n errors: Array.isArray(report.errors) ? report.errors.map(String) : [],\n error: report.error ?? null\n };\n}\n\nfunction normalizeCapability(input)\n{\n const capability = input && typeof input === \"object\" ? input : {};\n return {\n ...capability,\n output: String(capability.output || \"\"),\n payloadType: String(capability.payloadType || capability.output || \"\"),\n supported: capability.supported === true,\n verified: capability.verified === true,\n requires: Array.isArray(capability.requires) ? capability.requires.map(String) : []\n };\n}\n\nexport default CjsResourceProbe;\n"],"names":["CjsResourceProbe","format","source","recognized","output","supported","verified","preferredOutput","reason","metadata","capability","outputs","warnings","errors","error","constructor","values","Object","assign","normalizeReport","from","input","toJSON","canUseSelected","options","canUse","normalized","String","toLowerCase","find","entry","report","Array","isArray","map","normalizeCapability","selected","payloadType","requires"],"mappings":"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"}
|
|
@@ -79,11 +79,11 @@ function hashBytes(bytes) {
|
|
|
79
79
|
* interning all late strings before the packing pass; we fail closed instead.
|
|
80
80
|
*/
|
|
81
81
|
class CjsStringTable {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
_blobs = [];
|
|
83
|
+
_buckets = new Map();
|
|
84
|
+
_byteLength = 0;
|
|
85
|
+
_offsets = null;
|
|
86
|
+
_handedOutOffsets = false;
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Returns the arena payload byte count, excluding the `u32` size prefix.
|
|
@@ -94,7 +94,7 @@ class CjsStringTable {
|
|
|
94
94
|
* @returns {number} Payload byte count.
|
|
95
95
|
*/
|
|
96
96
|
get byteLength() {
|
|
97
|
-
return this
|
|
97
|
+
return this._byteLength;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -107,7 +107,7 @@ class CjsStringTable {
|
|
|
107
107
|
* @returns {number} On-disk byte count.
|
|
108
108
|
*/
|
|
109
109
|
get containerSize() {
|
|
110
|
-
return this
|
|
110
|
+
return this._byteLength + 4;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
@@ -116,7 +116,7 @@ class CjsStringTable {
|
|
|
116
116
|
* @returns {number} Deduplicated entry count.
|
|
117
117
|
*/
|
|
118
118
|
get entryCount() {
|
|
119
|
-
return this
|
|
119
|
+
return this._blobs.length;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/**
|
|
@@ -129,7 +129,7 @@ class CjsStringTable {
|
|
|
129
129
|
const text = textEncoder.encode(String(value));
|
|
130
130
|
const bytes = new Uint8Array(text.length + 1);
|
|
131
131
|
bytes.set(text, 0);
|
|
132
|
-
return this
|
|
132
|
+
return this._add(bytes);
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
/**
|
|
@@ -140,7 +140,7 @@ class CjsStringTable {
|
|
|
140
140
|
*/
|
|
141
141
|
addBytes(value) {
|
|
142
142
|
const source = value instanceof Uint8Array ? value : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
143
|
-
return this
|
|
143
|
+
return this._add(Uint8Array.from(source));
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
/**
|
|
@@ -152,16 +152,16 @@ class CjsStringTable {
|
|
|
152
152
|
* @returns {CjsStringTable} This table.
|
|
153
153
|
*/
|
|
154
154
|
finish() {
|
|
155
|
-
if (this
|
|
156
|
-
const order = this
|
|
157
|
-
order.sort((a, b) => compareTableBlobs(this
|
|
158
|
-
const offsets = new Array(this
|
|
155
|
+
if (this._offsets) return this;
|
|
156
|
+
const order = this._blobs.map((blob, index) => index);
|
|
157
|
+
order.sort((a, b) => compareTableBlobs(this._blobs[a], this._blobs[b]));
|
|
158
|
+
const offsets = new Array(this._blobs.length);
|
|
159
159
|
let cursor = 0;
|
|
160
160
|
for (const index of order) {
|
|
161
161
|
offsets[index] = cursor;
|
|
162
|
-
cursor += this
|
|
162
|
+
cursor += this._blobs[index].length;
|
|
163
163
|
}
|
|
164
|
-
this
|
|
164
|
+
this._offsets = offsets;
|
|
165
165
|
return this;
|
|
166
166
|
}
|
|
167
167
|
|
|
@@ -178,15 +178,15 @@ class CjsStringTable {
|
|
|
178
178
|
if (reference === null || reference === undefined) {
|
|
179
179
|
return CJS_STRING_TABLE_NULL_REFERENCE;
|
|
180
180
|
}
|
|
181
|
-
if (!Number.isInteger(reference) || reference < 0 || reference >= this
|
|
181
|
+
if (!Number.isInteger(reference) || reference < 0 || reference >= this._blobs.length) {
|
|
182
182
|
throw new CjsFormatWriteError("Unknown string-table reference", {
|
|
183
183
|
reference,
|
|
184
|
-
entryCount: this
|
|
184
|
+
entryCount: this._blobs.length
|
|
185
185
|
});
|
|
186
186
|
}
|
|
187
187
|
this.finish();
|
|
188
|
-
this
|
|
189
|
-
return this
|
|
188
|
+
this._handedOutOffsets = true;
|
|
189
|
+
return this._offsets[reference];
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
/**
|
|
@@ -196,13 +196,13 @@ class CjsStringTable {
|
|
|
196
196
|
* @returns {Uint8Array} View over the interned bytes.
|
|
197
197
|
*/
|
|
198
198
|
bytesOf(reference) {
|
|
199
|
-
if (!Number.isInteger(reference) || reference < 0 || reference >= this
|
|
199
|
+
if (!Number.isInteger(reference) || reference < 0 || reference >= this._blobs.length) {
|
|
200
200
|
throw new CjsFormatWriteError("Unknown string-table reference", {
|
|
201
201
|
reference,
|
|
202
|
-
entryCount: this
|
|
202
|
+
entryCount: this._blobs.length
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
|
-
return this
|
|
205
|
+
return this._blobs[reference];
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
/**
|
|
@@ -212,9 +212,9 @@ class CjsStringTable {
|
|
|
212
212
|
*/
|
|
213
213
|
toBytes() {
|
|
214
214
|
this.finish();
|
|
215
|
-
const out = new Uint8Array(this
|
|
216
|
-
for (let index = 0; index < this
|
|
217
|
-
out.set(this
|
|
215
|
+
const out = new Uint8Array(this._byteLength);
|
|
216
|
+
for (let index = 0; index < this._blobs.length; index += 1) {
|
|
217
|
+
out.set(this._blobs[index], this._offsets[index]);
|
|
218
218
|
}
|
|
219
219
|
return out;
|
|
220
220
|
}
|
|
@@ -227,8 +227,8 @@ class CjsStringTable {
|
|
|
227
227
|
*/
|
|
228
228
|
write(writer) {
|
|
229
229
|
this.finish();
|
|
230
|
-
writer.u32(this
|
|
231
|
-
if (this
|
|
230
|
+
writer.u32(this._byteLength);
|
|
231
|
+
if (this._byteLength === 0) return;
|
|
232
232
|
writer.bytes(this.toBytes());
|
|
233
233
|
}
|
|
234
234
|
|
|
@@ -240,26 +240,26 @@ class CjsStringTable {
|
|
|
240
240
|
* @param {Uint8Array} bytes Owned bytes to intern.
|
|
241
241
|
* @returns {number} Arena reference.
|
|
242
242
|
*/
|
|
243
|
-
|
|
243
|
+
_add(bytes) {
|
|
244
244
|
const key = hashBytes(bytes);
|
|
245
|
-
const bucket = this
|
|
245
|
+
const bucket = this._buckets.get(key);
|
|
246
246
|
if (bucket) {
|
|
247
247
|
for (const candidate of bucket) {
|
|
248
|
-
if (compareTableBlobs(this
|
|
248
|
+
if (compareTableBlobs(this._blobs[candidate], bytes) === 0) {
|
|
249
249
|
return candidate;
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
if (this
|
|
253
|
+
if (this._handedOutOffsets) {
|
|
254
254
|
throw new CjsFormatWriteError("String-table entry added after offsets were resolved; every offset already handed out would shift", {
|
|
255
255
|
byteLength: bytes.length
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
|
-
const reference = this
|
|
259
|
-
this
|
|
260
|
-
this
|
|
261
|
-
this
|
|
262
|
-
if (bucket) bucket.push(reference);else this
|
|
258
|
+
const reference = this._blobs.length;
|
|
259
|
+
this._blobs.push(bytes);
|
|
260
|
+
this._byteLength += bytes.length;
|
|
261
|
+
this._offsets = null;
|
|
262
|
+
if (bucket) bucket.push(reference);else this._buckets.set(key, [reference]);
|
|
263
263
|
return reference;
|
|
264
264
|
}
|
|
265
265
|
}
|