mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[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
This commit is contained in:
@@ -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
|
{ // Depth state
|
||||||
|
|||||||
Reference in New Issue
Block a user