diff --git a/pixelgl/util.go b/pixelgl/util.go
index b74eda28e6325a50611b8d75146a2c408e4d29b2..4792d5599a06c053d50ae6b657d7025c3b36c878 100644
--- a/pixelgl/util.go
+++ b/pixelgl/util.go
@@ -16,12 +16,16 @@ func (b *binder) bind() *binder {
 	gl.GetIntegerv(b.restoreLoc, &prev)
 	b.prev = append(b.prev, uint32(prev))
 
-	b.bindFunc(b.obj)
+	if b.prev[len(b.prev)-1] != b.obj {
+		b.bindFunc(b.obj)
+	}
 	return b
 }
 
 func (b *binder) restore() *binder {
-	b.bindFunc(b.prev[len(b.prev)-1])
+	if b.prev[len(b.prev)-1] != b.obj {
+		b.bindFunc(b.prev[len(b.prev)-1])
+	}
 	b.prev = b.prev[:len(b.prev)-1]
 	return b
 }