mirror of
https://github.com/mii443/rust-openvr.git
synced 2025-08-23 16:49:31 +00:00
added display_frequency and vsync_to_photons
This commit is contained in:
69
src/lib.rs
69
src/lib.rs
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user