mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 18:58:54 +01:00
examples/alphablending: Refactoring: Reduce draw calls
This commit is contained in:
parent
a2689b8b8c
commit
5a1099db27
@ -29,11 +29,30 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
count int
|
||||
tmpRenderTarget *ebiten.Image
|
||||
ebitenImage *ebiten.Image
|
||||
count int
|
||||
ebitenImage *ebiten.Image
|
||||
)
|
||||
|
||||
type imageParts struct {
|
||||
diff float64
|
||||
}
|
||||
|
||||
func (p *imageParts) Src(i int) (int, int, int, int) {
|
||||
w, h := ebitenImage.Size()
|
||||
return 0, 0, w, h
|
||||
}
|
||||
|
||||
func (p *imageParts) Dst(i int) (int, int, int, int) {
|
||||
x := int(float64(i%10)*p.diff + 15)
|
||||
y := int(float64(i/10)*p.diff + 20)
|
||||
w, h := ebitenImage.Size()
|
||||
return x, y, x + w, y + h
|
||||
}
|
||||
|
||||
func (p *imageParts) Len() int {
|
||||
return 10 * 10
|
||||
}
|
||||
|
||||
func update(screen *ebiten.Image) error {
|
||||
count++
|
||||
count %= ebiten.FPS * 10
|
||||
@ -45,27 +64,15 @@ func update(screen *ebiten.Image) error {
|
||||
diff = float64(480-count) * 0.2
|
||||
}
|
||||
|
||||
if err := tmpRenderTarget.Clear(); err != nil {
|
||||
screen.Fill(color.NRGBA{0x00, 0x00, 0x80, 0xff})
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.ColorM.Scale(1.0, 1.0, 1.0, 0.5)
|
||||
op.ImageParts = &imageParts{
|
||||
diff: diff,
|
||||
}
|
||||
if err := screen.DrawImage(ebitenImage, op); err != nil {
|
||||
return err
|
||||
}
|
||||
for i := 0; i < 10; i++ {
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(15+float64(i)*diff, 20)
|
||||
op.ColorM.Scale(1.0, 1.0, 1.0, 0.5)
|
||||
if err := tmpRenderTarget.DrawImage(ebitenImage, op); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
screen.Fill(color.NRGBA{0x00, 0x00, 0x80, 0xff})
|
||||
for i := 0; i < 10; i++ {
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(0, float64(i)*diff)
|
||||
if err := screen.DrawImage(tmpRenderTarget, op); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -75,10 +82,6 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
tmpRenderTarget, err = ebiten.NewImage(screenWidth, screenHeight, ebiten.FilterNearest)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := ebiten.Run(update, screenWidth, screenHeight, 2, "Alpha Blending (Ebiten Demo)"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user