bevy_gltf/loader/gltf_ext/
mesh.rs

1use bevy_mesh::PrimitiveTopology;
2
3use gltf::{
4    mesh::{Mesh, Mode},
5    Material,
6};
7
8use crate::GltfError;
9
10pub(crate) fn primitive_name(mesh: &Mesh<'_>, material: &Material) -> String {
11    let mesh_name = mesh.name().unwrap_or("Mesh");
12
13    if let Some(material_name) = material.name() {
14        format!("{mesh_name}.{material_name}")
15    } else {
16        mesh_name.to_string()
17    }
18}
19
20/// Maps the `primitive_topology` from glTF to `wgpu`.
21#[cfg_attr(
22    not(target_arch = "wasm32"),
23    expect(
24        clippy::result_large_err,
25        reason = "`GltfError` is only barely past the threshold for large errors."
26    )
27)]
28pub(crate) fn primitive_topology(mode: Mode) -> Result<PrimitiveTopology, GltfError> {
29    match mode {
30        Mode::Points => Ok(PrimitiveTopology::PointList),
31        Mode::Lines => Ok(PrimitiveTopology::LineList),
32        Mode::LineStrip => Ok(PrimitiveTopology::LineStrip),
33        Mode::Triangles => Ok(PrimitiveTopology::TriangleList),
34        Mode::TriangleStrip => Ok(PrimitiveTopology::TriangleStrip),
35        mode => Err(GltfError::UnsupportedPrimitive { mode }),
36    }
37}