1use serde::Deserialize;
2
3#[derive(Debug, Clone, Copy, PartialEq, Deserialize)]
4pub struct BoundingBox {
5 pub min: [f32; 3],
6 pub max: [f32; 3],
7}
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10#[repr(i32)]
11pub enum GeometryType {
12 Points = 0,
13 Lines = 1,
14 Triangles = 2,
15 TriangleStrips = 3,
16 Quads = 4,
17 VariableTopology = 5,
18}
19
20impl GeometryType {
21 #[must_use]
22 pub const fn as_raw(self) -> i32 {
23 self as i32
24 }
25
26 #[must_use]
27 pub const fn from_raw(raw: i32) -> Option<Self> {
28 match raw {
29 0 => Some(Self::Points),
30 1 => Some(Self::Lines),
31 2 => Some(Self::Triangles),
32 3 => Some(Self::TriangleStrips),
33 4 => Some(Self::Quads),
34 5 => Some(Self::VariableTopology),
35 _ => None,
36 }
37 }
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq)]
41#[repr(i32)]
42pub enum ProbePlacement {
43 UniformGrid = 0,
44 IrradianceDistribution = 1,
45}
46
47impl ProbePlacement {
48 #[must_use]
49 pub const fn as_raw(self) -> i32 {
50 self as i32
51 }
52
53 #[must_use]
54 pub const fn from_raw(raw: i32) -> Option<Self> {
55 match raw {
56 0 => Some(Self::UniformGrid),
57 1 => Some(Self::IrradianceDistribution),
58 _ => None,
59 }
60 }
61}
62
63#[derive(Debug, Clone, Copy, PartialEq, Eq)]
64#[repr(u32)]
65pub enum IndexBitDepth {
66 UInt8 = 8,
67 UInt16 = 16,
68 UInt32 = 32,
69}
70
71impl IndexBitDepth {
72 #[must_use]
73 pub const fn as_raw(self) -> u32 {
74 self as u32
75 }
76
77 #[must_use]
78 pub const fn from_raw(raw: u32) -> Option<Self> {
79 match raw {
80 8 => Some(Self::UInt8),
81 16 => Some(Self::UInt16),
82 32 => Some(Self::UInt32),
83 _ => None,
84 }
85 }
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq)]
89#[repr(u32)]
90pub enum MeshBufferType {
91 Vertex = 1,
92 Index = 2,
93 Custom = 3,
94}
95
96impl MeshBufferType {
97 #[must_use]
98 pub const fn as_raw(self) -> u32 {
99 self as u32
100 }
101
102 #[must_use]
103 pub const fn from_raw(raw: u32) -> Option<Self> {
104 match raw {
105 1 => Some(Self::Vertex),
106 2 => Some(Self::Index),
107 3 => Some(Self::Custom),
108 _ => None,
109 }
110 }
111}
112
113#[derive(Debug, Clone, Copy, PartialEq, Eq)]
114#[repr(u32)]
115pub enum MaterialSemantic {
116 BaseColor = 0,
117 Subsurface = 1,
118 Metallic = 2,
119 Specular = 3,
120 SpecularExponent = 4,
121 SpecularTint = 5,
122 Roughness = 6,
123 Anisotropic = 7,
124 AnisotropicRotation = 8,
125 Sheen = 9,
126 SheenTint = 10,
127 Clearcoat = 11,
128 ClearcoatGloss = 12,
129 Emission = 13,
130 Bump = 14,
131 Opacity = 15,
132 InterfaceIndexOfRefraction = 16,
133 MaterialIndexOfRefraction = 17,
134 ObjectSpaceNormal = 18,
135 TangentSpaceNormal = 19,
136 Displacement = 20,
137 DisplacementScale = 21,
138 AmbientOcclusion = 22,
139 AmbientOcclusionScale = 23,
140 None = 0x8000,
141 UserDefined = 0x8001,
142}
143
144impl MaterialSemantic {
145 #[must_use]
146 pub const fn from_raw(raw: u32) -> Option<Self> {
147 match raw {
148 0 => Some(Self::BaseColor),
149 1 => Some(Self::Subsurface),
150 2 => Some(Self::Metallic),
151 3 => Some(Self::Specular),
152 4 => Some(Self::SpecularExponent),
153 5 => Some(Self::SpecularTint),
154 6 => Some(Self::Roughness),
155 7 => Some(Self::Anisotropic),
156 8 => Some(Self::AnisotropicRotation),
157 9 => Some(Self::Sheen),
158 10 => Some(Self::SheenTint),
159 11 => Some(Self::Clearcoat),
160 12 => Some(Self::ClearcoatGloss),
161 13 => Some(Self::Emission),
162 14 => Some(Self::Bump),
163 15 => Some(Self::Opacity),
164 16 => Some(Self::InterfaceIndexOfRefraction),
165 17 => Some(Self::MaterialIndexOfRefraction),
166 18 => Some(Self::ObjectSpaceNormal),
167 19 => Some(Self::TangentSpaceNormal),
168 20 => Some(Self::Displacement),
169 21 => Some(Self::DisplacementScale),
170 22 => Some(Self::AmbientOcclusion),
171 23 => Some(Self::AmbientOcclusionScale),
172 0x8000 => Some(Self::None),
173 0x8001 => Some(Self::UserDefined),
174 _ => None,
175 }
176 }
177}
178
179#[derive(Debug, Clone, Copy, PartialEq, Eq)]
180#[repr(u32)]
181pub enum MaterialPropertyType {
182 None = 0,
183 String = 1,
184 Url = 2,
185 Texture = 3,
186 Color = 4,
187 Float = 5,
188 Float2 = 6,
189 Float3 = 7,
190 Float4 = 8,
191 Matrix44 = 9,
192 Buffer = 10,
193}
194
195impl MaterialPropertyType {
196 #[must_use]
197 pub const fn from_raw(raw: u32) -> Option<Self> {
198 match raw {
199 0 => Some(Self::None),
200 1 => Some(Self::String),
201 2 => Some(Self::Url),
202 3 => Some(Self::Texture),
203 4 => Some(Self::Color),
204 5 => Some(Self::Float),
205 6 => Some(Self::Float2),
206 7 => Some(Self::Float3),
207 8 => Some(Self::Float4),
208 9 => Some(Self::Matrix44),
209 10 => Some(Self::Buffer),
210 _ => None,
211 }
212 }
213}
214
215#[derive(Debug, Clone, Copy, PartialEq, Eq)]
216#[repr(u32)]
217pub enum MaterialFace {
218 Front = 0,
219 Back = 1,
220 DoubleSided = 2,
221}
222
223impl MaterialFace {
224 #[must_use]
225 pub const fn as_raw(self) -> u32 {
226 self as u32
227 }
228
229 #[must_use]
230 pub const fn from_raw(raw: u32) -> Option<Self> {
231 match raw {
232 0 => Some(Self::Front),
233 1 => Some(Self::Back),
234 2 => Some(Self::DoubleSided),
235 _ => None,
236 }
237 }
238}
239
240#[derive(Debug, Clone, Copy, PartialEq, Eq)]
241#[repr(u32)]
242pub enum LightType {
243 Unknown = 0,
244 Ambient = 1,
245 Directional = 2,
246 Spot = 3,
247 Point = 4,
248 Linear = 5,
249 DiscArea = 6,
250 RectangularArea = 7,
251 SuperElliptical = 8,
252 Photometric = 9,
253 Probe = 10,
254 Environment = 11,
255}
256
257impl LightType {
258 #[must_use]
259 pub const fn as_raw(self) -> u32 {
260 self as u32
261 }
262
263 #[must_use]
264 pub const fn from_raw(raw: u32) -> Option<Self> {
265 match raw {
266 0 => Some(Self::Unknown),
267 1 => Some(Self::Ambient),
268 2 => Some(Self::Directional),
269 3 => Some(Self::Spot),
270 4 => Some(Self::Point),
271 5 => Some(Self::Linear),
272 6 => Some(Self::DiscArea),
273 7 => Some(Self::RectangularArea),
274 8 => Some(Self::SuperElliptical),
275 9 => Some(Self::Photometric),
276 10 => Some(Self::Probe),
277 11 => Some(Self::Environment),
278 _ => None,
279 }
280 }
281}
282
283#[derive(Debug, Clone, Copy, PartialEq, Eq)]
284#[repr(u32)]
285pub enum CameraProjection {
286 Perspective = 0,
287 Orthographic = 1,
288}
289
290impl CameraProjection {
291 #[must_use]
292 pub const fn as_raw(self) -> u32 {
293 self as u32
294 }
295
296 #[must_use]
297 pub const fn from_raw(raw: u32) -> Option<Self> {
298 match raw {
299 0 => Some(Self::Perspective),
300 1 => Some(Self::Orthographic),
301 _ => None,
302 }
303 }
304}
305
306#[derive(Debug, Clone, Copy, PartialEq, Eq)]
307#[repr(u32)]
308pub enum DataPrecision {
309 Undefined = 0,
310 Float = 1,
311 Double = 2,
312}
313
314impl DataPrecision {
315 #[must_use]
316 pub const fn from_raw(raw: u32) -> Option<Self> {
317 match raw {
318 0 => Some(Self::Undefined),
319 1 => Some(Self::Float),
320 2 => Some(Self::Double),
321 _ => None,
322 }
323 }
324}
325
326#[derive(Debug, Clone, Copy, PartialEq, Eq)]
327#[repr(u32)]
328pub enum AnimatedValueInterpolation {
329 Constant = 0,
330 Linear = 1,
331}
332
333impl AnimatedValueInterpolation {
334 #[must_use]
335 pub const fn as_raw(self) -> u32 {
336 self as u32
337 }
338
339 #[must_use]
340 pub const fn from_raw(raw: u32) -> Option<Self> {
341 match raw {
342 0 => Some(Self::Constant),
343 1 => Some(Self::Linear),
344 _ => None,
345 }
346 }
347}
348
349#[derive(Debug, Clone, Copy, PartialEq, Eq)]
350#[repr(u64)]
351pub enum TransformOpRotationOrder {
352 Xyz = 1,
353 Xzy = 2,
354 Yxz = 3,
355 Yzx = 4,
356 Zxy = 5,
357 Zyx = 6,
358}
359
360impl TransformOpRotationOrder {
361 #[must_use]
362 pub const fn as_raw(self) -> u64 {
363 self as u64
364 }
365
366 #[must_use]
367 pub const fn from_raw(raw: u64) -> Option<Self> {
368 match raw {
369 1 => Some(Self::Xyz),
370 2 => Some(Self::Xzy),
371 3 => Some(Self::Yxz),
372 4 => Some(Self::Yzx),
373 5 => Some(Self::Zxy),
374 6 => Some(Self::Zyx),
375 _ => None,
376 }
377 }
378}
379
380#[derive(Debug, Clone, Copy, PartialEq, Eq)]
381#[repr(i32)]
382pub enum ObjectKind {
383 Unknown = 0,
384 Object = 1,
385 Mesh = 2,
386 Light = 3,
387 PhysicallyPlausibleLight = 4,
388 Camera = 5,
389 VoxelArray = 6,
390 Skeleton = 7,
391 PackedJointAnimation = 8,
392}
393
394impl ObjectKind {
395 #[must_use]
396 pub const fn from_raw(raw: i32) -> Option<Self> {
397 match raw {
398 0 => Some(Self::Unknown),
399 1 => Some(Self::Object),
400 2 => Some(Self::Mesh),
401 3 => Some(Self::Light),
402 4 => Some(Self::PhysicallyPlausibleLight),
403 5 => Some(Self::Camera),
404 6 => Some(Self::VoxelArray),
405 7 => Some(Self::Skeleton),
406 8 => Some(Self::PackedJointAnimation),
407 _ => None,
408 }
409 }
410}
411
412#[derive(Debug, Clone, Copy, PartialEq, Eq)]
413#[repr(i32)]
414pub enum TextureChannelEncoding {
415 UInt8 = 1,
416 UInt16 = 2,
417 UInt24 = 3,
418 UInt32 = 4,
419 Float16 = 0x102,
420 Float16Sr = 0x302,
421 Float32 = 0x104,
422}
423
424impl TextureChannelEncoding {
425 #[must_use]
426 pub const fn as_raw(self) -> i32 {
427 self as i32
428 }
429
430 #[must_use]
431 pub const fn from_raw(raw: i32) -> Option<Self> {
432 match raw {
433 1 => Some(Self::UInt8),
434 2 => Some(Self::UInt16),
435 3 => Some(Self::UInt24),
436 4 => Some(Self::UInt32),
437 0x102 => Some(Self::Float16),
438 0x302 => Some(Self::Float16Sr),
439 0x104 => Some(Self::Float32),
440 _ => None,
441 }
442 }
443}
444
445#[derive(Debug, Clone, Deserialize)]
446pub struct MeshBufferInfo {
447 pub length: usize,
448 pub buffer_type: u32,
449}
450
451impl MeshBufferInfo {
452 #[must_use]
453 pub fn buffer_type_enum(&self) -> Option<MeshBufferType> {
454 MeshBufferType::from_raw(self.buffer_type)
455 }
456}
457
458#[derive(Debug, Clone, Deserialize)]
459pub struct VertexAttributeInfo {
460 pub stride: usize,
461 pub format: u32,
462 pub buffer_size: usize,
463}
464
465#[derive(Debug, Clone, Deserialize)]
466pub struct TextureInfo {
467 pub name: Option<String>,
468 pub dimensions: [i32; 2],
469 pub row_stride: isize,
470 pub channel_count: usize,
471 pub mip_level_count: usize,
472 pub channel_encoding: i32,
473 pub is_cube: bool,
474 pub has_alpha_values: bool,
475 pub url: Option<String>,
476}
477
478impl TextureInfo {
479 #[must_use]
480 pub fn channel_encoding_enum(&self) -> Option<TextureChannelEncoding> {
481 TextureChannelEncoding::from_raw(self.channel_encoding)
482 }
483}
484
485#[derive(Debug, Clone, Deserialize)]
486pub struct MaterialPropertyInfo {
487 pub name: String,
488 pub semantic: u32,
489 pub property_type: u32,
490 pub string_value: Option<String>,
491 pub url_value: Option<String>,
492 pub float_value: Option<f32>,
493 pub float2_value: Option<[f32; 2]>,
494 pub float3_value: Option<[f32; 3]>,
495 pub float4_value: Option<[f32; 4]>,
496 pub matrix4x4: Option<[f32; 16]>,
497 pub color: Option<[f32; 4]>,
498 pub luminance: Option<f32>,
499 pub texture: Option<TextureInfo>,
500}
501
502impl MaterialPropertyInfo {
503 #[must_use]
504 pub fn semantic_enum(&self) -> Option<MaterialSemantic> {
505 MaterialSemantic::from_raw(self.semantic)
506 }
507
508 #[must_use]
509 pub fn property_type_enum(&self) -> Option<MaterialPropertyType> {
510 MaterialPropertyType::from_raw(self.property_type)
511 }
512}
513
514#[derive(Debug, Clone, Deserialize)]
515pub struct MaterialInfo {
516 pub name: String,
517 pub count: usize,
518 pub material_face: u32,
519}
520
521impl MaterialInfo {
522 #[must_use]
523 pub fn material_face_enum(&self) -> Option<MaterialFace> {
524 MaterialFace::from_raw(self.material_face)
525 }
526}
527
528#[derive(Debug, Clone, Deserialize)]
529pub struct AssetInfo {
530 pub count: usize,
531 pub frame_interval: f64,
532 pub start_time: f64,
533 pub end_time: f64,
534 pub bounding_box: BoundingBox,
535 pub up_axis: [f32; 3],
536 pub url: Option<String>,
537}
538
539#[derive(Debug, Clone, Deserialize)]
540pub struct ObjectInfo {
541 pub kind: i32,
542 pub name: String,
543 pub path: String,
544 pub hidden: bool,
545 pub component_count: usize,
546 pub child_count: usize,
547 pub has_parent: bool,
548 pub has_instance: bool,
549 pub bounding_box: BoundingBox,
550}
551
552impl ObjectInfo {
553 #[must_use]
554 pub fn kind_enum(&self) -> Option<ObjectKind> {
555 ObjectKind::from_raw(self.kind)
556 }
557}
558
559#[derive(Debug, Clone, Deserialize)]
560pub struct LightInfo {
561 pub light_type: u32,
562 pub color_space: String,
563}
564
565impl LightInfo {
566 #[must_use]
567 pub fn light_type_enum(&self) -> Option<LightType> {
568 LightType::from_raw(self.light_type)
569 }
570}
571
572#[derive(Debug, Clone, Deserialize)]
573pub struct PhysicallyPlausibleLightInfo {
574 pub light_type: u32,
575 pub color_space: String,
576 pub color: Option<[f32; 4]>,
577 pub lumens: f32,
578 pub inner_cone_angle: f32,
579 pub outer_cone_angle: f32,
580 pub attenuation_start_distance: f32,
581 pub attenuation_end_distance: f32,
582}
583
584impl PhysicallyPlausibleLightInfo {
585 #[must_use]
586 pub fn light_type_enum(&self) -> Option<LightType> {
587 LightType::from_raw(self.light_type)
588 }
589}
590
591#[derive(Debug, Clone, Deserialize)]
592pub struct CameraInfo {
593 pub projection: u32,
594 pub projection_matrix: [f32; 16],
595 pub near_visibility_distance: f32,
596 pub far_visibility_distance: f32,
597 pub world_to_meters_conversion_scale: f32,
598 pub barrel_distortion: f32,
599 pub fisheye_distortion: f32,
600 pub optical_vignetting: f32,
601 pub chromatic_aberration: f32,
602 pub focal_length: f32,
603 pub focus_distance: f32,
604 pub field_of_view: f32,
605 pub f_stop: f32,
606 pub aperture_blade_count: usize,
607 pub maximum_circle_of_confusion: f32,
608 pub shutter_open_interval: f64,
609 pub sensor_vertical_aperture: f32,
610 pub sensor_aspect: f32,
611 pub sensor_enlargement: [f32; 2],
612 pub sensor_shift: [f32; 2],
613 pub flash: [f32; 3],
614 pub exposure_compression: [f32; 2],
615 pub exposure: [f32; 3],
616}
617
618impl CameraInfo {
619 #[must_use]
620 pub fn projection_enum(&self) -> Option<CameraProjection> {
621 CameraProjection::from_raw(self.projection)
622 }
623}
624
625#[derive(Debug, Clone, Deserialize)]
626pub struct VoxelIndexExtent {
627 pub minimum_extent: [i32; 4],
628 pub maximum_extent: [i32; 4],
629}
630
631#[derive(Debug, Clone, Deserialize)]
632pub struct VoxelArrayInfo {
633 pub count: usize,
634 pub bounding_box: BoundingBox,
635 pub voxel_index_extent: VoxelIndexExtent,
636 pub is_valid_signed_shell_field: bool,
637 pub shell_field_interior_thickness: f32,
638 pub shell_field_exterior_thickness: f32,
639}
640
641#[derive(Debug, Clone, Deserialize)]
642pub struct AnimatedValueInfo {
643 pub is_animated: bool,
644 pub precision: u32,
645 pub time_sample_count: usize,
646 pub minimum_time: f64,
647 pub maximum_time: f64,
648 pub interpolation: u32,
649 pub key_times: Vec<f64>,
650 pub element_count: Option<usize>,
651}
652
653impl AnimatedValueInfo {
654 #[must_use]
655 pub fn precision_enum(&self) -> Option<DataPrecision> {
656 DataPrecision::from_raw(self.precision)
657 }
658
659 #[must_use]
660 pub fn interpolation_enum(&self) -> Option<AnimatedValueInterpolation> {
661 AnimatedValueInterpolation::from_raw(self.interpolation)
662 }
663}
664
665#[derive(Debug, Clone, Deserialize)]
666pub struct PackedJointAnimationInfo {
667 pub name: String,
668 pub path: String,
669 pub joint_paths: Vec<String>,
670 pub joint_count: usize,
671}
672
673#[derive(Debug, Clone, Deserialize)]
674pub struct AnimationBindComponentInfo {
675 pub has_skeleton: bool,
676 pub has_joint_animation: bool,
677 pub joint_paths: Option<Vec<String>>,
678 pub geometry_bind_transform: [f32; 16],
679}
680
681#[derive(Debug, Clone, Deserialize)]
682pub struct SkeletonInfo {
683 pub name: String,
684 pub path: String,
685 pub joint_paths: Vec<String>,
686 pub joint_count: usize,
687 pub joint_bind_transform_count: usize,
688 pub joint_rest_transform_count: usize,
689}
690
691#[derive(Debug, Clone, Deserialize)]
692pub struct VertexAttributeDescriptorInfo {
693 pub name: String,
694 pub format: u32,
695 pub offset: usize,
696 pub buffer_index: usize,
697 pub time: f64,
698 pub initialization_value: [f32; 4],
699}
700
701#[derive(Debug, Clone, Deserialize)]
702pub struct VertexDescriptorInfo {
703 pub attribute_count: usize,
704 pub attributes: Vec<VertexAttributeDescriptorInfo>,
705 pub layout_strides: Vec<usize>,
706}
707
708pub mod vertex_format {
709 pub const INVALID: u32 = 0;
710 pub const PACKED_BIT: u32 = 0x1000;
711
712 pub const UCHAR_BITS: u32 = 0x10000;
713 pub const CHAR_BITS: u32 = 0x20000;
714 pub const UCHAR_NORMALIZED_BITS: u32 = 0x30000;
715 pub const CHAR_NORMALIZED_BITS: u32 = 0x40000;
716 pub const USHORT_BITS: u32 = 0x50000;
717 pub const SHORT_BITS: u32 = 0x60000;
718 pub const USHORT_NORMALIZED_BITS: u32 = 0x70000;
719 pub const SHORT_NORMALIZED_BITS: u32 = 0x80000;
720 pub const UINT_BITS: u32 = 0x90000;
721 pub const INT_BITS: u32 = 0xA0000;
722 pub const HALF_BITS: u32 = 0xB0000;
723 pub const FLOAT_BITS: u32 = 0xC0000;
724
725 pub const UCHAR: u32 = UCHAR_BITS | 1;
726 pub const UCHAR2: u32 = UCHAR_BITS | 2;
727 pub const UCHAR3: u32 = UCHAR_BITS | 3;
728 pub const UCHAR4: u32 = UCHAR_BITS | 4;
729
730 pub const CHAR: u32 = CHAR_BITS | 1;
731 pub const CHAR2: u32 = CHAR_BITS | 2;
732 pub const CHAR3: u32 = CHAR_BITS | 3;
733 pub const CHAR4: u32 = CHAR_BITS | 4;
734
735 pub const UCHAR_NORMALIZED: u32 = UCHAR_NORMALIZED_BITS | 1;
736 pub const UCHAR2_NORMALIZED: u32 = UCHAR_NORMALIZED_BITS | 2;
737 pub const UCHAR3_NORMALIZED: u32 = UCHAR_NORMALIZED_BITS | 3;
738 pub const UCHAR4_NORMALIZED: u32 = UCHAR_NORMALIZED_BITS | 4;
739
740 pub const CHAR_NORMALIZED: u32 = CHAR_NORMALIZED_BITS | 1;
741 pub const CHAR2_NORMALIZED: u32 = CHAR_NORMALIZED_BITS | 2;
742 pub const CHAR3_NORMALIZED: u32 = CHAR_NORMALIZED_BITS | 3;
743 pub const CHAR4_NORMALIZED: u32 = CHAR_NORMALIZED_BITS | 4;
744
745 pub const USHORT: u32 = USHORT_BITS | 1;
746 pub const USHORT2: u32 = USHORT_BITS | 2;
747 pub const USHORT3: u32 = USHORT_BITS | 3;
748 pub const USHORT4: u32 = USHORT_BITS | 4;
749
750 pub const SHORT: u32 = SHORT_BITS | 1;
751 pub const SHORT2: u32 = SHORT_BITS | 2;
752 pub const SHORT3: u32 = SHORT_BITS | 3;
753 pub const SHORT4: u32 = SHORT_BITS | 4;
754
755 pub const USHORT_NORMALIZED: u32 = USHORT_NORMALIZED_BITS | 1;
756 pub const USHORT2_NORMALIZED: u32 = USHORT_NORMALIZED_BITS | 2;
757 pub const USHORT3_NORMALIZED: u32 = USHORT_NORMALIZED_BITS | 3;
758 pub const USHORT4_NORMALIZED: u32 = USHORT_NORMALIZED_BITS | 4;
759
760 pub const SHORT_NORMALIZED: u32 = SHORT_NORMALIZED_BITS | 1;
761 pub const SHORT2_NORMALIZED: u32 = SHORT_NORMALIZED_BITS | 2;
762 pub const SHORT3_NORMALIZED: u32 = SHORT_NORMALIZED_BITS | 3;
763 pub const SHORT4_NORMALIZED: u32 = SHORT_NORMALIZED_BITS | 4;
764
765 pub const UINT: u32 = UINT_BITS | 1;
766 pub const UINT2: u32 = UINT_BITS | 2;
767 pub const UINT3: u32 = UINT_BITS | 3;
768 pub const UINT4: u32 = UINT_BITS | 4;
769
770 pub const INT: u32 = INT_BITS | 1;
771 pub const INT2: u32 = INT_BITS | 2;
772 pub const INT3: u32 = INT_BITS | 3;
773 pub const INT4: u32 = INT_BITS | 4;
774
775 pub const HALF: u32 = HALF_BITS | 1;
776 pub const HALF2: u32 = HALF_BITS | 2;
777 pub const HALF3: u32 = HALF_BITS | 3;
778 pub const HALF4: u32 = HALF_BITS | 4;
779
780 pub const FLOAT: u32 = FLOAT_BITS | 1;
781 pub const FLOAT2: u32 = FLOAT_BITS | 2;
782 pub const FLOAT3: u32 = FLOAT_BITS | 3;
783 pub const FLOAT4: u32 = FLOAT_BITS | 4;
784
785 pub const INT1010102_NORMALIZED: u32 = INT_BITS | PACKED_BIT | 4;
786 pub const UINT1010102_NORMALIZED: u32 = UINT_BITS | PACKED_BIT | 4;
787}