rust_webvr_api/
vr_frame_data.rs1use VRPose;
2use std::mem;
3use std::ptr;
4
5#[derive(Debug, Clone)]
7#[cfg_attr(feature = "serde-serialization", derive(Deserialize, Serialize))]
8pub struct VRFrameData {
9 pub timestamp: f64,
12
13 pub left_projection_matrix: [f32; 16],
15
16 pub left_view_matrix: [f32; 16],
18
19 pub right_projection_matrix: [f32; 16],
21
22 pub right_view_matrix: [f32; 16],
24
25 pub pose: VRPose,
28}
29
30impl Default for VRFrameData {
31 fn default() -> VRFrameData {
32 VRFrameData {
33 timestamp: 0f64,
34 left_projection_matrix: identity_matrix!(),
35 left_view_matrix: identity_matrix!(),
36 right_projection_matrix: identity_matrix!(),
37 right_view_matrix: identity_matrix!(),
38 pose: VRPose::default(),
39 }
40 }
41}
42
43impl VRFrameData {
44 pub fn to_bytes(&self) -> Vec<u8> {
45 let mut vec = vec![0u8; mem::size_of::<VRFrameData>()];
46 unsafe {
47 ptr::copy_nonoverlapping(self,
48 vec.as_mut_ptr() as *mut VRFrameData,
49 mem::size_of::<VRFrameData>());
50 }
51 vec
52 }
53
54 pub fn from_bytes(bytes: &[u8]) -> VRFrameData {
55 unsafe {
56 let mut result = mem::MaybeUninit::uninit();
57 ptr::copy_nonoverlapping(bytes.as_ptr(),
58 result.as_mut_ptr() as *mut u8,
59 mem::size_of::<VRFrameData>());
60 result.assume_init()
61 }
62 }
63}