use super::direct::*;
use super::header::*;
use super::jpeg::*;
pub use super::version::BlpVersion;
pub const BLP_MAX_WIDTH: u32 = 65535;
pub const BLP_MAX_HEIGHT: u32 = 65535;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BlpImage {
pub header: BlpHeader,
pub content: BlpContent,
}
impl BlpImage {
pub fn image_count(&self) -> usize {
match &self.content {
BlpContent::Dxt1(v) => v.images.len(),
BlpContent::Dxt3(v) => v.images.len(),
BlpContent::Dxt5(v) => v.images.len(),
BlpContent::Raw1(v) => v.images.len(),
BlpContent::Raw3(v) => v.images.len(),
BlpContent::Jpeg(v) => v.images.len(),
}
}
pub fn content_jpeg(&self) -> Option<&BlpJpeg> {
self.content.jpeg()
}
pub fn content_raw1(&self) -> Option<&BlpRaw1> {
self.content.raw1()
}
pub fn content_raw3(&self) -> Option<&BlpRaw3> {
self.content.raw3()
}
pub fn content_dxt1(&self) -> Option<&BlpDxtn> {
self.content.dxt1()
}
pub fn ontent_dxt3(&self) -> Option<&BlpDxtn> {
self.content.dxt3()
}
pub fn content_dxt5(&self) -> Option<&BlpDxtn> {
self.content.dxt5()
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum BlpContent {
Jpeg(BlpJpeg),
Raw1(BlpRaw1),
Raw3(BlpRaw3),
Dxt1(BlpDxtn),
Dxt3(BlpDxtn),
Dxt5(BlpDxtn),
}
impl BlpContent {
pub fn tag(&self) -> BlpContentTag {
match self {
BlpContent::Jpeg { .. } => BlpContentTag::Jpeg,
BlpContent::Raw1 { .. } => BlpContentTag::Direct,
BlpContent::Raw3 { .. } => BlpContentTag::Direct,
BlpContent::Dxt1 { .. } => BlpContentTag::Direct,
BlpContent::Dxt3 { .. } => BlpContentTag::Direct,
BlpContent::Dxt5 { .. } => BlpContentTag::Direct,
}
}
pub fn jpeg(&self) -> Option<&BlpJpeg> {
match self {
BlpContent::Jpeg(v) => Some(v),
_ => None,
}
}
pub fn raw1(&self) -> Option<&BlpRaw1> {
match self {
BlpContent::Raw1(v) => Some(v),
_ => None,
}
}
pub fn raw3(&self) -> Option<&BlpRaw3> {
match self {
BlpContent::Raw3(v) => Some(v),
_ => None,
}
}
pub fn dxt1(&self) -> Option<&BlpDxtn> {
match self {
BlpContent::Dxt1(v) => Some(v),
_ => None,
}
}
pub fn dxt3(&self) -> Option<&BlpDxtn> {
match self {
BlpContent::Dxt3(v) => Some(v),
_ => None,
}
}
pub fn dxt5(&self) -> Option<&BlpDxtn> {
match self {
BlpContent::Dxt5(v) => Some(v),
_ => None,
}
}
}