Utils.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <Atom/ImageProcessing/ImageObject.h>
  10. #include <AzCore/Asset/AssetCommon.h>
  11. namespace ImageProcessingAtom
  12. {
  13. namespace Utils
  14. {
  15. EPixelFormat RHIFormatToPixelFormat(AZ::RHI::Format rhiFormat, bool& isSRGB);
  16. AZ::RHI::Format PixelFormatToRHIFormat(EPixelFormat pixelFormat, bool isSrgb);
  17. AZ::Data::Asset<AZ::RPI::StreamingImageAsset> LoadImageAsset(const AZ::Data::AssetId& assetId);
  18. IImageObjectPtr LoadImageFromImageAsset(const AZ::Data::AssetId& assetId);
  19. IImageObjectPtr LoadImageFromImageAsset(const AZ::Data::Asset<AZ::RPI::StreamingImageAsset>& asset);
  20. bool SaveImageToDdsFile(IImageObjectPtr image, AZStd::string_view filePath);
  21. bool NeedAlphaChannel(EAlphaContent alphaContent);
  22. //! Load image assets in the background and execute callbacks when complete.
  23. class AsyncImageAssetLoader : public AZ::Data::AssetBus::MultiHandler
  24. {
  25. public:
  26. using Callback = AZStd::function<void(const AZ::Data::Asset<AZ::RPI::StreamingImageAsset>&)>;
  27. AsyncImageAssetLoader() = default;
  28. ~AsyncImageAssetLoader();
  29. //! Queue an asset to be loaded asynchronously. The callback will be executed on the main thread once the asset is ready or
  30. //! fails.
  31. //! @param assetId ID of the image asset to be loaded.
  32. //! @param callback Callback function to execute once the asset is ready or fails.
  33. void QueueAsset(const AZ::Data::AssetId& assetId, const Callback& callback);
  34. private:
  35. // AZ::Data::AssetBus::MultiHandler overrides..
  36. void OnAssetReady(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
  37. void OnAssetError(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
  38. void HandleAssetNotification(AZ::Data::Asset<AZ::Data::AssetData> asset);
  39. using AssetCallbackPair = AZStd::pair<AZ::Data::Asset<AZ::RPI::StreamingImageAsset>, Callback>;
  40. using AssetCallbackMap = AZStd::unordered_map<AZ::Data::AssetId, AssetCallbackPair>;
  41. AssetCallbackMap m_assetCallbackMap;
  42. };
  43. } // namespace Utils
  44. } // namespace ImageProcessingAtom