1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use densevec::Key;

#[derive(Clone,Copy,Debug,Component,Eq,PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub struct TextureRef{id: usize}

impl Key for TextureRef{
    fn to_usize(self) -> usize{
        self.id
    }

    fn from_usize(id: usize) -> TextureRef{
        TextureRef{id}
    }
}

#[derive(Clone,Copy,Debug,Component,Eq,PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub struct CubemapRef{id: usize}


impl Key for CubemapRef{
    fn to_usize(self) -> usize{
        self.id
    }

    fn from_usize(id: usize) -> CubemapRef{
        CubemapRef{id}
    }
}

#[derive(Clone,Copy,Debug,Component,Eq,PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub struct SamplerRef{id: usize}


impl Key for SamplerRef{
    fn to_usize(self) -> usize{
        self.id
    }

    fn from_usize(id: usize) -> SamplerRef{
        SamplerRef{id}
    }
}

#[derive(Clone,Debug,Copy)]
#[repr(i32)]
pub enum Wrap{
    Repeat = 0,
    Extend = 1,
    Clip = 2,
}

#[derive(Clone,Debug,Copy)]
#[repr(i32)]
pub enum Filter{
    Nearest = 0,
    Linear = 1,
    NearestMipNearest = 2,
    NearestMipLinear = 3,
    LinearMipNearest = 4,
    LinearMipLinear = 5,
}

pub struct Sampler{
    pub wrap: Wrap,
    pub minfilter: Filter,
    pub magfilter: Filter,
}


#[derive(Debug,Clone,Copy,Component,Eq,PartialEq, Ord, Hash, PartialOrd, Serialize, Deserialize)]
pub struct TextureSampler{
    pub texture: TextureRef,
    pub sampler: Option<SamplerRef>,
}

impl From<TextureRef> for TextureSampler{
    fn from(texture: TextureRef) -> TextureSampler{
        TextureSampler{
            texture,
            sampler: None,
        }
    }
}


impl From<TextureRef> for Option<TextureSampler>{
    fn from(texture: TextureRef) -> Option<TextureSampler>{
        Some(TextureSampler{
            texture,
            sampler: None,
        })
    }
}