mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
graphics: Bug fix: pixels read from GPU might include errors (#492)
This commit is contained in:
parent
65b71ad79d
commit
595e654123
@ -47,6 +47,25 @@ func byteSliceToColor(b []byte, index int) color.RGBA {
|
|||||||
return color.RGBA{b[i], b[i+1], b[i+2], b[i+3]}
|
return color.RGBA{b[i], b[i+1], b[i+2], b[i+3]}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func abs(x int) int {
|
||||||
|
if x < 0 {
|
||||||
|
return -x
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// sameColors compares c1 and c2 and returns a boolean value indicating
|
||||||
|
// if the two colors are (almost) same.
|
||||||
|
//
|
||||||
|
// Pixels read from GPU might include errors (#492), and
|
||||||
|
// sameColors considers such errors as delta.
|
||||||
|
func sameColors(c1, c2 color.RGBA, delta int) bool {
|
||||||
|
return abs(int(c1.R)-int(c2.R)) <= delta &&
|
||||||
|
abs(int(c1.G)-int(c2.G)) <= delta &&
|
||||||
|
abs(int(c1.B)-int(c2.B)) <= delta &&
|
||||||
|
abs(int(c1.A)-int(c2.A)) <= delta
|
||||||
|
}
|
||||||
|
|
||||||
func TestRestore(t *testing.T) {
|
func TestRestore(t *testing.T) {
|
||||||
img0 := NewImage(1, 1, graphics.FilterNearest, false)
|
img0 := NewImage(1, 1, graphics.FilterNearest, false)
|
||||||
// Clear images explicitly.
|
// Clear images explicitly.
|
||||||
@ -65,7 +84,7 @@ func TestRestore(t *testing.T) {
|
|||||||
}
|
}
|
||||||
want := clr0
|
want := clr0
|
||||||
got := byteSliceToColor(img0.BasePixelsForTesting(), 0)
|
got := byteSliceToColor(img0.BasePixelsForTesting(), 0)
|
||||||
if got != want {
|
if !sameColors(got, want, 1) {
|
||||||
t.Errorf("got %v, want %v", got, want)
|
t.Errorf("got %v, want %v", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,7 +132,7 @@ func TestRestoreChain(t *testing.T) {
|
|||||||
want := clr
|
want := clr
|
||||||
for i, img := range imgs {
|
for i, img := range imgs {
|
||||||
got := byteSliceToColor(img.BasePixelsForTesting(), 0)
|
got := byteSliceToColor(img.BasePixelsForTesting(), 0)
|
||||||
if got != want {
|
if !sameColors(got, want, 1) {
|
||||||
t.Errorf("%d: got %v, want %v", i, got, want)
|
t.Errorf("%d: got %v, want %v", i, got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -174,7 +193,7 @@ func TestRestoreOverrideSource(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, c := range testCases {
|
for _, c := range testCases {
|
||||||
if c.got != c.want {
|
if !sameColors(c.got, c.want, 1) {
|
||||||
t.Errorf("%s: got %v, want %v", c.name, c.got, c.want)
|
t.Errorf("%s: got %v, want %v", c.name, c.got, c.want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,7 +305,7 @@ func TestRestoreComplexGraph(t *testing.T) {
|
|||||||
want = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
want = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
||||||
}
|
}
|
||||||
got := byteSliceToColor(c.image.BasePixelsForTesting(), i)
|
got := byteSliceToColor(c.image.BasePixelsForTesting(), i)
|
||||||
if got != want {
|
if !sameColors(got, want, 1) {
|
||||||
t.Errorf("%s[%d]: got %v, want %v", c.name, i, got, want)
|
t.Errorf("%s[%d]: got %v, want %v", c.name, i, got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -337,7 +356,7 @@ func TestRestoreRecursive(t *testing.T) {
|
|||||||
want = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
want = color.RGBA{0xff, 0xff, 0xff, 0xff}
|
||||||
}
|
}
|
||||||
got := byteSliceToColor(c.image.BasePixelsForTesting(), i)
|
got := byteSliceToColor(c.image.BasePixelsForTesting(), i)
|
||||||
if got != want {
|
if !sameColors(got, want, 1) {
|
||||||
t.Errorf("%s[%d]: got %v, want %v", c.name, i, got, want)
|
t.Errorf("%s[%d]: got %v, want %v", c.name, i, got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user