1#[cfg(feature = "rafx-dx12")]
2use crate::dx12::RafxTextureDx12;
3#[cfg(any(
4 feature = "rafx-empty",
5 not(any(
6 feature = "rafx-dx12",
7 feature = "rafx-metal",
8 feature = "rafx-vulkan",
9 feature = "rafx-gles2",
10 feature = "rafx-gles3"
11 ))
12))]
13use crate::empty::RafxTextureEmpty;
14#[cfg(feature = "rafx-gles2")]
15use crate::gles2::RafxTextureGles2;
16#[cfg(feature = "rafx-gles3")]
17use crate::gles3::RafxTextureGles3;
18#[cfg(feature = "rafx-metal")]
19use crate::metal::RafxTextureMetal;
20#[cfg(feature = "rafx-vulkan")]
21use crate::vulkan::RafxTextureVulkan;
22use crate::RafxTextureDef;
23
24#[derive(Clone, Debug)]
28pub enum RafxTexture {
29 #[cfg(feature = "rafx-dx12")]
30 Dx12(RafxTextureDx12),
31 #[cfg(feature = "rafx-vulkan")]
32 Vk(RafxTextureVulkan),
33 #[cfg(feature = "rafx-metal")]
34 Metal(RafxTextureMetal),
35 #[cfg(feature = "rafx-gles2")]
36 Gles2(RafxTextureGles2),
37 #[cfg(feature = "rafx-gles3")]
38 Gles3(RafxTextureGles3),
39 #[cfg(any(
40 feature = "rafx-empty",
41 not(any(
42 feature = "rafx-dx12",
43 feature = "rafx-metal",
44 feature = "rafx-vulkan",
45 feature = "rafx-gles2",
46 feature = "rafx-gles3"
47 ))
48 ))]
49 Empty(RafxTextureEmpty),
50}
51
52impl RafxTexture {
53 pub fn texture_def(&self) -> &RafxTextureDef {
55 match self {
56 #[cfg(feature = "rafx-dx12")]
57 RafxTexture::Dx12(inner) => inner.texture_def(),
58 #[cfg(feature = "rafx-vulkan")]
59 RafxTexture::Vk(inner) => inner.texture_def(),
60 #[cfg(feature = "rafx-metal")]
61 RafxTexture::Metal(inner) => inner.texture_def(),
62 #[cfg(feature = "rafx-gles2")]
63 RafxTexture::Gles2(inner) => inner.texture_def(),
64 #[cfg(feature = "rafx-gles3")]
65 RafxTexture::Gles3(inner) => inner.texture_def(),
66 #[cfg(any(
67 feature = "rafx-empty",
68 not(any(
69 feature = "rafx-dx12",
70 feature = "rafx-metal",
71 feature = "rafx-vulkan",
72 feature = "rafx-gles2",
73 feature = "rafx-gles3"
74 ))
75 ))]
76 RafxTexture::Empty(inner) => inner.texture_def(),
77 }
78 }
79
80 pub fn set_debug_name(
83 &self,
84 _name: impl AsRef<str>,
85 ) {
86 match self {
87 #[cfg(feature = "rafx-dx12")]
88 RafxTexture::Dx12(inner) => inner.set_debug_name(_name),
89 #[cfg(feature = "rafx-vulkan")]
90 RafxTexture::Vk(inner) => inner.set_debug_name(_name),
91 #[cfg(feature = "rafx-metal")]
92 RafxTexture::Metal(inner) => inner.set_debug_name(_name),
93 #[cfg(feature = "rafx-gles2")]
94 RafxTexture::Gles2(_) => {}
95 #[cfg(feature = "rafx-gles3")]
96 RafxTexture::Gles3(_) => {}
97 #[cfg(any(
98 feature = "rafx-empty",
99 not(any(
100 feature = "rafx-dx12",
101 feature = "rafx-metal",
102 feature = "rafx-vulkan",
103 feature = "rafx-gles2",
104 feature = "rafx-gles3"
105 ))
106 ))]
107 RafxTexture::Empty(inner) => inner.set_debug_name(_name),
108 }
109 }
110
111 #[cfg(feature = "rafx-dx12")]
114 pub fn dx12_texture(&self) -> Option<&RafxTextureDx12> {
115 match self {
116 #[cfg(feature = "rafx-dx12")]
117 RafxTexture::Dx12(inner) => Some(inner),
118 #[cfg(feature = "rafx-vulkan")]
119 RafxTexture::Vk(_) => None,
120 #[cfg(feature = "rafx-metal")]
121 RafxTexture::Metal(_) => None,
122 #[cfg(feature = "rafx-gles2")]
123 RafxTexture::Gles2(_) => None,
124 #[cfg(feature = "rafx-gles3")]
125 RafxTexture::Gles3(_) => None,
126 #[cfg(any(
127 feature = "rafx-empty",
128 not(any(
129 feature = "rafx-dx12",
130 feature = "rafx-metal",
131 feature = "rafx-vulkan",
132 feature = "rafx-gles2",
133 feature = "rafx-gles3"
134 ))
135 ))]
136 RafxTexture::Empty(_) => None,
137 }
138 }
139
140 #[cfg(feature = "rafx-vulkan")]
143 pub fn vk_texture(&self) -> Option<&RafxTextureVulkan> {
144 match self {
145 #[cfg(feature = "rafx-dx12")]
146 RafxTexture::Dx12(_) => None,
147 #[cfg(feature = "rafx-vulkan")]
148 RafxTexture::Vk(inner) => Some(inner),
149 #[cfg(feature = "rafx-metal")]
150 RafxTexture::Metal(_) => None,
151 #[cfg(feature = "rafx-gles2")]
152 RafxTexture::Gles2(_) => None,
153 #[cfg(feature = "rafx-gles3")]
154 RafxTexture::Gles3(_) => None,
155 #[cfg(any(
156 feature = "rafx-empty",
157 not(any(
158 feature = "rafx-dx12",
159 feature = "rafx-metal",
160 feature = "rafx-vulkan",
161 feature = "rafx-gles2",
162 feature = "rafx-gles3"
163 ))
164 ))]
165 RafxTexture::Empty(_) => None,
166 }
167 }
168
169 #[cfg(feature = "rafx-metal")]
172 pub fn metal_texture(&self) -> Option<&RafxTextureMetal> {
173 match self {
174 #[cfg(feature = "rafx-dx12")]
175 RafxTexture::Dx12(_) => None,
176 #[cfg(feature = "rafx-vulkan")]
177 RafxTexture::Vk(_) => None,
178 #[cfg(feature = "rafx-metal")]
179 RafxTexture::Metal(inner) => Some(inner),
180 #[cfg(feature = "rafx-gles2")]
181 RafxTexture::Gles2(_) => None,
182 #[cfg(feature = "rafx-gles3")]
183 RafxTexture::Gles3(_) => None,
184 #[cfg(any(
185 feature = "rafx-empty",
186 not(any(
187 feature = "rafx-dx12",
188 feature = "rafx-metal",
189 feature = "rafx-vulkan",
190 feature = "rafx-gles2",
191 feature = "rafx-gles3"
192 ))
193 ))]
194 RafxTexture::Empty(_) => None,
195 }
196 }
197
198 #[cfg(feature = "rafx-gles2")]
201 pub fn gles2_texture(&self) -> Option<&RafxTextureGles2> {
202 match self {
203 #[cfg(feature = "rafx-dx12")]
204 RafxTexture::Dx12(_) => None,
205 #[cfg(feature = "rafx-vulkan")]
206 RafxTexture::Vk(_) => None,
207 #[cfg(feature = "rafx-metal")]
208 RafxTexture::Metal(_) => None,
209 #[cfg(feature = "rafx-gles2")]
210 RafxTexture::Gles2(inner) => Some(inner),
211 #[cfg(feature = "rafx-gles3")]
212 RafxTexture::Gles3(_) => None,
213 #[cfg(any(
214 feature = "rafx-empty",
215 not(any(
216 feature = "rafx-dx12",
217 feature = "rafx-metal",
218 feature = "rafx-vulkan",
219 feature = "rafx-gles2",
220 feature = "rafx-gles3"
221 ))
222 ))]
223 RafxTexture::Empty(_) => None,
224 }
225 }
226
227 #[cfg(feature = "rafx-gles3")]
230 pub fn gles3_texture(&self) -> Option<&RafxTextureGles3> {
231 match self {
232 #[cfg(feature = "rafx-dx12")]
233 RafxTexture::Dx12(_) => None,
234 #[cfg(feature = "rafx-vulkan")]
235 RafxTexture::Vk(_) => None,
236 #[cfg(feature = "rafx-metal")]
237 RafxTexture::Metal(_) => None,
238 #[cfg(feature = "rafx-gles2")]
239 RafxTexture::Gles2(_) => None,
240 #[cfg(feature = "rafx-gles3")]
241 RafxTexture::Gles3(inner) => Some(inner),
242 #[cfg(any(
243 feature = "rafx-empty",
244 not(any(
245 feature = "rafx-dx12",
246 feature = "rafx-metal",
247 feature = "rafx-vulkan",
248 feature = "rafx-gles2",
249 feature = "rafx-gles3"
250 ))
251 ))]
252 RafxTexture::Empty(_) => None,
253 }
254 }
255
256 #[cfg(any(
259 feature = "rafx-empty",
260 not(any(
261 feature = "rafx-dx12",
262 feature = "rafx-metal",
263 feature = "rafx-vulkan",
264 feature = "rafx-gles2",
265 feature = "rafx-gles3"
266 ))
267 ))]
268 pub fn empty_texture(&self) -> Option<&RafxTextureEmpty> {
269 match self {
270 #[cfg(feature = "rafx-dx12")]
271 RafxTexture::Dx12(_) => None,
272 #[cfg(feature = "rafx-vulkan")]
273 RafxTexture::Vk(_) => None,
274 #[cfg(feature = "rafx-metal")]
275 RafxTexture::Metal(_) => None,
276 #[cfg(feature = "rafx-gles2")]
277 RafxTexture::Gles2(_) => None,
278 #[cfg(feature = "rafx-gles3")]
279 RafxTexture::Gles3(_) => None,
280 #[cfg(any(
281 feature = "rafx-empty",
282 not(any(
283 feature = "rafx-dx12",
284 feature = "rafx-metal",
285 feature = "rafx-vulkan",
286 feature = "rafx-gles2",
287 feature = "rafx-gles3"
288 ))
289 ))]
290 RafxTexture::Empty(inner) => Some(inner),
291 }
292 }
293}