Files
doom-dm/Engine/Renderer/Buffer/IndexBuffer.cs
2024-12-04 22:35:04 +03:00

52 lines
1.2 KiB
C#

using OpenTK.Graphics.OpenGL;
using Serilog;
namespace Engine.Renderer.Buffer;
public class IndexBuffer : OpenGlObject
{
internal int Count { get; }
public IndexBuffer(int count, BufferStorageFlags flags)
{
Count = count;
GL.CreateBuffers(1, out int handle);
Handle = handle;
GL.NamedBufferStorage(Handle, Count * sizeof(uint), IntPtr.Zero, flags);
Log.Debug("Index buffer {Handle} created with {Count} elements", Handle, Count);
}
public void UploadData(uint[] data)
{
UploadData(0, data);
}
public void UploadData(int offset, uint[] data)
{
if (offset < 0)
throw new ArgumentException("Offset must be greater than 0");
if (data.Length + offset > Count)
throw new ArgumentException("Data array is too large");
GL.NamedBufferSubData(Handle, offset, data.Length * sizeof(uint), data);
}
internal override void Bind()
{
GL.BindBuffer(BufferTarget.ElementArrayBuffer, Handle);
}
internal override void Unbind()
{
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
}
protected override void Destroy()
{
GL.DeleteBuffer(Handle);
}
}