diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 54b4a8bb54..71ca66e97a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4690,6 +4690,11 @@ int Application::getMaxOctreePacketsPerSecond() { return _maxOctreePPS; } +qreal Application::getDevicePixelRatio() { + return _window ? _window->windowHandle()->devicePixelRatio() : 1.0; +} + + AbstractViewStateInterface* AbstractViewStateInterface::instance() { return qApp; } diff --git a/interface/src/Application.h b/interface/src/Application.h index 09edaba341..acd71c2804 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -300,7 +300,7 @@ public: virtual const glm::vec3& getAvatarPosition() const { return _myAvatar->getPosition(); } virtual void overrideEnvironmentData(const EnvironmentData& newData) { _environment.override(newData); } virtual void endOverrideEnvironmentData() { _environment.endOverride(); } - + virtual qreal getDevicePixelRatio(); NodeBounds& getNodeBoundsDisplay() { return _nodeBoundsDisplay; } diff --git a/libraries/render-utils/src/AbstractViewStateInterface.h b/libraries/render-utils/src/AbstractViewStateInterface.h index c7b69943af..0a3cb55848 100644 --- a/libraries/render-utils/src/AbstractViewStateInterface.h +++ b/libraries/render-utils/src/AbstractViewStateInterface.h @@ -56,6 +56,7 @@ public: virtual const glm::vec3& getAvatarPosition() const = 0; virtual void postLambdaEvent(std::function f) = 0; + virtual qreal getDevicePixelRatio() = 0; static AbstractViewStateInterface* instance(); }; diff --git a/libraries/render-utils/src/OffscreenQmlSurface.cpp b/libraries/render-utils/src/OffscreenQmlSurface.cpp index 70213a9935..5b39610640 100644 --- a/libraries/render-utils/src/OffscreenQmlSurface.cpp +++ b/libraries/render-utils/src/OffscreenQmlSurface.cpp @@ -11,6 +11,7 @@ #include #include #include +#include "AbstractViewStateInterface.h" Q_DECLARE_LOGGING_CATEGORY(offscreenFocus) Q_LOGGING_CATEGORY(offscreenFocus, "hifi.offscreen.focus") @@ -87,8 +88,14 @@ void OffscreenQmlSurface::create(QOpenGLContext* shareContext) { } void OffscreenQmlSurface::resize(const QSize& newSize) { - - qreal pixelRatio = _renderControl->_renderWindow ? _renderControl->_renderWindow->devicePixelRatio() : 1.0; + // Qt bug in 5.4 forces this check of pixel ratio, + // even though we're rendering offscreen. + qreal pixelRatio = 1.0; + if (_renderControl && _renderControl->_renderWindow) { + pixelRatio = _renderControl->_renderWindow->devicePixelRatio(); + } else { + pixelRatio = AbstractViewStateInterface::instance()->getDevicePixelRatio(); + } QSize newOffscreenSize = newSize * pixelRatio; if (newOffscreenSize == _fboCache.getSize()) { return;