3
0

Compressor.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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/ImageProcessingDefines.h>
  10. #include <Atom/ImageProcessing/PixelFormats.h>
  11. #include <Atom/ImageProcessing/ImageObject.h>
  12. namespace ImageProcessingAtom
  13. {
  14. class ICompressor;
  15. typedef AZStd::shared_ptr<ICompressor> ICompressorPtr;
  16. //the interface base class for any compressors which can decompress/compress image with compressed pixel format
  17. class ICompressor
  18. {
  19. public:
  20. enum EQuality : uint32_t
  21. {
  22. eQuality_Preview = 0u, // for the 256x256 preview only
  23. eQuality_Fast,
  24. eQuality_Normal,
  25. eQuality_Slow,
  26. Count
  27. };
  28. //some extra information required for different compressors.
  29. //keep is a simple structure for now.
  30. struct CompressOption
  31. {
  32. EQuality compressQuality = eQuality_Normal;
  33. //required for CTSquisher
  34. AZ::Vector3 rgbWeight = AZ::Vector3(0.3333f, 0.3334f, 0.3333f);
  35. bool discardAlpha = false;
  36. };
  37. public:
  38. //compress the source image to desired compressed pixel format
  39. virtual IImageObjectPtr CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, const CompressOption* compressOption) const = 0;
  40. virtual IImageObjectPtr DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const = 0;
  41. virtual EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const = 0;
  42. virtual ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const = 0;
  43. virtual const char* GetName() const = 0;
  44. //find compressor for specified compressed pixel format. isCompressing to indicate if it's for compressing or decompressing
  45. static ICompressorPtr FindCompressor(EPixelFormat fmt, ColorSpace colorSpace, bool isCompressing);
  46. virtual ~ICompressor() = 0;
  47. };
  48. }; // namespace ImageProcessingAtom