@@ -31,8 +31,6 @@ pub struct ShaderObject<M: Material> {
31
31
pub material_index : u32 ,
32
32
pub vertex_attribute_start_offsets :
33
33
<M :: SupportedAttributeArrayType as MaterialArray < & ' static VertexAttributeId > >:: U32Array ,
34
- // 1 if enabled, 0 if disabled
35
- pub enabled : u32 ,
36
34
}
37
35
38
36
impl < M : Material > Default for ShaderObject < M > {
@@ -44,7 +42,6 @@ impl<M: Material> Default for ShaderObject<M> {
44
42
index_count : Default :: default ( ) ,
45
43
material_index : Default :: default ( ) ,
46
44
vertex_attribute_start_offsets : Zeroable :: zeroed ( ) ,
47
- enabled : Default :: default ( ) ,
48
45
}
49
46
}
50
47
}
@@ -91,7 +88,7 @@ struct ObjectArchetype {
91
88
set_object_transform : fn ( & mut WasmVecAny , & mut FreelistDerivedBuffer , usize , Mat4 ) ,
92
89
duplicate_object : fn ( & WasmVecAny , usize , ObjectChange ) -> Object ,
93
90
remove : fn ( & mut ObjectArchetype , usize ) ,
94
- evaluate : fn ( & mut ObjectArchetype , & Device , & mut CommandEncoder , & ScatterCopy , & [ RawObjectHandle ] ) ,
91
+ evaluate : fn ( & mut ObjectArchetype , & Device , & mut CommandEncoder , & ScatterCopy ) ,
95
92
}
96
93
97
94
/// Manages objects. That's it. ¯\\\_(ツ)\_/¯
@@ -163,15 +160,9 @@ impl ObjectManager {
163
160
( archetype. remove ) ( archetype, handle. idx ) ;
164
161
}
165
162
166
- pub fn evaluate (
167
- & mut self ,
168
- device : & Device ,
169
- encoder : & mut CommandEncoder ,
170
- scatter : & ScatterCopy ,
171
- deferred_removals : & [ RawObjectHandle ] ,
172
- ) {
163
+ pub fn evaluate ( & mut self , device : & Device , encoder : & mut CommandEncoder , scatter : & ScatterCopy ) {
173
164
for archetype in self . archetype . values_mut ( ) {
174
- ( archetype. evaluate ) ( archetype, device, encoder, scatter, deferred_removals ) ;
165
+ ( archetype. evaluate ) ( archetype, device, encoder, scatter) ;
175
166
}
176
167
}
177
168
@@ -279,7 +270,6 @@ pub(super) fn object_add_callback<M: Material>(_material: &M, args: ObjectAddCal
279
270
first_index : ( index_range. start / 4 ) as u32 ,
280
271
index_count : ( ( index_range. end - index_range. start ) / 4 ) as u32 ,
281
272
vertex_attribute_start_offsets,
282
- enabled : true as u32 ,
283
273
} ,
284
274
material_handle : args. object . material ,
285
275
mesh_kind : args. object . mesh_kind ,
@@ -330,35 +320,22 @@ fn duplicate_object<M: Material>(data: &WasmVecAny, idx: usize, change: ObjectCh
330
320
fn remove < M : Material > ( archetype : & mut ObjectArchetype , idx : usize ) {
331
321
let data_vec = archetype. data_vec . downcast_slice_mut :: < Option < InternalObject < M > > > ( ) . unwrap ( ) ;
332
322
333
- // We don't actually remove the object at this point,
334
- // we just mark it as disabled. Next frame, this handle
335
- // will be provided in `deferred_removals` in `evaluate`
336
- // so we can actually delete it.
337
- //
338
- // We defer objects one frame so that temporal culling
339
- // has valid data.
340
- archetype. buffer . use_index ( idx) ;
341
- data_vec[ idx] . as_mut ( ) . unwrap ( ) . inner . enabled = false as u32 ;
323
+ // Only one archetype will have each handle,
324
+ // so if we have it, we can be sure it's ours.
325
+ let removed_obj = Option :: take ( & mut data_vec[ idx] ) ;
326
+
327
+ if removed_obj. is_some ( ) {
328
+ archetype. object_count -= 1 ;
329
+ }
342
330
}
343
331
344
332
fn evaluate < M : Material > (
345
333
archetype : & mut ObjectArchetype ,
346
334
device : & Device ,
347
335
encoder : & mut CommandEncoder ,
348
336
scatter : & ScatterCopy ,
349
- deferred_removals : & [ RawObjectHandle ] ,
350
337
) {
351
338
let data_vec = archetype. data_vec . downcast_slice_mut :: < Option < InternalObject < M > > > ( ) . unwrap ( ) ;
352
339
353
- for removal in deferred_removals {
354
- // Only one archetype will have each handle,
355
- // so if we have it, we can be sure it's ours.
356
- let removed_obj = data_vec[ removal. idx ] . take ( ) ;
357
-
358
- if removed_obj. is_some ( ) {
359
- archetype. object_count -= 1 ;
360
- }
361
- }
362
-
363
340
archetype. buffer . apply ( device, encoder, scatter, |idx| data_vec[ idx] . as_ref ( ) . map ( |o| o. inner ) . unwrap_or_default ( ) )
364
341
}
0 commit comments