gltf_json/extensions/
mesh.rs

1use gltf_derive::Validate;
2use serde_derive::{Deserialize, Serialize};
3#[cfg(feature = "extensions")]
4use serde_json::{Map, Value};
5
6/// A set of primitives to be rendered.
7///
8/// A node can contain one or more meshes and its transform places the meshes in
9/// the scene.
10#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
11pub struct Mesh {
12    #[cfg(feature = "extensions")]
13    #[serde(default, flatten)]
14    pub others: Map<String, Value>,
15}
16
17/// Geometry to be rendered with the given material.
18#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
19pub struct Primitive {
20    #[cfg(feature = "KHR_materials_variants")]
21    #[serde(
22        default,
23        rename = "KHR_materials_variants",
24        skip_serializing_if = "Option::is_none"
25    )]
26    pub khr_materials_variants: Option<KhrMaterialsVariants>,
27    #[cfg(feature = "extensions")]
28    #[serde(default, flatten)]
29    pub others: Map<String, Value>,
30}
31
32#[cfg(feature = "KHR_materials_variants")]
33#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
34pub struct KhrMaterialsVariants {
35    pub mappings: Vec<Mapping>,
36}
37
38#[cfg(feature = "KHR_materials_variants")]
39#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
40pub struct Mapping {
41    pub material: u32,
42    pub variants: Vec<u32>,
43}