aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Window.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Window.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Window.cs40
1 files changed, 28 insertions, 12 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Window.cs b/Ryujinx.Graphics.OpenGL/Window.cs
index 26fc6a64..2689a7c4 100644
--- a/Ryujinx.Graphics.OpenGL/Window.cs
+++ b/Ryujinx.Graphics.OpenGL/Window.cs
@@ -22,15 +22,30 @@ namespace Ryujinx.Graphics.OpenGL
public void Present(ITexture texture, ImageCrop crop)
{
- TextureView view = (TextureView)texture;
-
GL.Disable(EnableCap.FramebufferSrgb);
+ CopyTextureToFrameBufferRGB(0, GetCopyFramebufferHandleLazy(), (TextureView)texture, crop);
+
+ GL.Enable(EnableCap.FramebufferSrgb);
+ }
+
+ public void SetSize(int width, int height)
+ {
+ _width = width;
+ _height = height;
+ }
+
+
+ private void CopyTextureToFrameBufferRGB(int drawFramebuffer, int readFramebuffer, TextureView view, ImageCrop crop)
+ {
+ bool[] oldFramebufferColorWritemask = new bool[4];
+
int oldReadFramebufferHandle = GL.GetInteger(GetPName.ReadFramebufferBinding);
int oldDrawFramebufferHandle = GL.GetInteger(GetPName.DrawFramebufferBinding);
+ GL.GetBoolean(GetIndexedPName.ColorWritemask, drawFramebuffer, oldFramebufferColorWritemask);
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, 0);
- GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, GetCopyFramebufferHandleLazy());
+ GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, drawFramebuffer);
+ GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, readFramebuffer);
GL.FramebufferTexture(
FramebufferTarget.ReadFramebuffer,
@@ -93,16 +108,17 @@ namespace Ryujinx.Graphics.OpenGL
ClearBufferMask.ColorBufferBit,
BlitFramebufferFilter.Linear);
+ // Remove Alpha channel
+ GL.ColorMask(drawFramebuffer, false, false, false, true);
+ GL.ClearBuffer(ClearBuffer.Color, 0, new float[] { 0.0f, 0.0f, 0.0f, 1.0f });
+ GL.ColorMask(drawFramebuffer,
+ oldFramebufferColorWritemask[0],
+ oldFramebufferColorWritemask[1],
+ oldFramebufferColorWritemask[2],
+ oldFramebufferColorWritemask[3]);
+
GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, oldReadFramebufferHandle);
GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, oldDrawFramebufferHandle);
-
- GL.Enable(EnableCap.FramebufferSrgb);
- }
-
- public void SetSize(int width, int height)
- {
- _width = width;
- _height = height;
}
private int GetCopyFramebufferHandleLazy()