summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2018-02-14 17:24:50 +0000
committerMike Krus <mike.krus@kdab.com>2018-03-08 15:10:36 +0000
commit1efca1346faa65989e3f500e7d16dfee151dc4a4 (patch)
tree923454275fb168eb43945d5a9ed0602bc1a8a6cb
parent0a9f5004691cc547b622a9c89cf217809c64e98c (diff)
Enable alpha blending on QTextureMaterial
Change-Id: I8466ccd47f8bda9fec184f548a2df7807d456ac7 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/extras/defaults/qtexturematerial.cpp51
-rw-r--r--src/extras/defaults/qtexturematerial.h5
-rw-r--r--src/extras/defaults/qtexturematerial_p.h6
-rw-r--r--src/quick3d/imports/extras/qt3dquick3dextrasplugin.cpp1
4 files changed, 63 insertions, 0 deletions
diff --git a/src/extras/defaults/qtexturematerial.cpp b/src/extras/defaults/qtexturematerial.cpp
index 6d57f3a49..5545f2018 100644
--- a/src/extras/defaults/qtexturematerial.cpp
+++ b/src/extras/defaults/qtexturematerial.cpp
@@ -48,6 +48,9 @@
#include <Qt3DRender/qparameter.h>
#include <Qt3DRender/qrenderpass.h>
#include <Qt3DRender/qgraphicsapifilter.h>
+#include <Qt3DRender/qblendequation.h>
+#include <Qt3DRender/qblendequationarguments.h>
+#include <Qt3DRender/qnodepthmask.h>
#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -69,6 +72,9 @@ QTextureMaterialPrivate::QTextureMaterialPrivate()
, m_textureES2RenderPass(new QRenderPass)
, m_textureGL3Shader(new QShaderProgram)
, m_textureGL2ES2Shader(new QShaderProgram)
+ , m_noDepthMask(new QNoDepthMask())
+ , m_blendState(new QBlendEquationArguments())
+ , m_blendEquation(new QBlendEquation())
, m_filterKey(new QFilterKey)
{
}
@@ -100,6 +106,13 @@ void QTextureMaterialPrivate::init()
m_textureES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_textureES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_noDepthMask->setEnabled(false);
+ m_blendState->setEnabled(false);
+ m_blendState->setSourceRgb(QBlendEquationArguments::SourceAlpha);
+ m_blendState->setDestinationRgb(QBlendEquationArguments::OneMinusSourceAlpha);
+ m_blendEquation->setEnabled(false);
+ m_blendEquation->setBlendFunction(QBlendEquation::Add);
+
Q_Q(QTextureMaterial);
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
@@ -113,6 +126,18 @@ void QTextureMaterialPrivate::init()
m_textureGL2RenderPass->setShaderProgram(m_textureGL2ES2Shader);
m_textureES2RenderPass->setShaderProgram(m_textureGL2ES2Shader);
+ m_textureGL3RenderPass->addRenderState(m_noDepthMask);
+ m_textureGL3RenderPass->addRenderState(m_blendState);
+ m_textureGL3RenderPass->addRenderState(m_blendEquation);
+
+ m_textureGL2RenderPass->addRenderState(m_noDepthMask);
+ m_textureGL2RenderPass->addRenderState(m_blendState);
+ m_textureGL2RenderPass->addRenderState(m_blendEquation);
+
+ m_textureES2RenderPass->addRenderState(m_noDepthMask);
+ m_textureES2RenderPass->addRenderState(m_blendState);
+ m_textureES2RenderPass->addRenderState(m_blendEquation);
+
m_textureGL3Technique->addRenderPass(m_textureGL3RenderPass);
m_textureGL2Technique->addRenderPass(m_textureGL2RenderPass);
m_textureES2Technique->addRenderPass(m_textureES2RenderPass);
@@ -231,6 +256,32 @@ void QTextureMaterial::setTextureTransform(const QMatrix3x3 &matrix)
d->m_textureTransformParameter->setValue(qVariantFromValue(matrix));
}
+/*!
+ \property QTextureMaterial::alphaBlending
+
+ Indicates if the alpha information coming from the diffuse property will
+ be taken into account during rendering. Defaults to false.
+*/
+/*!
+ \qmlproperty bool TextureMaterial::alphaBlending
+
+ Indicates if the alpha information coming from the diffuse property will
+ be taken into account during rendering. Defaults to false.
+*/
+bool QTextureMaterial::isAlphaBlendingEnabled() const
+{
+ Q_D(const QTextureMaterial);
+ return d->m_noDepthMask->isEnabled();
+}
+
+void QTextureMaterial::setAlphaBlendingEnabled(bool enabled)
+{
+ Q_D(QTextureMaterial);
+ d->m_noDepthMask->setEnabled(enabled);
+ d->m_blendState->setEnabled(enabled);
+ d->m_blendEquation->setEnabled(enabled);
+}
+
} // namespace Qt3DExtras
QT_END_NAMESPACE
diff --git a/src/extras/defaults/qtexturematerial.h b/src/extras/defaults/qtexturematerial.h
index c4fb43f50..4e36b1867 100644
--- a/src/extras/defaults/qtexturematerial.h
+++ b/src/extras/defaults/qtexturematerial.h
@@ -63,6 +63,8 @@ class QT3DEXTRASSHARED_EXPORT QTextureMaterial : public Qt3DRender::QMaterial
Q_PROPERTY(Qt3DRender::QAbstractTexture *texture READ texture WRITE setTexture NOTIFY textureChanged)
Q_PROPERTY(QVector2D textureOffset READ textureOffset WRITE setTextureOffset NOTIFY textureOffsetChanged)
Q_PROPERTY(QMatrix3x3 textureTransform READ textureTransform WRITE setTextureTransform NOTIFY textureTransformChanged REVISION 10)
+ Q_PROPERTY(bool alphaBlending READ isAlphaBlendingEnabled WRITE setAlphaBlendingEnabled NOTIFY alphaBlendingEnabledChanged REVISION 11)
+
public:
explicit QTextureMaterial(Qt3DCore::QNode *parent = nullptr);
~QTextureMaterial();
@@ -70,16 +72,19 @@ public:
Qt3DRender::QAbstractTexture *texture() const;
QVector2D textureOffset() const;
QMatrix3x3 textureTransform() const;
+ bool isAlphaBlendingEnabled() const;
public Q_SLOTS:
void setTexture(Qt3DRender::QAbstractTexture *texture);
void setTextureOffset(QVector2D textureOffset);
void setTextureTransform(const QMatrix3x3 &matrix);
+ void setAlphaBlendingEnabled(bool enabled);
Q_SIGNALS:
void textureChanged(Qt3DRender::QAbstractTexture *texture);
void textureOffsetChanged(QVector2D textureOffset);
void textureTransformChanged(const QMatrix3x3 &textureTransform);
+ void alphaBlendingEnabledChanged(bool enabled);
private:
Q_DECLARE_PRIVATE(QTextureMaterial)
diff --git a/src/extras/defaults/qtexturematerial_p.h b/src/extras/defaults/qtexturematerial_p.h
index d09458aa3..09d5e2311 100644
--- a/src/extras/defaults/qtexturematerial_p.h
+++ b/src/extras/defaults/qtexturematerial_p.h
@@ -66,6 +66,9 @@ class QTechnique;
class QParameter;
class QShaderProgram;
class QRenderPass;
+class QNoDepthMask;
+class QBlendEquationArguments;
+class QBlendEquation;
} // namespace Qt3DRender
@@ -93,6 +96,9 @@ class QTextureMaterialPrivate : public Qt3DRender::QMaterialPrivate
Qt3DRender::QRenderPass *m_textureES2RenderPass;
Qt3DRender::QShaderProgram *m_textureGL3Shader;
Qt3DRender::QShaderProgram *m_textureGL2ES2Shader;
+ Qt3DRender::QNoDepthMask *m_noDepthMask;
+ Qt3DRender::QBlendEquationArguments *m_blendState;
+ Qt3DRender::QBlendEquation *m_blendEquation;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QTextureMaterial)
diff --git a/src/quick3d/imports/extras/qt3dquick3dextrasplugin.cpp b/src/quick3d/imports/extras/qt3dquick3dextrasplugin.cpp
index e893696ec..9a3e76923 100644
--- a/src/quick3d/imports/extras/qt3dquick3dextrasplugin.cpp
+++ b/src/quick3d/imports/extras/qt3dquick3dextrasplugin.cpp
@@ -109,6 +109,7 @@ void Qt3DQuick3DExtrasPlugin::registerTypes(const char *uri)
qmlRegisterType<Qt3DExtras::QGoochMaterial>(uri, 2, 0, "GoochMaterial");
qmlRegisterType<Qt3DExtras::QTextureMaterial>(uri, 2, 0, "TextureMaterial");
qmlRegisterRevision<Qt3DExtras::QTextureMaterial, 10>(uri, 2, 10);
+ qmlRegisterRevision<Qt3DExtras::QTextureMaterial, 11>(uri, 2, 11);
qmlRegisterType<Qt3DExtras::QDiffuseSpecularMaterial>(uri, 2, 10, "DiffuseSpecularMaterial");
qmlRegisterType<Qt3DExtras::QMetalRoughMaterial>(uri, 2, 9, "MetalRoughMaterial");
qmlRegisterRevision<Qt3DExtras::QMetalRoughMaterial, 10>(uri, 2, 10);