summaryrefslogtreecommitdiffstats
path: root/src/render/backend
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-11-06 13:33:45 +0100
committerMike Krus <mike.krus@kdab.com>2016-01-21 10:57:01 +0000
commitc71faa27e6173255356df2e34050b8af15e4585b (patch)
tree424b9eea279f4403184998e49758651da134a532 /src/render/backend
parent5d921dda57bff431487e6f1d64ef5111d464655d (diff)
Updated picking-qml example
handle device pixel ratio and none full-window Scene3D Change-Id: Iadc504a00816d9363847bf9ec1e09d4b7c631666 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/backend')
-rw-r--r--src/render/backend/abstractrenderer_p.h5
-rw-r--r--src/render/backend/renderer.cpp16
-rw-r--r--src/render/backend/renderer_p.h6
-rw-r--r--src/render/backend/renderview.cpp2
-rw-r--r--src/render/backend/renderview_p.h4
5 files changed, 31 insertions, 2 deletions
diff --git a/src/render/backend/abstractrenderer_p.h b/src/render/backend/abstractrenderer_p.h
index 39dadbbf8..109fa5c16 100644
--- a/src/render/backend/abstractrenderer_p.h
+++ b/src/render/backend/abstractrenderer_p.h
@@ -54,6 +54,7 @@
QT_BEGIN_NAMESPACE
class QSurface;
+class QSize;
namespace Qt3DCore {
class QAbstractFrameAdvanceService;
@@ -89,11 +90,15 @@ public:
virtual void setTime(qint64 time) = 0;
virtual void setSurface(QSurface *surface) = 0;
+ virtual void setSurfaceSize(const QSize& s) = 0;
+ virtual void setDevicePixelRatio(qreal r) = 0;
virtual void setNodeManagers(NodeManagers *managers) = 0;
virtual void setServices(Qt3DCore::QServiceLocator *services) = 0;
virtual void setSurfaceExposed(bool exposed) = 0;
virtual QSurface *surface() const = 0;
+ virtual const QSize &surfaceSize() const = 0;
+ virtual qreal devicePixelRatio() const = 0;
virtual NodeManagers *nodeManagers() const = 0;
virtual Qt3DCore::QServiceLocator *services() const = 0;
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index c9a5b5b0f..94760bda5 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -136,6 +136,7 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_nodesManager(Q_NULLPTR)
, m_graphicsContext(Q_NULLPTR)
, m_surface(Q_NULLPTR)
+ , m_devicePixelRatio(1.)
, m_renderQueue(new RenderQueue())
, m_renderThread(type == QRenderAspect::Threaded ? new RenderThread(this) : Q_NULLPTR)
, m_vsyncFrameAdvanceService(new VSyncFrameAdvanceService())
@@ -508,6 +509,16 @@ void Renderer::setSurface(QSurface* surface)
}
}
+void Renderer::setSurfaceSize(const QSize &s)
+{
+ m_surfaceSize = s;
+}
+
+void Renderer::setDevicePixelRatio(qreal s)
+{
+ m_devicePixelRatio = s;
+}
+
void Renderer::registerEventFilter(QEventFilterService *service)
{
qCDebug(Backend) << Q_FUNC_INFO << QThread::currentThread();
@@ -742,7 +753,7 @@ bool Renderer::submitRenderViews()
m_graphicsContext->clearBackBuffer(renderView->clearBuffer());
// Set the Viewport
- m_graphicsContext->setViewport(renderView->viewport());
+ m_graphicsContext->setViewport(renderView->viewport(), renderView->surfaceSize() * renderView->devicePixelRatio());
// Execute the render commands
executeCommands(renderView);
@@ -810,7 +821,8 @@ Qt3DCore::QAspectJobPtr Renderer::createRenderViewJob(FrameGraphNode *node, int
RenderViewJobPtr job(new RenderViewJob);
job->setRenderer(this);
if (m_surface)
- job->setSurfaceSize(m_surface->size());
+ job->setSurfaceSize(m_surfaceSize.isValid() ? m_surfaceSize : m_surface->size());
+ job->setDevicePixelRatio(m_devicePixelRatio);
job->setFrameGraphLeafNode(node);
job->setSubmitOrderIndex(submitOrderIndex);
return job;
diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h
index c3d2587ed..7d7eb944a 100644
--- a/src/render/backend/renderer_p.h
+++ b/src/render/backend/renderer_p.h
@@ -128,11 +128,15 @@ public:
void setTime(qint64 time) Q_DECL_OVERRIDE;
void setSurface(QSurface *s) Q_DECL_OVERRIDE;
+ void setSurfaceSize(const QSize& s) Q_DECL_OVERRIDE;
+ void setDevicePixelRatio(qreal s) Q_DECL_OVERRIDE;
void setNodeManagers(NodeManagers *managers) Q_DECL_OVERRIDE { m_nodesManager = managers; }
void setServices(Qt3DCore::QServiceLocator *services) Q_DECL_OVERRIDE { m_services = services; }
void setSurfaceExposed(bool exposed) Q_DECL_OVERRIDE;
QSurface *surface() const Q_DECL_OVERRIDE { return m_surface; }
+ const QSize &surfaceSize() const Q_DECL_OVERRIDE { return m_surfaceSize; }
+ qreal devicePixelRatio() const Q_DECL_OVERRIDE { return m_devicePixelRatio; }
NodeManagers *nodeManagers() const Q_DECL_OVERRIDE;
Qt3DCore::QServiceLocator *services() const Q_DECL_OVERRIDE { return m_services; }
@@ -227,6 +231,8 @@ private:
QScopedPointer<GraphicsContext> m_graphicsContext;
QSurface *m_surface;
+ QSize m_surfaceSize;
+ qreal m_devicePixelRatio;
RenderQueue *m_renderQueue;
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index 24e9d9c10..de7d0e5e8 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -270,6 +270,7 @@ QUniformValue *RenderView::eyePosition(const QMatrix4x4 &model) const
RenderView::RenderView()
: m_renderer(Q_NULLPTR)
+ , m_devicePixelRatio(1.)
, m_allocator(Q_NULLPTR)
, m_data(Q_NULLPTR)
, m_clearColor(Q_NULLPTR)
@@ -393,6 +394,7 @@ void RenderView::setRenderer(Renderer *renderer)
{
m_renderer = renderer;
m_manager = renderer->nodeManagers();
+ m_surface = renderer->surface();
m_data->m_uniformBlockBuilder.shaderDataManager = m_manager->shaderDataManager();
}
diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h
index ccb0554f3..057a5ebed 100644
--- a/src/render/backend/renderview_p.h
+++ b/src/render/backend/renderview_p.h
@@ -118,6 +118,9 @@ public:
inline void setSurfaceSize(const QSize &size) Q_DECL_NOEXCEPT { m_surfaceSize = size; }
inline Renderer *renderer() const Q_DECL_NOEXCEPT { return m_renderer; }
inline NodeManagers *nodeManagers() const Q_DECL_NOEXCEPT { return m_manager; }
+ inline const QSize &surfaceSize() const { return m_surfaceSize; }
+ inline void setDevicePixelRatio(qreal r) { m_devicePixelRatio = r; }
+ inline qreal devicePixelRatio() const { return m_devicePixelRatio; }
inline void setAllocator(Qt3DCore::QFrameAllocator *allocator)
{
@@ -270,6 +273,7 @@ private:
Renderer *m_renderer;
NodeManagers *m_manager;
QSize m_surfaceSize;
+ qreal m_devicePixelRatio;
Qt3DCore::QFrameAllocator *m_allocator;
InnerData *m_data;