| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using OpenTK.Graphics.OpenGL;
- using Ryujinx.Graphics.GAL;
- using System;
- namespace Ryujinx.Graphics.OpenGL
- {
- class Buffer : IBuffer
- {
- public int Handle { get; }
- public Buffer(int size)
- {
- Handle = GL.GenBuffer();
- GL.BindBuffer(BufferTarget.CopyWriteBuffer, Handle);
- GL.BufferData(BufferTarget.CopyWriteBuffer, size, IntPtr.Zero, BufferUsageHint.DynamicDraw);
- }
- public void CopyTo(IBuffer destination, int srcOffset, int dstOffset, int size)
- {
- GL.BindBuffer(BufferTarget.CopyReadBuffer, Handle);
- GL.BindBuffer(BufferTarget.CopyWriteBuffer, ((Buffer)destination).Handle);
- GL.CopyBufferSubData(
- BufferTarget.CopyReadBuffer,
- BufferTarget.CopyWriteBuffer,
- (IntPtr)srcOffset,
- (IntPtr)dstOffset,
- (IntPtr)size);
- }
- public byte[] GetData(int offset, int size)
- {
- GL.BindBuffer(BufferTarget.CopyReadBuffer, Handle);
- byte[] data = new byte[size];
- GL.GetBufferSubData(BufferTarget.CopyReadBuffer, (IntPtr)offset, size, data);
- return data;
- }
- public void SetData(Span<byte> data)
- {
- unsafe
- {
- GL.BindBuffer(BufferTarget.CopyWriteBuffer, Handle);
- fixed (byte* ptr = data)
- {
- GL.BufferData(BufferTarget.CopyWriteBuffer, data.Length, (IntPtr)ptr, BufferUsageHint.DynamicDraw);
- }
- }
- }
- public void SetData(int offset, Span<byte> data)
- {
- GL.BindBuffer(BufferTarget.CopyWriteBuffer, Handle);
- unsafe
- {
- fixed (byte* ptr = data)
- {
- GL.BufferSubData(BufferTarget.CopyWriteBuffer, (IntPtr)offset, data.Length, (IntPtr)ptr);
- }
- }
- }
- public void Dispose()
- {
- GL.DeleteBuffer(Handle);
- }
- }
- }
|