diff --git a/config/log.toml b/config/log.toml index 233e82f..73d0727 100644 --- a/config/log.toml +++ b/config/log.toml @@ -1,5 +1,5 @@ vulkan_validation_layers = true -mesh_load_info = false +mesh_load_info = true [input] mouse_motion = false diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index 158e07f..79e76f0 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -467,18 +467,18 @@ impl VulkanRenderer { let mut offset: usize = 0; for i in 0..13 { - let mut mip_size = dimensions.width_height_depth(); - mip_size[0] = mip_size[0] / u32::pow(2, i); - mip_size[1] = mip_size[1] / u32::pow(2, i); + let mip_size = dimensions.to_image_dimensions().mipmap_dimensions(i).unwrap().width_height_depth(); + println!("Mip level {}, dimensions {:?}", i, mip_size); + // TODO: load sizes from DXT header instead // 4 bits per pixel in DXT1 -> 1/2 byte - let mip_byte_size = ((mip_size[0] * mip_size[1]) / 2) as usize; + let mip_byte_size = ((mip_size[0] * mip_size[1]) / 2 + 8) as usize; let source = CpuAccessibleBuffer::from_iter( device.clone(), BufferUsage::transfer_source(), false, - bytes[offset..(offset + mip_byte_size + 8)].iter().cloned(), // +8 because rounding errors??? + bytes[offset..(offset + mip_byte_size)].iter().cloned(), ).unwrap(); cbb.copy_buffer_to_image_dimensions( @@ -505,7 +505,7 @@ impl VulkanRenderer { future.flush().unwrap(); let sampler = Sampler::new(device.clone(), Filter::Linear, Filter::Linear, - MipmapMode::Linear, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat, + MipmapMode::Nearest, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat, 0.0, 1.0, 0.0, 12 as f32).unwrap(); self.game_data.textures.push(Texture { image: image_view, sampler });