| Index: device/vr/openvr/openvr_device.cc
|
| diff --git a/device/vr/openvr/openvr_device.cc b/device/vr/openvr/openvr_device.cc
|
| index 0ced4955479130030373965f02ccf665e0073148..f129d977e0a77510ee14f763cf9f171dcea8b523 100644
|
| --- a/device/vr/openvr/openvr_device.cc
|
| +++ b/device/vr/openvr/openvr_device.cc
|
| @@ -33,6 +33,45 @@ std::vector<float> HmdVector3ToWebVR(const vr::HmdVector3_t& vec) {
|
| 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;
|
| +}
|
| +
|
| +std::vector<float> HmdMatrix34ToWebVRTransformMatrix(
|
| + const vr::HmdMatrix34_t& mat) {
|
| + std::vector<float> transform;
|
| + transform.resize(16);
|
| + 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;
|
| + return transform;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace device {
|
| @@ -54,6 +93,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;
|
| @@ -90,6 +132,21 @@ 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 =
|
| + HmdMatrix34ToWebVRTransformMatrix(mat);
|
| +
|
| + 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));
|
|
|