1#ifndef ENGINE_GFX_IMAGE_LOADER_H
2#define ENGINE_GFX_IMAGE_LOADER_H
3
4#include <base/types.h>
5
6#include <engine/image.h>
7
8#include <vector>
9
10class CByteBufferReader
11{
12 const uint8_t *m_pData;
13 size_t m_Size;
14 size_t m_ReadOffset = 0;
15 bool m_Error = false;
16
17public:
18 CByteBufferReader(const uint8_t *pData, size_t Size) :
19 m_pData(pData),
20 m_Size(Size) {}
21
22 bool Read(void *pData, size_t Size);
23 bool Error() const { return m_Error; }
24};
25
26class CByteBufferWriter
27{
28 std::vector<uint8_t> m_vBuffer;
29
30public:
31 void Write(const void *pData, size_t Size);
32 const uint8_t *Data() const { return m_vBuffer.data(); }
33 size_t Size() const { return m_vBuffer.size(); }
34};
35
36class CImageLoader
37{
38public:
39 CImageLoader() = delete;
40
41 enum
42 {
43 PNGLITE_COLOR_TYPE = 1 << 0,
44 PNGLITE_BIT_DEPTH = 1 << 1,
45 PNGLITE_INTERLACE_TYPE = 1 << 2,
46 PNGLITE_COMPRESSION_TYPE = 1 << 3,
47 PNGLITE_FILTER_TYPE = 1 << 4,
48 };
49
50 static bool LoadPng(CByteBufferReader &Reader, const char *pContextName, CImageInfo &Image, int &PngliteIncompatible);
51 static bool LoadPng(IOHANDLE File, const char *pFilename, CImageInfo &Image, int &PngliteIncompatible);
52
53 static bool SavePng(CByteBufferWriter &Writer, const CImageInfo &Image);
54 static bool SavePng(IOHANDLE File, const char *pFilename, const CImageInfo &Image);
55};
56
57#endif // ENGINE_GFX_IMAGE_LOADER_H
58