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}