title: OpenTK - VBO and Mesh, Memory Exception
body: <p>I have a class and I'm trying to render a single triangle with it but it keeps failing and i Don't know why, can anybody spot the problem? I've tried using static and dynamic vbo but i keep getting a memory issue.</p>
  
  <p>The Error i receive is:</p>
  
  <p>"
  An unhandled exception of type 'System.AccessViolationException' occurred in OpenTK.dll</p>
  
  <p>Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
  "</p>
  
  <p>My usage is:</p>
  
  <pre><code>        var m = new Mesh();
  
          m.Vertices = new float[] { 
              0, 0, 0, 
              5, 0, 0, 
              5, 5, 0
          };
  
  
          m._Indices = new ushort[] { 0, 1, 2 };
          m.Init();
  </code></pre>
  
  <p>my class is</p>
  
  <pre><code>namespace lolGL
  {
      using System;
      using OpenTK.Graphics.OpenGL;
      using OpenTK;
  
      public class Mesh : Entity
      {
          public ushort[] _Indices = null;
  
          int m_vertexBuffer = 0;
          int m_indexBuffer = 0;
  
          bool use16BitIndices
          {
              get { return Vertices.Length &lt;= 65536; }
          }
  
          public Mesh() { }
  
          public void Init()
          {
              GL.GenBuffers(1, out m_vertexBuffer);
              GL.BindBuffer(BufferTarget.ArrayBuffer, m_vertexBuffer);
              GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(BlittableValueType.StrideOf&lt;float&gt;(Vertices) * Vertices.Length), Vertices, BufferUsageHint.StaticDraw);
  
              GL.GenBuffers(1, out m_indexBuffer);
              GL.BindBuffer(BufferTarget.ElementArrayBuffer, m_indexBuffer);
  
              int indexSize = use16BitIndices ? sizeof(short) : sizeof(int);
  
              GL.BufferData(BufferTarget.ElementArrayBuffer, new IntPtr(indexSize * _Indices.Length), _Indices, BufferUsageHint.StaticDraw);
              GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
          }
  
          public override void Render(OpenTK.FrameEventArgs e)
          {
              GL.BindBuffer(BufferTarget.ArrayBuffer, m_vertexBuffer);
              GL.BindBuffer(BufferTarget.ArrayBuffer, m_indexBuffer);
  
              GL.EnableClientState(ArrayCap.VertexArray);
              GL.VertexPointer(3, VertexPointerType.Float, Vector3.SizeInBytes, 0);
  
              if (use16BitIndices)
                  GL.DrawElements(BeginMode.TriangleStrip, _Indices.Length, DrawElementsType.UnsignedShort, 0);
              else
                  GL.DrawElements(BeginMode.TriangleStrip, _Indices.Length, DrawElementsType.UnsignedInt, 0);
  
              GL.Disable(EnableCap.VertexArray);
  
              GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
              GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
  
          }
  
          public override void EmptyBuffer()
          {
              Vertices = null;
              _Indices = null;
          }
  
          public override void Dispose()
          {
              EmptyBuffer();
          }
  
          public override void Delete()
          {
              if (m_indexBuffer != 0)
                  GL.DeleteBuffers(1, ref m_indexBuffer);
  
              if (m_vertexBuffer != 0)
                  GL.DeleteBuffers(1, ref m_vertexBuffer);
  
              Dispose();
          }
  
          public override void ApplyColorMap(int[] colors)
          {
              throw new NotImplementedException();
          }
      }
  }
  </code></pre>