diff options
author | Wieland Hagen <wieland.hagen@kdab.com> | 2017-06-29 17:06:50 +0200 |
---|---|---|
committer | Wieland Hagen <wieland.hagen@kdab.com> | 2017-07-06 16:08:43 +0000 |
commit | 06fa003da1dc6bc16616f3e687de8513d8b40a1c (patch) | |
tree | 4d5088a4065f3ae57a631c8981348bb30ad5f2f9 /src/render/renderstates | |
parent | 3c8d12a6aa46d49f4210ad3645da2b32901705fc (diff) |
Add QLineWidth::smoothed property
to enable/disable GL_LINE_SMOOTH
Change-Id: I8ca3666c150457b8c207096675c3030192b23842
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/renderstates')
-rw-r--r-- | src/render/renderstates/qlinewidth.cpp | 16 | ||||
-rw-r--r-- | src/render/renderstates/qlinewidth.h | 4 | ||||
-rw-r--r-- | src/render/renderstates/qlinewidth_p.h | 3 | ||||
-rw-r--r-- | src/render/renderstates/renderstates.cpp | 12 | ||||
-rw-r--r-- | src/render/renderstates/renderstates_p.h | 2 | ||||
-rw-r--r-- | src/render/renderstates/renderstateset.cpp | 2 |
6 files changed, 37 insertions, 2 deletions
diff --git a/src/render/renderstates/qlinewidth.cpp b/src/render/renderstates/qlinewidth.cpp index 5f85406a0..f5ef04ebb 100644 --- a/src/render/renderstates/qlinewidth.cpp +++ b/src/render/renderstates/qlinewidth.cpp @@ -95,12 +95,28 @@ void QLineWidth::setValue(float width) emit valueChanged(width); } +bool QLineWidth::smooth() const +{ + Q_D(const QLineWidth); + return d->m_smooth; +} + +void QLineWidth::setSmooth(bool enabled) +{ + Q_D(QLineWidth); + if (d->m_smooth != enabled) { + d->m_smooth = enabled; + emit smoothChanged(enabled); + } +} + Qt3DCore::QNodeCreatedChangeBasePtr QLineWidth::createNodeCreationChange() const { auto creationChange = QRenderStateCreatedChangePtr<QLineWidthData>::create(this); auto &data = creationChange->data; Q_D(const QLineWidth); data.value = d->m_value; + data.smooth = d->m_smooth; return creationChange; } diff --git a/src/render/renderstates/qlinewidth.h b/src/render/renderstates/qlinewidth.h index c198981aa..08b395982 100644 --- a/src/render/renderstates/qlinewidth.h +++ b/src/render/renderstates/qlinewidth.h @@ -51,18 +51,22 @@ class QT3DRENDERSHARED_EXPORT QLineWidth : public QRenderState { Q_OBJECT Q_PROPERTY(float value READ value WRITE setValue NOTIFY valueChanged) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged) public: explicit QLineWidth(Qt3DCore::QNode *parent = nullptr); ~QLineWidth(); float value() const; + bool smooth() const; public Q_SLOTS: void setValue(float value); + void setSmooth(bool enabled); Q_SIGNALS: void valueChanged(float value); + void smoothChanged(bool enabled); private: Q_DECLARE_PRIVATE(QLineWidth) diff --git a/src/render/renderstates/qlinewidth_p.h b/src/render/renderstates/qlinewidth_p.h index c1c37e9d8..bffa9ac1e 100644 --- a/src/render/renderstates/qlinewidth_p.h +++ b/src/render/renderstates/qlinewidth_p.h @@ -61,9 +61,11 @@ public: QLineWidthPrivate(float value) : QRenderStatePrivate(Render::LineWidthMask) , m_value(value) + , m_smooth(false) {} float m_value; + bool m_smooth; Q_DECLARE_PUBLIC(QLineWidth) }; @@ -71,6 +73,7 @@ public: struct QLineWidthData { float value; + bool smooth; }; } // namespace Qt3DRender diff --git a/src/render/renderstates/renderstates.cpp b/src/render/renderstates/renderstates.cpp index 9f2735b25..d94191a13 100644 --- a/src/render/renderstates/renderstates.cpp +++ b/src/render/renderstates/renderstates.cpp @@ -269,8 +269,18 @@ void StencilMask::updateProperty(const char *name, const QVariant &value) else if (name == QByteArrayLiteral("backMask")) std::get<1>(m_values) = value.toInt(); } +#ifndef GL_LINE_SMOOTH +#define GL_LINE_SMOOTH 0x0B20 +#endif + void LineWidth::apply(GraphicsContext *gc) const { + if (std::get<1>(m_values)) + gc->openGLContext()->functions()->glEnable(GL_LINE_SMOOTH); + else + gc->openGLContext()->functions()->glDisable(GL_LINE_SMOOTH); + + gc->activateGLHelper(); gc->openGLContext()->functions()->glLineWidth(std::get<0>(m_values)); } @@ -278,6 +288,8 @@ void LineWidth::updateProperty(const char *name, const QVariant &value) { if (name == QByteArrayLiteral("value")) std::get<0>(m_values) = value.toFloat(); + else if (name == QByteArrayLiteral("smooth")) + std::get<1>(m_values) = value.toBool(); } } // namespace Render diff --git a/src/render/renderstates/renderstates_p.h b/src/render/renderstates/renderstates_p.h index 98701b335..b503067a9 100644 --- a/src/render/renderstates/renderstates_p.h +++ b/src/render/renderstates/renderstates_p.h @@ -187,7 +187,7 @@ public: void updateProperty(const char *name, const QVariant &value) Q_DECL_OVERRIDE; }; -class Q_AUTOTEST_EXPORT LineWidth : public GenericState<LineWidth, LineWidthMask, GLfloat> +class Q_AUTOTEST_EXPORT LineWidth : public GenericState<LineWidth, LineWidthMask, GLfloat, bool> { public: void apply(GraphicsContext *gc) const Q_DECL_FINAL; diff --git a/src/render/renderstates/renderstateset.cpp b/src/render/renderstates/renderstateset.cpp index dd5f881d8..4166d41b0 100644 --- a/src/render/renderstates/renderstateset.cpp +++ b/src/render/renderstates/renderstateset.cpp @@ -376,7 +376,7 @@ StateVariant RenderStateSet::initializeStateFromPeer(const Qt3DRender::QRenderSt case LineWidthMask: { const auto typedChange = qSharedPointerCast<Qt3DRender::QRenderStateCreatedChange<QLineWidthData>>(change); const auto &data = typedChange->data; - return RenderStateSet::createState<LineWidth>(data.value); + return RenderStateSet::createState<LineWidth>(data.value, data.smooth); } // TODO: Fix Dithering state |