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>,
}