diff options
author | gdkchan <gab.dark.100@gmail.com> | 2020-10-12 21:50:41 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-12 21:50:41 -0300 |
commit | 6a51b628f910deb6356974c2eb6fb2dba1dfdb34 (patch) | |
tree | 9ed7b7825f41aaf3e88f0e6c69a080e5b0038bc0 /Ryujinx.Graphics.OpenGL/Pipeline.cs | |
parent | e4777717cdf70c61365494cdb91568172fa5bfe8 (diff) |
Fix error when dual source blend is used (#1610)
* Fix error when dual source blend is used
* Ensure framebuffer
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Pipeline.cs')
-rw-r--r-- | Ryujinx.Graphics.OpenGL/Pipeline.cs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index 78e37ed6..5e754d80 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -557,6 +557,32 @@ namespace Ryujinx.Graphics.OpenGL (BlendingFactorSrc)blend.AlphaSrcFactor.Convert(), (BlendingFactorDest)blend.AlphaDstFactor.Convert()); + static bool IsDualSource(BlendFactor factor) + { + switch (factor) + { + case BlendFactor.Src1Color: + case BlendFactor.Src1ColorGl: + case BlendFactor.Src1Alpha: + case BlendFactor.Src1AlphaGl: + case BlendFactor.OneMinusSrc1Color: + case BlendFactor.OneMinusSrc1ColorGl: + case BlendFactor.OneMinusSrc1Alpha: + case BlendFactor.OneMinusSrc1AlphaGl: + return true; + } + + return false; + } + + EnsureFramebuffer(); + + _framebuffer.SetDualSourceBlend( + IsDualSource(blend.ColorSrcFactor) || + IsDualSource(blend.ColorDstFactor) || + IsDualSource(blend.AlphaSrcFactor) || + IsDualSource(blend.AlphaDstFactor)); + if (_blendConstant != blend.BlendConstant) { _blendConstant = blend.BlendConstant; |