using StgSharp.Math; using System; using System.Collections.Generic; using System.Net.Security; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; namespace StgSharp.Graphics { public unsafe class VertexBuffer : BufferObjectBase { internal VertexBuffer(int n, IglFunc glFunc) { GL = glFunc; _bufferHandle = GL.GenBuffers(n); } public override sealed void Bind(int index) { GL.BindBuffer(BufferType.ARRAY_BUFFER, _bufferHandle[index]); } /// /// 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 : struct, IMat { GL.BindBuffer(BufferType.ARRAY_BUFFER, _bufferHandle[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, _bufferHandle[index]); GL.SetBufferData(BufferType.ARRAY_BUFFER, bufferArray, usage); } /// /// /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Unbind() { GL.BindBuffer(BufferType.ARRAY_BUFFER, glHandle.Zero); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal void ChangeEnvironment(IglFunc gl) { GL = gl; } protected override sealed void Dispose(bool disposing) { if (disposing) { GL.DeleteBuffers(_bufferHandle); _bufferHandle.Release(); } } } }