From 17b0d12d4da08ca923605cc1a5ad53d24cb7862c Mon Sep 17 00:00:00 2001 From: Quaternions Date: Sun, 1 Oct 2023 15:05:39 -0700 Subject: [PATCH] we're chilling --- src/main.rs | 101 ++++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/src/main.rs b/src/main.rs index 6511570..692cf4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -98,65 +98,64 @@ impl GraphicsData { //idk how to do this gooder lol let mut double_map=std::collections::HashMap::::new(); let mut texture_loading_threads=Vec::new(); - let the_device=std::sync::Arc::new(device); - let the_queue=std::sync::Arc::new(queue); for (i,t) in indexed_models.textures.iter().enumerate(){ if let Ok(mut file) = std::fs::File::open(std::path::Path::new(&format!("textures/{}.dds",t))){ double_map.insert(i as u32, texture_loading_threads.len() as u32); - let thread_device=the_device.clone(); - let thread_queue=the_queue.clone(); texture_loading_threads.push(std::thread::spawn(move ||{ - let image = ddsfile::Dds::read(&mut file).unwrap(); - - let (mut width,mut height)=(image.get_width(),image.get_height()); - - let format=match image.header10.unwrap().dxgi_format{ - ddsfile::DxgiFormat::R8G8B8A8_UNorm_sRGB => wgpu::TextureFormat::Rgba8UnormSrgb, - ddsfile::DxgiFormat::BC7_UNorm_sRGB => { - //floor(w,4), should be ceil(w,4) - width=width/4*4; - height=height/4*4; - wgpu::TextureFormat::Bc7RgbaUnormSrgb - }, - other=>panic!("unsupported format {:?}",other), - }; - - let size = wgpu::Extent3d { - width, - height, - depth_or_array_layers: 1, - }; - - let layer_size = wgpu::Extent3d { - depth_or_array_layers: 1, - ..size - }; - let max_mips = layer_size.max_mips(wgpu::TextureDimension::D2); - - let texture = thread_device.create_texture_with_data( - &thread_queue, - &wgpu::TextureDescriptor { - size, - mip_level_count: max_mips, - sample_count: 1, - dimension: wgpu::TextureDimension::D2, - format, - usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, - label: Some(format!("Texture{}",i).as_str()), - view_formats: &[], - }, - &image.data, - ); - texture.create_view(&wgpu::TextureViewDescriptor { - label: Some(format!("Texture{} View",i).as_str()), - dimension: Some(wgpu::TextureViewDimension::D2), - ..wgpu::TextureViewDescriptor::default() - }) + (i,ddsfile::Dds::read(&mut file).unwrap()) })); } } - let texture_views:Vec=texture_loading_threads.iter().map(|t|{t.join().unwrap()}).collect(); + let texture_views:Vec=texture_loading_threads.into_iter().map(|t|{ + let (i,image)=t.join().unwrap(); + + let (mut width,mut height)=(image.get_width(),image.get_height()); + + let format=match image.header10.unwrap().dxgi_format{ + ddsfile::DxgiFormat::R8G8B8A8_UNorm_sRGB => wgpu::TextureFormat::Rgba8UnormSrgb, + ddsfile::DxgiFormat::BC7_UNorm_sRGB => { + //floor(w,4), should be ceil(w,4) + width=width/4*4; + height=height/4*4; + wgpu::TextureFormat::Bc7RgbaUnormSrgb + }, + other=>panic!("unsupported format {:?}",other), + }; + + let size = wgpu::Extent3d { + width, + height, + depth_or_array_layers: 1, + }; + + let layer_size = wgpu::Extent3d { + depth_or_array_layers: 1, + ..size + }; + let max_mips = layer_size.max_mips(wgpu::TextureDimension::D2); + + let texture = device.create_texture_with_data( + queue, + &wgpu::TextureDescriptor { + size, + mip_level_count: max_mips, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + label: Some(format!("Texture{}",i).as_str()), + view_formats: &[], + }, + &image.data, + ); + texture.create_view(&wgpu::TextureViewDescriptor { + label: Some(format!("Texture{} View",i).as_str()), + dimension: Some(wgpu::TextureViewDimension::D2), + ..wgpu::TextureViewDescriptor::default() + }) + }).collect(); + let indexed_models_len=indexed_models.models.len(); //split groups with different textures into separate models //the models received here are supposed to be tightly packed, i.e. no code needs to check if two models are using the same groups.