input stuff
This commit is contained in:
@@ -28,14 +28,14 @@ impl From<String> for LoadError {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum CPUVertex {
|
||||
Vertex3D(Vertex),
|
||||
VertexText(TextVertex)
|
||||
pub enum CPUVertexList {
|
||||
Vertex3D(Vec<Vertex>),
|
||||
VertexText(Vec<TextVertex>)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CPUMesh {
|
||||
pub vertices: Vec<CPUVertex>,
|
||||
pub vertices: CPUVertexList,
|
||||
pub indices: Vec<u32>,
|
||||
pub local_texture_index: Option<usize>,
|
||||
pub local_normal_map_index: Option<usize>,
|
||||
@@ -88,16 +88,18 @@ pub fn load_mesh<V>(mesh_path: &str, print_status: bool) -> Result<(Vec<CPUMesh>
|
||||
reader.read_tangents(),
|
||||
reader.read_joints(0),
|
||||
reader.read_weights(0));
|
||||
let vertices = vertices_result?.iter().map(|v| CPUVertex::Vertex3D(v.clone())).collect();
|
||||
|
||||
let verts = vertices_result?;
|
||||
let vert_count = verts.len();
|
||||
|
||||
let cpu_mesh = CPUMesh {
|
||||
vertices,
|
||||
vertices: CPUVertexList::Vertex3D(verts),
|
||||
indices: indices.into_u32().collect(),
|
||||
local_texture_index: texture_index,
|
||||
local_normal_map_index: normal_map_index,
|
||||
name: mesh.name().map(|n| n.to_owned()),
|
||||
};
|
||||
if print_status {
|
||||
let vert_count = cpu_mesh.vertices.len();
|
||||
let index_count = cpu_mesh.indices.len();
|
||||
|
||||
total_vertices += vert_count;
|
||||
|
||||
@@ -31,7 +31,7 @@ use pipelines::vs;
|
||||
use crate::config::RenderConfig;
|
||||
use crate::vulkan::gameobject::GameObject;
|
||||
|
||||
use self::mesh::CPUVertex;
|
||||
use self::mesh::{CPUVertexList};
|
||||
|
||||
pub mod pipelines;
|
||||
pub mod gameobject;
|
||||
@@ -428,22 +428,13 @@ impl VulkanRenderer {
|
||||
pub fn upload_mesh(self: &mut Self, mesh: CPUMesh, original_path: Option<String>) -> usize {
|
||||
let index_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::index_buffer(), false, mesh.indices.into_iter()).unwrap();
|
||||
|
||||
match mesh.vertices.get(0).unwrap() {
|
||||
CPUVertex::Vertex3D(_) => {
|
||||
let verts: Vec<Vertex> = mesh.vertices.into_iter().filter_map(|v| match v {
|
||||
CPUVertex::Vertex3D(vert) => Some(vert),
|
||||
CPUVertex::VertexText(_) => None
|
||||
}).collect();
|
||||
match mesh.vertices {
|
||||
CPUVertexList::Vertex3D(verts) => {
|
||||
let vertex_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::vertex_buffer(), false, verts.into_iter()).unwrap();
|
||||
self.game_data.meshes.push(Mesh { vertex_buffer, index_buffer, original_path });
|
||||
self.game_data.meshes.len() - 1
|
||||
},
|
||||
CPUVertex::VertexText(_) => {
|
||||
let verts: Vec<TextVertex> = mesh.vertices.into_iter().filter_map(|v| match v {
|
||||
CPUVertex::Vertex3D(_) => None,
|
||||
CPUVertex::VertexText(vert) => Some(vert)
|
||||
}).collect();
|
||||
|
||||
CPUVertexList::VertexText(verts) => {
|
||||
let vertex_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::vertex_buffer(), false, verts.into_iter()).unwrap();
|
||||
self.game_data.meshes_text.push(Mesh { vertex_buffer, index_buffer, original_path });
|
||||
self.game_data.meshes_text.len() - 1
|
||||
@@ -451,24 +442,16 @@ impl VulkanRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_mesh(self: &mut Self, mesh_index: usize, vertices: Vec<CPUVertex>, indices: Vec<u32>) {
|
||||
pub fn update_mesh(self: &mut Self, mesh_index: usize, vertices: CPUVertexList, indices: Vec<u32>) {
|
||||
let index_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::index_buffer(), false, indices.into_iter()).unwrap();
|
||||
|
||||
match vertices.get(0).unwrap() {
|
||||
CPUVertex::Vertex3D(_) => {
|
||||
let verts: Vec<Vertex> = vertices.into_iter().filter_map(|v| match v {
|
||||
CPUVertex::Vertex3D(vert) => Some(vert),
|
||||
CPUVertex::VertexText(_) => None
|
||||
}).collect();
|
||||
match vertices {
|
||||
CPUVertexList::Vertex3D(verts) => {
|
||||
let mesh = &mut self.game_data.meshes[mesh_index];
|
||||
mesh.vertex_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::vertex_buffer(), false, verts.into_iter()).unwrap();
|
||||
mesh.index_buffer = index_buffer;
|
||||
},
|
||||
CPUVertex::VertexText(_) => {
|
||||
let verts: Vec<TextVertex> = vertices.into_iter().filter_map(|v| match v {
|
||||
CPUVertex::Vertex3D(_) => None,
|
||||
CPUVertex::VertexText(vert) => Some(vert)
|
||||
}).collect();
|
||||
CPUVertexList::VertexText(verts) => {
|
||||
let mesh = &mut self.game_data.meshes_text[mesh_index];
|
||||
mesh.vertex_buffer = CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::vertex_buffer(), false, verts.into_iter()).unwrap();
|
||||
mesh.index_buffer = index_buffer;
|
||||
|
||||
Reference in New Issue
Block a user