From c9fbf79d6a82e9ae96a7d55222a984abe8e74295 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Fri, 17 Jul 2026 11:42:42 -0400 Subject: [PATCH] [Fix] (MG_Backend/DirectGLES): blend equations were never synced to the driver (OIT's GL_MAX ran as ADD); diff and emit glBlendEquationSeparate(i) alongside the factor sync --- MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp index bf16906f..0f52966f 100644 --- a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp +++ b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp @@ -719,6 +719,50 @@ namespace MobileGL::MG_Backend::DirectGLES { } } } + + Bool allEquationsSame = true; + Bool anyEquationDirty = false; + + for (Uint i = 0; i < FBO::MAX_DRAW_BUFFERS; ++i) { + const auto& cur = targetStates[i]; + const auto& syn = syncedStates[i]; + + if (cur.ColorEquation != syn.ColorEquation || cur.AlphaEquation != syn.AlphaEquation) { + anyEquationDirty = true; + } + + if (allEquationsSame && i > 0) { + if (cur.ColorEquation != first.ColorEquation || cur.AlphaEquation != first.AlphaEquation) { + allEquationsSame = false; + } + } + } + + if (anyEquationDirty) { + if (allEquationsSame) { + g_GLESFuncs.glBlendEquationSeparate(MG_Util::ConvertBlendEquationToGLEnum(first.ColorEquation), + MG_Util::ConvertBlendEquationToGLEnum(first.AlphaEquation)); + + for (auto& syn : syncedStates) { + syn.ColorEquation = first.ColorEquation; + syn.AlphaEquation = first.AlphaEquation; + } + } else { + for (Uint i = 0; i < FBO::MAX_DRAW_BUFFERS; ++i) { + const auto& cur = targetStates[i]; + auto& syn = syncedStates[i]; + + if (cur.ColorEquation != syn.ColorEquation || cur.AlphaEquation != syn.AlphaEquation) { + syn.ColorEquation = cur.ColorEquation; + syn.AlphaEquation = cur.AlphaEquation; + + g_GLESFuncs.glBlendEquationSeparatei( + i, MG_Util::ConvertBlendEquationToGLEnum(cur.ColorEquation), + MG_Util::ConvertBlendEquationToGLEnum(cur.AlphaEquation)); + } + } + } + } } { // Depth state