ImageBinary.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. // WARNING: This file is auto generated.
  6. #pragma once
  7. #include <AnKi/Resource/Common.h>
  8. namespace anki {
  9. /// @addtogroup resource
  10. /// @{
  11. inline constexpr const Char* kImageMagic = "ANKITEX1";
  12. /// Image type.
  13. /// @memberof ImageBinaryHeader
  14. enum class ImageBinaryType : U32
  15. {
  16. kNone,
  17. k2D,
  18. kCube,
  19. k3D,
  20. k2DArray
  21. };
  22. /// The acceptable color types.
  23. /// @memberof ImageBinaryHeader
  24. enum class ImageBinaryColorFormat : U32
  25. {
  26. kNone,
  27. kRgb8,
  28. kRgba8,
  29. kSrgb8,
  30. kRgbFloat,
  31. kRgbaFloat
  32. };
  33. /// The available data compressions.
  34. /// @memberof ImageBinaryHeader
  35. enum class ImageBinaryDataCompression : U32
  36. {
  37. kNone,
  38. kRaw = 1 << 0,
  39. kS3tc = 1 << 1,
  40. kEtc = 1 << 2,
  41. kAstc = 1 << 3
  42. };
  43. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(ImageBinaryDataCompression)
  44. /// The 1st things that appears in a image binary.
  45. class ImageBinaryHeader
  46. {
  47. public:
  48. Array<U8, 8> m_magic;
  49. U32 m_width;
  50. U32 m_height;
  51. U32 m_depthOrLayerCount;
  52. ImageBinaryType m_type;
  53. ImageBinaryColorFormat m_colorFormat;
  54. ImageBinaryDataCompression m_compressionMask;
  55. U32 m_isNormal;
  56. U32 m_mipmapCount;
  57. U32 m_astcBlockSizeX;
  58. U32 m_astcBlockSizeY;
  59. /// For U8 formats from 0.0 to 1.0.
  60. Array<F32, 4> m_averageColor;
  61. Array<U8, 64> m_padding;
  62. template<typename TSerializer, typename TClass>
  63. static void serializeCommon(TSerializer& s, TClass self)
  64. {
  65. s.doArray("m_magic", offsetof(ImageBinaryHeader, m_magic), &self.m_magic[0], self.m_magic.getSize());
  66. s.doValue("m_width", offsetof(ImageBinaryHeader, m_width), self.m_width);
  67. s.doValue("m_height", offsetof(ImageBinaryHeader, m_height), self.m_height);
  68. s.doValue("m_depthOrLayerCount", offsetof(ImageBinaryHeader, m_depthOrLayerCount), self.m_depthOrLayerCount);
  69. s.doValue("m_type", offsetof(ImageBinaryHeader, m_type), self.m_type);
  70. s.doValue("m_colorFormat", offsetof(ImageBinaryHeader, m_colorFormat), self.m_colorFormat);
  71. s.doValue("m_compressionMask", offsetof(ImageBinaryHeader, m_compressionMask), self.m_compressionMask);
  72. s.doValue("m_isNormal", offsetof(ImageBinaryHeader, m_isNormal), self.m_isNormal);
  73. s.doValue("m_mipmapCount", offsetof(ImageBinaryHeader, m_mipmapCount), self.m_mipmapCount);
  74. s.doValue("m_astcBlockSizeX", offsetof(ImageBinaryHeader, m_astcBlockSizeX), self.m_astcBlockSizeX);
  75. s.doValue("m_astcBlockSizeY", offsetof(ImageBinaryHeader, m_astcBlockSizeY), self.m_astcBlockSizeY);
  76. s.doArray("m_averageColor", offsetof(ImageBinaryHeader, m_averageColor), &self.m_averageColor[0], self.m_averageColor.getSize());
  77. s.doArray("m_padding", offsetof(ImageBinaryHeader, m_padding), &self.m_padding[0], self.m_padding.getSize());
  78. }
  79. template<typename TDeserializer>
  80. void deserialize(TDeserializer& deserializer)
  81. {
  82. serializeCommon<TDeserializer, ImageBinaryHeader&>(deserializer, *this);
  83. }
  84. template<typename TSerializer>
  85. void serialize(TSerializer& serializer) const
  86. {
  87. serializeCommon<TSerializer, const ImageBinaryHeader&>(serializer, *this);
  88. }
  89. };
  90. /// @}
  91. } // end namespace anki