OC-KittenOS/KTC1.md

53 lines
2.0 KiB
Markdown

# KTC1 Specification
KittenOS Texture Compression 1 is an image compression format that, while not
size-optimized or performance-optimized for OC screens, is optimized for
streaming from disk, and always produces precise results.
KTC1's concepts are "inspired by" ETC1, and it was conceived after evaluating
ETC1 for use in KittenOS NEO. ETC1, however, is not optimally fit for
OpenComputers rendering, and thus KTC1 was created to provide an equal-size
solution that better fit these requirements.
A 256-colour palette is assumed, and it is assumed that the palette is provided
outside of KTC1's context.
A KTC1 block is one OpenComputers character (2x4 pixels), and is 4 bytes long.
The format amounts to a foreground palette index, a background palette index,
and a Unicode character index in the Basic Multilingual Plane.
The unicode character is displayed with the given colours at the position of the
block.
The renderer does not get more complicated when more blocks are involved.
Simply put, blocks that are overlapped by a previous wide character are to be
totally ignored.
The size of this format is equivalent to 4-bit indexed data and to ETC1.
For standardization's sake, the container format for KTC1 has an 8-byte header:
"OC" followed by two 16-bit big-endian unsigned integers, for width
and height in blocks, the bytes-per-block count for this format (4) as
an unsigned byte, and the amount of "comment" bytes that go after the image,
as another unsigned byte.
Example image, showing a 4x4 white "A" on black, with a standard text
black "A" on white underneath:
4F 43 00 02 00 02 04 00
FF 00 28 6E FF 00 28 B5
00 FF 00 41 00 FF 00 00
## Additional Notes
A KTC1 file is theoretically a "lossless" screenshot under the limits of the
OpenComputers system assuming the palette is correct.
The Basic Multilingual Plane access allows mixing images and text inside a
KTC1 file, and covers all characters that OpenComputers supports.
This makes KTC1 an interesting option for use as a mixed text/image interchange
format between applications.