From 2ba89591dba8d86cdeb3649d4cb47e83bdb098f3 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sat, 24 Feb 2018 05:28:15 +0900 Subject: [PATCH] restorable: Remove Fill --- internal/restorable/image.go | 26 ------------------ internal/restorable/images_test.go | 44 +++++++++++++++++++----------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/internal/restorable/image.go b/internal/restorable/image.go index 4e73a26af..d11f36aa5 100644 --- a/internal/restorable/image.go +++ b/internal/restorable/image.go @@ -65,9 +65,7 @@ func (d *drawImageHistoryItem) canMerge(image *Image, colorm *affine.ColorM, mod type Image struct { image *graphics.Image - // baseImage and baseColor are exclusive. basePixels []byte - baseColor color.RGBA // drawImageHistory is a set of draw-image commands. // TODO: This should be merged with the similar command queue in package graphics (#433). @@ -143,7 +141,6 @@ func (i *Image) Size() (int, int) { // makeStale makes the image stale. func (i *Image) makeStale() { i.basePixels = nil - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = true } @@ -154,7 +151,6 @@ func (i *Image) clearIfVolatile() { return } i.basePixels = nil - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false if i.image == nil { @@ -163,22 +159,11 @@ func (i *Image) clearIfVolatile() { i.image.Fill(0, 0, 0, 0) } -// Fill fills the image with the given color. -func (i *Image) Fill(r, g, b, a uint8) { - theImages.makeStaleIfDependingOn(i) - i.basePixels = nil - i.baseColor = color.RGBA{r, g, b, a} - i.drawImageHistory = nil - i.stale = false - i.image.Fill(r, g, b, a) -} - // ReplacePixels replaces the image pixels with the given pixels slice. func (i *Image) ReplacePixels(pixels []byte) { theImages.makeStaleIfDependingOn(i) i.image.ReplacePixels(pixels) i.basePixels = pixels - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false } @@ -259,7 +244,6 @@ func (i *Image) readPixelsFromGPU(image *graphics.Image) error { if err != nil { return err } - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false return nil @@ -314,7 +298,6 @@ func (i *Image) restore() error { // be changed. i.image = graphics.NewScreenFramebufferImage(w, h, i.offsetX, i.offsetY) i.basePixels = nil - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false return nil @@ -322,7 +305,6 @@ func (i *Image) restore() error { if i.volatile { i.image = graphics.NewImage(w, h) i.basePixels = nil - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false return nil @@ -339,12 +321,6 @@ func (i *Image) restore() error { } } gimg := graphics.NewImageFromImage(img, w, h) - if i.baseColor != (color.RGBA{}) { - if i.basePixels != nil { - panic("not reached") - } - gimg.Fill(i.baseColor.R, i.baseColor.G, i.baseColor.B, i.baseColor.A) - } for _, c := range i.drawImageHistory { // All dependencies must be already resolved. if c.image.hasDependency() { @@ -359,7 +335,6 @@ func (i *Image) restore() error { if err != nil { return err } - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false return nil @@ -373,7 +348,6 @@ func (i *Image) Dispose() { i.image.Dispose() i.image = nil i.basePixels = nil - i.baseColor = color.RGBA{} i.drawImageHistory = nil i.stale = false theImages.remove(i) diff --git a/internal/restorable/images_test.go b/internal/restorable/images_test.go index 4f6621ede..bfc9c5ba2 100644 --- a/internal/restorable/images_test.go +++ b/internal/restorable/images_test.go @@ -66,16 +66,28 @@ func sameColors(c1, c2 color.RGBA, delta int) bool { abs(int(c1.A)-int(c2.A)) <= delta } +func fill(img *Image, r, g, b, a uint8) { + w, h := img.Size() + pix := make([]uint8, w*h*4) + for i := 0; i < w*h; i++ { + pix[4*i] = r + pix[4*i+1] = g + pix[4*i+2] = b + pix[4*i+3] = a + } + img.ReplacePixels(pix) +} + func TestRestore(t *testing.T) { img0 := NewImage(1, 1, false) // Clear images explicitly. // In this 'restorable' layer, reused texture might not be cleared. - img0.Fill(0, 0, 0, 0) + fill(img0, 0, 0, 0, 0) defer func() { img0.Dispose() }() clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff} - img0.Fill(clr0.R, clr0.G, clr0.B, clr0.A) + fill(img0, clr0.R, clr0.G, clr0.B, clr0.A) if err := ResolveStaleImages(); err != nil { t.Fatal(err) } @@ -110,7 +122,7 @@ func TestRestoreChain(t *testing.T) { imgs := []*Image{} for i := 0; i < num; i++ { img := NewImage(1, 1, false) - img.Fill(0, 0, 0, 0) + fill(img, 0, 0, 0, 0) imgs = append(imgs, img) } defer func() { @@ -119,7 +131,7 @@ func TestRestoreChain(t *testing.T) { } }() clr := color.RGBA{0x00, 0x00, 0x00, 0xff} - imgs[0].Fill(clr.R, clr.G, clr.B, clr.A) + fill(imgs[0], clr.R, clr.G, clr.B, clr.A) for i := 0; i < num-1; i++ { imgs[i+1].DrawImage(imgs[i], vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver, graphics.FilterNearest) } @@ -140,13 +152,13 @@ func TestRestoreChain(t *testing.T) { func TestRestoreOverrideSource(t *testing.T) { img0 := NewImage(1, 1, false) - img0.Fill(0, 0, 0, 0) + fill(img0, 0, 0, 0, 0) img1 := NewImage(1, 1, false) - img1.Fill(0, 0, 0, 0) + fill(img1, 0, 0, 0, 0) img2 := NewImage(1, 1, false) - img2.Fill(0, 0, 0, 0) + fill(img2, 0, 0, 0, 0) img3 := NewImage(1, 1, false) - img3.Fill(0, 0, 0, 0) + fill(img3, 0, 0, 0, 0) defer func() { img3.Dispose() img2.Dispose() @@ -155,10 +167,10 @@ func TestRestoreOverrideSource(t *testing.T) { }() clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff} clr1 := color.RGBA{0x00, 0x00, 0x01, 0xff} - img1.Fill(clr0.R, clr0.G, clr0.B, clr0.A) + fill(img1, clr0.R, clr0.G, clr0.B, clr0.A) img2.DrawImage(img1, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver, graphics.FilterNearest) img3.DrawImage(img2, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver, graphics.FilterNearest) - img0.Fill(clr1.R, clr1.G, clr1.B, clr1.A) + fill(img0, clr1.R, clr1.G, clr1.B, clr1.A) img1.DrawImage(img0, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver, graphics.FilterNearest) if err := ResolveStaleImages(); err != nil { t.Fatal(err) @@ -218,15 +230,15 @@ func TestRestoreComplexGraph(t *testing.T) { img1 := NewImageFromImage(base) img2 := NewImageFromImage(base) img3 := NewImage(4, 1, false) - img3.Fill(0, 0, 0, 0) + fill(img3, 0, 0, 0, 0) img4 := NewImage(4, 1, false) - img4.Fill(0, 0, 0, 0) + fill(img4, 0, 0, 0, 0) img5 := NewImage(4, 1, false) - img5.Fill(0, 0, 0, 0) + fill(img5, 0, 0, 0, 0) img6 := NewImage(4, 1, false) - img6.Fill(0, 0, 0, 0) + fill(img6, 0, 0, 0, 0) img7 := NewImage(4, 1, false) - img7.Fill(0, 0, 0, 0) + fill(img7, 0, 0, 0, 0) defer func() { img7.Dispose() img6.Dispose() @@ -320,7 +332,7 @@ func TestRestoreRecursive(t *testing.T) { base.Pix[3] = 0xff img0 := NewImageFromImage(base) img1 := NewImage(4, 1, false) - img1.Fill(0, 0, 0, 0) + fill(img1, 0, 0, 0, 0) defer func() { img1.Dispose() img0.Dispose()