From 6239e145e9c89ac8960e23f5bcdd050e845f4aba Mon Sep 17 00:00:00 2001 From: Piotrek Date: Thu, 22 Apr 2021 23:25:35 +0200 Subject: [PATCH] allocating array on heap --- src/renderer/buffers/brick_buffer.rs | 50 ++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/renderer/buffers/brick_buffer.rs b/src/renderer/buffers/brick_buffer.rs index 8be2ba0..2825211 100644 --- a/src/renderer/buffers/brick_buffer.rs +++ b/src/renderer/buffers/brick_buffer.rs @@ -1,10 +1,39 @@ +use std::convert::TryInto; + const BRICK_SIZE : usize = 32; // 32x32x32 brick size const BRICK_NUM : usize = 64; // 64 bricks in texture +const BRICK_LEN : usize = BRICK_SIZE*BRICK_SIZE*BRICK_SIZE; +const DATA_LEN : usize = BRICK_LEN * BRICK_NUM; + +struct BrickData { + data: Box<[u8]> +} + +impl BrickData { + + pub fn new() -> Self { + let data = vec![0_u8; DATA_LEN].into_boxed_slice(); + Self { data } + } + + pub fn set(&mut self, brick: usize, x: usize, y: usize, z: usize, value: u8) + { + let local_idx = x + BRICK_SIZE * (y + BRICK_SIZE * z); + let offset = brick * BRICK_LEN; + self.data[offset + local_idx] = value; + } + + pub fn get_1024(&mut self, offset: usize) -> [u8; 1024] + { + self.data[offset..offset+1024].try_into().expect("wrong size") + } +} + pub struct BrickBuffer { - //bricks: [[u8; BRICK_SIZE*BRICK_SIZE*BRICK_SIZE];BRICK_NUM], + bricks: BrickData, texture: wgpu::Texture, size: wgpu::Extent3d, pub bind_layout: wgpu::BindGroupLayout, @@ -68,17 +97,16 @@ impl BrickBuffer { ); // Data - // let mut bricks = [[0; BRICK_SIZE*BRICK_SIZE*BRICK_SIZE]; BRICK_NUM]; - // for x in 0..32 { - // for y in 0..16 { - // for z in 0..32 { - // let idx = x + BRICK_SIZE * (y + BRICK_SIZE * z); - // bricks[0][idx] = 1; - // } - // } - // } + let mut bricks = BrickData::new(); + for x in 0..32 { + for y in 0..16 { + for z in 0..32 { + bricks.set(0, x, y, z, 1); + } + } + } // Done - Self { texture, size, bind_layout, bind_group } + Self { bricks, texture, size, bind_layout, bind_group } } } \ No newline at end of file