mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-04 03:46:42 +01:00
Small Blending logic fix for opengl backend
This commit is contained in:
parent
b2575c6280
commit
246907d371
@ -951,8 +951,8 @@ void Renderer::SetBlendMode(bool forceUpdate)
|
|||||||
GL_ONE,
|
GL_ONE,
|
||||||
GL_DST_COLOR,
|
GL_DST_COLOR,
|
||||||
GL_ONE_MINUS_DST_COLOR,
|
GL_ONE_MINUS_DST_COLOR,
|
||||||
GL_SRC_ALPHA,
|
(useDualSource) ? GL_SRC1_ALPHA : GL_SRC_ALPHA,
|
||||||
GL_ONE_MINUS_SRC_ALPHA, // NOTE: If dual-source blending is enabled, use SRC1_ALPHA
|
(useDualSource) ? GL_ONE_MINUS_SRC1_ALPHA : GL_ONE_MINUS_SRC_ALPHA,
|
||||||
(target_has_alpha) ? GL_DST_ALPHA : (GLenum)GL_ONE,
|
(target_has_alpha) ? GL_DST_ALPHA : (GLenum)GL_ONE,
|
||||||
(target_has_alpha) ? GL_ONE_MINUS_DST_ALPHA : (GLenum)GL_ZERO
|
(target_has_alpha) ? GL_ONE_MINUS_DST_ALPHA : (GLenum)GL_ZERO
|
||||||
};
|
};
|
||||||
@ -962,8 +962,8 @@ void Renderer::SetBlendMode(bool forceUpdate)
|
|||||||
GL_ONE,
|
GL_ONE,
|
||||||
GL_SRC_COLOR,
|
GL_SRC_COLOR,
|
||||||
GL_ONE_MINUS_SRC_COLOR,
|
GL_ONE_MINUS_SRC_COLOR,
|
||||||
GL_SRC_ALPHA,
|
(useDualSource) ? GL_SRC1_ALPHA : GL_SRC_ALPHA,
|
||||||
GL_ONE_MINUS_SRC_ALPHA, // NOTE: If dual-source blending is enabled, use SRC1_ALPHA
|
(useDualSource) ? GL_ONE_MINUS_SRC1_ALPHA : GL_ONE_MINUS_SRC_ALPHA,
|
||||||
(target_has_alpha) ? GL_DST_ALPHA : (GLenum)GL_ONE,
|
(target_has_alpha) ? GL_DST_ALPHA : (GLenum)GL_ONE,
|
||||||
(target_has_alpha) ? GL_ONE_MINUS_DST_ALPHA : (GLenum)GL_ZERO
|
(target_has_alpha) ? GL_ONE_MINUS_DST_ALPHA : (GLenum)GL_ZERO
|
||||||
};
|
};
|
||||||
@ -1004,30 +1004,33 @@ void Renderer::SetBlendMode(bool forceUpdate)
|
|||||||
|
|
||||||
if (changes & 0x1FA)
|
if (changes & 0x1FA)
|
||||||
{
|
{
|
||||||
GLenum srcFactor = glSrcFactors[(newval >> 3) & 7];
|
u32 srcidx = (newval >> 3) & 7;
|
||||||
GLenum dstFactor = glDestFactors[(newval >> 6) & 7];
|
u32 dstidx = (newval >> 6) & 7;
|
||||||
GLenum srcFactorAlpha = srcFactor;
|
GLenum srcFactor = glSrcFactors[srcidx];
|
||||||
GLenum dstFactorAlpha = dstFactor;
|
GLenum dstFactor = glDestFactors[dstidx];
|
||||||
if (useDualSource)
|
if (useDualSource)
|
||||||
{
|
{
|
||||||
srcFactorAlpha = GL_ONE;
|
srcidx = 1;
|
||||||
dstFactorAlpha = GL_ZERO;
|
dstidx = 0;
|
||||||
|
|
||||||
if (srcFactor == GL_SRC_ALPHA)
|
|
||||||
srcFactor = GL_SRC1_ALPHA;
|
|
||||||
else if (srcFactor == GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
srcFactor = GL_ONE_MINUS_SRC1_ALPHA;
|
|
||||||
|
|
||||||
if (dstFactor == GL_SRC_ALPHA)
|
|
||||||
dstFactor = GL_SRC1_ALPHA;
|
|
||||||
else if (dstFactor == GL_ONE_MINUS_SRC_ALPHA)
|
|
||||||
dstFactor = GL_ONE_MINUS_SRC1_ALPHA;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// we can't use GL_DST_COLOR or GL_ONE_MINUS_DST_COLOR for source in alpha channel so use their alpha equivalent instead
|
||||||
|
if (srcidx == 2 || srcidx == 3)
|
||||||
|
{
|
||||||
|
srcidx += 4;
|
||||||
|
}
|
||||||
|
// we can't use GL_SRC_COLOR or GL_ONE_MINUS_SRC_COLOR for destination in alpha channel so use their alpha equivalent instead
|
||||||
|
if (dstidx == 2 || dstidx == 3)
|
||||||
|
{
|
||||||
|
dstidx += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GLenum srcFactorAlpha = glSrcFactors[srcidx];
|
||||||
|
GLenum dstFactorAlpha = glDestFactors[dstidx];
|
||||||
// blend RGB change
|
// blend RGB change
|
||||||
glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha);
|
glBlendFuncSeparate(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_blendMode = newval;
|
s_blendMode = newval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user