aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs')
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs b/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs
new file mode 100644
index 00000000..58b3ace5
--- /dev/null
+++ b/Ryujinx.Graphics/Gal/OpenGL/OglStreamBuffer.cs
@@ -0,0 +1,55 @@
+using OpenTK.Graphics.OpenGL;
+using System;
+
+namespace Ryujinx.Graphics.Gal.OpenGL
+{
+ class OglStreamBuffer : IDisposable
+ {
+ public int Handle { get; protected set; }
+
+ public long Size { get; protected set; }
+
+ protected BufferTarget Target { get; private set; }
+
+ public OglStreamBuffer(BufferTarget target, long size)
+ {
+ Target = target;
+ Size = size;
+
+ Handle = GL.GenBuffer();
+
+ GL.BindBuffer(target, Handle);
+
+ GL.BufferData(target, (IntPtr)size, IntPtr.Zero, BufferUsageHint.StreamDraw);
+ }
+
+ public void SetData(long size, IntPtr hostAddress)
+ {
+ GL.BindBuffer(Target, Handle);
+
+ GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)size, hostAddress);
+ }
+
+ public void SetData(byte[] data)
+ {
+ GL.BindBuffer(Target, Handle);
+
+ GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)data.Length, data);
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing && Handle != 0)
+ {
+ GL.DeleteBuffer(Handle);
+
+ Handle = 0;
+ }
+ }
+ }
+}