From f176003dadba3c6eee27e427955391afca1e0c7b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 24 Aug 2015 23:07:21 -0700 Subject: [PATCH] Fixing aspect ratio on stereo plugins --- interface/src/Application.cpp | 2 +- .../display-plugins/src/display-plugins/DisplayPlugin.h | 7 ++++++- .../src/display-plugins/stereo/StereoDisplayPlugin.cpp | 6 ++++++ .../src/display-plugins/stereo/StereoDisplayPlugin.h | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c59c24de71..c2ab150091 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1269,7 +1269,7 @@ void Application::resizeGL() { loadViewFrustum(_myCamera, _viewFrustum); float fov = glm::radians(DEFAULT_FIELD_OF_VIEW_DEGREES); // FIXME the aspect ratio for stereo displays is incorrect based on this. - float aspectRatio = aspect(_renderResolution); + float aspectRatio = displayPlugin->getRecommendedAspectRatio(); _myCamera.setProjection(glm::perspective(fov, aspectRatio, DEFAULT_NEAR_CLIP, DEFAULT_FAR_CLIP)); } diff --git a/libraries/display-plugins/src/display-plugins/DisplayPlugin.h b/libraries/display-plugins/src/display-plugins/DisplayPlugin.h index 8ee2d698a6..0696cc6229 100644 --- a/libraries/display-plugins/src/display-plugins/DisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/DisplayPlugin.h @@ -8,12 +8,12 @@ #pragma once #include "plugins/Plugin.h" - #include #include #include #include "gpu/GPUConfig.h" +#include "GLMHelpers.h" #include #include @@ -92,6 +92,11 @@ public: return getRecommendedRenderSize(); } + // By default the aspect ratio is just the render size + virtual float getRecommendedAspectRatio() const { + return aspect(getRecommendedRenderSize()); + } + // Stereo specific methods virtual glm::mat4 getProjection(Eye eye, const glm::mat4& baseProjection) const { return baseProjection; diff --git a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp index 43c3b727c4..df691f06f3 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp @@ -91,3 +91,9 @@ void StereoDisplayPlugin::deactivate() { CONTAINER->unsetFullscreen(); WindowOpenGLDisplayPlugin::deactivate(); } + +// Derived classes will override the recommended render size based on the window size, +// so here we want to fix the aspect ratio based on the window, not on the render size +float StereoDisplayPlugin::getRecommendedAspectRatio() const { + return aspect(WindowOpenGLDisplayPlugin::getRecommendedRenderSize()); +} diff --git a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h index 2009c32e1c..86f35c1260 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h @@ -19,6 +19,7 @@ public: virtual void activate() override; virtual void deactivate() override; + virtual float getRecommendedAspectRatio() const override; virtual glm::mat4 getProjection(Eye eye, const glm::mat4& baseProjection) const override; virtual glm::mat4 getEyePose(Eye eye) const override;