added display_frequency and vsync_to_photons

This commit is contained in:
Colin Sherratt
2015-10-07 22:59:40 -06:00
parent a2228fb2d8
commit 395d3111fa

View File

@ -86,6 +86,21 @@ impl TrackedDevicePoses {
} }
} }
unsafe fn to_tracked(data: [openvr_sys::TrackedDevicePose_t; 16]) -> TrackedDevicePoses {
let mut out: TrackedDevicePoses = std::mem::zeroed();
for (i, d) in data.iter().enumerate() {
if d.bDeviceIsConnected {
out.count = i + 1;
}
out.poses[i].is_connected = d.bDeviceIsConnected;
out.poses[i].is_valid = d.bPoseIsValid;
out.poses[i].to_device = d.mDeviceToAbsoluteTracking.m;
out.poses[i].velocity = d.vVelocity.v;
out.poses[i].angular_velocity = d.vAngularVelocity.v;
}
out
}
impl IVRSystem { impl IVRSystem {
/// Initialize the IVR System /// Initialize the IVR System
pub fn init() -> Result<IVRSystem, openvr_sys::HmdError> { pub fn init() -> Result<IVRSystem, openvr_sys::HmdError> {
@ -226,20 +241,7 @@ impl IVRSystem {
&mut data[0], &mut data[0],
16 16
); );
to_tracked(data)
let mut out: TrackedDevicePoses = std::mem::zeroed();
for (i, d) in data.iter().enumerate() {
if d.bDeviceIsConnected {
out.count = i + 1;
}
out.poses[i].is_connected = d.bDeviceIsConnected;
out.poses[i].is_valid = d.bPoseIsValid;
out.poses[i].to_device = d.mDeviceToAbsoluteTracking.m;
out.poses[i].velocity = d.vVelocity.v;
out.poses[i].angular_velocity = d.vAngularVelocity.v;
}
out
} }
} }
@ -255,6 +257,30 @@ impl IVRSystem {
} }
} }
} }
/// get frequency of hmd in hz
pub fn display_frequency(&self) -> f32 {
unsafe {
openvr_sys::VR_IVRSystem_GetFloatTrackedDeviceProperty(
self.0,
0,
openvr_sys::TrackedDeviceProperty::DisplayFrequency_Float,
std::ptr::null_mut()
)
}
}
/// get the time vsync to phonts
pub fn vsync_to_photons(&self) -> f32 {
unsafe {
openvr_sys::VR_IVRSystem_GetFloatTrackedDeviceProperty(
self.0,
0,
openvr_sys::TrackedDeviceProperty::SecondsFromVsyncToPhotons_Float,
std::ptr::null_mut()
)
}
}
} }
impl Drop for IVRSystem { impl Drop for IVRSystem {
@ -340,20 +366,7 @@ impl Compositor {
std::ptr::null_mut(), std::ptr::null_mut(),
0 0
); );
to_tracked(data)
let mut out: TrackedDevicePoses = std::mem::zeroed();
for (i, d) in data.iter().enumerate() {
if d.bDeviceIsConnected {
out.count = i + 1;
}
out.poses[i].is_connected = d.bDeviceIsConnected;
out.poses[i].is_valid = d.bPoseIsValid;
out.poses[i].to_device = d.mDeviceToAbsoluteTracking.m;
out.poses[i].velocity = d.vVelocity.v;
out.poses[i].angular_velocity = d.vAngularVelocity.v;
}
out
} }
} }
} }