Skip to main content

goth_gltf/
extensions.rs

1use crate::{Extensions, TextureInfo};
2use nanoserde::{DeJson, SerJson};
3
4#[derive(Debug, DeJson, SerJson, Clone, Copy)]
5pub struct KhrTextureBasisu {
6    pub source: usize,
7}
8
9#[derive(Debug, DeJson, SerJson, Clone, Copy)]
10pub struct KhrTextureTransform {
11    #[nserde(default)]
12    pub offset: [f32; 2],
13    #[nserde(default)]
14    pub rotation: f32,
15    #[nserde(default = "[1.0, 1.0]")]
16    pub scale: [f32; 2],
17    #[nserde(rename = "texCoord")]
18    #[nserde(default)]
19    pub tex_coord: usize,
20}
21
22#[derive(Debug, DeJson, SerJson, Clone)]
23pub struct KhrMaterialsSheen<E: Extensions> {
24    #[nserde(rename = "sheenColorFactor")]
25    #[nserde(default)]
26    pub sheen_color_factor: [f32; 3],
27    #[nserde(rename = "sheenColorTexture")]
28    pub sheen_color_texture: Option<TextureInfo<E>>,
29    #[nserde(rename = "sheenRoughnessFactor")]
30    #[nserde(default)]
31    pub sheen_roughness_factor: f32,
32    #[nserde(rename = "sheenRoughnessTexture")]
33    pub sheen_roughness_texture: Option<TextureInfo<E>>,
34}
35
36#[derive(Debug, DeJson, SerJson, Clone, Copy)]
37pub struct KhrMaterialsEmissiveStrength {
38    #[nserde(rename = "emissiveStrength")]
39    #[nserde(default = "1.0")]
40    pub emissive_strength: f32,
41}
42
43#[derive(Debug, DeJson, SerJson, Clone, Copy)]
44pub struct KhrMaterialsUnlit {}
45
46#[derive(Debug, DeJson, SerJson, Clone)]
47pub struct KhrMaterialsSpecular<E: Extensions> {
48    #[nserde(rename = "specularFactor")]
49    #[nserde(default = "1.0")]
50    pub specular_factor: f32,
51    #[nserde(rename = "specularTexture")]
52    pub specular_texture: Option<TextureInfo<E>>,
53    #[nserde(rename = "specularColorFactor", default = "[1.0, 1.0, 1.0]")]
54    pub specular_color_factor: [f32; 3],
55    #[nserde(rename = "specularColorTexture")]
56    pub specular_color_texture: Option<TextureInfo<E>>,
57}
58
59#[derive(Debug, DeJson, SerJson, Clone)]
60pub struct KhrMaterialsTransmission<E: Extensions> {
61    #[nserde(rename = "transmissionFactor")]
62    #[nserde(default = "1.0")]
63    pub transmission_factor: f32,
64    #[nserde(rename = "transmissionTexture")]
65    pub transmission_texture: Option<TextureInfo<E>>,
66}
67
68pub mod khr_lights_punctual {
69    use nanoserde::{DeJson, SerJson};
70
71    #[derive(Debug, DeJson, SerJson, Clone)]
72    pub struct Root {
73        #[nserde(default)]
74        pub lights: Vec<Light>,
75    }
76
77    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
78    pub struct Node {
79        pub light: usize,
80    }
81
82    #[derive(Debug, DeJson, SerJson, Clone)]
83    pub struct Light {
84        #[nserde(default = "[1.0, 1.0, 1.0]")]
85        pub color: [f32; 3],
86        #[nserde(default = "1.0")]
87        pub intensity: f32,
88        #[nserde(rename = "type")]
89        pub ty: LightType,
90        #[cfg(feature = "names")]
91        pub name: Option<String>,
92        pub spot: Option<LightSpot>,
93    }
94
95    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
96    pub enum LightType {
97        #[nserde(rename = "point")]
98        Point,
99        #[nserde(rename = "directional")]
100        Directional,
101        #[nserde(rename = "spot")]
102        Spot,
103    }
104
105    #[derive(Debug, DeJson, SerJson, Clone, Copy)]
106    pub struct LightSpot {
107        #[nserde(rename = "innerConeAngle")]
108        #[nserde(default)]
109        pub inner_cone_angle: f32,
110        #[nserde(rename = "outerConeAngle")]
111        #[nserde(default = "std::f32::consts::FRAC_PI_4")]
112        pub outer_cone_angle: f32,
113    }
114}
115
116#[derive(Debug, DeJson, SerJson, Clone, Copy)]
117pub struct KhrMaterialsIor {
118    #[nserde(default = "1.5")]
119    pub ior: f32,
120}
121
122#[derive(Debug, DeJson, SerJson, Clone, Copy)]
123pub struct ExtMeshoptCompression {
124    pub buffer: usize,
125    #[nserde(rename = "byteOffset")]
126    #[nserde(default)]
127    pub byte_offset: usize,
128    #[nserde(rename = "byteLength")]
129    pub byte_length: usize,
130    #[nserde(rename = "byteStride")]
131    pub byte_stride: usize,
132    pub mode: CompressionMode,
133    pub count: usize,
134    #[nserde(default)]
135    pub filter: CompressionFilter,
136}
137
138#[derive(Debug, DeJson, SerJson, PartialEq, Eq, Clone, Copy)]
139pub enum CompressionMode {
140    #[nserde(rename = "ATTRIBUTES")]
141    Attributes,
142    #[nserde(rename = "TRIANGLES")]
143    Triangles,
144    #[nserde(rename = "INDICES")]
145    Indices,
146}
147
148#[derive(Default, Debug, DeJson, SerJson, PartialEq, Eq, Clone, Copy)]
149pub enum CompressionFilter {
150    #[default]
151    #[nserde(rename = "NONE")]
152    None,
153    #[nserde(rename = "OCTAHEDRAL")]
154    Octahedral,
155    #[nserde(rename = "QUATERNION")]
156    Quaternion,
157    #[nserde(rename = "EXPONENTIAL")]
158    Exponential,
159}
160
161#[derive(Debug, DeJson, SerJson, Clone, Copy)]
162pub struct ExtMeshoptCompressionBuffer {
163    #[nserde(default)]
164    pub fallback: bool,
165}
166
167#[derive(Debug, DeJson, SerJson, Clone, Copy)]
168pub struct ExtMeshGpuInstancing {
169    pub attributes: ExtMeshGpuInstancingAttributes,
170}
171
172#[derive(Debug, DeJson, SerJson, Clone, Copy)]
173pub struct ExtMeshGpuInstancingAttributes {
174    #[nserde(rename = "ROTATION")]
175    pub rotation: usize,
176    #[nserde(rename = "SCALE")]
177    pub scale: usize,
178    #[nserde(rename = "TRANSLATION")]
179    pub translation: usize,
180}
181
182#[derive(Debug, DeJson, SerJson, Clone)]
183pub struct MsftLod {
184    pub ids: Vec<usize>,
185}