mipmaps actually broken rip
This commit is contained in:
@@ -170,7 +170,7 @@ impl TestGame {
|
|||||||
self.texture_index_counter += 1;
|
self.texture_index_counter += 1;
|
||||||
|
|
||||||
if self.log_config.mesh_load_info {
|
if self.log_config.mesh_load_info {
|
||||||
println!("Uploading texture took {:?}s", texture_start_time.elapsed().unwrap().as_secs());
|
println!("Uploading texture took {:?}ms", texture_start_time.elapsed().unwrap().as_millis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mesh_handles
|
mesh_handles
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
use cgmath::{Matrix4, SquareMatrix};
|
use cgmath::{Matrix4, SquareMatrix};
|
||||||
use vulkano::{buffer::{BufferAccess, BufferUsage, CpuAccessibleBuffer}, command_buffer::{CommandBuffer, SubpassContents}, image::{ImageLayout, ImageUsage, MipmapsCount, immutable::SubImage}};
|
use vulkano::{buffer::{BufferUsage, CpuAccessibleBuffer}, command_buffer::{CommandBuffer, SubpassContents}, image::{ImageLayout, ImageUsage, MipmapsCount, immutable::SubImage}};
|
||||||
use vulkano::command_buffer::{AutoCommandBuffer, AutoCommandBufferBuilder, DynamicState};
|
use vulkano::command_buffer::{AutoCommandBuffer, AutoCommandBufferBuilder, DynamicState};
|
||||||
use vulkano::descriptor::DescriptorSet;
|
use vulkano::descriptor::DescriptorSet;
|
||||||
use vulkano::device::{Device, DeviceExtensions, Queue};
|
use vulkano::device::{Device, DeviceExtensions, Queue};
|
||||||
@@ -467,17 +467,20 @@ impl VulkanRenderer {
|
|||||||
let mut offset: usize = 0;
|
let mut offset: usize = 0;
|
||||||
|
|
||||||
for i in 0..13 {
|
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);
|
||||||
|
|
||||||
|
// 4 bits per pixel in DXT1 -> 1/2 byte
|
||||||
|
let mip_byte_size = ((mip_size[0] * mip_size[1]) / 2) as usize;
|
||||||
|
|
||||||
let source = CpuAccessibleBuffer::from_iter(
|
let source = CpuAccessibleBuffer::from_iter(
|
||||||
device.clone(),
|
device.clone(),
|
||||||
BufferUsage::transfer_source(),
|
BufferUsage::transfer_source(),
|
||||||
false,
|
false,
|
||||||
bytes[offset..].iter().cloned(),
|
bytes[offset..(offset + mip_byte_size + 8)].iter().cloned(), // +8 because rounding errors???
|
||||||
).unwrap();
|
).unwrap();
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
cbb.copy_buffer_to_image_dimensions(
|
cbb.copy_buffer_to_image_dimensions(
|
||||||
source.clone(),
|
source.clone(),
|
||||||
init.clone(),
|
init.clone(),
|
||||||
@@ -489,8 +492,7 @@ impl VulkanRenderer {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// 4 bits per pixel -> 1/2 byte
|
offset += mip_byte_size;
|
||||||
offset += ((mip_size[0] * mip_size[1]) / 2) as usize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let cb = cbb.build().unwrap();
|
let cb = cbb.build().unwrap();
|
||||||
@@ -503,7 +505,7 @@ impl VulkanRenderer {
|
|||||||
future.flush().unwrap();
|
future.flush().unwrap();
|
||||||
|
|
||||||
let sampler = Sampler::new(device.clone(), Filter::Linear, Filter::Linear,
|
let sampler = Sampler::new(device.clone(), Filter::Linear, Filter::Linear,
|
||||||
MipmapMode::Nearest, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat,
|
MipmapMode::Linear, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat,
|
||||||
SamplerAddressMode::Repeat, 0.0, 1.0, 0.0, 12 as f32).unwrap();
|
SamplerAddressMode::Repeat, 0.0, 1.0, 0.0, 12 as f32).unwrap();
|
||||||
|
|
||||||
self.game_data.textures.push(Texture { image: image_view, sampler });
|
self.game_data.textures.push(Texture { image: image_view, sampler });
|
||||||
|
|||||||
Reference in New Issue
Block a user