use std::mem::ManuallyDrop;
use std::ops::Deref;
pub struct ScopedBufferView<'a> {
buffer_view: ManuallyDrop<wgpu::BufferView<'a>>,
buffer: &'a wgpu::Buffer,
}
impl<'a> ScopedBufferView<'a> {
pub fn new(
buffer: &'a wgpu::Buffer,
buffer_view: wgpu::BufferView<'a>,
) -> ScopedBufferView<'a> {
let buffer_view = ManuallyDrop::new(buffer_view);
ScopedBufferView {
buffer_view,
buffer,
}
}
}
impl<'a> Deref for ScopedBufferView<'a> {
type Target = wgpu::BufferView<'a>;
fn deref(&self) -> &Self::Target {
&self.buffer_view
}
}
impl Drop for ScopedBufferView<'_> {
fn drop(&mut self) {
unsafe { ManuallyDrop::drop(&mut self.buffer_view) }
self.buffer.unmap();
}
}