gltf_json/extensions/
buffer.rs1#[cfg(feature = "EXT_meshopt_compression")]
2use crate::validation::USize64;
3use gltf_derive::Validate;
4use serde_derive::{Deserialize, Serialize};
5#[cfg(feature = "extensions")]
6use serde_json::{Map, Value};
7
8#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
10pub struct Buffer {
11 #[cfg(feature = "EXT_meshopt_compression")]
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub fallback: Option<bool>,
14
15 #[cfg(feature = "extensions")]
16 #[serde(default, flatten)]
17 pub others: Map<String, Value>,
18}
19
20#[cfg(feature = "EXT_meshopt_compression")]
21#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
22#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
23pub enum MeshoptCompressionMode {
24 Attributes,
25 Triangles,
26 Indices,
27}
28
29#[cfg(feature = "EXT_meshopt_compression")]
30impl crate::validation::Validate for MeshoptCompressionMode {
31 fn validate<P, R>(&self, _root: &crate::Root, _path: P, _report: &mut R)
32 where
33 P: Fn() -> crate::Path,
34 R: FnMut(&dyn Fn() -> crate::Path, crate::validation::Error),
35 {
36 }
38}
39
40#[cfg(feature = "EXT_meshopt_compression")]
41#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
42#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
43pub enum MeshoptCompressionFilter {
44 None,
45 Octahedral,
46 Quaternion,
47 Exponential,
48}
49
50#[cfg(feature = "EXT_meshopt_compression")]
51impl crate::validation::Validate for MeshoptCompressionFilter {
52 fn validate<P, R>(&self, _root: &crate::Root, _path: P, _report: &mut R)
53 where
54 P: Fn() -> crate::Path,
55 R: FnMut(&dyn Fn() -> crate::Path, crate::validation::Error),
56 {
57 }
59}
60
61#[cfg(feature = "EXT_meshopt_compression")]
62#[derive(Clone, Debug, Deserialize, Serialize, Validate)]
63#[serde(rename_all = "camelCase")]
64pub struct MeshoptCompression {
65 pub buffer: crate::Index<crate::buffer::Buffer>,
66 #[serde(default, skip_serializing_if = "Option::is_none")]
67 pub byte_offset: Option<USize64>,
68 pub byte_length: USize64,
69 pub byte_stride: u32,
70 pub count: u32,
71 pub mode: MeshoptCompressionMode,
72 #[serde(default)]
73 pub filter: Option<MeshoptCompressionFilter>,
74}
75
76#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
78pub struct View {
79 #[cfg(feature = "EXT_meshopt_compression")]
80 #[serde(
81 rename = "EXT_meshopt_compression",
82 skip_serializing_if = "Option::is_none"
83 )]
84 pub meshopt_compression: Option<MeshoptCompression>,
85
86 #[cfg(feature = "extensions")]
87 #[serde(default, flatten)]
88 pub others: Map<String, Value>,
89}