diff --git a/graphics.go b/graphics.go
index 0a310ed3c07cba8aa15270f065d56f79ebf9d3eb..ee14c96387d6766ee162a8fa5da99a9a5e46508d 100644
--- a/graphics.go
+++ b/graphics.go
@@ -185,6 +185,11 @@ func NewSprite(pic *Picture) *Sprite {
 
 // SetPicture changes the Picture of the Sprite and resizes it accordingly.
 func (s *Sprite) SetPicture(pic *Picture) {
+	oldPic := s.pic
+	s.pic = pic
+	if oldPic.Bounds().Size == pic.Bounds().Size {
+		return
+	}
 	w, h := pic.Bounds().Size.XY()
 	(*s.data)[0].Position = V(0, 0)
 	(*s.data)[2].Position = V(w, h)
@@ -192,7 +197,7 @@ func (s *Sprite) SetPicture(pic *Picture) {
 	(*s.data)[3].Position = V(0, 0)
 	(*s.data)[4].Position = V(w, h)
 	(*s.data)[5].Position = V(0, h)
-	s.pic = pic
+	s.td.dirty = true
 }
 
 // Picture returns the current Picture of the Sprite.