From 2901155a7bc1550e9172d38513280cbddeede492 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 1 Sep 2015 15:34:25 -0700 Subject: [PATCH] Fix Oculus mirroring to window --- .../oculus/OculusDisplayPlugin.cpp | 34 ++++++++----------- .../oculus/OculusDisplayPlugin.h | 2 +- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.cpp index c214b7e627..2ed5e69fe7 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.cpp @@ -325,19 +325,18 @@ void OculusDisplayPlugin::customizeContext() { //_texture = DependencyManager::get()-> // getImageTexture(PathUtils::resourcesPath() + "/images/cube_texture.png"); uvec2 mirrorSize = toGlm(_window->geometry().size()); - _mirrorFbo = MirrorFboPtr(new MirrorFramebufferWrapper(_hmd)); - _mirrorFbo->Init(mirrorSize); _sceneFbo = SwapFboPtr(new SwapFramebufferWrapper(_hmd)); _sceneFbo->Init(getRecommendedRenderSize()); #endif + enableVsync(false); + isVsyncEnabled(); } void OculusDisplayPlugin::deactivate() { #if (OVR_MAJOR_VERSION >= 6) makeCurrent(); _sceneFbo.reset(); - _mirrorFbo.reset(); doneCurrent(); PerformanceTimer::setActive(false); @@ -378,12 +377,14 @@ void OculusDisplayPlugin::display(GLuint finalTexture, const glm::uvec2& sceneSi the UI visible in the output window (unlikely). This should be done before _sceneFbo->Increment or we're be using the wrong texture */ - _sceneFbo->Bound(Framebuffer::Target::Read, [&] { - glBlitFramebuffer( - 0, 0, _sceneFbo->size.x, _sceneFbo->size.y, - 0, 0, windowSize.x, windowSize.y, - GL_COLOR_BUFFER_BIT, GL_NEAREST); - }); + if (_enableMirror) { + _sceneFbo->Bound(Framebuffer::Target::Read, [&] { + glBlitFramebuffer( + 0, 0, _sceneFbo->size.x, _sceneFbo->size.y, + 0, 0, windowSize.x, windowSize.y, + GL_COLOR_BUFFER_BIT, GL_NEAREST); + }); + } { PerformanceTimer("OculusSubmit"); @@ -404,6 +405,7 @@ void OculusDisplayPlugin::display(GLuint finalTexture, const glm::uvec2& sceneSi The other alternative for mirroring is to use the Oculus mirror texture support, which will contain the post-distorted and fully composited scene regardless of how many layers we send. + Currently generates an error. */ //auto mirrorSize = _mirrorFbo->size; //_mirrorFbo->Bound(Framebuffer::Target::Read, [&] { @@ -419,16 +421,6 @@ void OculusDisplayPlugin::display(GLuint finalTexture, const glm::uvec2& sceneSi // Pass input events on to the application bool OculusDisplayPlugin::eventFilter(QObject* receiver, QEvent* event) { -#if (OVR_MAJOR_VERSION >= 6) - if (event->type() == QEvent::Resize) { - QResizeEvent* resizeEvent = static_cast(event); - qDebug() << resizeEvent->size().width() << " x " << resizeEvent->size().height(); - auto newSize = toGlm(resizeEvent->size()); - makeCurrent(); - _mirrorFbo->Resize(newSize); - doneCurrent(); - } -#endif return WindowOpenGLDisplayPlugin::eventFilter(receiver, event); } @@ -438,7 +430,9 @@ bool OculusDisplayPlugin::eventFilter(QObject* receiver, QEvent* event) { otherwise the swapbuffer delay will interefere with the framerate of the headset */ void OculusDisplayPlugin::finishFrame() { - //swapBuffers(); + if (_enableMirror) { + swapBuffers(); + } doneCurrent(); }; diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h index 42f8d5763f..d30356daa0 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusDisplayPlugin.h @@ -58,6 +58,7 @@ private: mat4 _compositeEyeProjections[2]; uvec2 _desiredFramebufferSize; ovrTrackingState _trackingState; + bool _enableMirror{ false }; #if (OVR_MAJOR_VERSION >= 6) ovrHmd _hmd; @@ -70,7 +71,6 @@ private: ovrLayerEyeFov& getSceneLayer(); ovrHmdDesc _hmdDesc; SwapFboPtr _sceneFbo; - MirrorFboPtr _mirrorFbo; ovrLayerEyeFov _sceneLayer; #endif #if (OVR_MAJOR_VERSION == 7)