queue frees in system nodes
This commit is contained in:
parent
0d87ebe866
commit
2b8789dc8c
@ -32,9 +32,9 @@ impl Node for Camera2dNode {
|
||||
impl SystemNode for Camera2dNode {
|
||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
||||
let mut camera_buffer = None;
|
||||
let mut tmp_buffer = None;
|
||||
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
||||
let mut command_queue = self.command_queue.clone();
|
||||
|
||||
SystemBuilder::new("camera_2d_resource_provider")
|
||||
.read_resource::<RenderResources>()
|
||||
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
||||
@ -69,11 +69,7 @@ impl SystemNode for Camera2dNode {
|
||||
let camera_matrix: [[f32; 4]; 4] =
|
||||
camera.view_matrix.to_cols_array_2d();
|
||||
|
||||
if let Some(old_tmp_buffer) = tmp_buffer {
|
||||
render_resources.remove_buffer(old_tmp_buffer);
|
||||
}
|
||||
|
||||
tmp_buffer = Some(render_resources.create_buffer_mapped(
|
||||
let tmp_buffer = render_resources.create_buffer_mapped(
|
||||
BufferInfo {
|
||||
size: matrix_size,
|
||||
buffer_usage: BufferUsage::COPY_SRC,
|
||||
@ -82,15 +78,16 @@ impl SystemNode for Camera2dNode {
|
||||
&mut |data, _renderer| {
|
||||
data[0..matrix_size].copy_from_slice(camera_matrix.as_bytes());
|
||||
},
|
||||
));
|
||||
);
|
||||
|
||||
command_queue.copy_buffer_to_buffer(
|
||||
tmp_buffer.unwrap(),
|
||||
tmp_buffer,
|
||||
0,
|
||||
camera_buffer.unwrap(),
|
||||
0,
|
||||
matrix_size as u64,
|
||||
);
|
||||
command_queue.free_buffer(tmp_buffer);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -32,9 +32,9 @@ impl Node for CameraNode {
|
||||
impl SystemNode for CameraNode {
|
||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
||||
let mut camera_buffer = None;
|
||||
let mut tmp_buffer = None;
|
||||
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
||||
let mut command_queue = self.command_queue.clone();
|
||||
|
||||
SystemBuilder::new("camera_resource_provider")
|
||||
.read_resource::<RenderResources>()
|
||||
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
|
||||
@ -69,11 +69,7 @@ impl SystemNode for CameraNode {
|
||||
let camera_matrix: [[f32; 4]; 4] =
|
||||
(camera.view_matrix * local_to_world.0).to_cols_array_2d();
|
||||
|
||||
if let Some(old_tmp_buffer) = tmp_buffer {
|
||||
render_resources.remove_buffer(old_tmp_buffer);
|
||||
}
|
||||
|
||||
tmp_buffer = Some(render_resources.create_buffer_mapped(
|
||||
let tmp_buffer = render_resources.create_buffer_mapped(
|
||||
BufferInfo {
|
||||
size: matrix_size,
|
||||
buffer_usage: BufferUsage::COPY_SRC,
|
||||
@ -82,15 +78,16 @@ impl SystemNode for CameraNode {
|
||||
&mut |data, _renderer| {
|
||||
data[0..matrix_size].copy_from_slice(camera_matrix.as_bytes());
|
||||
},
|
||||
));
|
||||
);
|
||||
|
||||
command_queue.copy_buffer_to_buffer(
|
||||
tmp_buffer.unwrap(),
|
||||
tmp_buffer,
|
||||
0,
|
||||
camera_buffer.unwrap(),
|
||||
0,
|
||||
matrix_size as u64,
|
||||
);
|
||||
command_queue.free_buffer(tmp_buffer);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -429,7 +429,6 @@ where
|
||||
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
||||
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
|
||||
let dynamic_uniforms = self.dynamic_uniforms;
|
||||
let mut staging_buffer_resource = None;
|
||||
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
||||
// TODO: maybe run "update" here
|
||||
SystemBuilder::new(format!(
|
||||
@ -447,10 +446,6 @@ where
|
||||
(textures, render_resources),
|
||||
(read_uniform_query, write_uniform_query)| {
|
||||
let render_resource_context = &*render_resources.context;
|
||||
if let Some(staging_buffer_resource) = staging_buffer_resource {
|
||||
render_resource_context.remove_buffer(staging_buffer_resource);
|
||||
}
|
||||
staging_buffer_resource = None;
|
||||
|
||||
uniform_buffer_arrays.reset_new_item_counts();
|
||||
// update uniforms info
|
||||
@ -537,8 +532,7 @@ where
|
||||
|
||||
uniform_buffer_arrays
|
||||
.copy_staging_buffer_to_final_buffers(&mut command_queue, staging_buffer);
|
||||
|
||||
staging_buffer_resource = Some(staging_buffer);
|
||||
command_queue.free_buffer(staging_buffer);
|
||||
}
|
||||
},
|
||||
)
|
||||
@ -593,7 +587,6 @@ where
|
||||
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
||||
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
|
||||
let dynamic_uniforms = self.dynamic_uniforms;
|
||||
let mut staging_buffer_resource = None;
|
||||
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
||||
// TODO: maybe run "update" here
|
||||
SystemBuilder::new("uniform_resource_provider")
|
||||
@ -609,11 +602,6 @@ where
|
||||
(assets, textures, render_resources),
|
||||
(read_handle_query, write_handle_query)| {
|
||||
let render_resource_context = &*render_resources.context;
|
||||
if let Some(staging_buffer_resource) = staging_buffer_resource {
|
||||
render_resource_context.remove_buffer(staging_buffer_resource);
|
||||
}
|
||||
staging_buffer_resource = None;
|
||||
|
||||
uniform_buffer_arrays.reset_new_item_counts();
|
||||
|
||||
// update uniform handles info
|
||||
@ -714,8 +702,7 @@ where
|
||||
&mut command_queue,
|
||||
staging_buffer,
|
||||
);
|
||||
|
||||
staging_buffer_resource = Some(staging_buffer);
|
||||
command_queue.free_buffer(staging_buffer);
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user