nif/blocks/ni_main/
ni_source_texture.rs1use super::ni_object_net::NiObjectNET;
2use super::ni_string::NiString;
3use crate::error::NifError;
4use binrw::{
5 io::{Read, Seek},
6 BinRead, BinReaderExt,
7};
8
9#[derive(Debug, PartialEq, BinRead)]
10#[br(assert(!direct_render, NifError::NotImplemented("Direct Render")))]
11pub struct NiSourceTexture {
12 pub base: NiObjectNET,
13 pub use_external: u8,
14 pub file_name: NiString,
15 #[br(if(use_external == 1))]
16 pub unknown_link_ref: Option<i32>,
17 #[br(if(use_external == 0))]
18 pub pixel_data_ref: Option<i32>,
19 pub pixel_layout: PixelLayout,
20 pub mipmap_format: MipMapFormat,
21 pub alpha_format: AlphaFormat,
22 pub is_static: u8,
23 #[br(map = |x: u8| x > 0)]
24 pub direct_render: bool,
25}
26
27#[derive(Debug, PartialEq, BinRead)]
28pub enum PixelLayout {
29 #[br(magic = 0u32)]
30 Palettised,
31 #[br(magic = 1u32)]
32 HighColor16,
33 #[br(magic = 2u32)]
34 HighColor32,
35 #[br(magic = 3u32)]
36 Compressed,
37 #[br(magic = 4u32)]
38 BumpMap,
39 #[br(magic = 5u32)]
40 Palettised4,
41 #[br(magic = 6u32)]
42 Default,
43 Unknown,
44}
45
46#[derive(Debug, PartialEq, BinRead)]
47pub enum MipMapFormat {
48 #[br(magic = 0u32)]
49 No,
50 #[br(magic = 1u32)]
51 Yes,
52 #[br(magic = 2u32)]
53 Default,
54 Unknown,
55}
56
57#[derive(Debug, PartialEq, BinRead)]
58pub enum AlphaFormat {
59 #[br(magic = 0u32)]
60 None,
61 #[br(magic = 1u32)]
62 Binary,
63 #[br(magic = 2u32)]
64 Smooth,
65 #[br(magic = 3u32)]
66 Default,
67 Unknown,
68}
69
70impl NiSourceTexture {
71 pub fn parse<R: Read + Seek>(reader: &mut R) -> anyhow::Result<Self> {
72 Ok(reader.read_le()?)
73 }
74}
75
76impl std::ops::Deref for NiSourceTexture {
77 type Target = NiObjectNET;
78
79 fn deref(&self) -> &Self::Target {
80 &self.base
81 }
82}