diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go
index cb3b4fb7633efbd4fbef1aeae05ef35e8776a486..7be4950a3db4e58be6c072f24eb894bf89b9b75a 100644
--- a/pixelgl/canvas.go
+++ b/pixelgl/canvas.go
@@ -102,7 +102,16 @@ func (c *Canvas) MakePicture(p pixel.Picture) pixel.TargetPicture {
 	bx, by, bw, bh := intBounds(bounds)
 
 	pixels := make([]uint8, 4*bw*bh)
-	if p, ok := p.(pixel.PictureColor); ok {
+
+	if pd, ok := p.(*pixel.PictureData); ok {
+		// PictureData short path
+		for i, nrgba := range pd.Pix {
+			pixels[i*4+0] = nrgba.R
+			pixels[i*4+1] = nrgba.G
+			pixels[i*4+2] = nrgba.B
+			pixels[i*4+3] = nrgba.A
+		}
+	} else if p, ok := p.(pixel.PictureColor); ok {
 		for y := 0; y < bh; y++ {
 			for x := 0; x < bw; x++ {
 				at := pixel.V(