diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-01-31 17:09:21 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-01-31 16:52:58 +0000 |
commit | 9ae12590ac965ca454b67c27f4411d71ad05ae86 (patch) | |
tree | bab852f45d8936604a91c9a514531613d9f4a8e6 /src/render | |
parent | 708720b8a1056aec2c62a3a2467a324d62a25ee1 (diff) |
Add gamma to QViewport's API
Change-Id: Ieced911cf1e51c0befc5ce91e8529a421b5c5a80
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/framegraph/qviewport.cpp | 34 | ||||
-rw-r--r-- | src/render/framegraph/qviewport.h | 4 | ||||
-rw-r--r-- | src/render/framegraph/qviewport_p.h | 2 | ||||
-rw-r--r-- | src/render/framegraph/viewportnode.cpp | 14 | ||||
-rw-r--r-- | src/render/framegraph/viewportnode_p.h | 4 |
5 files changed, 56 insertions, 2 deletions
diff --git a/src/render/framegraph/qviewport.cpp b/src/render/framegraph/qviewport.cpp index a78e260a5..8c1ebe67c 100644 --- a/src/render/framegraph/qviewport.cpp +++ b/src/render/framegraph/qviewport.cpp @@ -50,6 +50,7 @@ namespace Qt3DRender { QViewportPrivate::QViewportPrivate() : QFrameGraphNodePrivate() , m_normalizedRect(QRectF(0.0f, 0.0f, 1.0f, 1.0f)) + , m_gamma(2.2f) { } @@ -62,7 +63,8 @@ QViewportPrivate::QViewportPrivate() \inherits Qt3DRender::QFrameGraphNode Qt3DRender::QViewport of the scene specifies at which portion of the render surface Qt3D - is rendering to. Area outside the viewport is left untouched. + is rendering to. Area outside the viewport is left untouched. It also controls global parameters + to the rendering in that viewport like gamma. */ /*! @@ -74,7 +76,8 @@ QViewportPrivate::QViewportPrivate() \brief A viewport on the Qt3D Scene Viewport of the scene specifies at which portion of the render surface Qt3D is - rendering to. Area outside the viewport is left untouched. + rendering to. Area outside the viewport is left untouched. It also controls global parameters + to the rendering in that viewport like gamma. */ /*! @@ -86,6 +89,12 @@ QViewportPrivate::QViewportPrivate() */ /*! + \qmlproperty rect Viewport::gamma + + Specifies the gamma factor for the viewport. The default is 2.2 which should give proper result on most screens. + */ + +/*! Constructs QViewport with given \a parent. */ QViewport::QViewport(QNode *parent) @@ -111,6 +120,12 @@ QRectF QViewport::normalizedRect() const return d->m_normalizedRect; } +float QViewport::gamma() const +{ + Q_D(const QViewport); + return d->m_gamma; +} + /*! \property QViewport::normalizedRect @@ -127,12 +142,27 @@ void QViewport::setNormalizedRect(const QRectF &normalizedRect) } } +/*! + \property QViewport::gamma + + Specifies the gamma factor for the viewport. The default is 2.2 which should give proper result on most screens. + */ +void QViewport::setGamma(float gamma) +{ + Q_D(QViewport); + if (gamma != d->m_gamma) { + d->m_gamma = gamma; + emit gammaChanged(gamma); + } +} + Qt3DCore::QNodeCreatedChangeBasePtr QViewport::createNodeCreationChange() const { auto creationChange = QFrameGraphNodeCreatedChangePtr<QViewportData>::create(this); auto &data = creationChange->data; Q_D(const QViewport); data.normalizedRect = d->m_normalizedRect; + data.gamma = d->m_gamma; return creationChange; } diff --git a/src/render/framegraph/qviewport.h b/src/render/framegraph/qviewport.h index 5959ed791..abe423cf4 100644 --- a/src/render/framegraph/qviewport.h +++ b/src/render/framegraph/qviewport.h @@ -54,18 +54,22 @@ class QT3DRENDERSHARED_EXPORT QViewport : public QFrameGraphNode { Q_OBJECT Q_PROPERTY(QRectF normalizedRect READ normalizedRect WRITE setNormalizedRect NOTIFY normalizedRectChanged) + Q_PROPERTY(float gamma READ gamma WRITE setGamma NOTIFY gammaChanged) public: explicit QViewport(Qt3DCore::QNode *parent = nullptr); ~QViewport(); QRectF normalizedRect() const; + float gamma() const; public Q_SLOTS: void setNormalizedRect(const QRectF& normalizedRect); + void setGamma(float gamma); Q_SIGNALS: void normalizedRectChanged(const QRectF& normalizedRect); + void gammaChanged(float gamma); protected: explicit QViewport(QViewportPrivate &dd, Qt3DCore::QNode *parent = nullptr); diff --git a/src/render/framegraph/qviewport_p.h b/src/render/framegraph/qviewport_p.h index 790cd3d06..4c82f38b3 100644 --- a/src/render/framegraph/qviewport_p.h +++ b/src/render/framegraph/qviewport_p.h @@ -67,11 +67,13 @@ public : Q_DECLARE_PUBLIC(QViewport) QRectF m_normalizedRect; QColor m_clearColor; + float m_gamma; }; struct QViewportData { QRectF normalizedRect; + float gamma; }; } // namespace Qt3DRender diff --git a/src/render/framegraph/viewportnode.cpp b/src/render/framegraph/viewportnode.cpp index ccdb68918..c16a660b0 100644 --- a/src/render/framegraph/viewportnode.cpp +++ b/src/render/framegraph/viewportnode.cpp @@ -55,6 +55,7 @@ ViewportNode::ViewportNode() , m_yMin(0.0f) , m_xMax(1.0f) , m_yMax(1.0f) + , m_gamma(2.2f) { } @@ -67,6 +68,7 @@ void ViewportNode::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr m_xMax = data.normalizedRect.width(); m_yMin = data.normalizedRect.y(); m_yMax = data.normalizedRect.height(); + m_gamma = data.gamma; } float ViewportNode::xMin() const @@ -106,6 +108,16 @@ void ViewportNode::setYMax(float yMax) m_yMax = yMax; } +float ViewportNode::gamma() const +{ + return m_gamma; +} + +void ViewportNode::setGamma(float gamma) +{ + m_gamma = gamma; +} + void ViewportNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { if (e->type() == PropertyUpdated) { @@ -116,6 +128,8 @@ void ViewportNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) setYMin(normalizedRect.y()); setXMax(normalizedRect.width()); setYMax(normalizedRect.height()); + } else if (propertyChange->propertyName() == QByteArrayLiteral("gamma")) { + setGamma(propertyChange->value().toFloat()); } markDirty(AbstractRenderer::AllDirty); } diff --git a/src/render/framegraph/viewportnode_p.h b/src/render/framegraph/viewportnode_p.h index 882aa4d86..85003ff36 100644 --- a/src/render/framegraph/viewportnode_p.h +++ b/src/render/framegraph/viewportnode_p.h @@ -81,6 +81,9 @@ public: float yMax() const; void setYMax(float yMax); + float gamma() const; + void setGamma(float gamma); + void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; private: @@ -90,6 +93,7 @@ private: float m_yMin; float m_xMax; float m_yMax; + float m_gamma; }; QRectF computeViewport(const QRectF &childViewport, const ViewportNode *parentViewport); |