summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-01-31 17:09:21 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-01-31 16:52:58 +0000
commit9ae12590ac965ca454b67c27f4411d71ad05ae86 (patch)
treebab852f45d8936604a91c9a514531613d9f4a8e6 /src/render
parent708720b8a1056aec2c62a3a2467a324d62a25ee1 (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.cpp34
-rw-r--r--src/render/framegraph/qviewport.h4
-rw-r--r--src/render/framegraph/qviewport_p.h2
-rw-r--r--src/render/framegraph/viewportnode.cpp14
-rw-r--r--src/render/framegraph/viewportnode_p.h4
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);