Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_render/src/render_resource/buffer.rs
9308 views
1
use crate::renderer::WgpuWrapper;
2
use bevy_utils::define_atomic_id;
3
use core::ops::{Deref, RangeBounds};
4
5
define_atomic_id!(BufferId);
6
7
#[derive(Clone, Debug)]
8
pub struct Buffer {
9
id: BufferId,
10
value: WgpuWrapper<wgpu::Buffer>,
11
}
12
13
impl Buffer {
14
#[inline]
15
pub fn id(&self) -> BufferId {
16
self.id
17
}
18
19
pub fn slice(&self, bounds: impl RangeBounds<wgpu::BufferAddress>) -> BufferSlice<'_> {
20
BufferSlice {
21
id: self.id,
22
value: self.value.slice(bounds),
23
}
24
}
25
26
#[inline]
27
pub fn unmap(&self) {
28
self.value.unmap();
29
}
30
}
31
32
impl From<wgpu::Buffer> for Buffer {
33
fn from(value: wgpu::Buffer) -> Self {
34
Buffer {
35
id: BufferId::new(),
36
value: WgpuWrapper::new(value),
37
}
38
}
39
}
40
41
impl Deref for Buffer {
42
type Target = wgpu::Buffer;
43
44
#[inline]
45
fn deref(&self) -> &Self::Target {
46
&self.value
47
}
48
}
49
50
#[derive(Clone, Debug)]
51
pub struct BufferSlice<'a> {
52
id: BufferId,
53
value: wgpu::BufferSlice<'a>,
54
}
55
56
impl<'a> BufferSlice<'a> {
57
#[inline]
58
pub fn id(&self) -> BufferId {
59
self.id
60
}
61
}
62
63
impl<'a> Deref for BufferSlice<'a> {
64
type Target = wgpu::BufferSlice<'a>;
65
66
#[inline]
67
fn deref(&self) -> &Self::Target {
68
&self.value
69
}
70
}
71
72