diff --git a/pixelgl/vertex.go b/pixelgl/vertex.go
index 9cd4a5969ce31344d3eb3a705d363ce00732563c..9bd18231d6498d44c0f196992998201093533f5f 100644
--- a/pixelgl/vertex.go
+++ b/pixelgl/vertex.go
@@ -1,8 +1,6 @@
 package pixelgl
 
 import (
-	"unsafe"
-
 	"github.com/go-gl/gl/v3.3-core/gl"
 	"github.com/pkg/errors"
 )
@@ -207,8 +205,8 @@ func (va *VertexArray) Draw() {
 }
 
 // SetVertex sets the value of all attributes of a vertex.
-// Argument data must point to a slice/array containing the new vertex data.
-func (va *VertexArray) SetVertex(vertex int, data unsafe.Pointer) {
+// Argument data must be a slice/array containing the new vertex data.
+func (va *VertexArray) SetVertex(vertex int, data interface{}) {
 	if vertex < 0 || vertex >= va.count {
 		panic("set vertex error: invalid vertex index")
 	}
@@ -216,7 +214,7 @@ func (va *VertexArray) SetVertex(vertex int, data unsafe.Pointer) {
 		gl.BindBuffer(gl.ARRAY_BUFFER, va.vbo)
 
 		offset := va.stride * vertex
-		gl.BufferSubData(gl.ARRAY_BUFFER, offset, va.format.Size(), data)
+		gl.BufferSubData(gl.ARRAY_BUFFER, offset, va.format.Size(), gl.Ptr(data))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
 
@@ -227,11 +225,11 @@ func (va *VertexArray) SetVertex(vertex int, data unsafe.Pointer) {
 }
 
 // SetVertexAttribute sets the value of the specified vertex attribute of the specified vertex.
-// Argument data must point to a slice/array containing the new attribute data.
+// Argument data must be a slice/array containing the new attribute data.
 //
 // This function returns false if the specified attribute does not exist. Note that the function panics
 // if the vertex is out of range.
-func (va *VertexArray) SetVertexAttribute(vertex int, attr Attr, data unsafe.Pointer) (ok bool) {
+func (va *VertexArray) SetVertexAttribute(vertex int, attr Attr, data interface{}) (ok bool) {
 	if vertex < 0 || vertex >= va.count {
 		panic("set vertex attribute error: invalid vertex index")
 	}
@@ -242,7 +240,7 @@ func (va *VertexArray) SetVertexAttribute(vertex int, attr Attr, data unsafe.Poi
 		gl.BindBuffer(gl.ARRAY_BUFFER, va.vbo)
 
 		offset := va.stride*vertex + va.attrs[attr]
-		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), data)
+		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), gl.Ptr(data))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)