radiantkit_core/texture/
texture_manager.rs1use epaint::{
2 mutex::RwLock, textures::TextureOptions, ImageData, TextureHandle, TextureId, TextureManager,
3};
4use std::sync::Arc;
5
6#[derive(Clone)]
8pub struct RadiantTextureManager(pub Arc<RwLock<TextureManager>>);
9
10impl Default for RadiantTextureManager {
11 fn default() -> Self {
12 let mut tex_mngr = TextureManager::default();
13
14 let font_id = tex_mngr.alloc(
16 "egui_font_texture".into(),
17 epaint::FontImage::new([0, 0]).into(),
18 Default::default(),
19 );
20 assert_eq!(font_id, TextureId::default());
21
22 Self(Arc::new(RwLock::new(tex_mngr)))
23 }
24}
25
26impl RadiantTextureManager {
27 pub fn load_texture(
28 &self,
29 name: impl Into<String>,
30 image: impl Into<ImageData>,
31 options: TextureOptions,
32 ) -> TextureHandle {
33 let name = name.into();
34 let image = image.into();
35 let tex_mngr = self.tex_manager();
37 let tex_id = self.0.write().alloc(name, image, options);
38 TextureHandle::new(tex_mngr, tex_id)
39 }
40
41 pub fn tex_manager(&self) -> Arc<RwLock<epaint::textures::TextureManager>> {
42 self.0.clone()
43 }
44}