use stb_sys as sys;
pub enum CompressionMode {
Normal = 0,
Dither = 1,
Highqual = 2,
}
pub fn stb_compress_dxt_block(
dest: &mut [u8],
src_rgba_four_bytes_per_pixel: &[u8],
alpha: i32,
mode: CompressionMode,
) {
debug_assert_ne!(src_rgba_four_bytes_per_pixel.len(), 0);
debug_assert_eq!(src_rgba_four_bytes_per_pixel.len() % 16, 0);
debug_assert_ne!(dest.len(), 0);
debug_assert_eq!(dest.len() % 8, 0);
unsafe {
sys::stb_compress_dxt_block(
dest.as_mut_ptr(),
src_rgba_four_bytes_per_pixel.as_ptr(),
alpha,
mode as i32,
)
}
}
pub fn stb_compress_bc4_block(dest: &mut [u8], src_r_one_byte_per_pixel: &[u8]) {
unsafe { sys::stb_compress_bc4_block(dest.as_mut_ptr(), src_r_one_byte_per_pixel.as_ptr()) }
}
pub fn stb_compress_bc5_block(dest: &mut [u8], src_rg_two_byte_per_pixel: &[u8]) {
unsafe { sys::stb_compress_bc5_block(dest.as_mut_ptr(), src_rg_two_byte_per_pixel.as_ptr()) }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn compress_dxt_block() {
let src: [u8; 16] = [
255, 255, 0, 128, 255, 0, 128, 255, 255, 128, 0, 128, 128, 0, 128, 255,
];
let mut dst: [u8; 8] = [0; 8];
stb_compress_dxt_block(&mut dst, &src, 0, CompressionMode::Normal);
}
}