From 88cb4cff6ebc39ee61a03b5f7ec19d4c13ffd6f3 Mon Sep 17 00:00:00 2001 From: Serge Bazanski Date: Sun, 11 Jul 2021 01:44:23 +0000 Subject: [PATCH] engine/render: move Vertex out of vulkan --- engine/render/mesh.rs | 21 +++++++-- engine/render/vulkan/data.rs | 35 ++++----------- engine/render/vulkan/pipeline_forward.rs | 3 +- hsvr/main.rs | 56 ++++++++++++------------ 4 files changed, 55 insertions(+), 60 deletions(-) diff --git a/engine/render/mesh.rs b/engine/render/mesh.rs index 0f11de0..19e9f25 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>, + vertices: Arc>, indices: Arc>, // vulkan buffers cache vulkan: Mutex>, @@ -34,7 +49,7 @@ pub struct Mesh { impl Mesh { pub fn new( - vertices: Arc>, + vertices: Arc>, indices: Arc>, ) -> Self { Self { @@ -47,7 +62,7 @@ impl Mesh { &self, graphics_queue: Arc, ) -> ( - Arc>, + Arc>, Arc>, ) { let mut cache = self.vulkan.lock().unwrap(); diff --git a/engine/render/vulkan/data.rs b/engine/render/vulkan/data.rs index ae33116..d1a9d28 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) -> Self { + pub fn new(model: &cgmath::Matrix4) -> 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, + pub view: cgmath::Matrix4, } #[derive(Copy, Clone, Debug)] pub struct FragmentUniformBufferObject { - pub camera_pos: cgm::Vector4, + pub camera_pos: cgmath::Vector4, pub omni_lights: [OmniLight; 4], } #[derive(Clone, Debug)] pub struct Textures { // diffuse: RGB - pub diffuse: Arc>, + pub diffuse: Arc>, // roughness: R - pub roughness: Arc>, + pub roughness: Arc>, } pub struct VertexData { - pub vbuffer: Arc>, - pub ibuffer: Arc>, + pub vbuffer: Arc>, + pub ibuffer: Arc>, } impl std::fmt::Debug for VertexData { diff --git a/engine/render/vulkan/pipeline_forward.rs b/engine/render/vulkan/pipeline_forward.rs index 4c98abb..0781d63 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::::new()) + .vertex_input(vpv::OneVertexOneInstanceDefinition::::new()) .vertex_shader(vertex_shader.entry_point(), ()) .triangle_list() .primitive_restart(false) diff --git a/hsvr/main.rs b/hsvr/main.rs index e56d8cc..fe74022 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]), + 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]), - 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]), + 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]), - 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]), + 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]), - 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]), + 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]), - 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]), + 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]), - 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], [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"));