Files
fparkan/docs/reference/texm.md
T
Valentin Popov 78fc5f1deb
Docs Deploy / Build and Deploy MkDocs (push) Successful in 34s
Test / Lint (push) Failing after 1m7s
Test / Test (push) Has been skipped
Test / Render parity (push) Has been skipped
docs: rewrite MkDocs documentation
2026-06-22 01:58:51 +04:00

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.