Cull interior voxels now creates the bitmask and albedo data itself

This commit is contained in:
Jarrod Doyle 2023-07-03 11:11:23 +01:00
parent 95788f3795
commit 374dd254b2
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
1 changed files with 5 additions and 8 deletions

View File

@ -187,9 +187,7 @@ impl BrickmapManager {
// The World gives us the full voxel data for the requested block of voxels.
// For Brickmap raytracing we only care about the visible surface voxels, so
// we need to cull any interior voxels.
let mut bitmask_data = [0xFFFFFFFF_u32; 16];
let mut albedo_data = Vec::<u32>::new();
Self::cull_interior_voxels(&block, &mut bitmask_data, &mut albedo_data);
let (bitmask_data, albedo_data) = Self::cull_interior_voxels(&block);
// If there's no voxel colour data post-culling it means the brickmap is
// empty. We don't need to upload it, just mark the relevant brickgrid entry.
@ -284,11 +282,9 @@ impl BrickmapManager {
);
}
fn cull_interior_voxels(
block: &[super::world::Voxel],
bitmask_data: &mut [u32; 16],
albedo_data: &mut Vec<u32>,
) {
fn cull_interior_voxels(block: &[super::world::Voxel]) -> ([u32; 16], Vec<u32>) {
let mut bitmask_data = [0xFFFFFFFF_u32; 16];
let mut albedo_data = Vec::<u32>::new();
for z in 0..8 {
// Each z level contains two bitmask segments of voxels
let mut entry = 0u64;
@ -335,6 +331,7 @@ impl BrickmapManager {
bitmask_data[offset] = (entry & 0xFFFFFFFF).try_into().unwrap();
bitmask_data[offset + 1] = ((entry >> 32) & 0xFFFFFFFF).try_into().unwrap();
}
(bitmask_data, albedo_data)
}
fn to_brickgrid_element(brickmap_cache_idx: u32, flags: BrickgridFlag) -> u32 {