using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenTK.Graphics.OpenGL;
namespace PckStudio.Rendering
{
public class IndexBuffer : IDisposable
{
private int _id;
private int _size;
private int[] _indicies;
public IndexBuffer()
{
_id = GL.GenBuffer();
_size = 0;
}
///
/// Creates and attaches created index buffer
///
///
///
public static IndexBuffer Create(params int[] indicies)
{
var ib = new IndexBuffer();
ib.SetIndicies(indicies);
return ib;
}
public void SetIndicies(int[] indicies)
{
Bind();
int size = indicies.Length * sizeof(int);
_indicies = indicies;
if (_size < size)
{
GL.BufferData(BufferTarget.ElementArrayBuffer, size, indicies, BufferUsageHint.StaticDraw);
_size = size;
return;
}
GL.BufferSubData(BufferTarget.ElementArrayBuffer, IntPtr.Zero, size, indicies);
}
public int GetCount() => _indicies.Length;
public void Bind()
{
GL.BindBuffer(BufferTarget.ElementArrayBuffer, _id);
}
[Conditional("DEBUG")]
public void Unbind()
{
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
}
public void Dispose()
{
Unbind();
GL.DeleteBuffer(_id);
}
}
}