1.5 KiB
1.5 KiB
Texm
Texm -- основной формат изображений Iron3D. Payload содержит header,
необязательную палитру, mip chain и иногда Page chunk.
struct TexmHeader32 {
uint32_t magic; // 'Texm'
uint32_t width;
uint32_t height;
uint32_t mip_count;
uint32_t flags4;
uint32_t flags5;
uint32_t unknown6;
uint32_t format;
};
Pixel formats
0 Indexed8 + palette 256 * 4 bytes
565 R5 G6 B5
556 R5 G5 B6
4444 A4 R4 G4 B4
88 L8 A8
888 RGB8 in four-byte element
8888 A8 R8 G8 B8
Короткие каналы расширяются до 8 bits повторением значимых bits. Для 888 служебный четвёртый byte сохраняется при roundtrip.
Layout
TexmHeader32
[palette 1024 bytes, only for format 0]
level 0 pixels
level 1 pixels
...
level mip_count-1 pixels
[optional Page chunk]
Размер mip level вычисляется через max(1, width >> i) и
max(1, height >> i). Parser суммирует размеры с проверкой переполнения до
чтения данных.
Page chunk
struct PageHeader8 {
uint32_t magic; // 'Page'
uint32_t rect_count;
};
struct PageRect8 {
int16_t x;
int16_t width;
int16_t y;
int16_t height;
};
Chunk обязан иметь размер 8 + rect_count * 8. Rectangles находятся в pixel
space базового mip и масштабируются после mip-skip.