summaryrefslogtreecommitdiffstats
path: root/src/render/renderstates
diff options
context:
space:
mode:
authorWieland Hagen <wieland.hagen@kdab.com>2017-06-29 17:06:50 +0200
committerWieland Hagen <wieland.hagen@kdab.com>2017-07-06 16:08:43 +0000
commit06fa003da1dc6bc16616f3e687de8513d8b40a1c (patch)
tree4d5088a4065f3ae57a631c8981348bb30ad5f2f9 /src/render/renderstates
parent3c8d12a6aa46d49f4210ad3645da2b32901705fc (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.cpp16
-rw-r--r--src/render/renderstates/qlinewidth.h4
-rw-r--r--src/render/renderstates/qlinewidth_p.h3
-rw-r--r--src/render/renderstates/renderstates.cpp12
-rw-r--r--src/render/renderstates/renderstates_p.h2
-rw-r--r--src/render/renderstates/renderstateset.cpp2
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