use citro3d_sys::{GX_TRANSFER_IN_FORMAT, GX_TRANSFER_OUT_FORMAT};
use ctru_sys::GX_TRANSFER_FORMAT;
use super::ColorFormat;
#[derive(Default, Clone, Copy)]
pub struct Flags(u32);
impl Flags {
#[must_use]
pub fn in_format(self, fmt: Format) -> Self {
Self(self.0 | GX_TRANSFER_IN_FORMAT(fmt as GX_TRANSFER_FORMAT))
}
#[must_use]
pub fn out_format(self, fmt: Format) -> Self {
Self(self.0 | GX_TRANSFER_OUT_FORMAT(fmt as GX_TRANSFER_FORMAT))
}
#[must_use]
pub fn bits(self) -> u32 {
self.0
}
}
#[repr(u8)]
#[doc(alias = "GX_TRANSFER_FORMAT")]
pub enum Format {
RGBA8 = ctru_sys::GX_TRANSFER_FMT_RGBA8,
RGB8 = ctru_sys::GX_TRANSFER_FMT_RGB8,
RGB565 = ctru_sys::GX_TRANSFER_FMT_RGB565,
RGB5A1 = ctru_sys::GX_TRANSFER_FMT_RGB5A1,
RGBA4 = ctru_sys::GX_TRANSFER_FMT_RGBA4,
}
impl From<ColorFormat> for Format {
fn from(color_fmt: ColorFormat) -> Self {
match color_fmt {
ColorFormat::RGBA8 => Self::RGBA8,
ColorFormat::RGB8 => Self::RGB8,
ColorFormat::RGBA5551 => Self::RGB5A1,
ColorFormat::RGB565 => Self::RGB565,
ColorFormat::RGBA4 => Self::RGBA4,
}
}
}