forked from StrafesNET/map-tool
fine tune closures
This commit is contained in:
parent
91f452a94b
commit
7b1b381064
68
src/main.rs
68
src/main.rs
@ -1104,11 +1104,36 @@ fn extract_textures(paths:Vec<std::path::PathBuf>,vpk_path:std::path::PathBuf)->
|
|||||||
let mut texture_file_name2=texture_file_name.clone();
|
let mut texture_file_name2=texture_file_name.clone();
|
||||||
texture_file_name.set_extension("vtf");
|
texture_file_name.set_extension("vtf");
|
||||||
texture_file_name2.set_extension("vmt");
|
texture_file_name2.set_extension("vmt");
|
||||||
println!("texture_name={:?}",texture_file_name);
|
|
||||||
let mut found_texture=false;
|
let mut found_texture=false;
|
||||||
//LMAO imagine having to write type names
|
//LMAO imagine having to write type names
|
||||||
let mut f=|search_file_name,write_file_name|{
|
let write_image=|mut stuff,write_file_name|{
|
||||||
if let Some(mut stuff)=match (zippyt.by_name(search_file_name),tree.get(search_file_name)){
|
let image=vtf::from_bytes(&mut stuff)?.highres_image.decode(0)?.to_rgba8();
|
||||||
|
|
||||||
|
let format=if image.width()%4!=0||image.height()%4!=0{
|
||||||
|
image_dds::ImageFormat::R8G8B8A8Srgb
|
||||||
|
}else{
|
||||||
|
image_dds::ImageFormat::BC7Srgb
|
||||||
|
};
|
||||||
|
//this fails if the image dimensions are not a multiple of 4
|
||||||
|
let dds = image_dds::dds_from_image(
|
||||||
|
&image,
|
||||||
|
format,
|
||||||
|
image_dds::Quality::Slow,
|
||||||
|
image_dds::Mipmaps::GeneratedAutomatic,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
//write dds
|
||||||
|
let mut dest=std::path::PathBuf::from("textures/dds");
|
||||||
|
dest.push(write_file_name);
|
||||||
|
dest.set_extension("dds");
|
||||||
|
std::fs::create_dir_all(dest.parent().unwrap())?;
|
||||||
|
let mut writer = std::io::BufWriter::new(std::fs::File::create(dest)?);
|
||||||
|
dds.write(&mut writer)?;
|
||||||
|
Ok::<(),anyhow::Error>(())
|
||||||
|
};
|
||||||
|
let mut find_stuff=|search_file_name|{
|
||||||
|
//println!("search_file_name={}",search_file_name);
|
||||||
|
Ok::<Option<Vec<u8>>,anyhow::Error>(match (zippyt.by_name(search_file_name),tree.get(search_file_name)){
|
||||||
(Ok(mut zip_file),None)=>{
|
(Ok(mut zip_file),None)=>{
|
||||||
let mut buf=Vec::new();
|
let mut buf=Vec::new();
|
||||||
zip_file.read_to_end(&mut buf)?;
|
zip_file.read_to_end(&mut buf)?;
|
||||||
@ -1116,38 +1141,13 @@ fn extract_textures(paths:Vec<std::path::PathBuf>,vpk_path:std::path::PathBuf)->
|
|||||||
},
|
},
|
||||||
(_,Some(vpk_entry))=>Some(vpk_entry.get()?.to_vec()),
|
(_,Some(vpk_entry))=>Some(vpk_entry.get()?.to_vec()),
|
||||||
_=>None,
|
_=>None,
|
||||||
}{
|
})
|
||||||
found_texture=true;
|
|
||||||
thread_handles.push(s.spawn(move||{
|
|
||||||
let image=vtf::from_bytes(&mut stuff)?.highres_image.decode(0)?.to_rgba8();
|
|
||||||
|
|
||||||
let format=if image.width()%4!=0||image.height()%4!=0{
|
|
||||||
image_dds::ImageFormat::R8G8B8A8Srgb
|
|
||||||
}else{
|
|
||||||
image_dds::ImageFormat::BC7Srgb
|
|
||||||
};
|
|
||||||
//this fails if the image dimensions are not a multiple of 4
|
|
||||||
let dds = image_dds::dds_from_image(
|
|
||||||
&image,
|
|
||||||
format,
|
|
||||||
image_dds::Quality::Slow,
|
|
||||||
image_dds::Mipmaps::GeneratedAutomatic,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
//write dds
|
|
||||||
let mut dest=std::path::PathBuf::from("textures/dds");
|
|
||||||
dest.push(write_file_name);
|
|
||||||
dest.set_extension("dds");
|
|
||||||
std::fs::create_dir_all(dest.parent().unwrap())?;
|
|
||||||
let mut writer = std::io::BufWriter::new(std::fs::File::create(dest)?);
|
|
||||||
dds.write(&mut writer)?;
|
|
||||||
Ok::<(),anyhow::Error>(())
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
Ok::<(),anyhow::Error>(())
|
|
||||||
};
|
};
|
||||||
f(texture_file_name.as_os_str().to_str().unwrap(),texture_name.clone())?;
|
if let Some(stuff)=find_stuff(texture_file_name.as_os_str().to_str().unwrap())?{
|
||||||
f(texture_file_name2.as_os_str().to_str().unwrap(),texture_name.clone())?;
|
found_texture=true;
|
||||||
|
let texture_name=texture_name.clone();
|
||||||
|
thread_handles.push(s.spawn(move||write_image(stuff,texture_name)));
|
||||||
|
}
|
||||||
if !found_texture{
|
if !found_texture{
|
||||||
println!("no data");
|
println!("no data");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user