diff options
author | Wieland Hagen <wieland.hagen@kdab.com> | 2017-07-26 16:24:38 +0200 |
---|---|---|
committer | Wieland Hagen <wieland.hagen@kdab.com> | 2017-08-03 15:57:11 +0000 |
commit | b962002123dfe8b2525edadc3e8f8a018470e93f (patch) | |
tree | 6834ecc1c9273ca60cc4870cb4f8ed4e4ed807bd /src/render/renderstates/renderstates.cpp | |
parent | ada47e47ef2e23feb334183d808cd6294aa69739 (diff) |
Implement property updates for QStencilTest and QStencilOperation
Make sure to catch all changed signals from the arguments classes and
re-send the arguments to the backend.
Change-Id: I0a5e2f42fce4c5ff81489d8a66ad277aa607db0c
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/renderstates/renderstates.cpp')
-rw-r--r-- | src/render/renderstates/renderstates.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/render/renderstates/renderstates.cpp b/src/render/renderstates/renderstates.cpp index 3c43252a0..d5f0f46e7 100644 --- a/src/render/renderstates/renderstates.cpp +++ b/src/render/renderstates/renderstates.cpp @@ -46,6 +46,8 @@ #include <Qt3DRender/qpointsize.h> #include <Qt3DRender/private/graphicscontext_p.h> +#include <Qt3DRender/private/qstenciloperation_p.h> +#include <Qt3DRender/private/qstenciltest_p.h> QT_BEGIN_NAMESPACE @@ -201,6 +203,19 @@ void StencilTest::apply(GraphicsContext *gc) const gc->openGLContext()->functions()->glStencilFuncSeparate(GL_BACK, std::get<3>(m_values), std::get<4>(m_values), std::get<5>(m_values)); } +void StencilTest::updateProperty(const char *name, const QVariant &value) +{ + if (name == QByteArrayLiteral("arguments")) { + const QStencilTestData data = value.value<QStencilTestData>(); + std::get<0>(m_values) = data.front.stencilFunction; + std::get<1>(m_values) = data.front.referenceValue; + std::get<2>(m_values) = data.front.comparisonMask; + std::get<3>(m_values) = data.back.stencilFunction; + std::get<4>(m_values) = data.back.referenceValue; + std::get<5>(m_values) = data.back.comparisonMask; + } +} + void AlphaCoverage::apply(GraphicsContext *gc) const { gc->setAlphaCoverageEnabled(true); @@ -266,6 +281,19 @@ void StencilOp::apply(GraphicsContext *gc) const gc->openGLContext()->functions()->glStencilOpSeparate(GL_BACK, std::get<3>(m_values), std::get<4>(m_values), std::get<5>(m_values)); } +void StencilOp::updateProperty(const char *name, const QVariant &value) +{ + if (name == QByteArrayLiteral("arguments")) { + const QStencilOperationData data = value.value<QStencilOperationData>(); + std::get<0>(m_values) = data.front.stencilTestFailureOperation; + std::get<1>(m_values) = data.front.depthTestFailureOperation; + std::get<2>(m_values) = data.front.allTestsPassOperation; + std::get<3>(m_values) = data.back.stencilTestFailureOperation; + std::get<4>(m_values) = data.back.depthTestFailureOperation; + std::get<5>(m_values) = data.back.allTestsPassOperation; + } +} + void StencilMask::apply(GraphicsContext *gc) const { gc->openGLContext()->functions()->glStencilMaskSeparate(GL_FRONT, std::get<0>(m_values)); |