@@ -9,7 +9,7 @@ use crate::{
9
9
use bevy_ecs:: { prelude:: Component , system:: Resource } ;
10
10
use bevy_utils:: nonmax:: NonMaxU32 ;
11
11
use encase:: { private:: WriteInto , ShaderSize , ShaderType } ;
12
- use std:: { marker:: PhantomData , mem } ;
12
+ use std:: marker:: PhantomData ;
13
13
use wgpu:: BindingResource ;
14
14
15
15
/// Trait for types able to go in a [`GpuArrayBuffer`].
@@ -32,7 +32,7 @@ impl<T: ShaderType + ShaderSize + WriteInto + Clone> GpuArrayBufferable for T {}
32
32
#[ derive( Resource ) ]
33
33
pub enum GpuArrayBuffer < T : GpuArrayBufferable > {
34
34
Uniform ( BatchedUniformBuffer < T > ) ,
35
- Storage ( ( StorageBuffer < Vec < T > > , Vec < T > ) ) ,
35
+ Storage ( StorageBuffer < Vec < T > > ) ,
36
36
}
37
37
38
38
impl < T : GpuArrayBufferable > GpuArrayBuffer < T > {
@@ -41,21 +41,22 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
41
41
if limits. max_storage_buffers_per_shader_stage == 0 {
42
42
GpuArrayBuffer :: Uniform ( BatchedUniformBuffer :: new ( & limits) )
43
43
} else {
44
- GpuArrayBuffer :: Storage ( ( StorageBuffer :: default ( ) , Vec :: new ( ) ) )
44
+ GpuArrayBuffer :: Storage ( StorageBuffer :: default ( ) )
45
45
}
46
46
}
47
47
48
48
pub fn clear ( & mut self ) {
49
49
match self {
50
50
GpuArrayBuffer :: Uniform ( buffer) => buffer. clear ( ) ,
51
- GpuArrayBuffer :: Storage ( ( _ , buffer) ) => buffer. clear ( ) ,
51
+ GpuArrayBuffer :: Storage ( buffer) => buffer. get_mut ( ) . clear ( ) ,
52
52
}
53
53
}
54
54
55
55
pub fn push ( & mut self , value : T ) -> GpuArrayBufferIndex < T > {
56
56
match self {
57
57
GpuArrayBuffer :: Uniform ( buffer) => buffer. push ( value) ,
58
- GpuArrayBuffer :: Storage ( ( _, buffer) ) => {
58
+ GpuArrayBuffer :: Storage ( buffer) => {
59
+ let buffer = buffer. get_mut ( ) ;
59
60
let index = NonMaxU32 :: new ( buffer. len ( ) as u32 ) . unwrap ( ) ;
60
61
buffer. push ( value) ;
61
62
GpuArrayBufferIndex {
@@ -70,10 +71,7 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
70
71
pub fn write_buffer ( & mut self , device : & RenderDevice , queue : & RenderQueue ) {
71
72
match self {
72
73
GpuArrayBuffer :: Uniform ( buffer) => buffer. write_buffer ( device, queue) ,
73
- GpuArrayBuffer :: Storage ( ( buffer, vec) ) => {
74
- buffer. set ( mem:: take ( vec) ) ;
75
- buffer. write_buffer ( device, queue) ;
76
- }
74
+ GpuArrayBuffer :: Storage ( buffer) => buffer. write_buffer ( device, queue) ,
77
75
}
78
76
}
79
77
@@ -93,7 +91,7 @@ impl<T: GpuArrayBufferable> GpuArrayBuffer<T> {
93
91
pub fn binding ( & self ) -> Option < BindingResource > {
94
92
match self {
95
93
GpuArrayBuffer :: Uniform ( buffer) => buffer. binding ( ) ,
96
- GpuArrayBuffer :: Storage ( ( buffer, _ ) ) => buffer. binding ( ) ,
94
+ GpuArrayBuffer :: Storage ( buffer) => buffer. binding ( ) ,
97
95
}
98
96
}
99
97
0 commit comments