From cf9ebfbae72085eff052bc79ee4324301b8e8ad9 Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Mon, 13 Jul 2020 23:33:18 +0200 Subject: [PATCH] engine/render: PBRTextureSet --- engine/src/main.rs | 18 ++++++++---------- engine/src/render/renderable.rs | 11 +++++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/engine/src/main.rs b/engine/src/main.rs index 39ea1cf..58516a9 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, Texture}; +use render::renderable::{Object, Renderable, ResourceManager, Mesh, Texture, PBRTextureSet}; use physics::color; fn main() { @@ -19,7 +19,7 @@ fn main() { let mut rm = ResourceManager::new(); - let mesh_cube = { + let mesh = { let vertices = Arc::new(vec![ data::Vertex::new([-0.5, -0.5, 0.5], [1.0, 1.0, 1.0], [1.0, 0.0]), data::Vertex::new([0.5, -0.5, 0.5], [1.0, 1.0, 0.0], [0.0, 0.0]), @@ -66,12 +66,11 @@ fn main() { rm.add_mesh(Mesh::new(vertices, indices)) }; - let material_cube = rm.add_material(Material::new( - Texture::from_image(String::from("assets/test-128px.png")), - Texture::from_color(color::LinearF32::new(1.0)), - )); + let material = PBRTextureSet { + diffuse: Texture::from_image(String::from("assets/test-128px.png")), + roughness: Texture::from_color(color::LinearF32::new(1.0)), + }.build(&mut rm); - let mut renderer = render::Renderer::initialize(); let mut cubes: Vec> = vec![]; for x in -20..20 { @@ -79,9 +78,7 @@ fn main() { for z in -20..20 { let transform = cgm::Matrix4::from_translation(cgm::Vector3::new((x as f32)*4.0, (y as f32)*4.0, (z as f32)*4.0)); let cube = render::renderable::Object { - mesh: mesh_cube, - transform: transform, - material: material_cube, + mesh, material, transform, }; cubes.push(Box::new(cube)); } @@ -91,6 +88,7 @@ fn main() { let renderables: Vec> = cubes.into_iter().map(|e| e as Box).collect(); let start = time::Instant::now(); + let mut renderer = render::Renderer::initialize(); loop { let instant_ns = time::Instant::now().duration_since(start).as_nanos() as u64; let instant = ((instant_ns/1000) as f32) / 1_000_000.0; diff --git a/engine/src/render/renderable.rs b/engine/src/render/renderable.rs index 147dd0b..7b2651b 100644 --- a/engine/src/render/renderable.rs +++ b/engine/src/render/renderable.rs @@ -88,6 +88,17 @@ impl<'a> ResourceManager { } } +pub struct PBRTextureSet { + pub diffuse: Texture, + pub roughness: Texture, +} + +impl PBRTextureSet { + pub fn build(self, rm: &mut ResourceManager) -> ResourceID { + rm.add_material(Material::new(self.diffuse, self.roughness)) + } +} + pub struct Material { diffuse: Texture, roughness: Texture,