Fixed issue with offsets not being reset properly leading to borked draws.

This commit is contained in:
shan 2022-10-05 11:23:36 -07:00
parent 30432cbade
commit e540b7f642
2 changed files with 10 additions and 2 deletions

View file

@ -37,7 +37,7 @@ impl<T: Pod + Zeroable> StaticBuffer<T> {
usages, usages,
gpu: Self::gpu_buffer(device, label, size, usages), gpu: Self::gpu_buffer(device, label, size, usages),
size, size,
_data: Default::default(), _data: PhantomData,
} }
} }
@ -65,7 +65,7 @@ impl<T: Pod + Zeroable> StaticBuffer<T> {
let size = let size =
wgpu::BufferAddress::from((mem::size_of::<T>() * new_count) as u64); wgpu::BufferAddress::from((mem::size_of::<T>() * new_count) as u64);
if self.size <= size { if self.size < size {
self.offsets.clear(); self.offsets.clear();
self.size = size; self.size = size;
self.gpu = Self::gpu_buffer(device, self.label, size, self.usages); self.gpu = Self::gpu_buffer(device, self.label, size, self.usages);
@ -120,4 +120,9 @@ impl<T: Pod + Zeroable> StaticBuffer<T> {
pub fn slice_from_index(&self, index: usize) -> wgpu::BufferSlice<'_> { pub fn slice_from_index(&self, index: usize) -> wgpu::BufferSlice<'_> {
self.gpu.slice(self.offset_at(index)..) self.gpu.slice(self.offset_at(index)..)
} }
/// Clears any temporary data from the buffer.
pub fn clear(&mut self) {
self.offsets.clear()
}
} }

View file

@ -241,6 +241,9 @@ impl Pipeline {
} }
} }
self.vertex_buffer.clear();
self.index_buffer.clear();
if let Some(blit) = &mut self.blit { if let Some(blit) = &mut self.blit {
blit.draw(encoder, target); blit.draw(encoder, target);
} }