diff --git a/crates/bevy_render/src/render_resource/storage_buffer.rs b/crates/bevy_render/src/render_resource/storage_buffer.rs index 19bdb00909ad5..00f531c230d57 100644 --- a/crates/bevy_render/src/render_resource/storage_buffer.rs +++ b/crates/bevy_render/src/render_resource/storage_buffer.rs @@ -1,5 +1,7 @@ #![allow(clippy::doc_markdown)] +use std::marker::PhantomData; + use super::Buffer; use crate::renderer::{RenderDevice, RenderQueue}; use encase::{ @@ -160,25 +162,25 @@ impl StorageBuffer { /// /// [std430 alignment/padding requirements]: https://www.w3.org/TR/WGSL/#address-spaces-storage pub struct DynamicStorageBuffer { - values: Vec, scratch: DynamicStorageBufferWrapper>, buffer: Option, capacity: usize, label: Option, changed: bool, buffer_usage: BufferUsages, + _marker: PhantomData T>, } impl Default for DynamicStorageBuffer { fn default() -> Self { Self { - values: Vec::new(), scratch: DynamicStorageBufferWrapper::new(Vec::new()), buffer: None, capacity: 0, label: None, changed: false, buffer_usage: BufferUsages::COPY_DST | BufferUsages::STORAGE, + _marker: PhantomData, } } } @@ -198,21 +200,14 @@ impl DynamicStorageBuffer { })) } - #[inline] - pub fn len(&self) -> usize { - self.values.len() - } - #[inline] pub fn is_empty(&self) -> bool { - self.values.is_empty() + self.scratch.as_ref().is_empty() } #[inline] pub fn push(&mut self, value: T) -> u32 { - let offset = self.scratch.write(&value).unwrap() as u32; - self.values.push(value); - offset + self.scratch.write(&value).unwrap() as u32 } pub fn set_label(&mut self, label: Option<&str>) { @@ -258,7 +253,6 @@ impl DynamicStorageBuffer { #[inline] pub fn clear(&mut self) { - self.values.clear(); self.scratch.as_mut().clear(); self.scratch.set_offset(0); } diff --git a/crates/bevy_render/src/render_resource/uniform_buffer.rs b/crates/bevy_render/src/render_resource/uniform_buffer.rs index e59b21ec555e2..ac79433a752e5 100644 --- a/crates/bevy_render/src/render_resource/uniform_buffer.rs +++ b/crates/bevy_render/src/render_resource/uniform_buffer.rs @@ -1,3 +1,5 @@ +use std::marker::PhantomData; + use crate::{ render_resource::Buffer, renderer::{RenderDevice, RenderQueue}, @@ -153,25 +155,25 @@ impl UniformBuffer { /// /// [std140 alignment/padding requirements]: https://www.w3.org/TR/WGSL/#address-spaces-uniform pub struct DynamicUniformBuffer { - values: Vec, scratch: DynamicUniformBufferWrapper>, buffer: Option, capacity: usize, label: Option, changed: bool, buffer_usage: BufferUsages, + _marker: PhantomData T>, } impl Default for DynamicUniformBuffer { fn default() -> Self { Self { - values: Vec::new(), scratch: DynamicUniformBufferWrapper::new(Vec::new()), buffer: None, capacity: 0, label: None, changed: false, buffer_usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM, + _marker: PhantomData, } } } @@ -191,22 +193,15 @@ impl DynamicUniformBuffer { })) } - #[inline] - pub fn len(&self) -> usize { - self.values.len() - } - #[inline] pub fn is_empty(&self) -> bool { - self.values.is_empty() + self.scratch.as_ref().is_empty() } /// Push data into the `DynamicUniformBuffer`'s internal vector (residing on system RAM). #[inline] pub fn push(&mut self, value: T) -> u32 { - let offset = self.scratch.write(&value).unwrap() as u32; - self.values.push(value); - offset + self.scratch.write(&value).unwrap() as u32 } pub fn set_label(&mut self, label: Option<&str>) { @@ -257,7 +252,6 @@ impl DynamicUniformBuffer { #[inline] pub fn clear(&mut self) { - self.values.clear(); self.scratch.as_mut().clear(); self.scratch.set_offset(0); }