OglStreamBuffer.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using OpenTK.Graphics.OpenGL;
  2. using System;
  3. namespace Ryujinx.Graphics.Gal.OpenGL
  4. {
  5. class OglStreamBuffer : IDisposable
  6. {
  7. public int Handle { get; protected set; }
  8. public long Size { get; protected set; }
  9. protected BufferTarget Target { get; private set; }
  10. public OglStreamBuffer(BufferTarget target, long size)
  11. {
  12. Target = target;
  13. Size = size;
  14. Handle = GL.GenBuffer();
  15. GL.BindBuffer(target, Handle);
  16. GL.BufferData(target, (IntPtr)size, IntPtr.Zero, BufferUsageHint.StreamDraw);
  17. }
  18. public void SetData(long size, IntPtr hostAddress)
  19. {
  20. GL.BindBuffer(Target, Handle);
  21. GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)size, hostAddress);
  22. }
  23. public void SetData(byte[] data)
  24. {
  25. GL.BindBuffer(Target, Handle);
  26. GL.BufferSubData(Target, IntPtr.Zero, (IntPtr)data.Length, data);
  27. }
  28. public void Dispose()
  29. {
  30. Dispose(true);
  31. }
  32. protected virtual void Dispose(bool disposing)
  33. {
  34. if (disposing && Handle != 0)
  35. {
  36. GL.DeleteBuffer(Handle);
  37. Handle = 0;
  38. }
  39. }
  40. }
  41. }