mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
graphics: Avoid type assertions for Fill
This commit is contained in:
parent
d0778b5253
commit
3a3a4af035
10
image.go
10
image.go
@ -45,7 +45,7 @@ func (i *Image) Size() (width, height int) {
|
|||||||
//
|
//
|
||||||
// Clear always returns nil as of 1.5.0-alpha.
|
// Clear always returns nil as of 1.5.0-alpha.
|
||||||
func (i *Image) Clear() error {
|
func (i *Image) Clear() error {
|
||||||
i.restorable.Fill(color.RGBA{})
|
i.restorable.Fill(0, 0, 0, 0)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,8 +55,8 @@ func (i *Image) Clear() error {
|
|||||||
//
|
//
|
||||||
// Fill always returns nil as of 1.5.0-alpha.
|
// Fill always returns nil as of 1.5.0-alpha.
|
||||||
func (i *Image) Fill(clr color.Color) error {
|
func (i *Image) Fill(clr color.Color) error {
|
||||||
rgba := color.RGBAModel.Convert(clr).(color.RGBA)
|
r, g, b, a := clr.RGBA()
|
||||||
i.restorable.Fill(rgba)
|
i.restorable.Fill(uint8(r>>8), uint8(g>>8), uint8(b>>8), uint8(a>>8))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ type DrawImageOptions struct {
|
|||||||
func NewImage(width, height int, filter Filter) (*Image, error) {
|
func NewImage(width, height int, filter Filter) (*Image, error) {
|
||||||
checkSize(width, height)
|
checkSize(width, height)
|
||||||
r := restorable.NewImage(width, height, glFilter(filter), false)
|
r := restorable.NewImage(width, height, glFilter(filter), false)
|
||||||
r.Fill(color.RGBA{})
|
r.Fill(0, 0, 0, 0)
|
||||||
i := &Image{r}
|
i := &Image{r}
|
||||||
runtime.SetFinalizer(i, (*Image).Dispose)
|
runtime.SetFinalizer(i, (*Image).Dispose)
|
||||||
return i, nil
|
return i, nil
|
||||||
@ -253,7 +253,7 @@ func NewImage(width, height int, filter Filter) (*Image, error) {
|
|||||||
func newVolatileImage(width, height int, filter Filter) *Image {
|
func newVolatileImage(width, height int, filter Filter) *Image {
|
||||||
checkSize(width, height)
|
checkSize(width, height)
|
||||||
r := restorable.NewImage(width, height, glFilter(filter), true)
|
r := restorable.NewImage(width, height, glFilter(filter), true)
|
||||||
r.Fill(color.RGBA{})
|
r.Fill(0, 0, 0, 0)
|
||||||
i := &Image{r}
|
i := &Image{r}
|
||||||
runtime.SetFinalizer(i, (*Image).Dispose)
|
runtime.SetFinalizer(i, (*Image).Dispose)
|
||||||
return i
|
return i
|
||||||
|
@ -134,12 +134,14 @@ func (i *Image) Size() (int, int) {
|
|||||||
return i.width, i.height
|
return i.width, i.height
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) Fill(clr color.RGBA) {
|
func (i *Image) Fill(r, g, b, a uint8) {
|
||||||
// TODO: Need to clone clr value
|
|
||||||
c := &fillCommand{
|
c := &fillCommand{
|
||||||
dst: i,
|
dst: i,
|
||||||
color: clr,
|
|
||||||
}
|
}
|
||||||
|
c.color.R = r
|
||||||
|
c.color.G = g
|
||||||
|
c.color.B = b
|
||||||
|
c.color.A = a
|
||||||
theCommandQueue.Enqueue(c)
|
theCommandQueue.Enqueue(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,16 +134,16 @@ func (p *Image) clearIfVolatile() {
|
|||||||
if p.image == nil {
|
if p.image == nil {
|
||||||
panic("not reached")
|
panic("not reached")
|
||||||
}
|
}
|
||||||
p.image.Fill(color.RGBA{})
|
p.image.Fill(0, 0, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Image) Fill(clr color.RGBA) {
|
func (p *Image) Fill(r, g, b, a uint8) {
|
||||||
theImages.resetPixelsIfDependingOn(p)
|
theImages.resetPixelsIfDependingOn(p)
|
||||||
p.basePixels = nil
|
p.basePixels = nil
|
||||||
p.baseColor = clr
|
p.baseColor = color.RGBA{r, g, b, a}
|
||||||
p.drawImageHistory = nil
|
p.drawImageHistory = nil
|
||||||
p.stale = false
|
p.stale = false
|
||||||
p.image.Fill(clr)
|
p.image.Fill(r, g, b, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Image) ReplacePixels(pixels []uint8) {
|
func (p *Image) ReplacePixels(pixels []uint8) {
|
||||||
@ -306,7 +306,7 @@ func (p *Image) restore() error {
|
|||||||
if p.basePixels != nil {
|
if p.basePixels != nil {
|
||||||
panic("not reached")
|
panic("not reached")
|
||||||
}
|
}
|
||||||
gimg.Fill(p.baseColor)
|
gimg.Fill(p.baseColor.R, p.baseColor.G, p.baseColor.B, p.baseColor.A)
|
||||||
}
|
}
|
||||||
for _, c := range p.drawImageHistory {
|
for _, c := range p.drawImageHistory {
|
||||||
// All dependencies must be already resolved.
|
// All dependencies must be already resolved.
|
||||||
|
@ -50,12 +50,12 @@ func TestRestore(t *testing.T) {
|
|||||||
img0 := NewImage(1, 1, opengl.Nearest, false)
|
img0 := NewImage(1, 1, opengl.Nearest, false)
|
||||||
// Clear images explicitly.
|
// Clear images explicitly.
|
||||||
// In this 'restorable' layer, reused texture might not be cleared.
|
// In this 'restorable' layer, reused texture might not be cleared.
|
||||||
img0.Fill(color.RGBA{0, 0, 0, 0})
|
img0.Fill(0, 0, 0, 0)
|
||||||
defer func() {
|
defer func() {
|
||||||
img0.Dispose()
|
img0.Dispose()
|
||||||
}()
|
}()
|
||||||
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
||||||
img0.Fill(clr0)
|
img0.Fill(clr0.R, clr0.G, clr0.B, clr0.A)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := ResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ func TestRestoreChain(t *testing.T) {
|
|||||||
imgs := []*Image{}
|
imgs := []*Image{}
|
||||||
for i := 0; i < num; i++ {
|
for i := 0; i < num; i++ {
|
||||||
img := NewImage(1, 1, opengl.Nearest, false)
|
img := NewImage(1, 1, opengl.Nearest, false)
|
||||||
img.Fill(color.RGBA{0, 0, 0, 0})
|
img.Fill(0, 0, 0, 0)
|
||||||
imgs = append(imgs, img)
|
imgs = append(imgs, img)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -97,7 +97,7 @@ func TestRestoreChain(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
clr := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
clr := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
||||||
imgs[0].Fill(clr)
|
imgs[0].Fill(clr.R, clr.G, clr.B, clr.A)
|
||||||
for i := 0; i < num-1; i++ {
|
for i := 0; i < num-1; i++ {
|
||||||
imgs[i+1].DrawImage(imgs[i], vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
imgs[i+1].DrawImage(imgs[i], vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
}
|
}
|
||||||
@ -118,13 +118,13 @@ func TestRestoreChain(t *testing.T) {
|
|||||||
|
|
||||||
func TestRestoreOverrideSource(t *testing.T) {
|
func TestRestoreOverrideSource(t *testing.T) {
|
||||||
img0 := NewImage(1, 1, opengl.Nearest, false)
|
img0 := NewImage(1, 1, opengl.Nearest, false)
|
||||||
img0.Fill(color.RGBA{0, 0, 0, 0})
|
img0.Fill(0, 0, 0, 0)
|
||||||
img1 := NewImage(1, 1, opengl.Nearest, false)
|
img1 := NewImage(1, 1, opengl.Nearest, false)
|
||||||
img1.Fill(color.RGBA{0, 0, 0, 0})
|
img1.Fill(0, 0, 0, 0)
|
||||||
img2 := NewImage(1, 1, opengl.Nearest, false)
|
img2 := NewImage(1, 1, opengl.Nearest, false)
|
||||||
img2.Fill(color.RGBA{0, 0, 0, 0})
|
img2.Fill(0, 0, 0, 0)
|
||||||
img3 := NewImage(1, 1, opengl.Nearest, false)
|
img3 := NewImage(1, 1, opengl.Nearest, false)
|
||||||
img3.Fill(color.RGBA{0, 0, 0, 0})
|
img3.Fill(0, 0, 0, 0)
|
||||||
defer func() {
|
defer func() {
|
||||||
img3.Dispose()
|
img3.Dispose()
|
||||||
img2.Dispose()
|
img2.Dispose()
|
||||||
@ -133,10 +133,10 @@ func TestRestoreOverrideSource(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
||||||
clr1 := color.RGBA{0x00, 0x00, 0x01, 0xff}
|
clr1 := color.RGBA{0x00, 0x00, 0x01, 0xff}
|
||||||
img1.Fill(clr0)
|
img1.Fill(clr0.R, clr0.G, clr0.B, clr0.A)
|
||||||
img2.DrawImage(img1, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img2.DrawImage(img1, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img3.DrawImage(img2, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img3.DrawImage(img2, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img0.Fill(clr1)
|
img0.Fill(clr1.R, clr1.G, clr1.B, clr1.A)
|
||||||
img1.DrawImage(img0, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img1.DrawImage(img0, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := ResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -196,15 +196,15 @@ func TestRestoreComplexGraph(t *testing.T) {
|
|||||||
img1 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
img1 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
||||||
img2 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
img2 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
||||||
img3 := NewImage(4, 1, opengl.Nearest, false)
|
img3 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img3.Fill(color.RGBA{0, 0, 0, 0})
|
img3.Fill(0, 0, 0, 0)
|
||||||
img4 := NewImage(4, 1, opengl.Nearest, false)
|
img4 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img4.Fill(color.RGBA{0, 0, 0, 0})
|
img4.Fill(0, 0, 0, 0)
|
||||||
img5 := NewImage(4, 1, opengl.Nearest, false)
|
img5 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img5.Fill(color.RGBA{0, 0, 0, 0})
|
img5.Fill(0, 0, 0, 0)
|
||||||
img6 := NewImage(4, 1, opengl.Nearest, false)
|
img6 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img6.Fill(color.RGBA{0, 0, 0, 0})
|
img6.Fill(0, 0, 0, 0)
|
||||||
img7 := NewImage(4, 1, opengl.Nearest, false)
|
img7 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img7.Fill(color.RGBA{0, 0, 0, 0})
|
img7.Fill(0, 0, 0, 0)
|
||||||
defer func() {
|
defer func() {
|
||||||
img7.Dispose()
|
img7.Dispose()
|
||||||
img6.Dispose()
|
img6.Dispose()
|
||||||
@ -298,7 +298,7 @@ func TestRestoreRecursive(t *testing.T) {
|
|||||||
base.Pix[3] = 0xff
|
base.Pix[3] = 0xff
|
||||||
img0 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
img0 := NewImageFromImage(base, 4, 1, opengl.Nearest)
|
||||||
img1 := NewImage(4, 1, opengl.Nearest, false)
|
img1 := NewImage(4, 1, opengl.Nearest, false)
|
||||||
img1.Fill(color.RGBA{0, 0, 0, 0})
|
img1.Fill(0, 0, 0, 0)
|
||||||
defer func() {
|
defer func() {
|
||||||
img1.Dispose()
|
img1.Dispose()
|
||||||
img0.Dispose()
|
img0.Dispose()
|
||||||
|
Loading…
Reference in New Issue
Block a user