diff --git a/engine/src/main.rs b/engine/src/main.rs index 5e0711f..39ea1cf 100644 --- a/engine/src/main.rs +++ b/engine/src/main.rs @@ -10,7 +10,7 @@ mod util; mod physics; use render::vulkan::data; -use render::renderable::{Object, Renderable, ResourceManager, Material, Mesh, ImageRefOrColor}; +use render::renderable::{Object, Renderable, ResourceManager, Material, Mesh, Texture}; use physics::color; fn main() { @@ -67,8 +67,8 @@ fn main() { }; let material_cube = rm.add_material(Material::new( - ImageRefOrColor::image(String::from("assets/test-128px.png")), - ImageRefOrColor::color(color::LinearF32::new(1.0)), + Texture::from_image(String::from("assets/test-128px.png")), + Texture::from_color(color::LinearF32::new(1.0)), )); let mut renderer = render::Renderer::initialize(); diff --git a/engine/src/render/renderable.rs b/engine/src/render/renderable.rs index 263f50d..147dd0b 100644 --- a/engine/src/render/renderable.rs +++ b/engine/src/render/renderable.rs @@ -89,8 +89,8 @@ impl<'a> ResourceManager { } pub struct Material { - diffuse: ImageRefOrColor, - roughness: ImageRefOrColor, + diffuse: Texture, + roughness: Texture, id: u64, // vulkan cache @@ -99,8 +99,8 @@ pub struct Material { impl Material { pub fn new( - diffuse: ImageRefOrColor, - roughness: ImageRefOrColor, + diffuse: Texture, + roughness: Texture, ) -> Self { Self { diffuse, @@ -298,36 +298,29 @@ impl ChannelLayout for color::LinearF32 { } } -pub enum ImageRefOrColor { +pub enum Texture { Color(T), - ImageRef(ImageRef), + ImageRef(String), } -impl ImageRefOrColor { +impl Texture { fn vulkan_image(&self, graphics_queue: Arc) -> Arc> { match self { - ImageRefOrColor::::Color(c) => c.vulkan_from_value(graphics_queue), - ImageRefOrColor::::ImageRef(r) => T::vulkan_from_image(r.load(), graphics_queue), + Texture::::Color(c) => c.vulkan_from_value(graphics_queue), + Texture::::ImageRef(r) => { + let path = &file::resource_path(r.clone()); + let img = Arc::new(image::open(path).unwrap()); + T::vulkan_from_image(img, graphics_queue) + }, } } - pub fn color(color: T) -> Self { - ImageRefOrColor::::Color(color) + pub fn from_color(color: T) -> Self { + Texture::::Color(color) } - pub fn image(name: String) -> Self { - ImageRefOrColor::::ImageRef(ImageRef{ name }) - } -} - -pub struct ImageRef { - name: String, -} - -impl ImageRef { - fn load (&self) -> Arc { - let path = &file::resource_path(self.name.clone()); - Arc::new(image::open(path).unwrap()) + pub fn from_image(name: String) -> Self { + Texture::::ImageRef(name) } }