Rasterize skinned meshes
This commit is contained in:
parent
b06a8c7982
commit
d05308e717
|
@ -1,7 +1,7 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::storage::GpuVec;
|
|
||||||
use crate::storage::mesh::*;
|
|
||||||
use crate::shader::{ShaderHandle, ShaderStore};
|
use crate::shader::{ShaderHandle, ShaderStore};
|
||||||
|
use crate::storage::mesh::*;
|
||||||
|
use crate::storage::GpuVec;
|
||||||
use crate::viewport::ViewportInfo;
|
use crate::viewport::ViewportInfo;
|
||||||
use crate::RenderLayouts;
|
use crate::RenderLayouts;
|
||||||
|
|
||||||
|
@ -490,47 +490,37 @@ impl RenderPass for MeshPass {
|
||||||
multiview: None,
|
multiview: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
let meshes = &[&self.example_mesh, &self.example_mesh];
|
|
||||||
|
|
||||||
// yikes
|
// yikes
|
||||||
let mesh_bindings: Vec<(MeshLayoutBindings, Vec<(&&MeshHandle, MeshAllocInfos)>)> = self
|
let mesh_bindings: Vec<(MeshLayoutBindings, &Vec<MeshCommand>)> = data
|
||||||
.mesh_pool
|
.frame_data
|
||||||
.iter_meshes(self.mesh_layout_id, meshes.iter(), |v| v)
|
.groups
|
||||||
.unwrap()
|
.iter()
|
||||||
.into_iter()
|
|
||||||
.map(
|
.map(
|
||||||
|MeshLayoutInstances {
|
|MeshGroupCommands {
|
||||||
bindings,
|
binding_indices,
|
||||||
instances,
|
meshes,
|
||||||
}| (self.mesh_pool.get_bindings(bindings), instances),
|
..
|
||||||
|
}| (self.mesh_pool.get_bindings(binding_indices.clone()), meshes),
|
||||||
)
|
)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
cmds.set_pipeline(pipeline);
|
cmds.set_pipeline(pipeline);
|
||||||
cmds.set_bind_group(0, data.bind_viewport, &[]);
|
cmds.set_bind_group(0, data.bind_viewport, &[]);
|
||||||
|
|
||||||
for (bindings, instances) in mesh_bindings.iter() {
|
for (bindings, meshes) in mesh_bindings.iter() {
|
||||||
let vertices_pool = bindings.get(self.vertex_attr_id).unwrap();
|
|
||||||
let indices_pool = bindings.get(self.index_attr_id).unwrap();
|
let indices_pool = bindings.get(self.index_attr_id).unwrap();
|
||||||
|
|
||||||
cmds.set_vertex_buffer(0, vertices_pool.get_buffer().slice(..));
|
cmds.set_vertex_buffer(0, data.frame_data.skinned_vertices.as_ref().slice(..));
|
||||||
cmds.set_index_buffer(
|
cmds.set_index_buffer(
|
||||||
indices_pool.get_buffer().slice(..),
|
indices_pool.get_buffer().slice(..),
|
||||||
wgpu::IndexFormat::Uint32,
|
wgpu::IndexFormat::Uint32,
|
||||||
);
|
);
|
||||||
|
|
||||||
for (mesh, infos) in instances {
|
for mesh in meshes.iter() {
|
||||||
let vertices = infos.iter().find(|i| i.0 == self.vertex_attr_id).unwrap().1;
|
let is_start = mesh.index_offset as u32;
|
||||||
let indices = infos.iter().find(|i| i.0 == self.index_attr_id).unwrap().1;
|
let is_end = is_start + mesh.index_count as u32;
|
||||||
|
let vs_offset = mesh.skinned_offset as i32;
|
||||||
let is_start = indices.offset as u32;
|
cmds.draw_indexed(is_start..is_end, vs_offset, 0..1);
|
||||||
let is_end = is_start + indices.count as u32;
|
|
||||||
|
|
||||||
cmds.draw_indexed(is_start..is_end, vertices.offset as i32, 0..1);
|
|
||||||
println!(
|
|
||||||
"drew a mesh! {}..{} + {}",
|
|
||||||
is_start, is_end, vertices.offset
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue