From 1efca1346faa65989e3f500e7d16dfee151dc4a4 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Wed, 14 Feb 2018 17:24:50 +0000 Subject: Enable alpha blending on QTextureMaterial Change-Id: I8466ccd47f8bda9fec184f548a2df7807d456ac7 Reviewed-by: Paul Lemire --- src/extras/defaults/qtexturematerial.cpp | 51 ++++++++++++++++++++++ src/extras/defaults/qtexturematerial.h | 5 +++ src/extras/defaults/qtexturematerial_p.h | 6 +++ .../imports/extras/qt3dquick3dextrasplugin.cpp | 1 + 4 files changed, 63 insertions(+) (limited to 'src') 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 #include #include +#include +#include +#include #include 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(uri, 2, 0, "GoochMaterial"); qmlRegisterType(uri, 2, 0, "TextureMaterial"); qmlRegisterRevision(uri, 2, 10); + qmlRegisterRevision(uri, 2, 11); qmlRegisterType(uri, 2, 10, "DiffuseSpecularMaterial"); qmlRegisterType(uri, 2, 9, "MetalRoughMaterial"); qmlRegisterRevision(uri, 2, 10); -- cgit v1.2.3