texture2ddecoder/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
//! A pure Rust no-std texture decoder for the following formats:
//! - [ATC - Adreno Texture Compression](https://registry.khronos.org/OpenGL/extensions/AMD/AMD_compressed_ATC_texture.txt)
//! - [ASTC - Adaptive Scalable Texture Compression](https://en.wikipedia.org/wiki/Adaptive_Scalable_Texture_Compression)
//! - [BCn - Block Compression](https://en.wikipedia.org/wiki/S3_Texture_Compression)
//! - [ETC - Ericsson Texture Compression](https://en.wikipedia.org/wiki/Ericsson_Texture_Compression)
//! - [PVRTC - PowerVR Texture Compression](https://en.wikipedia.org/wiki/PVRTC)
//! - [Crunch](https://github.com/BinomialLLC/crunch) & [Unity's Crunch](https://github.com/Unity-Technologies/crunch)
//!
//! ## Functions
//! Provides a decode function for each format, as well as a block decode function all formats besides PVRTC.
//! Besides some exceptions, the signature of the decode functions is as follows:
//! ```ignore
//! fn decode_format(data: &[u8], width: usize, height: usize, image: &mut [u32]) -> Result<(), &'static str>
//! // data: the compressed data, expected to be width * height / block_size in size
//! // width: the width of the image
//! // height: the height of the image
//! // image: the buffer to write the decoded image to, expected to be width * height in size
//! fn decode_format_block(data: &[u8], image: &mut [u32]) -> Result<(), &'static str>
//! // data: the compressed data (block), expected to be block_size in size
//! // image: the buffer to write the decoded image to, expected to be block_size in size
//! ```
//! The exceptions are:
//! - ASTC: the (block) decode function takes the block size as an additional parameter
//! - BC6: there are two additional decode functions for the signed and unsigned variants
//! - PVRTC: the decode function takes the block size as an additional parameter, and there are two additional decode functions for the 2bpp and 4bpp variants
//! - Crunch & Unity's Crunch: The texture's dimensions and metadata are stored in the file itself, one's must parse the header with crnd_get_texture_info() from crn_texture_info struct first, then pass the metadata to the decoder as in the format. There's no block decomp. function.
//!
//! To make these excetions easier to use, there are helper functions to enable decode functions with identical arguments and returns.
//!
//! Here is a list of the formats and their corresponding functions:
//! - ATC
//! - [`decode_atc_rgb4()`]
//! - [`decode_atc_rgb4_block()`]
//! - [`decode_atc_rgba8()`]
//! - [`decode_atc_rgba8_block()`]
//! - ASTC
//! - [`decode_astc()`]
//! - [`decode_astc_block()`]
//! - various decode_astc_(block_)_x_y functions, where x and y are the block size
//! - BCn
//! - [`decode_bc1()`]
//! - [`decode_bc1_block()`]
//! - [`decode_bc3()`]
//! - [`decode_bc3_block()`]
//! - [`decode_bc4()`]
//! - [`decode_bc4_block()`]
//! - [`decode_bc5()`]
//! - [`decode_bc5_block()`]
//! - [`decode_bc6()`]
//! - [`decode_bc6_block()`]
//! - [`decode_bc6_signed()`]
//! - [`decode_bc6_block_signed()`]
//! - [`decode_bc6_unsigned()`]
//! - [`decode_bc6_block_unsigned()`]
//! - [`decode_bc7()`]
//! - [`decode_bc7_block()`]
//! - ETC
//! - [`decode_etc1()`]
//! - [`decode_etc1_block()`]
//! - [`decode_etc2_rgb()`]
//! - [`decode_etc2_rgb_block()`]
//! - [`decode_etc2_rgba1()`]
//! - [`decode_etc2_rgba1_block()`]
//! - [`decode_etc2_rgba8()`]
//! - [`decode_etc2_rgba8_block()`]
//! - [`decode_eacr()`]
//! - [`decode_eacr_block()`]
//! - [`decode_eacr_signed()`]
//! - [`decode_eacr_signed_block()`]
//! - [`decode_eacrg()`]
//! - [`decode_eacrg_block()`]
//! - PVRTC
//! - [`decode_pvrtc()`]
//! - [`decode_pvrtc_2bpp()`]
//! - [`decode_pvrtc_4bpp()`]
//! - Crunch
//! - [`decode_crunch()`]
//! - Unity Crunch
//! - [`decode_unity_crunch()`]
//!
#![no_std]
mod bitreader;
mod color;
mod f16;
mod macros;
mod astc;
mod atc;
mod bcn;
mod crnlib;
#[cfg(feature = "alloc")]
mod crunch;
mod etc;
mod pvrtc;
#[cfg(feature = "alloc")]
mod unitycrunch;
// import decode functions
pub use astc::*;
pub use atc::*;
pub use bcn::*;
pub use crnlib::CrnTextureInfo;
pub use crunch::decode_crunch;
pub use etc::*;
pub use pvrtc::*;
pub use unitycrunch::decode_unity_crunch;