@@ -1200,8 +1200,14 @@ func (f *framebuffer) ReadPixels(src image.Rectangle, pixels []byte, stride int)
1200
1200
if len (pixels ) < src .Dx ()* src .Dy ()* 4 {
1201
1201
return errors .New ("unexpected RGBA size" )
1202
1202
}
1203
- f .backend .glstate .pixelStorei (f .backend .funcs , gl .PACK_ROW_LENGTH , stride / 4 )
1204
- f .backend .funcs .ReadPixels (src .Min .X , src .Min .Y , src .Dx (), src .Dy (), gl .RGBA , gl .UNSIGNED_BYTE , pixels )
1203
+ w , h := src .Dx (), src .Dy ()
1204
+ // WebGL 1 doesn't support PACK_ROW_LENGTH != 0. Avoid it if possible.
1205
+ rowLen := 0
1206
+ if n := stride / 4 ; n != w {
1207
+ rowLen = n
1208
+ }
1209
+ f .backend .glstate .pixelStorei (f .backend .funcs , gl .PACK_ROW_LENGTH , rowLen )
1210
+ f .backend .funcs .ReadPixels (src .Min .X , src .Min .Y , w , h , gl .RGBA , gl .UNSIGNED_BYTE , pixels )
1205
1211
return glErr (f .backend .funcs )
1206
1212
}
1207
1213
@@ -1262,7 +1268,12 @@ func (t *texture) Upload(offset, size image.Point, pixels []byte, stride int) {
1262
1268
panic (fmt .Errorf ("size %d larger than data %d" , min , len (pixels )))
1263
1269
}
1264
1270
t .backend .BindTexture (0 , t )
1265
- t .backend .glstate .pixelStorei (t .backend .funcs , gl .UNPACK_ROW_LENGTH , stride / 4 )
1271
+ // WebGL 1 doesn't support UNPACK_ROW_LENGTH != 0. Avoid it if possible.
1272
+ rowLen := 0
1273
+ if n := stride / 4 ; n != size .X {
1274
+ rowLen = n
1275
+ }
1276
+ t .backend .glstate .pixelStorei (t .backend .funcs , gl .UNPACK_ROW_LENGTH , rowLen )
1266
1277
t .backend .funcs .TexSubImage2D (gl .TEXTURE_2D , 0 , offset .X , offset .Y , size .X , size .Y , t .triple .format , t .triple .typ , pixels )
1267
1278
}
1268
1279
0 commit comments