/// <inheritdoc/> protected override void Dispose(Boolean disposing) { if (Disposed) { return; } if (disposing) { if (!Ultraviolet.Disposed) { var glname = vao; if (glname != 0) { Ultraviolet.QueueWorkItem((state) => { gl.DeleteVertexArray(glname); gl.ThrowIfError(); OpenGLState.DeleteVertexArrayObject(glname, glElementArrayBufferBinding ?? 0); }, null, WorkItemOptions.ReturnNullOnSynchronousExecution); } vao = 0; } vbuffers.Clear(); ibuffer = null; } base.Dispose(disposing); }