-
Notifications
You must be signed in to change notification settings - Fork 267
Using Basis Universal to decompress any supported GPU texture format
The Basis Universal encoder codebase (in the encoder
directory) contains easy to use functions to unpack the following standard compressed GPU texture formats:
- BC7 - Fully supported
- ASTC - LDR only (HDR support is in the code, but remarked out until we need it.)
Our high-level helpers only support 4x4 texel ASTC block size, but you can access the low-level ASTC code directly (in basisu_astc_decomp.h
) to unpack other ASTC block sizes.
- BC1-5 - Fully supported
- ETC1 - Fully supported
- ETC2 RGB/RGBA8 - Only supports ETC1 for color data (no planar, T/H modes). EAC alpha data is fully supported
- ETC2 EAC R11/RG11 - Fully supported
- PVRTC1 4bpp RGB/RGBA - Fully supported. Decompression has been verified against PVRTexTool's output for correctness.
- PVRTC2 - Limited support. Just the non-interpolated mode our transcoders use.
- ATC RGB/RGBA - Fully supported
- FXT1 - Limited support (just the mode we use)
Before you can unpack textures, be sure to call basisu_encoder_init()
once at startup.
To unpack individual 4x4 (or 8x4 for FXT1) texel blocks to raw RGBA pixels, use this function:
bool basisu::unpack_block(texture_format fmt, const void *pBlock, color_rgba *pPixels);
This doesn't work on PVRTC1 textures, because the decoder needs access to the surrounding blocks. Alternately, you can create a basisu::gpu_image
object, then call gpu_image::unpack()
. This works on any supported format, including PVRTC1.