use crate::{ffi, math::Matrix};
use static_assertions::{assert_eq_align, assert_eq_size};
#[repr(C)]
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VrDeviceInfo {
pub horizontal_resolution: u32,
pub vertical_resolution: u32,
pub horizontal_screen_size: f32,
pub vertical_screen_size: f32,
pub screen_center_v: f32,
pub eye_to_screen_distance: f32,
pub lens_separation_distance: f32,
pub interpupillary_distance: f32,
pub lens_distortion_values: [f32; 4],
pub chroma_ab_correction: [f32; 4],
}
assert_eq_size!(VrDeviceInfo, ffi::VrDeviceInfo);
assert_eq_align!(VrDeviceInfo, ffi::VrDeviceInfo);
impl From<VrDeviceInfo> for ffi::VrDeviceInfo {
#[inline]
fn from(val: VrDeviceInfo) -> Self {
unsafe { std::mem::transmute(val) }
}
}
impl From<ffi::VrDeviceInfo> for VrDeviceInfo {
#[inline]
fn from(value: ffi::VrDeviceInfo) -> Self {
unsafe { std::mem::transmute(value) }
}
}
#[repr(C)]
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VrStereoConfig {
pub projection: [Matrix; 2],
pub view_offset: [Matrix; 2],
pub left_lens_center: [f32; 2],
pub right_lens_center: [f32; 2],
pub left_screen_center: [f32; 2],
pub right_screen_center: [f32; 2],
pub scale: [f32; 2],
pub scale_in: [f32; 2],
}
impl VrStereoConfig {
pub fn load(device: VrDeviceInfo) -> Self {
assert_eq!(crate::RAYLIB_VERSION, "4.5");
unsafe { ffi::LoadVrStereoConfig(device.into()).into() }
}
}
assert_eq_size!(VrStereoConfig, ffi::VrStereoConfig);
assert_eq_align!(VrStereoConfig, ffi::VrStereoConfig);
impl From<VrStereoConfig> for ffi::VrStereoConfig {
#[inline]
fn from(val: VrStereoConfig) -> Self {
assert_eq!(crate::RAYLIB_VERSION, "4.5");
unsafe { std::mem::transmute(val) }
}
}
impl From<ffi::VrStereoConfig> for VrStereoConfig {
#[inline]
fn from(value: ffi::VrStereoConfig) -> Self {
assert_eq!(crate::RAYLIB_VERSION, "4.5");
unsafe { std::mem::transmute(value) }
}
}
impl Drop for VrStereoConfig {
#[inline]
fn drop(&mut self) {
assert_eq!(crate::RAYLIB_VERSION, "4.5");
}
}