diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-03-16 17:20:37 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-03-21 19:15:33 +0000 |
commit | acb32c488b9ad6802b3e8b0d4293ae15748fb65e (patch) | |
tree | 1c34613ce1c30e3b43f96d5f23c7662720e5af25 | |
parent | 002bb76d8c8c0c3188d9ce83888cde883627a629 (diff) |
QDepthMask transformed into QNoDepthMask
By default the absence of a QNoDepthMask node in a RenderStateSet implies
depth mask is enabled. Its presence, disables it.
Change-Id: Iaa22b6cee12ee76e64d66a00e97f8aadfa82398b
Task-number: QTBUG-51433
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
17 files changed, 54 insertions, 91 deletions
diff --git a/examples/qt3d/clip-planes-qml/PlaneVisualizationMaterial.qml b/examples/qt3d/clip-planes-qml/PlaneVisualizationMaterial.qml index 43c853ebc..72903c9d2 100644 --- a/examples/qt3d/clip-planes-qml/PlaneVisualizationMaterial.qml +++ b/examples/qt3d/clip-planes-qml/PlaneVisualizationMaterial.qml @@ -96,7 +96,7 @@ Material { renderPasses: RenderPass { shaderProgram: gl3PhongAlphaShader renderStates: [ - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha @@ -118,7 +118,7 @@ Material { renderPasses: RenderPass { shaderProgram: gl2es2PhongAlphaShader renderStates: [ - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha diff --git a/examples/qt3d/transparency-qml-scene3d/Scene.qml b/examples/qt3d/transparency-qml-scene3d/Scene.qml index 759846b68..618ecc519 100644 --- a/examples/qt3d/transparency-qml-scene3d/Scene.qml +++ b/examples/qt3d/transparency-qml-scene3d/Scene.qml @@ -160,7 +160,7 @@ Entity { renderStates: [ CullFace { mode : CullFace.Back }, DepthTest { depthFunction: DepthTest.Less }, - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha @@ -184,7 +184,7 @@ Entity { renderStates: [ CullFace { mode : CullFace.Back }, DepthTest { depthFunction: DepthTest.Less }, - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha diff --git a/examples/qt3d/transparency-qml/main.qml b/examples/qt3d/transparency-qml/main.qml index b9b88b26a..880e80875 100644 --- a/examples/qt3d/transparency-qml/main.qml +++ b/examples/qt3d/transparency-qml/main.qml @@ -173,7 +173,7 @@ Entity { renderStates: [ CullFace { mode : CullFace.Back }, DepthTest { depthFunction: DepthTest.Less }, - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha @@ -198,7 +198,7 @@ Entity { renderStates: [ CullFace { mode : CullFace.Back }, DepthTest { depthFunction: DepthTest.Less }, - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha diff --git a/examples/qt3d/wave/WaveEffect.qml b/examples/qt3d/wave/WaveEffect.qml index 5609e6def..cbdcd1a6d 100644 --- a/examples/qt3d/wave/WaveEffect.qml +++ b/examples/qt3d/wave/WaveEffect.qml @@ -94,7 +94,6 @@ Effect { // Disable depth testing and use simple additive blending renderStates: [ DepthTest { depthFunction: DepthTest.Always }, - DepthMask { mask: true }, BlendEquationArguments { sourceRgb: BlendEquationArguments.One destinationRgb: BlendEquationArguments.OneMinusSourceColor diff --git a/src/plugins/sceneparsers/gltf/gltfparser.cpp b/src/plugins/sceneparsers/gltf/gltfparser.cpp index 71dc23b22..b1167579a 100644 --- a/src/plugins/sceneparsers/gltf/gltfparser.cpp +++ b/src/plugins/sceneparsers/gltf/gltfparser.cpp @@ -58,7 +58,7 @@ #include <Qt3DRender/QBlendStateSeparate> #include <Qt3DRender/QColorMask> #include <Qt3DRender/QCullFace> -#include <Qt3DRender/QDepthMask> +#include <Qt3DRender/QNoDepthMask> #include <Qt3DRender/QDepthTest> #include <Qt3DRender/QEffect> #include <Qt3DRender/QFrontFace> @@ -1512,8 +1512,11 @@ QRenderState* GLTFParser::buildState(const QString& functionName, const QJsonVal } if (functionName == QStringLiteral("depthMask")) { - QDepthMask *depthMask = new QDepthMask; - depthMask->setMask(values.at(0).toBool(true)); + if (!values.at(0).toBool(true)) { + QNoDepthMask *depthMask = new QNoDepthMask; + return depthMask; + } + return Q_NULLPTR; } if (functionName == QStringLiteral("depthRange")) { diff --git a/src/quick3d/imports/render/defaults/qml/PhongAlphaMaterial.qml b/src/quick3d/imports/render/defaults/qml/PhongAlphaMaterial.qml index adccd7c04..295d8abd1 100644 --- a/src/quick3d/imports/render/defaults/qml/PhongAlphaMaterial.qml +++ b/src/quick3d/imports/render/defaults/qml/PhongAlphaMaterial.qml @@ -90,7 +90,7 @@ Material { renderPasses: RenderPass { shaderProgram: gl3PhongAlphaShader renderStates: [ - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha @@ -112,7 +112,7 @@ Material { renderPasses: RenderPass { shaderProgram: gl2es2PhongAlphaShader renderStates: [ - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha @@ -134,7 +134,7 @@ Material { renderPasses: RenderPass { shaderProgram: gl2es2PhongAlphaShader renderStates: [ - DepthMask { mask: false }, + NoDepthMask { }, BlendEquationArguments { sourceRgb: BlendEquationArguments.SourceAlpha destinationRgb: BlendEquationArguments.OneMinusSourceAlpha diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp index 98950e47c..d0147bfd4 100644 --- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp +++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp @@ -72,7 +72,7 @@ #include <Qt3DRender/qblendequation.h> #include <Qt3DRender/qalphatest.h> #include <Qt3DRender/qdepthtest.h> -#include <Qt3DRender/qdepthmask.h> +#include <Qt3DRender/qnodepthmask.h> #include <Qt3DRender/qcullface.h> #include <Qt3DRender/qfrontface.h> #include <Qt3DRender/qstenciltest.h> @@ -294,7 +294,7 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri) qmlRegisterType<Qt3DRender::QBlendEquation>(uri, 2, 0, "BlendEquation"); qmlRegisterType<Qt3DRender::QAlphaTest>(uri, 2, 0, "AlphaTest"); qmlRegisterType<Qt3DRender::QDepthTest>(uri, 2, 0, "DepthTest"); - qmlRegisterType<Qt3DRender::QDepthMask>(uri, 2, 0, "DepthMask"); + qmlRegisterType<Qt3DRender::QNoDepthMask>(uri, 2, 0, "NoDepthMask"); qmlRegisterType<Qt3DRender::QCullFace>(uri, 2, 0, "CullFace"); qmlRegisterType<Qt3DRender::QFrontFace>(uri, 2, 0, "FrontFace"); qmlRegisterUncreatableType<Qt3DRender::QStencilTestArguments>(uri, 2, 0, "StencilTestArguments", QStringLiteral("QStencilTestArguments cannot be instantiated on its own")); diff --git a/src/render/defaults/qphongalphamaterial.cpp b/src/render/defaults/qphongalphamaterial.cpp index b48a7e7c6..858b58314 100644 --- a/src/render/defaults/qphongalphamaterial.cpp +++ b/src/render/defaults/qphongalphamaterial.cpp @@ -49,7 +49,7 @@ #include <Qt3DRender/qgraphicsapifilter.h> #include <Qt3DRender/qblendequation.h> #include <Qt3DRender/qblendequationarguments.h> -#include <Qt3DRender/qdepthmask.h> +#include <Qt3DRender/qnodepthmask.h> #include <QUrl> #include <QVector3D> #include <QVector4D> @@ -74,7 +74,7 @@ QPhongAlphaMaterialPrivate::QPhongAlphaMaterialPrivate() , m_phongAlphaES2RenderPass(new QRenderPass()) , m_phongAlphaGL3Shader(new QShaderProgram()) , m_phongAlphaGL2ES2Shader(new QShaderProgram()) - , m_depthMask(new QDepthMask()) + , m_noDepthMask(new QNoDepthMask()) , m_blendState(new QBlendEquationArguments()) , m_blendEquation(new QBlendEquation()) , m_filterKey(new QFilterKey) @@ -124,8 +124,6 @@ void QPhongAlphaMaterialPrivate::init() m_phongAlphaGL2Technique->addFilterKey(m_filterKey); m_phongAlphaES2Technique->addFilterKey(m_filterKey); - m_depthMask->setMask(false); - m_blendState->setSourceRgb(QBlendEquationArguments::SourceAlpha); m_blendState->setDestinationRgb(QBlendEquationArguments::OneMinusSourceAlpha); m_blendEquation->setBlendFunction(QBlendEquation::Add); @@ -134,15 +132,15 @@ void QPhongAlphaMaterialPrivate::init() m_phongAlphaGL2RenderPass->setShaderProgram(m_phongAlphaGL2ES2Shader); m_phongAlphaES2RenderPass->setShaderProgram(m_phongAlphaGL2ES2Shader); - m_phongAlphaGL3RenderPass->addRenderState(m_depthMask); + m_phongAlphaGL3RenderPass->addRenderState(m_noDepthMask); m_phongAlphaGL3RenderPass->addRenderState(m_blendState); m_phongAlphaGL3RenderPass->addRenderState(m_blendEquation); - m_phongAlphaGL2RenderPass->addRenderState(m_depthMask); + m_phongAlphaGL2RenderPass->addRenderState(m_noDepthMask); m_phongAlphaGL2RenderPass->addRenderState(m_blendState); m_phongAlphaGL2RenderPass->addRenderState(m_blendEquation); - m_phongAlphaES2RenderPass->addRenderState(m_depthMask); + m_phongAlphaES2RenderPass->addRenderState(m_noDepthMask); m_phongAlphaES2RenderPass->addRenderState(m_blendState); m_phongAlphaES2RenderPass->addRenderState(m_blendEquation); diff --git a/src/render/defaults/qphongalphamaterial_p.h b/src/render/defaults/qphongalphamaterial_p.h index dc3cc729d..4b420d487 100644 --- a/src/render/defaults/qphongalphamaterial_p.h +++ b/src/render/defaults/qphongalphamaterial_p.h @@ -64,7 +64,7 @@ class QParameter; class QShaderProgram; class QRenderPass; class QParameterMapping; -class QDepthMask; +class QNoDepthMask; class QBlendEquationArguments; class QBlendEquation; @@ -97,7 +97,7 @@ public: QRenderPass *m_phongAlphaES2RenderPass; QShaderProgram *m_phongAlphaGL3Shader; QShaderProgram *m_phongAlphaGL2ES2Shader; - QDepthMask *m_depthMask; + QNoDepthMask *m_noDepthMask; QBlendEquationArguments *m_blendState; QBlendEquation *m_blendEquation; QFilterKey *m_filterKey; diff --git a/src/render/renderstates/qdepthmask.cpp b/src/render/renderstates/qnodepthmask.cpp index 2c3e0feab..1c3bc54a1 100644 --- a/src/render/renderstates/qdepthmask.cpp +++ b/src/render/renderstates/qnodepthmask.cpp @@ -38,7 +38,7 @@ ** ****************************************************************************/ -#include "qdepthmask.h" +#include "qnodepthmask.h" #include "qrenderstate_p.h" #include <private/qnode_p.h> #include <Qt3DCore/qscenepropertychange.h> @@ -47,51 +47,27 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QDepthMaskPrivate : public QRenderStatePrivate +class QNoDepthMaskPrivate : public QRenderStatePrivate { public: - QDepthMaskPrivate() - : QRenderStatePrivate(QRenderStatePrivate::DepthMask) - , m_mask(false) + QNoDepthMaskPrivate() + : QRenderStatePrivate(QRenderStatePrivate::NoDepthMask) { } - Q_DECLARE_PUBLIC(QDepthMask) - bool m_mask; + Q_DECLARE_PUBLIC(QNoDepthMask) }; -QDepthMask::QDepthMask(QNode *parent) - : QRenderState(*new QDepthMaskPrivate, parent) +QNoDepthMask::QNoDepthMask(QNode *parent) + : QRenderState(*new QNoDepthMaskPrivate, parent) { } -QDepthMask::~QDepthMask() +QNoDepthMask::~QNoDepthMask() { QNode::cleanup(); } -void QDepthMask::copy(const QNode *ref) -{ - QRenderState::copy(ref); - const QDepthMask *refState = static_cast<const QDepthMask*>(ref); - d_func()->m_mask = refState->d_func()->m_mask; -} - -bool QDepthMask::mask() const -{ - Q_D(const QDepthMask); - return d->m_mask; -} - -void QDepthMask::setMask(bool mask) -{ - Q_D(QDepthMask); - if (d->m_mask != mask) { - d->m_mask = mask; - emit maskChanged(mask); - } -} - } // namespace Qt3DRender QT_END_NAMESPACE diff --git a/src/render/renderstates/qdepthmask.h b/src/render/renderstates/qnodepthmask.h index aa3673457..175300416 100644 --- a/src/render/renderstates/qdepthmask.h +++ b/src/render/renderstates/qnodepthmask.h @@ -38,8 +38,8 @@ ** ****************************************************************************/ -#ifndef QT3DRENDER_QDEPTHMASK_H -#define QT3DRENDER_QDEPTHMASK_H +#ifndef QT3DRENDER_QNODEPTHMASK_H +#define QT3DRENDER_QNODEPTHMASK_H #include <Qt3DRender/qrenderstate.h> @@ -47,34 +47,22 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { -class QDepthMaskPrivate; +class QNoDepthMaskPrivate; -class QT3DRENDERSHARED_EXPORT QDepthMask : public QRenderState +class QT3DRENDERSHARED_EXPORT QNoDepthMask : public QRenderState { Q_OBJECT - Q_PROPERTY (bool mask READ mask WRITE setMask NOTIFY maskChanged) public: - explicit QDepthMask(Qt3DCore::QNode *parent = 0); - ~QDepthMask(); - - bool mask() const; - -public Q_SLOTS: - void setMask(bool mask); - -Q_SIGNALS: - void maskChanged(bool mask); - -protected: - void copy(const Qt3DCore::QNode *ref) Q_DECL_OVERRIDE; + explicit QNoDepthMask(Qt3DCore::QNode *parent = Q_NULLPTR); + ~QNoDepthMask(); private: - Q_DECLARE_PRIVATE(QDepthMask) - QT3D_CLONEABLE(QDepthMask) + Q_DECLARE_PRIVATE(QNoDepthMask) + QT3D_CLONEABLE(QNoDepthMask) }; } // namespace Qt3DRender QT_END_NAMESPACE -#endif // QT3DRENDER_QDEPTHMASK_H +#endif // QT3DRENDER_QNODEPTHMASK_H diff --git a/src/render/renderstates/qrenderstate_p.h b/src/render/renderstates/qrenderstate_p.h index e69537678..c3cdd754c 100644 --- a/src/render/renderstates/qrenderstate_p.h +++ b/src/render/renderstates/qrenderstate_p.h @@ -71,7 +71,7 @@ public: BlendStateSeparate, ColorMask, CullFace, - DepthMask, + NoDepthMask, DepthTest, Dithering, FrontFace, diff --git a/src/render/renderstates/renderstates.cpp b/src/render/renderstates/renderstates.cpp index 5f3ac5c67..c8e1531a7 100644 --- a/src/render/renderstates/renderstates.cpp +++ b/src/render/renderstates/renderstates.cpp @@ -186,12 +186,12 @@ void FrontFace::updateProperty(const char *name, const QVariant &value) if (name == QByteArrayLiteral("direction")) m_1 = value.toInt(); } -void DepthMask::apply(GraphicsContext *gc) const +void NoDepthMask::apply(GraphicsContext *gc) const { gc->depthMask(m_1); } -void DepthMask::updateProperty(const char *name, const QVariant &value) +void NoDepthMask::updateProperty(const char *name, const QVariant &value) { if (name == QByteArrayLiteral("mask")) m_1 = value.toBool(); } diff --git a/src/render/renderstates/renderstates.pri b/src/render/renderstates/renderstates.pri index 4a8d0b6f2..58770410e 100644 --- a/src/render/renderstates/renderstates.pri +++ b/src/render/renderstates/renderstates.pri @@ -9,8 +9,6 @@ HEADERS += \ $$PWD/qclipplane.h \ $$PWD/qcolormask.h \ $$PWD/qcullface.h \ - $$PWD/qdepthmask.h \ - $$PWD/qdepthtest.h \ $$PWD/qdithering.h \ $$PWD/qfrontface.h \ $$PWD/qpolygonoffset.h \ @@ -26,7 +24,9 @@ HEADERS += \ $$PWD/renderstateset_p.h \ $$PWD/qpointsize.h \ $$PWD/renderstatecollection_p.h \ - $$PWD/qseamlesscubemap.h + $$PWD/qseamlesscubemap.h \ + $$PWD/qdepthtest.h \ + $$PWD/qnodepthmask.h SOURCES += \ @@ -37,7 +37,6 @@ SOURCES += \ $$PWD/qclipplane.cpp \ $$PWD/qcolormask.cpp \ $$PWD/qcullface.cpp \ - $$PWD/qdepthmask.cpp \ $$PWD/qdepthtest.cpp \ $$PWD/qdithering.cpp \ $$PWD/qfrontface.cpp \ @@ -53,4 +52,5 @@ SOURCES += \ $$PWD/renderstateset.cpp \ $$PWD/qpointsize.cpp \ $$PWD/renderstatecollection.cpp \ - $$PWD/qseamlesscubemap.cpp + $$PWD/qseamlesscubemap.cpp \ + $$PWD/qnodepthmask.cpp diff --git a/src/render/renderstates/renderstates_p.h b/src/render/renderstates/renderstates_p.h index 187efe011..aed7e2ee1 100644 --- a/src/render/renderstates/renderstates_p.h +++ b/src/render/renderstates/renderstates_p.h @@ -127,7 +127,7 @@ public: void updateProperty(const char *name, const QVariant &value) Q_DECL_OVERRIDE; }; -class Q_AUTOTEST_EXPORT DepthMask : public GenericState1<DepthMask, DepthWriteStateMask, GLboolean> +class Q_AUTOTEST_EXPORT NoDepthMask : public GenericState1<NoDepthMask, DepthWriteStateMask, GLboolean> { public: virtual void apply(GraphicsContext *gc) const Q_DECL_OVERRIDE; diff --git a/src/render/renderstates/renderstateset.cpp b/src/render/renderstates/renderstateset.cpp index 3ac9d7a57..601a5a7a3 100644 --- a/src/render/renderstates/renderstateset.cpp +++ b/src/render/renderstates/renderstateset.cpp @@ -55,7 +55,7 @@ #include <Qt3DRender/qblendequationarguments.h> #include <Qt3DRender/qcolormask.h> #include <Qt3DRender/qcullface.h> -#include <Qt3DRender/qdepthmask.h> +#include <Qt3DRender/qnodepthmask.h> #include <Qt3DRender/qdepthtest.h> #include <Qt3DRender/qdithering.h> #include <Qt3DRender/qfrontface.h> @@ -288,9 +288,8 @@ RenderStateImpl* RenderStateImpl::getOrCreateState(QRenderState *renderState) QCullFace *cullFace = static_cast<QCullFace *>(renderState); return getOrCreateRenderStateImpl<CullFace>(cullFace->mode()); } - case QRenderStatePrivate::DepthMask: { - QDepthMask *depthMask = static_cast<QDepthMask *>(renderState); - return getOrCreateRenderStateImpl<DepthMask>(depthMask->mask()); + case QRenderStatePrivate::NoDepthMask: { + return getOrCreateRenderStateImpl<NoDepthMask>(false); } case QRenderStatePrivate::DepthTest: { QDepthTest *depthTest = static_cast<QDepthTest *>(renderState); diff --git a/tests/auto/render/renderpass/tst_renderpass.cpp b/tests/auto/render/renderpass/tst_renderpass.cpp index b20751888..f24d272e0 100644 --- a/tests/auto/render/renderpass/tst_renderpass.cpp +++ b/tests/auto/render/renderpass/tst_renderpass.cpp @@ -42,7 +42,7 @@ #include <Qt3DRender/QBlendEquationArguments> #include <Qt3DRender/QColorMask> #include <Qt3DRender/QCullFace> -#include <Qt3DRender/QDepthMask> +#include <Qt3DRender/QNoDepthMask> #include <Qt3DRender/QDepthTest> #include <Qt3DRender/QDithering> #include <Qt3DRender/QFrontFace> |