diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go index 7be4950a3db4e58be6c072f24eb894bf89b9b75a..4b37078963a2768e7c3c5c890c38ef90c4b1d760 100644 --- a/pixelgl/canvas.go +++ b/pixelgl/canvas.go @@ -105,11 +105,15 @@ func (c *Canvas) MakePicture(p pixel.Picture) pixel.TargetPicture { 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 + for y := 0; y < bh; y++ { + for x := 0; x < bw; x++ { + nrgba := pd.Pix[y*pd.Stride+x] + off := (y*bw + x) * 4 + pixels[off+0] = nrgba.R + pixels[off+1] = nrgba.G + pixels[off+2] = nrgba.B + pixels[off+3] = nrgba.A + } } } else if p, ok := p.(pixel.PictureColor); ok { for y := 0; y < bh; y++ { @@ -119,10 +123,11 @@ func (c *Canvas) MakePicture(p pixel.Picture) pixel.TargetPicture { math.Max(float64(by+y), bounds.Min.Y()), ) color := p.Color(at) - pixels[(y*bw+x)*4+0] = uint8(color.R * 255) - pixels[(y*bw+x)*4+1] = uint8(color.G * 255) - pixels[(y*bw+x)*4+2] = uint8(color.B * 255) - pixels[(y*bw+x)*4+3] = uint8(color.A * 255) + off := (y*bw + x) * 4 + pixels[off+0] = uint8(color.R * 255) + pixels[off+1] = uint8(color.G * 255) + pixels[off+2] = uint8(color.B * 255) + pixels[off+3] = uint8(color.A * 255) } } }