@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
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CjsSchema, edit, type } from '#schema';
|
|
1
|
+
import { CjsSchema, carbon, impl, edit, type } from '#schema';
|
|
2
|
+
import { HostBitmap } from '#imageio';
|
|
2
3
|
import { CjsModel } from '#model';
|
|
3
4
|
|
|
4
5
|
// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLimitSize.h
|
|
@@ -11,6 +12,80 @@ class Tr2TexturePipelineStepLimitSize extends CjsModel {
|
|
|
11
12
|
|
|
12
13
|
/** m_maxWidth (uint32_t) [READWRITE, PERSIST] */
|
|
13
14
|
maxWidth = 0;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Carbon's ITr2TexturePipelineStep default (ITr2TexturePipelineStep.h:21):
|
|
18
|
+
* this step names no resources.
|
|
19
|
+
*
|
|
20
|
+
* @param {Set<string>} [resources] Caller-owned; allocated when omitted.
|
|
21
|
+
* @returns {Set<string>} The set, unchanged.
|
|
22
|
+
*/
|
|
23
|
+
GetResourceDependencies(resources = new Set()) {
|
|
24
|
+
return resources;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Carbon Execute (cpp:24-31): the step's own limits, not the pipeline's.
|
|
29
|
+
*
|
|
30
|
+
* @param {import("#imageio").HostBitmap} bitmap The pipeline's bitmap.
|
|
31
|
+
* @returns {boolean} Whether the step succeeded.
|
|
32
|
+
*/
|
|
33
|
+
Execute(bitmap) {
|
|
34
|
+
return Tr2TexturePipelineStepLimitSize.limitSize(bitmap, this.maxWidth, this.maxHeight);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Carbon's static LimitSize (cpp:34-87): drop whole mip levels until the
|
|
39
|
+
* bitmap fits, keeping the levels below.
|
|
40
|
+
*
|
|
41
|
+
* diverged: Carbon computes the kept level count BEFORE generating the mips
|
|
42
|
+
* it may need, as `GetTrueMipCount() - (mip + 1)`, and copies
|
|
43
|
+
* `m = mip; m < mipCount`. For a single-mip bitmap over the limit that
|
|
44
|
+
* count is 1 and the loop copies nothing, so the result is an all-zero
|
|
45
|
+
* texture; with a full chain the last level stays zeroed. Here the mips are
|
|
46
|
+
* generated first, the count is `GetTrueMipCount() - mip`, and the copy runs
|
|
47
|
+
* to `mip + mipCount` (issue 1, /docs/research/carbon-imageio-issue.md).
|
|
48
|
+
*
|
|
49
|
+
* @param {import("#imageio").HostBitmap} bitmap Bitmap to shrink in place.
|
|
50
|
+
* @param {number} maxWidth Width limit, 0 for none.
|
|
51
|
+
* @param {number} maxHeight Height limit, 0 for none.
|
|
52
|
+
* @returns {boolean} Whether it now fits.
|
|
53
|
+
*/
|
|
54
|
+
static limitSize(bitmap, maxWidth, maxHeight) {
|
|
55
|
+
if (!maxWidth && !maxHeight) return true;
|
|
56
|
+
|
|
57
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepLimitSize: invalid input bitmap")
|
|
58
|
+
if (!bitmap.IsValid()) return false;
|
|
59
|
+
let mip = 0;
|
|
60
|
+
let width = bitmap.GetWidth();
|
|
61
|
+
let height = bitmap.GetHeight();
|
|
62
|
+
if (maxWidth > 0) {
|
|
63
|
+
while (width > maxWidth) {
|
|
64
|
+
width = Math.floor(width / 2);
|
|
65
|
+
height = Math.floor(height / 2);
|
|
66
|
+
mip++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (maxHeight > 0) {
|
|
70
|
+
while (height > maxHeight) {
|
|
71
|
+
width = Math.floor(width / 2);
|
|
72
|
+
height = Math.floor(height / 2);
|
|
73
|
+
mip++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (mip === 0) return true;
|
|
77
|
+
if (mip + 1 > bitmap.GetTrueMipCount() && !bitmap.GenerateMipMaps()) return false;
|
|
78
|
+
const mipCount = Math.max(bitmap.GetTrueMipCount() - mip, 1);
|
|
79
|
+
const result = new HostBitmap();
|
|
80
|
+
|
|
81
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepLimitSize: could not create resulting bitmap")
|
|
82
|
+
if (!result.Create(bitmap.GetMipWidth(mip), bitmap.GetMipHeight(mip), mipCount, bitmap.GetFormat())) return false;
|
|
83
|
+
for (let m = mip; m < mip + mipCount; ++m) {
|
|
84
|
+
result.GetMipRawData(m - mip).set(bitmap.GetMipRawData(m).subarray(0, bitmap.GetMipSize(m)));
|
|
85
|
+
}
|
|
86
|
+
bitmap.Swap(result);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
14
89
|
}
|
|
15
90
|
CjsSchema.define(Tr2TexturePipelineStepLimitSize, {
|
|
16
91
|
className: "Tr2TexturePipelineStepLimitSize",
|
|
@@ -18,6 +93,11 @@ CjsSchema.define(Tr2TexturePipelineStepLimitSize, {
|
|
|
18
93
|
fields: {
|
|
19
94
|
maxHeight: [edit.persist, type.uint32],
|
|
20
95
|
maxWidth: [edit.persist, type.uint32]
|
|
96
|
+
},
|
|
97
|
+
methods: {
|
|
98
|
+
GetResourceDependencies: [carbon.method, impl.implemented],
|
|
99
|
+
Execute: [carbon.method, impl.implemented],
|
|
100
|
+
limitSize: [carbon.method, impl.adapted, impl.reason("Carbon's LimitSize returns an all-zero texture for single-mip input and leaves the last level zeroed for a full chain (issue 1); fixed here.")]
|
|
21
101
|
}
|
|
22
102
|
});
|
|
23
103
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tr2TexturePipelineStepLimitSize.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepLimitSize.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLimitSize.h\
|
|
1
|
+
{"version":3,"file":"Tr2TexturePipelineStepLimitSize.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepLimitSize.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLimitSize.h\n// Schema: format-carbon resources/Tr2TexturePipelineStepLimitSize.json; maintained by the runtime resource layer.\nimport { carbon, CjsSchema, edit, impl, type } from \"#schema\";\nimport { HostBitmap } from \"#imageio\";\nimport { CjsModel } from \"#model\";\n\n/** Tr2TexturePipelineStepLimitSize (resources) - maintained from schema shapeHash 9e97efed.... */\nexport class Tr2TexturePipelineStepLimitSize extends CjsModel\n{\n\n /** m_maxHeight (uint32_t) [READWRITE, PERSIST] */\n maxHeight = 0;\n\n /** m_maxWidth (uint32_t) [READWRITE, PERSIST] */\n maxWidth = 0;\n\n /**\n * Carbon's ITr2TexturePipelineStep default (ITr2TexturePipelineStep.h:21):\n * this step names no resources.\n *\n * @param {Set<string>} [resources] Caller-owned; allocated when omitted.\n * @returns {Set<string>} The set, unchanged.\n */\n GetResourceDependencies(resources = new Set())\n {\n return resources;\n }\n\n /**\n * Carbon Execute (cpp:24-31): the step's own limits, not the pipeline's.\n *\n * @param {import(\"#imageio\").HostBitmap} bitmap The pipeline's bitmap.\n * @returns {boolean} Whether the step succeeded.\n */\n Execute(bitmap)\n {\n return Tr2TexturePipelineStepLimitSize.limitSize(bitmap, this.maxWidth, this.maxHeight);\n }\n\n /**\n * Carbon's static LimitSize (cpp:34-87): drop whole mip levels until the\n * bitmap fits, keeping the levels below.\n *\n * diverged: Carbon computes the kept level count BEFORE generating the mips\n * it may need, as `GetTrueMipCount() - (mip + 1)`, and copies\n * `m = mip; m < mipCount`. For a single-mip bitmap over the limit that\n * count is 1 and the loop copies nothing, so the result is an all-zero\n * texture; with a full chain the last level stays zeroed. Here the mips are\n * generated first, the count is `GetTrueMipCount() - mip`, and the copy runs\n * to `mip + mipCount` (issue 1, /docs/research/carbon-imageio-issue.md).\n *\n * @param {import(\"#imageio\").HostBitmap} bitmap Bitmap to shrink in place.\n * @param {number} maxWidth Width limit, 0 for none.\n * @param {number} maxHeight Height limit, 0 for none.\n * @returns {boolean} Whether it now fits.\n */\n static limitSize(bitmap, maxWidth, maxHeight)\n {\n if (!maxWidth && !maxHeight) return true;\n\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepLimitSize: invalid input bitmap\")\n if (!bitmap.IsValid()) return false;\n\n let mip = 0;\n let width = bitmap.GetWidth();\n let height = bitmap.GetHeight();\n\n if (maxWidth > 0)\n {\n while (width > maxWidth)\n {\n width = Math.floor(width / 2);\n height = Math.floor(height / 2);\n mip++;\n }\n }\n\n if (maxHeight > 0)\n {\n while (height > maxHeight)\n {\n width = Math.floor(width / 2);\n height = Math.floor(height / 2);\n mip++;\n }\n }\n\n if (mip === 0) return true;\n\n if (mip + 1 > bitmap.GetTrueMipCount() && !bitmap.GenerateMipMaps()) return false;\n\n const mipCount = Math.max(bitmap.GetTrueMipCount() - mip, 1);\n const result = new HostBitmap();\n\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepLimitSize: could not create resulting bitmap\")\n if (!result.Create(bitmap.GetMipWidth(mip), bitmap.GetMipHeight(mip), mipCount, bitmap.GetFormat())) return false;\n\n for (let m = mip; m < mip + mipCount; ++m)\n {\n result.GetMipRawData(m - mip).set(bitmap.GetMipRawData(m).subarray(0, bitmap.GetMipSize(m)));\n }\n\n bitmap.Swap(result);\n return true;\n }\n\n}\n\nCjsSchema.define(Tr2TexturePipelineStepLimitSize, {\n className: \"Tr2TexturePipelineStepLimitSize\", family: \"resources\",\n fields: {\n maxHeight: [ edit.persist, type.uint32 ],\n maxWidth: [ edit.persist, type.uint32 ]\n },\n methods: {\n GetResourceDependencies: [ carbon.method, impl.implemented ],\n Execute: [ carbon.method, impl.implemented ],\n limitSize: [ carbon.method, impl.adapted, impl.reason(\"Carbon's LimitSize returns an all-zero texture for single-mip input and leaves the last level zeroed for a full chain (issue 1); fixed here.\") ]\n }\n});\n"],"names":["Tr2TexturePipelineStepLimitSize","CjsModel","maxHeight","maxWidth","GetResourceDependencies","resources","Set","Execute","bitmap","limitSize","IsValid","mip","width","GetWidth","height","GetHeight","Math","floor","GetTrueMipCount","GenerateMipMaps","mipCount","max","result","HostBitmap","Create","GetMipWidth","GetMipHeight","GetFormat","m","GetMipRawData","set","subarray","GetMipSize","Swap","CjsSchema","define","className","family","fields","edit","persist","type","uint32","methods","carbon","method","impl","implemented","adapted","reason"],"mappings":";;;;AAAA;AACA;;AAKA;AACO,MAAMA,+BAA+B,SAASC,QAAQ,CAC7D;AAEE;AACAC,EAAAA,SAAS,GAAG,CAAC;;AAEb;AACAC,EAAAA,QAAQ,GAAG,CAAC;;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,uBAAuBA,CAACC,SAAS,GAAG,IAAIC,GAAG,EAAE,EAC7C;AACE,IAAA,OAAOD,SAAS;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEE,OAAOA,CAACC,MAAM,EACd;AACE,IAAA,OAAOR,+BAA+B,CAACS,SAAS,CAACD,MAAM,EAAE,IAAI,CAACL,QAAQ,EAAE,IAAI,CAACD,SAAS,CAAC;AACzF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,EAAA,OAAOO,SAASA,CAACD,MAAM,EAAEL,QAAQ,EAAED,SAAS,EAC5C;AACE,IAAA,IAAI,CAACC,QAAQ,IAAI,CAACD,SAAS,EAAE,OAAO,IAAI;;AAExC;IACA,IAAI,CAACM,MAAM,CAACE,OAAO,EAAE,EAAE,OAAO,KAAK;IAEnC,IAAIC,GAAG,GAAG,CAAC;AACX,IAAA,IAAIC,KAAK,GAAGJ,MAAM,CAACK,QAAQ,EAAE;AAC7B,IAAA,IAAIC,MAAM,GAAGN,MAAM,CAACO,SAAS,EAAE;IAE/B,IAAIZ,QAAQ,GAAG,CAAC,EAChB;MACE,OAAOS,KAAK,GAAGT,QAAQ,EACvB;QACES,KAAK,GAAGI,IAAI,CAACC,KAAK,CAACL,KAAK,GAAG,CAAC,CAAC;QAC7BE,MAAM,GAAGE,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,CAAC,CAAC;AAC/BH,QAAAA,GAAG,EAAE;AACP,MAAA;AACF,IAAA;IAEA,IAAIT,SAAS,GAAG,CAAC,EACjB;MACE,OAAOY,MAAM,GAAGZ,SAAS,EACzB;QACEU,KAAK,GAAGI,IAAI,CAACC,KAAK,CAACL,KAAK,GAAG,CAAC,CAAC;QAC7BE,MAAM,GAAGE,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,CAAC,CAAC;AAC/BH,QAAAA,GAAG,EAAE;AACP,MAAA;AACF,IAAA;AAEA,IAAA,IAAIA,GAAG,KAAK,CAAC,EAAE,OAAO,IAAI;AAE1B,IAAA,IAAIA,GAAG,GAAG,CAAC,GAAGH,MAAM,CAACU,eAAe,EAAE,IAAI,CAACV,MAAM,CAACW,eAAe,EAAE,EAAE,OAAO,KAAK;AAEjF,IAAA,MAAMC,QAAQ,GAAGJ,IAAI,CAACK,GAAG,CAACb,MAAM,CAACU,eAAe,EAAE,GAAGP,GAAG,EAAE,CAAC,CAAC;AAC5D,IAAA,MAAMW,MAAM,GAAG,IAAIC,UAAU,EAAE;;AAE/B;AACA,IAAA,IAAI,CAACD,MAAM,CAACE,MAAM,CAAChB,MAAM,CAACiB,WAAW,CAACd,GAAG,CAAC,EAAEH,MAAM,CAACkB,YAAY,CAACf,GAAG,CAAC,EAAES,QAAQ,EAAEZ,MAAM,CAACmB,SAAS,EAAE,CAAC,EAAE,OAAO,KAAK;AAEjH,IAAA,KAAK,IAAIC,CAAC,GAAGjB,GAAG,EAAEiB,CAAC,GAAGjB,GAAG,GAAGS,QAAQ,EAAE,EAAEQ,CAAC,EACzC;AACEN,MAAAA,MAAM,CAACO,aAAa,CAACD,CAAC,GAAGjB,GAAG,CAAC,CAACmB,GAAG,CAACtB,MAAM,CAACqB,aAAa,CAACD,CAAC,CAAC,CAACG,QAAQ,CAAC,CAAC,EAAEvB,MAAM,CAACwB,UAAU,CAACJ,CAAC,CAAC,CAAC,CAAC;AAC9F,IAAA;AAEApB,IAAAA,MAAM,CAACyB,IAAI,CAACX,MAAM,CAAC;AACnB,IAAA,OAAO,IAAI;AACb,EAAA;AAEF;AAEAY,SAAS,CAACC,MAAM,CAACnC,+BAA+B,EAAE;AAChDoC,EAAAA,SAAS,EAAE,iCAAiC;AAAEC,EAAAA,MAAM,EAAE,WAAW;AACjEC,EAAAA,MAAM,EAAE;IACNpC,SAAS,EAAE,CAAEqC,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACC,MAAM,CAAE;IACxCvC,QAAQ,EAAE,CAAEoC,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACC,MAAM;GACtC;AACDC,EAAAA,OAAO,EAAE;IACPvC,uBAAuB,EAAE,CAAEwC,MAAM,CAACC,MAAM,EAAEC,IAAI,CAACC,WAAW,CAAE;IAC5DxC,OAAO,EAAE,CAAEqC,MAAM,CAACC,MAAM,EAAEC,IAAI,CAACC,WAAW,CAAE;AAC5CtC,IAAAA,SAAS,EAAE,CAAEmC,MAAM,CAACC,MAAM,EAAEC,IAAI,CAACE,OAAO,EAAEF,IAAI,CAACG,MAAM,CAAC,8IAA8I,CAAC;AACvM;AACF,CAAC,CAAC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CjsSchema, edit, type } from '#schema';
|
|
1
|
+
import { CjsSchema, carbon, impl, edit, type } from '#schema';
|
|
2
2
|
import { CjsModel } from '#model';
|
|
3
3
|
|
|
4
4
|
// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLoad.h
|
|
@@ -8,12 +8,47 @@ import { CjsModel } from '#model';
|
|
|
8
8
|
class Tr2TexturePipelineStepLoad extends CjsModel {
|
|
9
9
|
/** m_path (std::wstring) [READWRITE, PERSIST] */
|
|
10
10
|
path = "";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Carbon GetResourceDependencies (cpp:9-12): this step needs its own path.
|
|
14
|
+
*
|
|
15
|
+
* @param {Set<string>} [resources] Caller-owned; allocated when omitted.
|
|
16
|
+
* @returns {Set<string>} The set.
|
|
17
|
+
*/
|
|
18
|
+
GetResourceDependencies(resources = new Set()) {
|
|
19
|
+
if (this.path) resources.add(String(this.path));
|
|
20
|
+
return resources;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Carbon Execute (cpp:14-30): copy the named input into the pipeline bitmap.
|
|
25
|
+
*
|
|
26
|
+
* @param {import("#imageio").HostBitmap} bitmap The pipeline's bitmap.
|
|
27
|
+
* @param {Map<string, import("#imageio").HostBitmap>} inputs Loaded inputs by path.
|
|
28
|
+
* @returns {boolean} Whether the step succeeded.
|
|
29
|
+
*/
|
|
30
|
+
Execute(bitmap, inputs) {
|
|
31
|
+
// Carbon: CCP_LOGWARN("Tr2TexturePipelineStepLoad: output bitmap is not empty")
|
|
32
|
+
const input = inputs?.get(String(this.path)) ?? null;
|
|
33
|
+
|
|
34
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepLoad: failed to get input texture %S")
|
|
35
|
+
if (!input) return false;
|
|
36
|
+
|
|
37
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepLoad: failed to create output for input texture %S")
|
|
38
|
+
if (!bitmap.CreateFromBitmapDimensions(input)) return false;
|
|
39
|
+
bitmap.GetRawData().set(input.GetRawData());
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
11
42
|
}
|
|
12
43
|
CjsSchema.define(Tr2TexturePipelineStepLoad, {
|
|
13
44
|
className: "Tr2TexturePipelineStepLoad",
|
|
14
45
|
family: "resources",
|
|
15
46
|
fields: {
|
|
16
47
|
path: [edit.persist, type.string]
|
|
48
|
+
},
|
|
49
|
+
methods: {
|
|
50
|
+
GetResourceDependencies: [carbon.method, impl.implemented],
|
|
51
|
+
Execute: [carbon.method, impl.implemented]
|
|
17
52
|
}
|
|
18
53
|
});
|
|
19
54
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tr2TexturePipelineStepLoad.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepLoad.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLoad.h\
|
|
1
|
+
{"version":3,"file":"Tr2TexturePipelineStepLoad.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepLoad.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLoad.h\n// Schema: format-carbon resources/Tr2TexturePipelineStepLoad.json; maintained by the runtime resource layer.\nimport { carbon, CjsSchema, edit, impl, type } from \"#schema\";\nimport { CjsModel } from \"#model\";\n\n/** Tr2TexturePipelineStepLoad (resources) - maintained from schema shapeHash 8f11e264.... */\nexport class Tr2TexturePipelineStepLoad extends CjsModel\n{\n\n /** m_path (std::wstring) [READWRITE, PERSIST] */\n path = \"\";\n\n /**\n * Carbon GetResourceDependencies (cpp:9-12): this step needs its own path.\n *\n * @param {Set<string>} [resources] Caller-owned; allocated when omitted.\n * @returns {Set<string>} The set.\n */\n GetResourceDependencies(resources = new Set())\n {\n if (this.path) resources.add(String(this.path));\n return resources;\n }\n\n /**\n * Carbon Execute (cpp:14-30): copy the named input into the pipeline bitmap.\n *\n * @param {import(\"#imageio\").HostBitmap} bitmap The pipeline's bitmap.\n * @param {Map<string, import(\"#imageio\").HostBitmap>} inputs Loaded inputs by path.\n * @returns {boolean} Whether the step succeeded.\n */\n Execute(bitmap, inputs)\n {\n // Carbon: CCP_LOGWARN(\"Tr2TexturePipelineStepLoad: output bitmap is not empty\")\n const input = inputs?.get(String(this.path)) ?? null;\n\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepLoad: failed to get input texture %S\")\n if (!input) return false;\n\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepLoad: failed to create output for input texture %S\")\n if (!bitmap.CreateFromBitmapDimensions(input)) return false;\n\n bitmap.GetRawData().set(input.GetRawData());\n return true;\n }\n\n}\n\nCjsSchema.define(Tr2TexturePipelineStepLoad, {\n className: \"Tr2TexturePipelineStepLoad\", family: \"resources\",\n fields: {\n path: [ edit.persist, type.string ]\n },\n methods: {\n GetResourceDependencies: [ carbon.method, impl.implemented ],\n Execute: [ carbon.method, impl.implemented ]\n }\n});\n"],"names":["Tr2TexturePipelineStepLoad","CjsModel","path","GetResourceDependencies","resources","Set","add","String","Execute","bitmap","inputs","input","get","CreateFromBitmapDimensions","GetRawData","set","CjsSchema","define","className","family","fields","edit","persist","type","string","methods","carbon","method","impl","implemented"],"mappings":";;;AAAA;AACA;;AAIA;AACO,MAAMA,0BAA0B,SAASC,QAAQ,CACxD;AAEE;AACAC,EAAAA,IAAI,GAAG,EAAE;;AAET;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,uBAAuBA,CAACC,SAAS,GAAG,IAAIC,GAAG,EAAE,EAC7C;AACE,IAAA,IAAI,IAAI,CAACH,IAAI,EAAEE,SAAS,CAACE,GAAG,CAACC,MAAM,CAAC,IAAI,CAACL,IAAI,CAAC,CAAC;AAC/C,IAAA,OAAOE,SAAS;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEI,EAAAA,OAAOA,CAACC,MAAM,EAAEC,MAAM,EACtB;AACE;AACA,IAAA,MAAMC,KAAK,GAAGD,MAAM,EAAEE,GAAG,CAACL,MAAM,CAAC,IAAI,CAACL,IAAI,CAAC,CAAC,IAAI,IAAI;;AAEpD;AACA,IAAA,IAAI,CAACS,KAAK,EAAE,OAAO,KAAK;;AAExB;IACA,IAAI,CAACF,MAAM,CAACI,0BAA0B,CAACF,KAAK,CAAC,EAAE,OAAO,KAAK;AAE3DF,IAAAA,MAAM,CAACK,UAAU,EAAE,CAACC,GAAG,CAACJ,KAAK,CAACG,UAAU,EAAE,CAAC;AAC3C,IAAA,OAAO,IAAI;AACb,EAAA;AAEF;AAEAE,SAAS,CAACC,MAAM,CAACjB,0BAA0B,EAAE;AAC3CkB,EAAAA,SAAS,EAAE,4BAA4B;AAAEC,EAAAA,MAAM,EAAE,WAAW;AAC5DC,EAAAA,MAAM,EAAE;IACNlB,IAAI,EAAE,CAAEmB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACC,MAAM;GAClC;AACDC,EAAAA,OAAO,EAAE;IACPtB,uBAAuB,EAAE,CAAEuB,MAAM,CAACC,MAAM,EAAEC,IAAI,CAACC,WAAW,CAAE;IAC5DrB,OAAO,EAAE,CAAEkB,MAAM,CAACC,MAAM,EAAEC,IAAI,CAACC,WAAW;AAC5C;AACF,CAAC,CAAC;;;;"}
|
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
import { CjsSchema, impl, edit, type } from '#schema';
|
|
1
|
+
import { CjsSchema, carbon, impl, edit, type } from '#schema';
|
|
2
2
|
import { CjsModel } from '#model';
|
|
3
|
-
import {
|
|
3
|
+
import { PixelFormat, TextureType, GetBytesPerPixel } from '#consts/render-context';
|
|
4
4
|
|
|
5
5
|
// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.h
|
|
6
6
|
// trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.cpp
|
|
7
7
|
// Schema: format-carbon resources/Tr2TexturePipelineStepPack.json; maintained by the runtime resource layer.
|
|
8
8
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// strides exist because
|
|
12
|
-
// formats and mip pitches.
|
|
13
|
-
// single-mip RGBA payload, so the interleave collapses into packBitmap's
|
|
14
|
-
// per-pixel loop (texturePipelineBehavior.js) and a separate stride-walking
|
|
15
|
-
// helper would have nothing distinct to do. Two donor quirks recorded there:
|
|
16
|
-
// the R8 arm of Execute's channel-count switch tests PIXEL_FORMAT_R8_UINT
|
|
17
|
-
// while only R8_UNORM is accepted (cpp:166-170), so Carbon's R8 output
|
|
18
|
-
// actually takes the four-source default - the JS form packs R8 correctly
|
|
19
|
-
// and that divergence is deliberate; and the source byte offset clamps to
|
|
20
|
-
// min(pixelStride-1, SwapRedBlue(channel)) (cpp:156).
|
|
9
|
+
// Carbon's private static `Pack` (h:47, cpp:181-207) is ported as the static
|
|
10
|
+
// `pack`: a per-channel byte interleaver whose independent pixel and row
|
|
11
|
+
// strides exist because the inputs are separate host bitmaps with their own
|
|
12
|
+
// formats and mip pitches.
|
|
21
13
|
|
|
22
14
|
/** Tr2TexturePipelineStepPack (resources) - maintained from schema shapeHash 3efe48d4.... */
|
|
23
15
|
class Tr2TexturePipelineStepPack extends CjsModel {
|
|
@@ -51,17 +43,145 @@ class Tr2TexturePipelineStepPack extends CjsModel {
|
|
|
51
43
|
}
|
|
52
44
|
|
|
53
45
|
/**
|
|
54
|
-
* Carbon Execute (cpp:60-179)
|
|
55
|
-
*
|
|
56
|
-
* HostBitmap per mip; the canonical JS pipeline returns a single-mip RGBA
|
|
57
|
-
* bitmap instead, and this method IS the body the pipeline dispatcher
|
|
58
|
-
* runs (texturePipelineBehavior.js packBitmap).
|
|
46
|
+
* Carbon Execute (cpp:60-179): pack up to four single-byte channels, each
|
|
47
|
+
* from its own input bitmap or a constant fill, into one bitmap.
|
|
59
48
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
49
|
+
* diverged, both from issue 2 (/docs/research/carbon-imageio-issue.md):
|
|
50
|
+
* Carbon's format switch tests `PIXEL_FORMAT_R8_UINT` while the guard above
|
|
51
|
+
* it accepts `R8_UNORM`, so an R8 pack falls to the default and writes four
|
|
52
|
+
* bytes per pixel into a one-byte-per-pixel bitmap - a heap overflow. And
|
|
53
|
+
* its BGRX case writes three bytes per pixel into a four-byte pixel, so
|
|
54
|
+
* every pixel after the first is shifted. Here R8 is tested as declared and
|
|
55
|
+
* the destination advances by its own pixel size.
|
|
56
|
+
*
|
|
57
|
+
* @param {import("#imageio").HostBitmap} bitmap The pipeline's bitmap.
|
|
58
|
+
* @param {Map<string, import("#imageio").HostBitmap>} inputs Loaded inputs by path.
|
|
59
|
+
* @returns {boolean} Whether the step succeeded.
|
|
62
60
|
*/
|
|
63
|
-
Execute(inputs) {
|
|
64
|
-
|
|
61
|
+
Execute(bitmap, inputs) {
|
|
62
|
+
const F = PixelFormat;
|
|
63
|
+
|
|
64
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepPack: only supports b8g8r8a8, b8g8r8 and r8 textures")
|
|
65
|
+
if (this.format !== F.PIXEL_FORMAT_B8G8R8A8_UNORM && this.format !== F.PIXEL_FORMAT_B8G8R8X8_UNORM && this.format !== F.PIXEL_FORMAT_R8_UNORM) return false;
|
|
66
|
+
|
|
67
|
+
// Carbon's channel order is b, g, r, a (cpp:72).
|
|
68
|
+
const channels = [this.b, this.g, this.r, this.a];
|
|
69
|
+
const channelInputs = [];
|
|
70
|
+
for (const channel of channels) {
|
|
71
|
+
const path = channel?.path ? String(channel.path) : "";
|
|
72
|
+
if (!path) {
|
|
73
|
+
channelInputs.push(null);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const input = inputs?.get(path) ?? null;
|
|
77
|
+
|
|
78
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepPack: failed to get input texture %S")
|
|
79
|
+
if (!input) return false;
|
|
80
|
+
channelInputs.push(input);
|
|
81
|
+
}
|
|
82
|
+
let width = 4;
|
|
83
|
+
let height = 4;
|
|
84
|
+
let mips = 1;
|
|
85
|
+
let defaultSize = true;
|
|
86
|
+
for (const input of channelInputs) {
|
|
87
|
+
if (!input) continue;
|
|
88
|
+
|
|
89
|
+
// Carbon: CCP_LOGERR("... no support for texture arrays" / "only supports 2D textures")
|
|
90
|
+
if (input.GetArraySize() > 1 || input.GetType() !== TextureType.TEX_TYPE_2D) return false;
|
|
91
|
+
const format = input.GetFormat();
|
|
92
|
+
if (format !== F.PIXEL_FORMAT_B8G8R8A8_UNORM && format !== F.PIXEL_FORMAT_B8G8R8X8_UNORM && format !== F.PIXEL_FORMAT_R8_UNORM) return false;
|
|
93
|
+
if (defaultSize) {
|
|
94
|
+
width = input.GetWidth();
|
|
95
|
+
height = input.GetHeight();
|
|
96
|
+
mips = input.GetTrueMipCount();
|
|
97
|
+
defaultSize = false;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepPack: inconsistent texture size for %S")
|
|
102
|
+
if (width !== input.GetWidth() || height !== input.GetHeight()) return false;
|
|
103
|
+
mips = Math.min(mips, input.GetTrueMipCount());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Carbon: CCP_LOGERR("Tr2TexturePipelineStepPack: failed to create output")
|
|
107
|
+
if (!bitmap.Create(width, height, mips, this.format)) return false;
|
|
108
|
+
for (let mip = 0; mip < mips; ++mip) {
|
|
109
|
+
const sources = channelInputs.map((input, index) => {
|
|
110
|
+
const channel = channels[index];
|
|
111
|
+
if (!input) return {
|
|
112
|
+
pixelStride: 0,
|
|
113
|
+
rowStride: 0,
|
|
114
|
+
data: new Uint8Array([channel?.fill ?? 0]),
|
|
115
|
+
offset: 0
|
|
116
|
+
};
|
|
117
|
+
const pixelStride = GetBytesPerPixel(input.GetFormat());
|
|
118
|
+
return {
|
|
119
|
+
pixelStride,
|
|
120
|
+
rowStride: input.GetMipPitch(mip),
|
|
121
|
+
data: input.GetMipRawData(mip),
|
|
122
|
+
offset: Math.min(pixelStride - 1, Tr2TexturePipelineStepPack.swapRedBlue(channel?.channel ?? 0))
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
let sourceCount = 4;
|
|
126
|
+
|
|
127
|
+
// diverged: Carbon tests PIXEL_FORMAT_R8_UINT here, which the guard above rejects (issue 2).
|
|
128
|
+
if (this.format === F.PIXEL_FORMAT_R8_UNORM) {
|
|
129
|
+
sourceCount = 1;
|
|
130
|
+
const first = sources[0];
|
|
131
|
+
sources[0] = sources[2];
|
|
132
|
+
sources[2] = first;
|
|
133
|
+
} else if (this.format === F.PIXEL_FORMAT_B8G8R8X8_UNORM) {
|
|
134
|
+
sourceCount = 3;
|
|
135
|
+
}
|
|
136
|
+
Tr2TexturePipelineStepPack.pack(bitmap, sources, sourceCount, mip);
|
|
137
|
+
}
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Carbon's SwapRedBlue (cpp:10-21): a channel index is authored in RGBA
|
|
143
|
+
* order and read from BGRA memory.
|
|
144
|
+
*
|
|
145
|
+
* @param {number} channel Authored channel index.
|
|
146
|
+
* @returns {number} Byte index within the pixel.
|
|
147
|
+
*/
|
|
148
|
+
static swapRedBlue(channel) {
|
|
149
|
+
if (channel === 0) return 2;
|
|
150
|
+
if (channel === 2) return 0;
|
|
151
|
+
return channel;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Carbon's Pack (cpp:181-207): write one byte per channel per pixel.
|
|
156
|
+
*
|
|
157
|
+
* diverged: the destination advances by the output's own bytes per pixel,
|
|
158
|
+
* so a BGRX output leaves its X byte alone instead of shifting every pixel
|
|
159
|
+
* after the first (issue 2).
|
|
160
|
+
*
|
|
161
|
+
* @param {import("#imageio").HostBitmap} bitmap Destination bitmap.
|
|
162
|
+
* @param {object[]} channels Four sources: data, offset, pixelStride, rowStride.
|
|
163
|
+
* @param {number} channelCount How many of them to write per pixel.
|
|
164
|
+
* @param {number} mip Mip level being packed.
|
|
165
|
+
*/
|
|
166
|
+
static pack(bitmap, channels, channelCount, mip) {
|
|
167
|
+
const width = bitmap.GetMipWidth(mip);
|
|
168
|
+
const height = bitmap.GetMipHeight(mip);
|
|
169
|
+
const pitch = bitmap.GetMipPitch(mip);
|
|
170
|
+
const destination = bitmap.GetMipRawData(mip);
|
|
171
|
+
const destinationStride = GetBytesPerPixel(bitmap.GetFormat());
|
|
172
|
+
const rows = channels.map(channel => channel.offset);
|
|
173
|
+
for (let y = 0; y < height; ++y) {
|
|
174
|
+
const source = [...rows];
|
|
175
|
+
let target = y * pitch;
|
|
176
|
+
for (let x = 0; x < width; ++x) {
|
|
177
|
+
for (let c = 0; c < channelCount; ++c) {
|
|
178
|
+
destination[target + c] = channels[c].data[source[c]];
|
|
179
|
+
source[c] += channels[c].pixelStride;
|
|
180
|
+
}
|
|
181
|
+
target += destinationStride;
|
|
182
|
+
}
|
|
183
|
+
for (let c = 0; c < 4; ++c) rows[c] += channels[c].rowStride;
|
|
184
|
+
}
|
|
65
185
|
}
|
|
66
186
|
}
|
|
67
187
|
CjsSchema.define(Tr2TexturePipelineStepPack, {
|
|
@@ -76,7 +196,9 @@ CjsSchema.define(Tr2TexturePipelineStepPack, {
|
|
|
76
196
|
},
|
|
77
197
|
methods: {
|
|
78
198
|
GetResourceDependencies: impl.implemented,
|
|
79
|
-
Execute: [impl.adapted, impl.reason("Carbon
|
|
199
|
+
Execute: [carbon.method, impl.adapted, impl.reason("Carbon's R8 case tests a format its own guard rejects (a heap overflow) and its BGRX case shifts every pixel after the first; both fixed (issue 2).")],
|
|
200
|
+
swapRedBlue: [carbon.method, impl.implemented],
|
|
201
|
+
pack: [carbon.method, impl.adapted, impl.reason("The destination advances by the output's bytes per pixel, so a BGRX output is not shifted (issue 2).")]
|
|
80
202
|
}
|
|
81
203
|
});
|
|
82
204
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tr2TexturePipelineStepPack.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepPack.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.h\r\n// trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.cpp\r\n// Schema: format-carbon resources/Tr2TexturePipelineStepPack.json; maintained by the runtime resource layer.\r\n//\r\n// CARBON'S PRIVATE STATIC `Pack` (h:47, cpp:182-215) IS ADAPTED AWAY, not\r\n// missing: it is a per-channel byte interleaver whose independent pixel/row\r\n// strides exist because Carbon packs from BGRA host bitmaps of differing\r\n// formats and mip pitches. This runtime's pipeline speaks one canonical\r\n// single-mip RGBA payload, so the interleave collapses into packBitmap's\r\n// per-pixel loop (texturePipelineBehavior.js) and a separate stride-walking\r\n// helper would have nothing distinct to do. Two donor quirks recorded there:\r\n// the R8 arm of Execute's channel-count switch tests PIXEL_FORMAT_R8_UINT\r\n// while only R8_UNORM is accepted (cpp:166-170), so Carbon's R8 output\r\n// actually takes the four-source default - the JS form packs R8 correctly\r\n// and that divergence is deliberate; and the source byte offset clamps to\r\n// min(pixelStride-1, SwapRedBlue(channel)) (cpp:156).\r\nimport { CjsSchema, impl, edit, type } from \"#schema\";\r\nimport { CjsModel } from \"#model\";\r\nimport { packBitmap } from \"./texturePipelineBehavior.js\";\r\n\r\n/** Tr2TexturePipelineStepPack (resources) - maintained from schema shapeHash 3efe48d4.... */\r\nexport class Tr2TexturePipelineStepPack extends CjsModel\r\n{\r\n\r\n /** m_format (Tr2RenderContextEnum::PixelFormat - enum PixelFormat) [READWRITE, PERSIST, ENUM] */\r\n format = 87;\r\n\r\n /** m_a (PTr2TexturePackChannel) [READ, PERSIST] */\r\n a = null;\r\n\r\n /** m_b (PTr2TexturePackChannel) [READ, PERSIST] */\r\n b = null;\r\n\r\n /** m_g (PTr2TexturePackChannel) [READ, PERSIST] */\r\n g = null;\r\n\r\n /** m_r (PTr2TexturePackChannel) [READ, PERSIST] */\r\n r = null;\r\n\r\n /**\r\n * Carbon GetResourceDependencies (cpp:39-57), the ITr2TexturePipelineStep\r\n * virtual: insert each channel's non-empty path into the caller's set.\r\n *\r\n * @param {Set<string>} [resources] Caller-owned; allocated when omitted.\r\n * @returns {Set<string>} The set, for the caller that omitted it.\r\n */\r\n GetResourceDependencies(resources = new Set())\r\n {\r\n for (const channel of [ this.r, this.g, this.b, this.a ])\r\n {\r\n if (channel?.path) resources.add(String(channel.path));\r\n }\r\n return resources;\r\n }\r\n\r\n /**\r\n * Carbon Execute (cpp:60-179), the other step virtual: packs up to four\r\n * single-channel reads into one bitmap. Carbon fills an out-param\r\n * HostBitmap per mip; the canonical JS pipeline returns a single-mip RGBA\r\n * bitmap instead, and this method IS the body the pipeline dispatcher\r\n * runs (texturePipelineBehavior.js packBitmap).\r\n *\r\n * @param {Map<string, object>} inputs Resolved input bitmaps by path.\r\n * @returns {object} The packed bitmap.\r\n */\r\n Execute(inputs)\r\n {\r\n return packBitmap(this, inputs);\r\n }\r\n\r\n}\r\n\r\nCjsSchema.define(Tr2TexturePipelineStepPack, {\r\n className: \"Tr2TexturePipelineStepPack\", family: \"resources\",\r\n fields: {\r\n format: [ edit.persist, type.int32, type.enum(\"PixelFormat\") ],\n a: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\n b: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\n g: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\n r: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ]\r\n },\r\n methods: {\r\n GetResourceDependencies: impl.implemented,\n Execute: [ impl.adapted, impl.reason(\"Carbon fills an out-param BGRA HostBitmap per mip; the JS pipeline's canonical payload is a returned single-mip RGBA bitmap.\") ]\r\n }\r\n});\r\n"],"names":["Tr2TexturePipelineStepPack","CjsModel","format","a","b","g","r","GetResourceDependencies","resources","Set","channel","path","add","String","Execute","inputs","packBitmap","CjsSchema","define","className","family","fields","edit","persist","type","int32","enum","objectRef","methods","impl","implemented","adapted","reason"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACO,MAAMA,0BAA0B,SAASC,QAAQ,CACxD;AAEE;AACAC,EAAAA,MAAM,GAAG,EAAE;;AAEX;AACAC,EAAAA,CAAC,GAAG,IAAI;;AAER;AACAC,EAAAA,CAAC,GAAG,IAAI;;AAER;AACAC,EAAAA,CAAC,GAAG,IAAI;;AAER;AACAC,EAAAA,CAAC,GAAG,IAAI;;AAER;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,uBAAuBA,CAACC,SAAS,GAAG,IAAIC,GAAG,EAAE,EAC7C;IACE,KAAK,MAAMC,OAAO,IAAI,CAAE,IAAI,CAACJ,CAAC,EAAE,IAAI,CAACD,CAAC,EAAE,IAAI,CAACD,CAAC,EAAE,IAAI,CAACD,CAAC,CAAE,EACxD;AACE,MAAA,IAAIO,OAAO,EAAEC,IAAI,EAAEH,SAAS,CAACI,GAAG,CAACC,MAAM,CAACH,OAAO,CAACC,IAAI,CAAC,CAAC;AACxD,IAAA;AACA,IAAA,OAAOH,SAAS;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEM,OAAOA,CAACC,MAAM,EACd;AACE,IAAA,OAAOC,UAAU,CAAC,IAAI,EAAED,MAAM,CAAC;AACjC,EAAA;AAEF;AAEAE,SAAS,CAACC,MAAM,CAAClB,0BAA0B,EAAE;AAC3CmB,EAAAA,SAAS,EAAE,4BAA4B;AAAEC,EAAAA,MAAM,EAAE,WAAW;AAC5DC,EAAAA,MAAM,EAAE;AACNnB,IAAAA,MAAM,EAAE,CAAEoB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACC,KAAK,EAAED,IAAI,CAACE,IAAI,CAAC,aAAa,CAAC,CAAE;AAC9DvB,IAAAA,CAAC,EAAE,CAAEmB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACG,SAAS,CAAC,uBAAuB,CAAC,CAAE;AAC5DvB,IAAAA,CAAC,EAAE,CAAEkB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACG,SAAS,CAAC,uBAAuB,CAAC,CAAE;AAC5DtB,IAAAA,CAAC,EAAE,CAAEiB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACG,SAAS,CAAC,uBAAuB,CAAC,CAAE;IAC5DrB,CAAC,EAAE,CAAEgB,IAAI,CAACC,OAAO,EAAEC,IAAI,CAACG,SAAS,CAAC,uBAAuB,CAAC;GAC3D;AACDC,EAAAA,OAAO,EAAE;IACPrB,uBAAuB,EAAEsB,IAAI,CAACC,WAAW;IACzChB,OAAO,EAAE,CAAEe,IAAI,CAACE,OAAO,EAAEF,IAAI,CAACG,MAAM,CAAC,8HAA8H,CAAC;AACtK;AACF,CAAC,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"Tr2TexturePipelineStepPack.js","sources":["../../../../src/resource/texture/Tr2TexturePipelineStepPack.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.h\r\n// trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.cpp\r\n// Schema: format-carbon resources/Tr2TexturePipelineStepPack.json; maintained by the runtime resource layer.\r\n//\r\n// Carbon's private static `Pack` (h:47, cpp:181-207) is ported as the static\r\n// `pack`: a per-channel byte interleaver whose independent pixel and row\r\n// strides exist because the inputs are separate host bitmaps with their own\r\n// formats and mip pitches.\r\nimport { carbon, CjsSchema, impl, edit, type } from \"#schema\";\r\nimport { CjsModel } from \"#model\";\r\nimport { GetBytesPerPixel, PixelFormat, TextureType } from \"#consts/render-context\";\r\n\r\n/** Tr2TexturePipelineStepPack (resources) - maintained from schema shapeHash 3efe48d4.... */\r\nexport class Tr2TexturePipelineStepPack extends CjsModel\r\n{\r\n\r\n /** m_format (Tr2RenderContextEnum::PixelFormat - enum PixelFormat) [READWRITE, PERSIST, ENUM] */\r\n format = 87;\r\n\r\n /** m_a (PTr2TexturePackChannel) [READ, PERSIST] */\r\n a = null;\r\n\r\n /** m_b (PTr2TexturePackChannel) [READ, PERSIST] */\r\n b = null;\r\n\r\n /** m_g (PTr2TexturePackChannel) [READ, PERSIST] */\r\n g = null;\r\n\r\n /** m_r (PTr2TexturePackChannel) [READ, PERSIST] */\r\n r = null;\r\n\r\n /**\r\n * Carbon GetResourceDependencies (cpp:39-57), the ITr2TexturePipelineStep\r\n * virtual: insert each channel's non-empty path into the caller's set.\r\n *\r\n * @param {Set<string>} [resources] Caller-owned; allocated when omitted.\r\n * @returns {Set<string>} The set, for the caller that omitted it.\r\n */\r\n GetResourceDependencies(resources = new Set())\r\n {\r\n for (const channel of [ this.r, this.g, this.b, this.a ])\r\n {\r\n if (channel?.path) resources.add(String(channel.path));\r\n }\r\n return resources;\r\n }\r\n\r\n /**\r\n * Carbon Execute (cpp:60-179): pack up to four single-byte channels, each\r\n * from its own input bitmap or a constant fill, into one bitmap.\r\n *\r\n * diverged, both from issue 2 (/docs/research/carbon-imageio-issue.md):\r\n * Carbon's format switch tests `PIXEL_FORMAT_R8_UINT` while the guard above\r\n * it accepts `R8_UNORM`, so an R8 pack falls to the default and writes four\r\n * bytes per pixel into a one-byte-per-pixel bitmap - a heap overflow. And\r\n * its BGRX case writes three bytes per pixel into a four-byte pixel, so\r\n * every pixel after the first is shifted. Here R8 is tested as declared and\r\n * the destination advances by its own pixel size.\r\n *\r\n * @param {import(\"#imageio\").HostBitmap} bitmap The pipeline's bitmap.\r\n * @param {Map<string, import(\"#imageio\").HostBitmap>} inputs Loaded inputs by path.\r\n * @returns {boolean} Whether the step succeeded.\r\n */\r\n Execute(bitmap, inputs)\r\n {\r\n const F = PixelFormat;\r\n\r\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepPack: only supports b8g8r8a8, b8g8r8 and r8 textures\")\r\n if (this.format !== F.PIXEL_FORMAT_B8G8R8A8_UNORM\r\n && this.format !== F.PIXEL_FORMAT_B8G8R8X8_UNORM\r\n && this.format !== F.PIXEL_FORMAT_R8_UNORM) return false;\r\n\r\n // Carbon's channel order is b, g, r, a (cpp:72).\r\n const channels = [ this.b, this.g, this.r, this.a ];\r\n const channelInputs = [];\r\n\r\n for (const channel of channels)\r\n {\r\n const path = channel?.path ? String(channel.path) : \"\";\r\n if (!path) { channelInputs.push(null); continue; }\r\n\r\n const input = inputs?.get(path) ?? null;\r\n\r\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepPack: failed to get input texture %S\")\r\n if (!input) return false;\r\n\r\n channelInputs.push(input);\r\n }\r\n\r\n let width = 4;\r\n let height = 4;\r\n let mips = 1;\r\n let defaultSize = true;\r\n\r\n for (const input of channelInputs)\r\n {\r\n if (!input) continue;\r\n\r\n // Carbon: CCP_LOGERR(\"... no support for texture arrays\" / \"only supports 2D textures\")\r\n if (input.GetArraySize() > 1 || input.GetType() !== TextureType.TEX_TYPE_2D) return false;\r\n\r\n const format = input.GetFormat();\r\n if (format !== F.PIXEL_FORMAT_B8G8R8A8_UNORM\r\n && format !== F.PIXEL_FORMAT_B8G8R8X8_UNORM\r\n && format !== F.PIXEL_FORMAT_R8_UNORM) return false;\r\n\r\n if (defaultSize)\r\n {\r\n width = input.GetWidth();\r\n height = input.GetHeight();\r\n mips = input.GetTrueMipCount();\r\n defaultSize = false;\r\n continue;\r\n }\r\n\r\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepPack: inconsistent texture size for %S\")\r\n if (width !== input.GetWidth() || height !== input.GetHeight()) return false;\r\n\r\n mips = Math.min(mips, input.GetTrueMipCount());\r\n }\r\n\r\n // Carbon: CCP_LOGERR(\"Tr2TexturePipelineStepPack: failed to create output\")\r\n if (!bitmap.Create(width, height, mips, this.format)) return false;\r\n\r\n for (let mip = 0; mip < mips; ++mip)\r\n {\r\n const sources = channelInputs.map((input, index) =>\r\n {\r\n const channel = channels[index];\r\n if (!input) return { pixelStride: 0, rowStride: 0, data: new Uint8Array([ channel?.fill ?? 0 ]), offset: 0 };\r\n\r\n const pixelStride = GetBytesPerPixel(input.GetFormat());\r\n\r\n return {\r\n pixelStride,\r\n rowStride: input.GetMipPitch(mip),\r\n data: input.GetMipRawData(mip),\r\n offset: Math.min(pixelStride - 1, Tr2TexturePipelineStepPack.swapRedBlue(channel?.channel ?? 0))\r\n };\r\n });\r\n\r\n let sourceCount = 4;\r\n\r\n // diverged: Carbon tests PIXEL_FORMAT_R8_UINT here, which the guard above rejects (issue 2).\r\n if (this.format === F.PIXEL_FORMAT_R8_UNORM)\r\n {\r\n sourceCount = 1;\r\n const first = sources[0];\r\n sources[0] = sources[2];\r\n sources[2] = first;\r\n }\r\n else if (this.format === F.PIXEL_FORMAT_B8G8R8X8_UNORM)\r\n {\r\n sourceCount = 3;\r\n }\r\n\r\n Tr2TexturePipelineStepPack.pack(bitmap, sources, sourceCount, mip);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Carbon's SwapRedBlue (cpp:10-21): a channel index is authored in RGBA\r\n * order and read from BGRA memory.\r\n *\r\n * @param {number} channel Authored channel index.\r\n * @returns {number} Byte index within the pixel.\r\n */\r\n static swapRedBlue(channel)\r\n {\r\n if (channel === 0) return 2;\r\n if (channel === 2) return 0;\r\n return channel;\r\n }\r\n\r\n /**\r\n * Carbon's Pack (cpp:181-207): write one byte per channel per pixel.\r\n *\r\n * diverged: the destination advances by the output's own bytes per pixel,\r\n * so a BGRX output leaves its X byte alone instead of shifting every pixel\r\n * after the first (issue 2).\r\n *\r\n * @param {import(\"#imageio\").HostBitmap} bitmap Destination bitmap.\r\n * @param {object[]} channels Four sources: data, offset, pixelStride, rowStride.\r\n * @param {number} channelCount How many of them to write per pixel.\r\n * @param {number} mip Mip level being packed.\r\n */\r\n static pack(bitmap, channels, channelCount, mip)\r\n {\r\n const width = bitmap.GetMipWidth(mip);\r\n const height = bitmap.GetMipHeight(mip);\r\n const pitch = bitmap.GetMipPitch(mip);\r\n const destination = bitmap.GetMipRawData(mip);\r\n const destinationStride = GetBytesPerPixel(bitmap.GetFormat());\r\n const rows = channels.map(channel => channel.offset);\r\n\r\n for (let y = 0; y < height; ++y)\r\n {\r\n const source = [ ...rows ];\r\n let target = y * pitch;\r\n\r\n for (let x = 0; x < width; ++x)\r\n {\r\n for (let c = 0; c < channelCount; ++c)\r\n {\r\n destination[target + c] = channels[c].data[source[c]];\r\n source[c] += channels[c].pixelStride;\r\n }\r\n target += destinationStride;\r\n }\r\n\r\n for (let c = 0; c < 4; ++c) rows[c] += channels[c].rowStride;\r\n }\r\n }\r\n\r\n}\r\n\r\nCjsSchema.define(Tr2TexturePipelineStepPack, {\r\n className: \"Tr2TexturePipelineStepPack\", family: \"resources\",\r\n fields: {\r\n format: [ edit.persist, type.int32, type.enum(\"PixelFormat\") ],\r\n a: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\r\n b: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\r\n g: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ],\r\n r: [ edit.persist, type.objectRef(\"Tr2TexturePackChannel\") ]\r\n },\r\n methods: {\r\n GetResourceDependencies: impl.implemented,\r\n Execute: [ carbon.method, impl.adapted, impl.reason(\"Carbon's R8 case tests a format its own guard rejects (a heap overflow) and its BGRX case shifts every pixel after the first; both fixed (issue 2).\") ],\r\n swapRedBlue: [ carbon.method, impl.implemented ],\r\n pack: [ carbon.method, impl.adapted, impl.reason(\"The destination advances by the output's bytes per pixel, so a BGRX output is not shifted (issue 2).\") ]\r\n }\r\n});\r\n"],"names":["Tr2TexturePipelineStepPack","CjsModel","format","a","b","g","r","GetResourceDependencies","resources","Set","channel","path","add","String","Execute","bitmap","inputs","F","PixelFormat","PIXEL_FORMAT_B8G8R8A8_UNORM","PIXEL_FORMAT_B8G8R8X8_UNORM","PIXEL_FORMAT_R8_UNORM","channels","channelInputs","push","input","get","width","height","mips","defaultSize","GetArraySize","GetType","TextureType","TEX_TYPE_2D","GetFormat","GetWidth","GetHeight","GetTrueMipCount","Math","min","Create","mip","sources","map","index","pixelStride","rowStride","data","Uint8Array","fill","offset","GetBytesPerPixel","GetMipPitch","GetMipRawData","swapRedBlue","sourceCount","first","pack","channelCount","GetMipWidth","GetMipHeight","pitch","destination","destinationStride","rows","y","source","target","x","c","CjsSchema","define","className","family","fields","edit","persist","type","int32","enum","objectRef","methods","impl","implemented","carbon","method","adapted","reason"],"mappings":"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"}
|