This commit is contained in:
2021-10-14 02:15:37 +02:00
parent db9a455311
commit 78917d96d1
3 changed files with 74 additions and 43 deletions

View File

@@ -536,7 +536,9 @@ impl VulkanRenderer {
offset += mip_byte_size;
}
} else {
upload_bytes(bytes, 0, dimensions.to_image_dimensions().width_height_depth());
let mut texture_bytes: Vec<u8> = bytes.to_vec();
texture_bytes.resize((width * height) as usize, 0u8);
upload_bytes(&texture_bytes, 0, dimensions.to_image_dimensions().width_height_depth());
}
let cb = cbb.build().unwrap();
@@ -555,7 +557,7 @@ impl VulkanRenderer {
Texture { image: image_view, sampler }
}
pub fn blit_and_update_texture(&mut self, texture: &Texture, new_data: &[u8], new_data_dimensions: [u32; 3], device: Arc<Device>) -> Texture {
pub fn update_texture(&mut self, texture: &mut Texture, new_data: &[u8], new_data_dimensions: [u32; 3], new_data_offset: [u32; 3], device: Arc<Device>) -> Option<Texture> {
let new_image_usage = ImageUsage {
transfer_destination: true,
transfer_source: true,
@@ -563,29 +565,38 @@ impl VulkanRenderer {
..ImageUsage::none()
};
let (new_image_view, new_image_initializer) = ImmutableImage::uninitialized(
device.clone(),
Dimensions::Dim2d { width: texture.image.dimensions().width(), height: texture.image.dimensions().height() },
texture.image.format(),
texture.image.mipmap_levels(),
new_image_usage,
ImageLayout::ShaderReadOnlyOptimal,
device.active_queue_families(),
).unwrap();
// let (new_image_view, new_image_initializer) = ImmutableImage::uninitialized(
// device.clone(),
// Dimensions::Dim2d { width: texture.image.dimensions().width(), height: texture.image.dimensions().height() },
// texture.image.format(),
// texture.image.mipmap_levels(),
// new_image_usage,
// ImageLayout::ShaderReadOnlyOptimal,
// device.active_queue_families(),
// ).unwrap();
let new_sub_image = SubImage::new(
Arc::new(new_image_initializer),
let old_sub_image = SubImage::new(
texture.image.clone(),
0,
new_image_view.mipmap_levels(),
1,
0,
1,
ImageLayout::ShaderReadOnlyOptimal,
);
// let new_sub_image = SubImage::new(
// Arc::new(new_image_initializer),
// 0,
// new_image_view.mipmap_levels(),
// 0,
// 1,
// ImageLayout::ShaderReadOnlyOptimal,
// );
let mut cbb = AutoCommandBufferBuilder::new(device.clone(), self.queue.family()).unwrap();
// cbb.copy_image(
// texture.image.clone(),
// old_sub_image.clone(),
// [0, 0, 0],
// 0,
// 0,
@@ -593,7 +604,7 @@ impl VulkanRenderer {
// [0, 0, 0],
// 0,
// 0,
// texture.image.dimensions().width_height_depth(),
// old_sub_image.dimensions().width_height_depth(),
// 1
// ).unwrap();
@@ -606,8 +617,8 @@ impl VulkanRenderer {
cbb.copy_buffer_to_image_dimensions(
upload_source.clone(),
new_sub_image.clone(),
[0, 0, 0],
old_sub_image.clone(),
new_data_offset,
new_data_dimensions,
0,
1,
@@ -620,7 +631,8 @@ impl VulkanRenderer {
future.flush().unwrap();
Texture { image: new_image_view, sampler: texture.sampler.clone() }
// Texture { image: texture.image.clone(), sampler: texture.sampler.clone() }
None
}
pub fn add_game_object(self: &mut Self, mut game_object: GameObject) -> GameObjectHandle {