44 lines
970 B
C++
44 lines
970 B
C++
#include <stdint.h>
|
|
|
|
#define PACKED __attribute__((packed))
|
|
|
|
namespace tga {
|
|
struct PACKED header {
|
|
uint8_t idLength;
|
|
uint8_t colorMapType;
|
|
uint8_t imageTypeCode;
|
|
struct PACKED {
|
|
uint16_t origin;
|
|
uint16_t length;
|
|
uint8_t depth;
|
|
} colorMap;
|
|
struct PACKED {
|
|
uint16_t xOrigin;
|
|
uint16_t yOrigin;
|
|
uint16_t width;
|
|
uint16_t height;
|
|
uint8_t bitsPerPixel;
|
|
} image;
|
|
uint8_t descriptor;
|
|
};
|
|
static_assert((sizeof (header)) == 18);
|
|
|
|
header const * validate(void const * data, uint32_t size, void ** outData, uint32_t * outSize);
|
|
|
|
static inline bool isTGAExtension(const char * filename, size_t length)
|
|
{
|
|
char a = filename[length - 4];
|
|
char b = filename[length - 3];
|
|
char c = filename[length - 2];
|
|
char d = filename[length - 1];
|
|
|
|
return
|
|
(a == '.') &&
|
|
(b == 't' || b == 'T') &&
|
|
(c == 'g' || c == 'G') &&
|
|
(d == 'a' || d == 'A');
|
|
}
|
|
}
|
|
|
|
#undef PACKED
|