/// <summary> /// Initializes a new instance of the OpenGLIndexBuffer. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="itype">The index element type.</param> /// <param name="icount">The index element count.</param> /// <param name="usage">The buffer's usage type.</param> public OpenGLIndexBuffer(UltravioletContext uv, IndexBufferElementType itype, Int32 icount, UInt32 usage) : base(uv, itype, icount) { Contract.EnsureRange(icount >= 0, nameof(icount)); this.usage = usage; this.size = new IntPtr(GetElementSize() * icount); var buffer = 0u; uv.QueueWorkItemAndWait(() => { using (OpenGLState.ScopedCreateElementArrayBuffer(out buffer)) { gl.NamedBufferData(buffer, gl.GL_ELEMENT_ARRAY_BUFFER, size, null, usage); gl.ThrowIfError(); } }); this.buffer = buffer; }