yakui_core/paint/
texture.rs1use glam::UVec2;
2
3#[derive(Clone)]
5pub struct Texture {
6 format: TextureFormat,
7 size: UVec2,
8 data: Vec<u8>,
9
10 pub min_filter: TextureFilter,
12
13 pub mag_filter: TextureFilter,
15
16 pub address_mode: AddressMode,
18}
19
20impl std::fmt::Debug for Texture {
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 f.debug_struct("Texture")
23 .field("format", &self.format)
24 .field("size", &self.size)
25 .field("min_filter", &self.min_filter)
26 .field("mag_filter", &self.mag_filter)
27 .field("address_mode", &self.address_mode)
28 .finish_non_exhaustive()
29 }
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq)]
34#[non_exhaustive]
35pub enum TextureFormat {
36 Rgba8Srgb,
39
40 R8,
42}
43
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
46pub enum TextureFilter {
47 Linear,
49
50 Nearest,
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
56pub enum AddressMode {
57 ClampToEdge,
59
60 Repeat,
62}
63
64impl Texture {
65 pub fn new(format: TextureFormat, size: UVec2, data: Vec<u8>) -> Self {
67 Self {
68 format,
69 size,
70 data,
71 min_filter: TextureFilter::Nearest,
72 mag_filter: TextureFilter::Linear,
73 address_mode: AddressMode::ClampToEdge,
74 }
75 }
76
77 pub fn size(&self) -> UVec2 {
79 self.size
80 }
81
82 pub fn data(&self) -> &[u8] {
84 self.data.as_slice()
85 }
86
87 pub fn data_mut(&mut self) -> &mut [u8] {
89 self.data.as_mut_slice()
90 }
91
92 pub fn format(&self) -> TextureFormat {
94 self.format
95 }
96}
97
98#[derive(Debug, Clone, Copy, PartialEq, Eq)]
100pub enum TextureChange {
101 Added,
103
104 Removed,
106
107 Modified,
109}