radiantkit_core/texture/
texture_manager.rs

1use epaint::{
2    mutex::RwLock, textures::TextureOptions, ImageData, TextureHandle, TextureId, TextureManager,
3};
4use std::sync::Arc;
5
6// Taken from egui
7#[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        // Will be filled in later
15        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 max_texture_side = 256;
36        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}