/// <summary> /// Initializes a new instance of the OpenGLVertexBuffer. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="vdecl">The vertex declaration for this buffer.</param> /// <param name="vcount">The number of vertices in the buffer.</param> /// <param name="usage">The buffer's usage type.</param> public OpenGLVertexBuffer(UltravioletContext uv, VertexDeclaration vdecl, Int32 vcount, UInt32 usage) : base(uv, vdecl, vcount) { Contract.Require(vdecl, nameof(vdecl)); this.vdecl = vdecl; this.usage = usage; this.size = new IntPtr(vdecl.VertexStride * vcount); var buffer = 0u; uv.QueueWorkItemAndWait(() => { using (OpenGLState.ScopedCreateArrayBuffer(out buffer)) { gl.NamedBufferData(buffer, gl.GL_ARRAY_BUFFER, size, null, usage); gl.ThrowIfError(); } }); this.buffer = buffer; }