makepad_render/
texture.rs

1use crate::cx::*;
2
3#[derive(Clone, PartialEq)]
4pub enum TextureFormat {
5    Default,
6    ImageBGRA,
7    Depth32Stencil8,
8    RenderBGRA,
9    RenderBGRAf16,
10    RenderBGRAf32,
11    //    ImageBGRAf32,
12    //    ImageRf32,
13    //    ImageRGf32,
14    //    MappedBGRA,
15    //    MappedBGRAf32,
16    //    MappedRf32,
17    //    MappedRGf32,
18}
19
20#[derive(Clone, PartialEq)]
21pub struct TextureDesc {
22    pub format: TextureFormat,
23    pub width: Option<usize>,
24    pub height: Option<usize>,
25    pub multisample: Option<usize>
26}
27
28#[derive(Clone)]
29pub struct Texture {
30    pub texture_id: Option<usize>,
31}
32
33impl Default for TextureDesc {
34    fn default() -> Self {
35        TextureDesc {
36            format: TextureFormat::Default,
37            width: None,
38            height: None,
39            multisample: None
40        }
41    }
42}
43
44impl Default for Texture {
45    fn default() -> Self {
46        Texture {
47            texture_id: None
48        }
49    }
50}
51
52impl Texture {
53    pub fn get_desc(&mut self, cx: &Cx) -> Option<TextureDesc> {
54        if let Some(texture_id) = self.texture_id {
55            Some(cx.textures[texture_id].desc.clone())
56        }
57        else {
58            None
59        }
60    }
61    
62    pub fn set_desc(&mut self, cx: &mut Cx, desc: Option<TextureDesc>) {
63        if self.texture_id.is_none() {
64            self.texture_id = Some(if cx.textures_free.len() > 0 {
65                cx.textures_free.pop().unwrap()
66            } else {
67                cx.textures.push(CxTexture::default());
68                cx.textures.len() - 1
69            });
70        }
71        let cxtexture = &mut cx.textures[self.texture_id.unwrap()];
72        if let Some(desc) = desc {
73            cxtexture.desc = desc;
74        }
75    }
76    
77}
78
79#[derive(Default)]
80pub struct CxTexture {
81    pub desc: TextureDesc,
82    pub image_u32: Vec<u32>,
83    pub image_f32: Vec<f32>,
84    pub update_image: bool,
85    pub platform: CxPlatformTexture
86}