| Index: third_party/WebKit/Source/modules/vr/VRDisplay.cpp
|
| diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
|
| index ad76fa1bde27e0eb040af2ef5d7de36536dabb3c..88ae98b7eea2d69815d12cd4d3b301cc5cac4c43 100644
|
| --- a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
|
| +++ b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "modules/vr/VRController.h"
|
| #include "modules/vr/VRDisplayCapabilities.h"
|
| #include "modules/vr/VREyeParameters.h"
|
| +#include "modules/vr/VRFrameData.h"
|
| #include "modules/vr/VRLayer.h"
|
| #include "modules/vr/VRPose.h"
|
| #include "modules/vr/VRStageParameters.h"
|
| @@ -42,6 +43,8 @@ VRDisplay::VRDisplay(NavigatorVR* navigatorVR)
|
| , m_capabilities(new VRDisplayCapabilities())
|
| , m_eyeParametersLeft(new VREyeParameters())
|
| , m_eyeParametersRight(new VREyeParameters())
|
| + , m_depthNear(0.01)
|
| + , m_depthFar(10000.0)
|
| , m_fullscreenCheckTimer(this, &VRDisplay::onFullscreenCheck)
|
| {
|
| }
|
| @@ -79,24 +82,40 @@ void VRDisplay::update(const device::blink::VRDisplayPtr& display)
|
| }
|
| }
|
|
|
| -VRPose* VRDisplay::getPose()
|
| +bool VRDisplay::getFrameData(VRFrameData* frameData)
|
| {
|
| - if (m_canUpdateFramePose) {
|
| - m_framePose = getImmediatePose();
|
| - Platform::current()->currentThread()->addTaskObserver(this);
|
| - m_canUpdateFramePose = false;
|
| - }
|
| + updatePose();
|
| +
|
| + if (!frameData)
|
| + return false;
|
| +
|
| + if (m_depthNear == m_depthFar)
|
| + return false;
|
|
|
| - return m_framePose;
|
| + return frameData->update(m_framePose, m_eyeParametersLeft, m_eyeParametersRight, m_depthNear, m_depthFar);
|
| }
|
|
|
| -VRPose* VRDisplay::getImmediatePose()
|
| +VRPose* VRDisplay::getPose()
|
| {
|
| + updatePose();
|
| +
|
| + if (!m_framePose)
|
| + return nullptr;
|
| +
|
| VRPose* pose = VRPose::create();
|
| - pose->setPose(controller()->getPose(m_displayId));
|
| + pose->setPose(m_framePose);
|
| return pose;
|
| }
|
|
|
| +void VRDisplay::updatePose()
|
| +{
|
| + if (m_canUpdateFramePose) {
|
| + m_framePose = controller()->getPose(m_displayId);
|
| + if (m_isPresenting)
|
| + m_canUpdateFramePose = false;
|
| + }
|
| +}
|
| +
|
| void VRDisplay::resetPose()
|
| {
|
| controller()->resetPose(m_displayId);
|
| @@ -268,18 +287,10 @@ HeapVector<VRLayer> VRDisplay::getLayers()
|
| return layers;
|
| }
|
|
|
| -void VRDisplay::submitFrame(VRPose* pose)
|
| +void VRDisplay::submitFrame()
|
| {
|
| controller()->submitFrame(m_displayId);
|
| -}
|
| -
|
| -void VRDisplay::didProcessTask()
|
| -{
|
| - // Pose should be stable until control is returned to the user agent.
|
| - if (!m_canUpdateFramePose) {
|
| - Platform::current()->currentThread()->removeTaskObserver(this);
|
| - m_canUpdateFramePose = true;
|
| - }
|
| + m_canUpdateFramePose = true;
|
| }
|
|
|
| void VRDisplay::onFullscreenCheck(TimerBase*)
|
| @@ -304,7 +315,6 @@ DEFINE_TRACE(VRDisplay)
|
| visitor->trace(m_stageParameters);
|
| visitor->trace(m_eyeParametersLeft);
|
| visitor->trace(m_eyeParametersRight);
|
| - visitor->trace(m_framePose);
|
| visitor->trace(m_layer);
|
| }
|
|
|
|
|