goth-gltf 0.3.0

A lightweight, low-level reader for gltf (and glb) files
Documentation
use crate::{Extensions, TextureInfo};
use nanoserde::{DeJson, SerJson};

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct KhrTextureBasisu {
    pub source: usize,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct KhrTextureTransform {
    #[nserde(default)]
    pub offset: [f32; 2],
    #[nserde(default)]
    pub rotation: f32,
    #[nserde(default = "[1.0, 1.0]")]
    pub scale: [f32; 2],
    #[nserde(rename = "texCoord")]
    #[nserde(default)]
    pub tex_coord: usize,
}

#[derive(Debug, DeJson, SerJson, Clone)]
pub struct KhrMaterialsSheen<E: Extensions> {
    #[nserde(rename = "sheenColorFactor")]
    #[nserde(default)]
    pub sheen_color_factor: [f32; 3],
    #[nserde(rename = "sheenColorTexture")]
    pub sheen_color_texture: Option<TextureInfo<E>>,
    #[nserde(rename = "sheenRoughnessFactor")]
    #[nserde(default)]
    pub sheen_roughness_factor: f32,
    #[nserde(rename = "sheenRoughnessTexture")]
    pub sheen_roughness_texture: Option<TextureInfo<E>>,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct KhrMaterialsEmissiveStrength {
    #[nserde(rename = "emissiveStrength")]
    #[nserde(default = "1.0")]
    pub emissive_strength: f32,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct KhrMaterialsUnlit {}

#[derive(Debug, DeJson, SerJson, Clone)]
pub struct KhrMaterialsSpecular<E: Extensions> {
    #[nserde(rename = "specularFactor")]
    #[nserde(default = "1.0")]
    pub specular_factor: f32,
    #[nserde(rename = "specularTexture")]
    pub specular_texture: Option<TextureInfo<E>>,
    #[nserde(rename = "specularColorFactor", default = "[1.0, 1.0, 1.0]")]
    pub specular_color_factor: [f32; 3],
    #[nserde(rename = "specularColorTexture")]
    pub specular_color_texture: Option<TextureInfo<E>>,
}

#[derive(Debug, DeJson, SerJson, Clone)]
pub struct KhrMaterialsTransmission<E: Extensions> {
    #[nserde(rename = "transmissionFactor")]
    #[nserde(default = "1.0")]
    pub transmission_factor: f32,
    #[nserde(rename = "transmissionTexture")]
    pub transmission_texture: Option<TextureInfo<E>>,
}

pub mod khr_lights_punctual {
    use nanoserde::{DeJson, SerJson};

    #[derive(Debug, DeJson, SerJson, Clone)]
    pub struct Root {
        #[nserde(default)]
        pub lights: Vec<Light>,
    }

    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
    pub struct Node {
        pub light: usize,
    }

    #[derive(Debug, DeJson, SerJson, Clone)]
    pub struct Light {
        #[nserde(default = "[1.0, 1.0, 1.0]")]
        pub color: [f32; 3],
        #[nserde(default = "1.0")]
        pub intensity: f32,
        #[nserde(rename = "type")]
        pub ty: LightType,
        #[cfg(feature = "names")]
        pub name: Option<String>,
        pub spot: Option<LightSpot>,
    }

    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
    pub enum LightType {
        #[nserde(rename = "point")]
        Point,
        #[nserde(rename = "directional")]
        Directional,
        #[nserde(rename = "spot")]
        Spot,
    }

    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
    pub struct LightSpot {
        #[nserde(rename = "innerConeAngle")]
        #[nserde(default)]
        pub inner_cone_angle: f32,
        #[nserde(rename = "outerConeAngle")]
        #[nserde(default = "std::f32::consts::FRAC_PI_4")]
        pub outer_cone_angle: f32,
    }
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct KhrMaterialsIor {
    #[nserde(default = "1.5")]
    pub ior: f32,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct ExtMeshoptCompression {
    pub buffer: usize,
    #[nserde(rename = "byteOffset")]
    #[nserde(default)]
    pub byte_offset: usize,
    #[nserde(rename = "byteLength")]
    pub byte_length: usize,
    #[nserde(rename = "byteStride")]
    pub byte_stride: usize,
    pub mode: CompressionMode,
    pub count: usize,
    #[nserde(default)]
    pub filter: CompressionFilter,
}

#[derive(Debug, DeJson, SerJson, PartialEq, Eq, Clone, Copy)]
pub enum CompressionMode {
    #[nserde(rename = "ATTRIBUTES")]
    Attributes,
    #[nserde(rename = "TRIANGLES")]
    Triangles,
    #[nserde(rename = "INDICES")]
    Indices,
}

#[derive(Default, Debug, DeJson, SerJson, PartialEq, Eq, Clone, Copy)]
pub enum CompressionFilter {
    #[default]
    #[nserde(rename = "NONE")]
    None,
    #[nserde(rename = "OCTAHEDRAL")]
    Octahedral,
    #[nserde(rename = "QUATERNION")]
    Quaternion,
    #[nserde(rename = "EXPONENTIAL")]
    Exponential,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct ExtMeshoptCompressionBuffer {
    #[nserde(default)]
    pub fallback: bool,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct ExtMeshGpuInstancing {
    pub attributes: ExtMeshGpuInstancingAttributes,
}

#[derive(Debug, DeJson, SerJson, Clone, Copy)]
pub struct ExtMeshGpuInstancingAttributes {
    #[nserde(rename = "ROTATION")]
    pub rotation: usize,
    #[nserde(rename = "SCALE")]
    pub scale: usize,
    #[nserde(rename = "TRANSLATION")]
    pub translation: usize,
}

#[derive(Debug, DeJson, SerJson, Clone)]
pub struct MsftLod {
    pub ids: Vec<usize>,
}