Expand description
§JKL - blazingly fast compression and image processing toolkit
JKL is a batteries-included Rust crate for compressing, encoding and packing data that needs to travel fast and decompress even faster - on the CPU or directly on the GPU. If you ship textures, sprite atlases, tile maps, or any bulk binary payload that must be ready the instant it hits VRAM, JKL was built for you.
§Feature highlights
- GPU-oriented block texture codecs - encode and decode BC1 through BC5
blocks with cluster-fit quality (
bc1,bc2,bc3,bc4,bc5, powered bycluster_fit). - Layered entropy coding - stack
lz77orrlewithansfor near-optimal compression ratios while keeping decompression blazingly fast- simple enough for a GPU compute shader.
- Bit-perfect I/O - the
bitsmodule reads and writes individual bits so every encoder can squeeze out every last fraction of a byte. - Jackal Image format - the
jackal::imagemodule ties everything together into a tiled, mip-mapped, GPU-ready image container. - Packing and spatial indexing -
max_rectsbin-packs rectangles for atlas generation;z_curveprovides Morton-order iteration for cache-friendly traversal.
§Quick orientation - “how do I …?”
| I want to … | Start here |
|---|---|
| Compress a texture to BC1–BC5 | bc1::Block::encode, bc2::Block::encode, bc3::Block::encode, bc4::Block::encode, bc5::Block::encode |
| Decompress a BC block | bc1::Block::decode, bc2::Block::decode, bc3::Block::decode, bc4::Block::decode, bc5::Block::decode |
| Write / read a complete Jackal Image file | jackal::image::write_image, jackal::image::JackalReader |
| Entropy-code a symbol stream | Build an ans::Context, then use ans::Encoder / ans::Decoder |
| Run-length encode an iterator | rle::rle, rle::rle_power_of_two, or rle::rle_with_cfg |
| LZ77-compress a value stream | lz77::Encoder → lz77::Token stream → lz77::Decoder |
| LZ78-compress a value stream | lz78::Encoder → lz78::Token stream → lz78::Decoder |
| Encode small unsigned ints compactly | vle::encode / vle::decode (Elias delta), or wrap with vle::Vle |
| Map signed ints for better compression | zigzaq::ZigZag::zigzag before VLE encoding |
| Read / write individual bits | bits::WriteBits, bits::ReadBits, or the bits::write_bits_scope helper |
| Bin-pack rectangles into an atlas | max_rects::MaximalRectangles::new then insert in a loop |
| Work with 2D pixel buffers | image::Image2DRef / image::Image2DMut |
| Use vector math or pixel types | math::Vec3, math::Rgb565, math::Rgba32F, etc. |
§Module overview
§Compression
| Module | Purpose |
|---|---|
ans | Asymmetric Numeral Systems (ANS) entropy coder |
rle | Run-length encoding with configurable max length and power-of-two mode |
vle | Variable-length Elias delta coding for unsigned integers |
lz77 | LZ77 sliding-window compressor / decompressor |
lz78 | LZ78 dictionary compressor (GPU-friendly variant) |
zigzaq | Zigzag signed ↔ unsigned mapping for better VLE compression |
§Block-texture codecs
| Module | Format | Block size | Channels |
|---|---|---|---|
[bc1] | BC1 / DXT1 | 8 bytes | RGB + 1-bit A |
[bc2] | BC2 / DXT3 | 16 bytes | RGBA (4-bit A) |
[bc3] | BC3 / DXT5 | 16 bytes | RGBA (interp A) |
[bc4] | BC4 / RGTC1 | 8 bytes | R |
[bc5] | BC5 / RGTC2 | 16 bytes | RG |
cluster_fit | Shared quantizer for above | - | - |
§Image and math
| Module | Purpose |
|---|---|
image | Non-owning 2D / 3D image views (Image2DRef, Image2DMut, …) |
math | Vectors (Vec2–Vec4), pixel types, Rect, PCA, bit-interleaving |
§I/O and serialization
| Module | Purpose |
|---|---|
bits | Bit-level buffered reader / writer over byte streams |
encode | FixedCode and VarCode serialization traits |
§Packing and spatial
| Module | Purpose |
|---|---|
max_rects | 2D bin packing (maximal-rectangles algorithm) for atlas generation |
z_curve | Z-order / Morton curve coordinate iteration |
§File formats
| Module | Purpose |
|---|---|
jackal::image | Tiled, GPU-decompressible image container format |
Modules§
- ans
- Asymmetric Numeral Systems (ANS) entropy coder.
- bits
- Types and functions to work with individual bits.
- cluster_
fit - Least-squares cluster-fit quantization.
- encode
- Traits for fixed-size and variable-length binary serialization.
- image
- jackal
- Jackal file format.
- lz77
- LZ77 sliding-window compression.
- lz78
- LZ78 dictionary compression.
- math
- Linear algebra primitives, color types, and bit-manipulation utilities.
- max_
rects - 2D rectangle bin packing via the maximal-rectangles algorithm.
- palette
- rle
- Run-length encoding (RLE) compression.
- vle
- Variable-length Elias delta encoding for unsigned integers.
- z_curve
- Z-order (Morton) curve utilities for 2D coordinate interleaving.
- zigzaq
- Zigzag encoding that maps signed integers to unsigned integers.