Chromium Code Reviews| Index: device/vr/openvr/openvr_device.cc |
| diff --git a/device/vr/openvr/openvr_device.cc b/device/vr/openvr/openvr_device.cc |
| index 88f7f4a4fd0975a9f5dbdc5f9f26f71f64c3a6ff..52e7625700d8beefb0edcfd2d2c71e93d8f54170 100644 |
| --- a/device/vr/openvr/openvr_device.cc |
| +++ b/device/vr/openvr/openvr_device.cc |
| @@ -24,6 +24,22 @@ device::mojom::VRFieldOfViewPtr openVRFovToWebVRFov(vr::IVRSystem* vr_system, |
| return out; |
| } |
| +std::string getOpenVRString(vr::IVRSystem* vr_system, |
| + vr::TrackedDeviceProperty prop) { |
| + std::string out; |
| + |
| + vr::TrackedPropertyError error = vr::TrackedProp_Success; |
| + char openvr_string[vr::k_unMaxPropertyStringSize]; |
| + vr_system->GetStringTrackedDeviceProperty( |
| + vr::k_unTrackedDeviceIndex_Hmd, prop, openvr_string, |
| + vr::k_unMaxPropertyStringSize, &error); |
| + |
| + if (error == vr::TrackedProp_Success) |
| + out = openvr_string; |
| + |
| + return out; |
| +} |
| + |
| } // namespace |
| namespace device { |
| @@ -45,6 +61,9 @@ void OpenVRDevice::CreateVRDisplayInfo( |
| mojom::VRDisplayInfoPtr device = mojom::VRDisplayInfo::New(); |
| device->index = id(); |
| + device->displayName = |
| + getOpenVRString(vr_system, vr::Prop_ManufacturerName_String) + " " + |
| + getOpenVRString(vr_system, vr::Prop_ModelNumber_String); |
| device->capabilities = mojom::VRDisplayCapabilities::New(); |
| device->capabilities->hasPosition = true; |
| device->capabilities->hasExternalDisplay = true; |
| @@ -81,6 +100,37 @@ void OpenVRDevice::CreateVRDisplayInfo( |
| right_eye->renderWidth = left_eye->renderWidth; |
| right_eye->renderHeight = left_eye->renderHeight; |
| + device->stageParameters = mojom::VRStageParameters::New(); |
| + vr::HmdMatrix34_t mat = |
| + vr_system->GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); |
| + device->stageParameters->standingTransform.resize(16); |
| + std::vector<float>& transform = device->stageParameters->standingTransform; |
| + transform[0] = mat.m[0][0]; |
| + transform[1] = mat.m[1][0]; |
| + transform[2] = mat.m[2][0]; |
| + transform[3] = 0.0f; |
| + transform[4] = mat.m[0][1]; |
| + transform[5] = mat.m[1][1]; |
| + transform[6] = mat.m[2][1]; |
| + transform[7] = 0.0f; |
| + transform[8] = mat.m[0][2]; |
| + transform[9] = mat.m[1][2]; |
| + transform[10] = mat.m[2][2]; |
| + transform[11] = 0.0f; |
| + transform[12] = mat.m[0][3]; |
| + transform[13] = mat.m[1][3]; |
| + transform[14] = mat.m[2][3]; |
| + transform[15] = 1.0f; |
|
billorr
2017/04/17 17:56:08
converting transforms from openvr to mojo/webvr fo
|
| + |
| + vr::IVRChaperone* chaperone = vr::VRChaperone(); |
| + if (chaperone) { |
| + chaperone->GetPlayAreaSize(&device->stageParameters->sizeX, |
| + &device->stageParameters->sizeZ); |
| + } else { |
| + device->stageParameters->sizeX = 0.0f; |
| + device->stageParameters->sizeZ = 0.0f; |
| + } |
| + |
| render_loop_ = std::make_unique<OpenVRRenderLoop>(vr_system); |
| on_created.Run(std::move(device)); |