From 513663ab1ef2a42124aa5f2f6758be6751185674 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Tue, 13 Jun 2023 09:39:43 +0200 Subject: [PATCH] Use std::mem::size_of and bytemuck::cast_slice --- src/event_loop.rs | 1 + src/lib.rs | 23 +++++++---------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/event_loop.rs b/src/event_loop.rs index 34fcb39..2704949 100644 --- a/src/event_loop.rs +++ b/src/event_loop.rs @@ -6,6 +6,7 @@ use winit::{ use crate::State; pub fn handle_event_loop(event: Event<()>, state: &mut State, control_flow: &mut ControlFlow) { + // *control_flow = ControlFlow::WaitUntil(Instant::now().add(Duration::from_millis(1000))); match event { Event::WindowEvent { ref event, diff --git a/src/lib.rs b/src/lib.rs index 5c75676..3457c48 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -147,14 +147,12 @@ impl<'a> State<'a> { surface.configure(&device, &config); - let cells_width = 1024; + let cells_width = 256; let size_array = [cells_width as u32, cells_width as u32]; let size_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("size_buffer"), - contents: unsafe { - std::slice::from_raw_parts(size_array.as_ptr() as *const u8, size_array.len() * 4) - }, + contents: bytemuck::cast_slice(&size_array), usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST @@ -164,16 +162,14 @@ impl<'a> State<'a> { let mut rng = rand::thread_rng(); let mut cells_vec = vec![0_u32; cells_width * cells_width]; for cell in cells_vec.iter_mut() { - if rng.gen::() < 0.30 { + if rng.gen::() < 0.15 { *cell = 1; } } let cells_buffer_0 = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: None, - contents: unsafe { - std::slice::from_raw_parts(cells_vec.as_ptr() as *const u8, cells_vec.len() * 4) - }, + contents: bytemuck::cast_slice(&cells_vec), usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::VERTEX, }); @@ -321,17 +317,12 @@ impl<'a> State<'a> { let square_vertices = [0, 0, 0, 1, 1, 0, 1, 1]; let square_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("square_buffer"), - contents: unsafe { - std::slice::from_raw_parts( - square_vertices.as_ptr() as *const u8, - square_vertices.len() * 4, - ) - }, + contents: bytemuck::cast_slice(&square_vertices), usage: wgpu::BufferUsages::VERTEX, }); let square_stride = wgpu::VertexBufferLayout { - array_stride: 2 * (u32::BITS / 8) as u64, + array_stride: 2 * std::mem::size_of::() as u64, step_mode: wgpu::VertexStepMode::Vertex, attributes: &[wgpu::VertexAttribute { shader_location: 1, @@ -341,7 +332,7 @@ impl<'a> State<'a> { }; let cells_stride = wgpu::VertexBufferLayout { - array_stride: (u32::BITS / 8) as u64, + array_stride: std::mem::size_of::() as u64, step_mode: wgpu::VertexStepMode::Instance, attributes: &[wgpu::VertexAttribute { offset: 0,