aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/TextureCopy.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2020-05-23 06:46:09 -0300
committerGitHub <noreply@github.com>2020-05-23 11:46:09 +0200
commit5011640b3086b86b0f0b39b60fdb2aa946d4f5c8 (patch)
tree1bd60b7714886dfe282ca1e52cfa6fca97912cdf /Ryujinx.Graphics.OpenGL/TextureCopy.cs
parentcc8dbdd3fb58a02e1c3fc3b9d0b1c35bc7b9d00f (diff)
Spanify Graphics Abstraction Layer (#1226)
* Spanify Graphics Abstraction Layer * Be explicit about BufferHandle size
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/TextureCopy.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/TextureCopy.cs150
1 files changed, 0 insertions, 150 deletions
diff --git a/Ryujinx.Graphics.OpenGL/TextureCopy.cs b/Ryujinx.Graphics.OpenGL/TextureCopy.cs
deleted file mode 100644
index 59db94a4..00000000
--- a/Ryujinx.Graphics.OpenGL/TextureCopy.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-using Ryujinx.Graphics.GAL;
-using OpenTK.Graphics.OpenGL;
-using System;
-
-namespace Ryujinx.Graphics.OpenGL
-{
- class TextureCopy : IDisposable
- {
- private readonly Renderer _renderer;
-
- private int _srcFramebuffer;
- private int _dstFramebuffer;
-
- public TextureCopy(Renderer renderer)
- {
- _renderer = renderer;
- }
-
- public void Copy(
- TextureView src,
- TextureView dst,
- Extents2D srcRegion,
- Extents2D dstRegion,
- bool linearFilter)
- {
- int oldReadFramebufferHandle = GL.GetInteger(GetPName.ReadFramebufferBinding);
- int oldDrawFramebufferHandle = GL.GetInteger(GetPName.DrawFramebufferBinding);
-
- GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, GetSrcFramebufferLazy());
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, GetDstFramebufferLazy());
-
- Attach(FramebufferTarget.ReadFramebuffer, src.Format, src.Handle);
- Attach(FramebufferTarget.DrawFramebuffer, dst.Format, dst.Handle);
-
- ClearBufferMask mask = GetMask(src.Format);
-
- BlitFramebufferFilter filter = linearFilter
- ? BlitFramebufferFilter.Linear
- : BlitFramebufferFilter.Nearest;
-
- GL.ReadBuffer(ReadBufferMode.ColorAttachment0);
- GL.DrawBuffer(DrawBufferMode.ColorAttachment0);
-
- GL.Disable(EnableCap.RasterizerDiscard);
- GL.Disable(IndexedEnableCap.ScissorTest, 0);
-
- GL.BlitFramebuffer(
- srcRegion.X1,
- srcRegion.Y1,
- srcRegion.X2,
- srcRegion.Y2,
- dstRegion.X1,
- dstRegion.Y1,
- dstRegion.X2,
- dstRegion.Y2,
- mask,
- filter);
-
- GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, oldReadFramebufferHandle);
- GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, oldDrawFramebufferHandle);
-
- ((Pipeline)_renderer.Pipeline).RestoreScissor0Enable();
- ((Pipeline)_renderer.Pipeline).RestoreRasterizerDiscard();
- }
-
- private static void Attach(FramebufferTarget target, Format format, int handle)
- {
- if (format == Format.D24UnormS8Uint || format == Format.D32FloatS8Uint)
- {
- GL.FramebufferTexture(target, FramebufferAttachment.DepthStencilAttachment, handle, 0);
- }
- else if (IsDepthOnly(format))
- {
- GL.FramebufferTexture(target, FramebufferAttachment.DepthAttachment, handle, 0);
- }
- else if (format == Format.S8Uint)
- {
- GL.FramebufferTexture(target, FramebufferAttachment.StencilAttachment, handle, 0);
- }
- else
- {
- GL.FramebufferTexture(target, FramebufferAttachment.ColorAttachment0, handle, 0);
- }
- }
-
- private static ClearBufferMask GetMask(Format format)
- {
- if (format == Format.D24UnormS8Uint || format == Format.D32FloatS8Uint)
- {
- return ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit;
- }
- else if (IsDepthOnly(format))
- {
- return ClearBufferMask.DepthBufferBit;
- }
- else if (format == Format.S8Uint)
- {
- return ClearBufferMask.StencilBufferBit;
- }
- else
- {
- return ClearBufferMask.ColorBufferBit;
- }
- }
-
- private static bool IsDepthOnly(Format format)
- {
- return format == Format.D16Unorm ||
- format == Format.D24X8Unorm ||
- format == Format.D32Float;
- }
-
- private int GetSrcFramebufferLazy()
- {
- if (_srcFramebuffer == 0)
- {
- _srcFramebuffer = GL.GenFramebuffer();
- }
-
- return _srcFramebuffer;
- }
-
- private int GetDstFramebufferLazy()
- {
- if (_dstFramebuffer == 0)
- {
- _dstFramebuffer = GL.GenFramebuffer();
- }
-
- return _dstFramebuffer;
- }
-
- public void Dispose()
- {
- if (_srcFramebuffer != 0)
- {
- GL.DeleteFramebuffer(_srcFramebuffer);
-
- _srcFramebuffer = 0;
- }
-
- if (_dstFramebuffer != 0)
- {
- GL.DeleteFramebuffer(_dstFramebuffer);
-
- _dstFramebuffer = 0;
- }
- }
- }
-}