summaryrefslogtreecommitdiffstats
path: root/src/render/renderstates/renderstates.cpp
diff options
context:
space:
mode:
authorWieland Hagen <wieland.hagen@kdab.com>2017-07-26 16:24:38 +0200
committerWieland Hagen <wieland.hagen@kdab.com>2017-08-03 15:57:11 +0000
commitb962002123dfe8b2525edadc3e8f8a018470e93f (patch)
tree6834ecc1c9273ca60cc4870cb4f8ed4e4ed807bd /src/render/renderstates/renderstates.cpp
parentada47e47ef2e23feb334183d808cd6294aa69739 (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.cpp28
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));