examples/highdpi: Async loading

This commit is contained in:
Hajime Hoshi 2018-01-29 23:04:11 +09:00
parent 2322c5600b
commit 19f7f44f1c

View File

@ -30,6 +30,7 @@ import (
var (
count int
highDPIImage *ebiten.Image
highDPIImageCh = make(chan *ebiten.Image)
)
func init() {
@ -37,6 +38,8 @@ func init() {
// https://commons.wikimedia.org/wiki/File:As08-16-2593.jpg
const url = "https://upload.wikimedia.org/wikipedia/commons/1/1f/As08-16-2593.jpg"
// Load the image asynchronously.
go func() {
res, err := http.Get(url)
if err != nil {
log.Fatal(err)
@ -48,17 +51,35 @@ func init() {
log.Fatal(err)
}
highDPIImage, err = ebiten.NewImageFromImage(img, ebiten.FilterLinear)
eimg, err := ebiten.NewImageFromImage(img, ebiten.FilterLinear)
if err != nil {
log.Fatal(err)
}
highDPIImageCh <- eimg
close(highDPIImageCh)
}()
}
func update(screen *ebiten.Image) error {
if highDPIImage == nil {
// Use select and 'default' clause for non-blocking receiving.
select {
case img := <-highDPIImageCh:
highDPIImage = img
default:
}
}
if ebiten.IsRunningSlowly() {
return nil
}
if highDPIImage == nil {
ebitenutil.DebugPrint(screen, "Loading the image...")
return nil
}
scale := ebiten.DeviceScaleFactor()
sw, sh := screen.Size()