| 1 | fn main() { |
| 2 | let data = std::fs::read("/Users/amlug/projects/bloom/engine/examples/renderer-test/assets/DamagedHelmet.glb").unwrap(); |
| 3 | let gltf = gltf::Gltf::from_slice(&data).unwrap(); |
| 4 | let mut buffer_data: Vec<Vec<u8>> = Vec::new(); |
| 5 | for buffer in gltf.buffers() { |
| 6 | match buffer.source() { |
| 7 | gltf::buffer::Source::Bin => { if let Some(b) = gltf.blob.as_ref() { buffer_data.push(b.clone()); } } |
| 8 | _ => { buffer_data.push(Vec::new()); } |
| 9 | } |
| 10 | } |
| 11 | for mesh in gltf.meshes() { |
| 12 | for (i, prim) in mesh.primitives().enumerate() { |
| 13 | let reader = prim.reader(|b| buffer_data.get(b.index()).map(|d| d.as_slice())); |
| 14 | let has_tan = reader.read_tangents().is_some(); |
| 15 | let has_norm = reader.read_normals().is_some(); |
| 16 | let mat = prim.material(); |
| 17 | let has_nmap = mat.normal_texture().is_some(); |
| 18 | let has_mr = mat.pbr_metallic_roughness().metallic_roughness_texture().is_some(); |
| 19 | let has_em = mat.emissive_texture().is_some(); |
| 20 | let has_occl = mat.occlusion_texture().is_some(); |
| 21 | println!("mesh {} prim {}: tangents={} normals={} normal_map={} mr_tex={} em_tex={} occl_tex={}", mesh.index(), i, has_tan, has_norm, has_nmap, has_mr, has_em, has_occl); |
| 22 | } |
| 23 | } |
| 24 | } |