using StgSharp.Math; using System; using System.Collections.Generic; using System.Net.Security; using System.Reflection; using System.Runtime.InteropServices; using System.Text; namespace StgSharp.Graphics { public unsafe struct VertexBuffer : IDisposable, IBufferObject { internal uint[] _bufferID; private IglFunc GL; internal VertexBuffer(int n, IglFunc glFunc) { _bufferID = new uint[n]; GL = glFunc; fixed (uint* ptr = _bufferID) { GL.GenBuffers(n, ptr); } } public uint this[int n] { get { return _bufferID[n]; } } /// /// /// public void Unbind() { GL.BindBuffer(BufferType.ARRAY_BUFFER, 0); } public void Bind(int index) { GL.BindBuffer(BufferType.ARRAY_BUFFER, _bufferID[index]); } public void Dispose() { fixed (uint* id = _bufferID) { GL.DeleteBuffers(_bufferID.Length, id); } } /// /// Set data to current vertex buffer object /// /// Type of bufferData /// Index to find certain VBO in this instance /// Data to write in /// How OpenGL use these data, defined by public void SetValue(int index, T bufferData, BufferUsage usage) where T : IMat { GL.BindBuffer(BufferType.ARRAY_BUFFER, _bufferID[index]); GL.SetBufferData(BufferType.ARRAY_BUFFER, bufferData, usage); } /// /// Set data to current vertex buffer object /// /// Type of bufferData /// Index to find certain VBO in this instance /// A array of data to write in /// How OpenGL use these data, defined by public void SetValueArray(int index, T[] bufferArray, BufferUsage usage) where T : struct, IConvertible { GL.BindBuffer(BufferType.ARRAY_BUFFER, _bufferID[index]); GL.SetBufferData(BufferType.ARRAY_BUFFER, bufferArray, usage); } } }