diff options
author | Serge Bazanski <q3k@q3k.org> | 2021-07-11 01:44:23 +0000 |
---|---|---|
committer | Serge Bazanski <q3k@q3k.org> | 2021-07-11 01:44:23 +0000 |
commit | 88cb4cff6ebc39ee61a03b5f7ec19d4c13ffd6f3 (patch) | |
tree | da6abdb208fccb68fd241633b98508fa8ac92f9f | |
parent | e90ebae6f6e5912d98e60b42d390f223cdf1b2a6 (diff) | |
download | abrasion-master.tar.gz abrasion-master.tar.bz2 abrasion-master.tar.xz abrasion-master.zip |
-rw-r--r-- | engine/render/mesh.rs | 21 | ||||
-rw-r--r-- | engine/render/vulkan/data.rs | 35 | ||||
-rw-r--r-- | engine/render/vulkan/pipeline_forward.rs | 3 | ||||
-rw-r--r-- | hsvr/main.rs | 66 |
4 files changed, 60 insertions, 65 deletions
diff --git a/engine/render/mesh.rs b/engine/render/mesh.rs index 0f11de07..19e9f25d 100644 --- a/engine/render/mesh.rs +++ b/engine/render/mesh.rs @@ -24,9 +24,24 @@ use vulkano::sync::GpuFuture; use crate::vulkan::data; +#[derive(Default, Copy, Clone, Debug)] +pub struct Vertex { + pub pos: [f32; 3], + pub normal: [f32; 3], + pub tex: [f32; 2], +} + +impl Vertex { + pub fn new(pos: [f32; 3], normal: [f32; 3], tex: [f32; 2]) -> Self { + Self { + pos, normal, tex, + } + } +} + #[derive(Debug)] pub struct Mesh { - vertices: Arc<Vec<data::Vertex>>, + vertices: Arc<Vec<Vertex>>, indices: Arc<Vec<u16>>, // vulkan buffers cache vulkan: Mutex<Option<data::VertexData>>, @@ -34,7 +49,7 @@ pub struct Mesh { impl Mesh { pub fn new( - vertices: Arc<Vec<data::Vertex>>, + vertices: Arc<Vec<Vertex>>, indices: Arc<Vec<u16>>, ) -> Self { Self { @@ -47,7 +62,7 @@ impl Mesh { &self, graphics_queue: Arc<vd::Queue>, ) -> ( - Arc<vb::ImmutableBuffer<[data::Vertex]>>, + Arc<vb::ImmutableBuffer<[Vertex]>>, Arc<vb::ImmutableBuffer<[u16]>>, ) { let mut cache = self.vulkan.lock().unwrap(); diff --git a/engine/render/vulkan/data.rs b/engine/render/vulkan/data.rs index ae33116e..d1a9d287 100644 --- a/engine/render/vulkan/data.rs +++ b/engine/render/vulkan/data.rs @@ -16,26 +16,7 @@ use std::sync::Arc; -use vulkano::buffer as vb; -use vulkano::image as vm; -use vulkano::format::Format; - -use cgmath as cgm; - -#[derive(Default, Copy, Clone, Debug)] -pub struct Vertex { - pos: [f32; 3], - normal: [f32; 3], - tex: [f32; 2], -} - -impl Vertex { - pub fn new(pos: [f32; 3], normal: [f32; 3], tex: [f32; 2]) -> Self { - Self { - pos, normal, tex, - } - } -} +use crate::mesh::Vertex; vulkano::impl_vertex!(Vertex, pos, normal, tex); #[derive(Default, Copy, Clone)] @@ -44,7 +25,7 @@ pub struct Instance { } impl Instance { - pub fn new(model: &cgm::Matrix4<f32>) -> Self { + pub fn new(model: &cgmath::Matrix4<f32>) -> Self { let slice: &[f32; 16] = model.as_ref(); Self { model: slice.clone(), @@ -61,26 +42,26 @@ pub struct OmniLight { #[derive(Copy, Clone, Debug)] pub struct PushConstantObject { - pub view: cgm::Matrix4<f32>, + pub view: cgmath::Matrix4<f32>, } #[derive(Copy, Clone, Debug)] pub struct FragmentUniformBufferObject { - pub camera_pos: cgm::Vector4<f32>, + pub camera_pos: cgmath::Vector4<f32>, pub omni_lights: [OmniLight; 4], } #[derive(Clone, Debug)] pub struct Textures { // diffuse: RGB - pub diffuse: Arc<vm::ImmutableImage<Format>>, + pub diffuse: Arc<vulkano::image::ImmutableImage<vulkano::format::Format>>, // roughness: R - pub roughness: Arc<vm::ImmutableImage<Format>>, + pub roughness: Arc<vulkano::image::ImmutableImage<vulkano::format::Format>>, } pub struct VertexData { - pub vbuffer: Arc<vb::ImmutableBuffer<[Vertex]>>, - pub ibuffer: Arc<vb::ImmutableBuffer<[u16]>>, + pub vbuffer: Arc<vulkano::buffer::ImmutableBuffer<[Vertex]>>, + pub ibuffer: Arc<vulkano::buffer::ImmutableBuffer<[u16]>>, } impl std::fmt::Debug for VertexData { diff --git a/engine/render/vulkan/pipeline_forward.rs b/engine/render/vulkan/pipeline_forward.rs index 4c98abb7..0781d634 100644 --- a/engine/render/vulkan/pipeline_forward.rs +++ b/engine/render/vulkan/pipeline_forward.rs @@ -30,6 +30,7 @@ use vulkano::pipeline::shader as vps; use vulkano::pipeline::vertex as vpv; use vulkano::sampler as vs; +use crate::mesh::Vertex; use crate::vulkan::data; use crate::vulkan::shaders; use crate::vulkan::pipeline; @@ -180,7 +181,7 @@ impl Forward { // against most existing software and practices. This might bite us in the ass at some // point in the future. let pipeline = Arc::new(vp::GraphicsPipeline::start() - .vertex_input(vpv::OneVertexOneInstanceDefinition::<data::Vertex, data::Instance>::new()) + .vertex_input(vpv::OneVertexOneInstanceDefinition::<Vertex, data::Instance>::new()) .vertex_shader(vertex_shader.entry_point(), ()) .triangle_list() .primitive_restart(false) diff --git a/hsvr/main.rs b/hsvr/main.rs index e56d8cc4..fe74022d 100644 --- a/hsvr/main.rs +++ b/hsvr/main.rs @@ -5,8 +5,6 @@ use ecs_macros::Access; use engine::{ globals, input, physics, render, scripting, util, }; -use engine::render::material; -use engine::render::vulkan::data; struct Main { light1: ecs::EntityID, @@ -21,35 +19,35 @@ impl Main { let mut rm = render::resource::Manager::new(); let mesh = { let vertices = Arc::new(vec![ - data::Vertex::new([-0.5, -0.5, 0.5], [ 0.0, 0.0, 1.0], [1.0, 0.0]), - data::Vertex::new([ 0.5, -0.5, 0.5], [ 0.0, 0.0, 1.0], [0.0, 0.0]), - data::Vertex::new([ 0.5, 0.5, 0.5], [ 0.0, 0.0, 1.0], [0.0, 1.0]), - data::Vertex::new([-0.5, 0.5, 0.5], [ 0.0, 0.0, 1.0], [1.0, 1.0]), - - data::Vertex::new([ 0.5, -0.5, -0.5], [ 1.0, 0.0, 0.0], [0.0, 1.0]), - data::Vertex::new([ 0.5, 0.5, -0.5], [ 1.0, 0.0, 0.0], [1.0, 1.0]), - data::Vertex::new([ 0.5, 0.5, 0.5], [ 1.0, 0.0, 0.0], [1.0, 0.0]), - data::Vertex::new([ 0.5, -0.5, 0.5], [ 1.0, 0.0, 0.0], [0.0, 0.0]), - - data::Vertex::new([-0.5, -0.5, -0.5], [-1.0, 0.0, 0.0], [1.0, 1.0]), - data::Vertex::new([-0.5, 0.5, -0.5], [-1.0, 0.0, 0.0], [0.0, 1.0]), - data::Vertex::new([-0.5, 0.5, 0.5], [-1.0, 0.0, 0.0], [0.0, 0.0]), - data::Vertex::new([-0.5, -0.5, 0.5], [-1.0, 0.0, 0.0], [1.0, 0.0]), - - data::Vertex::new([-0.5, -0.5, -0.5], [ 0.0, -1.0, 0.0], [0.0, 1.0]), - data::Vertex::new([ 0.5, -0.5, -0.5], [ 0.0, -1.0, 0.0], [1.0, 1.0]), - data::Vertex::new([ 0.5, -0.5, 0.5], [ 0.0, -1.0, 0.0], [1.0, 0.0]), - data::Vertex::new([-0.5, -0.5, 0.5], [ 0.0, -1.0, 0.0], [0.0, 0.0]), - - data::Vertex::new([-0.5, 0.5, -0.5], [ 0.0, 1.0, 0.0], [1.0, 1.0]), - data::Vertex::new([ 0.5, 0.5, -0.5], [ 0.0, 1.0, 0.0], [0.0, 1.0]), - data::Vertex::new([ 0.5, 0.5, 0.5], [ 0.0, 1.0, 0.0], [0.0, 0.0]), - data::Vertex::new([-0.5, 0.5, 0.5], [ 0.0, 1.0, 0.0], [1.0, 0.0]), - - data::Vertex::new([-0.5, -0.5, -0.5], [ 0.0, 0.0, -1.0], [0.0, 0.0]), - data::Vertex::new([ 0.5, -0.5, -0.5], [ 0.0, 0.0, -1.0], [1.0, 0.0]), - data::Vertex::new([ 0.5, 0.5, -0.5], [ 0.0, 0.0, -1.0], [1.0, 1.0]), - data::Vertex::new([-0.5, 0.5, -0.5], [ 0.0, 0.0, -1.0], [0.0, 1.0]), + render::mesh::Vertex::new([-0.5, -0.5, 0.5], [ 0.0, 0.0, 1.0], [1.0, 0.0]), + render::mesh::Vertex::new([ 0.5, -0.5, 0.5], [ 0.0, 0.0, 1.0], [0.0, 0.0]), + render::mesh::Vertex::new([ 0.5, 0.5, 0.5], [ 0.0, 0.0, 1.0], [0.0, 1.0]), + render::mesh::Vertex::new([-0.5, 0.5, 0.5], [ 0.0, 0.0, 1.0], [1.0, 1.0]), + + render::mesh::Vertex::new([ 0.5, -0.5, -0.5], [ 1.0, 0.0, 0.0], [0.0, 1.0]), + render::mesh::Vertex::new([ 0.5, 0.5, -0.5], [ 1.0, 0.0, 0.0], [1.0, 1.0]), + render::mesh::Vertex::new([ 0.5, 0.5, 0.5], [ 1.0, 0.0, 0.0], [1.0, 0.0]), + render::mesh::Vertex::new([ 0.5, -0.5, 0.5], [ 1.0, 0.0, 0.0], [0.0, 0.0]), + + render::mesh::Vertex::new([-0.5, -0.5, -0.5], [-1.0, 0.0, 0.0], [1.0, 1.0]), + render::mesh::Vertex::new([-0.5, 0.5, -0.5], [-1.0, 0.0, 0.0], [0.0, 1.0]), + render::mesh::Vertex::new([-0.5, 0.5, 0.5], [-1.0, 0.0, 0.0], [0.0, 0.0]), + render::mesh::Vertex::new([-0.5, -0.5, 0.5], [-1.0, 0.0, 0.0], [1.0, 0.0]), + + render::mesh::Vertex::new([-0.5, -0.5, -0.5], [ 0.0, -1.0, 0.0], [0.0, 1.0]), + render::mesh::Vertex::new([ 0.5, -0.5, -0.5], [ 0.0, -1.0, 0.0], [1.0, 1.0]), + render::mesh::Vertex::new([ 0.5, -0.5, 0.5], [ 0.0, -1.0, 0.0], [1.0, 0.0]), + render::mesh::Vertex::new([-0.5, -0.5, 0.5], [ 0.0, -1.0, 0.0], [0.0, 0.0]), + + render::mesh::Vertex::new([-0.5, 0.5, -0.5], [ 0.0, 1.0, 0.0], [1.0, 1.0]), + render::mesh::Vertex::new([ 0.5, 0.5, -0.5], [ 0.0, 1.0, 0.0], [0.0, 1.0]), + render::mesh::Vertex::new([ 0.5, 0.5, 0.5], [ 0.0, 1.0, 0.0], [0.0, 0.0]), + render::mesh::Vertex::new([-0.5, 0.5, 0.5], [ 0.0, 1.0, 0.0], [1.0, 0.0]), + + render::mesh::Vertex::new([-0.5, -0.5, -0.5], [ 0.0, 0.0, -1.0], [0.0, 0.0]), + render::mesh::Vertex::new([ 0.5, -0.5, -0.5], [ 0.0, 0.0, -1.0], [1.0, 0.0]), + render::mesh::Vertex::new([ 0.5, 0.5, -0.5], [ 0.0, 0.0, -1.0], [1.0, 1.0]), + render::mesh::Vertex::new([-0.5, 0.5, -0.5], [ 0.0, 0.0, -1.0], [0.0, 1.0]), ]); let indices = Arc::new(vec![ 0, 1, 2, 2, 3, 0, @@ -66,9 +64,9 @@ impl Main { rm.add(render::Mesh::new(vertices, indices), Some("cube")) }; - let material = rm.add(material::PBRMaterialBuilder { - diffuse: material::Texture::from_image(String::from("//assets/test-128px.png")), - roughness: material::Texture::from_image(String::from("//assets/test-128px-roughness.png")), + let material = rm.add(render::material::PBRMaterialBuilder { + diffuse: render::material::Texture::from_image(String::from("//assets/test-128px.png")), + roughness: render::material::Texture::from_image(String::from("//assets/test-128px-roughness.png")), }.build(), Some("test-128px")); let light = rm.add(render::Light::omni_test(), Some("omni")); |