Chromium Code Reviews| 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..84d9fcf686913f0e557a7eb6fdadaf02f706e0d2 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,21 +82,36 @@ void VRDisplay::update(const device::blink::VRDisplayPtr& display) |
| } |
| } |
| -VRPose* VRDisplay::getPose() |
| +bool VRDisplay::getFrameData(VRFrameData* frameData) |
| { |
| if (m_canUpdateFramePose) { |
|
mthiesse
2016/09/12 15:58:40
Extract this block into a separate function? It's
|
| - m_framePose = getImmediatePose(); |
| - Platform::current()->currentThread()->addTaskObserver(this); |
| - m_canUpdateFramePose = false; |
| + m_framePose = controller()->getPose(m_displayId); |
| + if (m_isPresenting) |
| + m_canUpdateFramePose = false; |
| } |
| - return m_framePose; |
| + if (!frameData) |
| + return false; |
| + |
| + if (m_depthNear == m_depthFar) |
| + return false; |
| + |
| + return frameData->update(m_framePose, m_eyeParametersLeft, m_eyeParametersRight, m_depthNear, m_depthFar); |
| } |
| -VRPose* VRDisplay::getImmediatePose() |
| +VRPose* VRDisplay::getPose() |
|
mthiesse
2016/09/12 15:58:40
Not sure where to leave this comment for https://w
|
| { |
| + if (m_canUpdateFramePose) { |
| + m_framePose = controller()->getPose(m_displayId); |
| + if (m_isPresenting) |
| + m_canUpdateFramePose = false; |
| + } |
| + |
| + if (!m_framePose) |
| + return nullptr; |
| + |
| VRPose* pose = VRPose::create(); |
|
mthiesse
2016/09/12 15:58:40
Do you need to create a new VRPose if you haven't
|
| - pose->setPose(controller()->getPose(m_displayId)); |
| + pose->setPose(m_framePose); |
| return pose; |
| } |
| @@ -268,18 +286,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 +314,6 @@ DEFINE_TRACE(VRDisplay) |
| visitor->trace(m_stageParameters); |
| visitor->trace(m_eyeParametersLeft); |
| visitor->trace(m_eyeParametersRight); |
| - visitor->trace(m_framePose); |
| visitor->trace(m_layer); |
| } |