makepad_render/
texture.rs1use crate::cx::*;
2
3#[derive(Clone, PartialEq)]
4pub enum TextureFormat {
5 Default,
6 ImageBGRA,
7 Depth32Stencil8,
8 RenderBGRA,
9 RenderBGRAf16,
10 RenderBGRAf32,
11 }
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}