diff --git a/pixelgl/vertex.go b/pixelgl/vertex.go
index 1f93a490229647b3da9eb593543bdaac2292d194..ec0d5353bd5aa382a2e8e3d80a8bfc4368a7016c 100644
--- a/pixelgl/vertex.go
+++ b/pixelgl/vertex.go
@@ -180,6 +180,17 @@ func (va *VertexArray) Draw() {
 	va.End()
 }
 
+// Data returns a copy of data inside a vertex array (actually it's vertex buffer).
+func (va *VertexArray) Data() []float64 {
+	data := make([]float64, va.count*va.format.Size())
+	Do(func() {
+		gl.BindBuffer(gl.ARRAY_BUFFER, va.vbo)
+		gl.GetBufferSubData(gl.ARRAY_BUFFER, 0, 8*len(data), gl.Ptr(data))
+		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
+	})
+	return data
+}
+
 // UpdateData overwrites the current vertex array data starting at the index offset.
 //
 // Offset is not a number of bytes, instead, it's an index in the array.