From c7fd92ab71dbeb8b70a85a9d1e920ffd55a45668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaj=20Gr=C3=B6nholm?= <kaj.gronholm@qt.io> Date: Thu, 16 Apr 2020 12:01:14 +0300 Subject: [PATCH] Reset default blend equation Combining sourceItem Textures and blendmodes which set blend equation caused GL state issues. So reset blend equation if needed. Task-number: QTBUG-83462 Change-Id: I9d852dabadf8da59f023e29b62702552a60137be Reviewed-by: Andy Nichols <andy.nichols@qt.io> --- src/render/qssgrendercontext.cpp | 13 +++++++++++++ src/render/qssgrendercontext_p.h | 1 + 2 files changed, 14 insertions(+) diff --git a/src/render/qssgrendercontext.cpp b/src/render/qssgrendercontext.cpp index 7377040df..eda5f5206 100644 --- a/src/render/qssgrendercontext.cpp +++ b/src/render/qssgrendercontext.cpp @@ -318,6 +318,16 @@ void QSSGRenderContext::setBlendEquation(QSSGRenderBlendEquationArgument inEquat m_backend->setBlendEquation(inEquations); } +void QSSGRenderContext::resetBlendEquation(bool forceSet) +{ + const QSSGRenderBlendEquationArgument defaultBlendEqua; + if (!forceSet && m_hardwarePropertyContext.m_blendEquation == defaultBlendEqua) + return; + + m_hardwarePropertyContext.m_blendEquation = defaultBlendEqua; + m_backend->setBlendEquation(defaultBlendEqua); +} + void QSSGRenderContext::setCullingEnabled(bool inEnabled, bool forceSet) { if (!forceSet && m_hardwarePropertyContext.m_cullingEnabled == inEnabled) @@ -669,6 +679,9 @@ bool QSSGRenderContext::applyPreDrawProperties() void QSSGRenderContext::onPostDraw() { + // Reset to default blend equation if needed + resetBlendEquation(); + // reset input assembler binding m_backend->setInputAssembler(nullptr, nullptr); // Texture unit 0 is used for setting up and loading textures. diff --git a/src/render/qssgrendercontext_p.h b/src/render/qssgrendercontext_p.h index 5701d4b10..1dfb2c92a 100644 --- a/src/render/qssgrendercontext_p.h +++ b/src/render/qssgrendercontext_p.h @@ -343,6 +343,7 @@ public: { return m_hardwarePropertyContext.m_blendEquation; } + void resetBlendEquation(bool forceSet = false); void setCullingEnabled(bool inEnabled, bool forceSet = false); bool isCullingEnabled() const { return m_hardwarePropertyContext.m_cullingEnabled; } -- GitLab