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