wow-blp 0.6.2

Parser and encoder for World of Warcraft BLP texture files with DXT compression support
Documentation
use super::super::bounds::get_bounded_slice;
use super::super::reader::{ByteReader, Cursor};
use super::super::types::ParseResult;
use crate::types::*;

pub fn parse_raw1<'a>(
    blp_header: &BlpHeader,
    original_input: &'a [u8],
    offsets: &[u32; 16],
    sizes: &[u32; 16],
    images: &mut Vec<Raw1Image>,
    _input: &'a [u8],
) -> ParseResult<()> {
    let mut read_image = |i: usize| -> ParseResult<()> {
        let offset = offsets[i];
        let size = sizes[i];
        let image_bytes = get_bounded_slice(original_input, offset, size, i)?;
        let mut reader = Cursor::new(image_bytes);

        let n = blp_header.mipmap_pixels(i);
        let indexed_rgb = reader.read_bytes(n as usize)?;

        let an = (n * blp_header.alpha_bits()).div_ceil(8);
        let indexed_alpha = reader.read_bytes(an as usize)?;

        images.push(Raw1Image {
            indexed_rgb,
            indexed_alpha,
        });
        Ok(())
    };

    read_image(0)?;
    if blp_header.has_mipmaps() {
        for (i, &size) in sizes.iter().enumerate().skip(1) {
            if size == 0 {
                break;
            }
            if i > blp_header.mipmaps_count() {
                break;
            }
            read_image(i)?;
        }
    }
    Ok(())
}