mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
Add internal/hooks to replace internal/audiobinding
This commit is contained in:
parent
e3023889ac
commit
392ee92aeb
@ -44,8 +44,8 @@ import (
|
||||
|
||||
"github.com/hajimehoshi/oto"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/internal/audiobinding"
|
||||
"github.com/hajimehoshi/ebiten/internal/clock"
|
||||
"github.com/hajimehoshi/ebiten/internal/hooks"
|
||||
"github.com/hajimehoshi/ebiten/internal/sync"
|
||||
"github.com/hajimehoshi/ebiten/internal/web"
|
||||
)
|
||||
@ -155,7 +155,9 @@ type Context struct {
|
||||
initedCh chan struct{}
|
||||
pingCount int
|
||||
sampleRate int
|
||||
m sync.Mutex
|
||||
err error
|
||||
|
||||
m sync.Mutex
|
||||
}
|
||||
|
||||
var (
|
||||
@ -163,6 +165,15 @@ var (
|
||||
theContextLock sync.Mutex
|
||||
)
|
||||
|
||||
func init() {
|
||||
hooks.AppendHookOnUpdate(func() error {
|
||||
theContext.m.Lock()
|
||||
err := theContext.err
|
||||
theContext.m.Unlock()
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
// NewContext creates a new audio context with the given sample rate.
|
||||
//
|
||||
// The sample rate is also used for decoding MP3 with audio/mp3 package
|
||||
@ -234,7 +245,7 @@ func (c *Context) loop() {
|
||||
// but there are some known environment that is too short (e.g. Windows on Parallels, iOS).
|
||||
p, err := oto.NewPlayer(c.sampleRate, channelNum, bytesPerSample, 8192)
|
||||
if err != nil {
|
||||
audiobinding.SetError(err)
|
||||
c.err = err
|
||||
return
|
||||
}
|
||||
defer p.Close()
|
||||
@ -256,7 +267,7 @@ func (c *Context) loop() {
|
||||
|
||||
const n = 4096
|
||||
if _, err := io.CopyN(p, c.players, n); err != nil {
|
||||
audiobinding.SetError(err)
|
||||
c.err = err
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -17,8 +17,8 @@ package ebiten
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/internal/audiobinding"
|
||||
"github.com/hajimehoshi/ebiten/internal/clock"
|
||||
"github.com/hajimehoshi/ebiten/internal/hooks"
|
||||
"github.com/hajimehoshi/ebiten/internal/restorable"
|
||||
"github.com/hajimehoshi/ebiten/internal/ui"
|
||||
"github.com/hajimehoshi/ebiten/internal/web"
|
||||
@ -98,11 +98,6 @@ func drawWithFittingScale(dst *Image, src *Image) {
|
||||
}
|
||||
|
||||
func (c *graphicsContext) Update(afterFrameUpdate func()) error {
|
||||
select {
|
||||
case err := <-audiobinding.Error():
|
||||
return err
|
||||
default:
|
||||
}
|
||||
updateCount := clock.Update()
|
||||
|
||||
if err := c.initializeIfNeeded(); err != nil {
|
||||
@ -111,6 +106,9 @@ func (c *graphicsContext) Update(afterFrameUpdate func()) error {
|
||||
for i := 0; i < updateCount; i++ {
|
||||
restorable.ClearVolatileImages()
|
||||
setRunningSlowly(i < updateCount-1)
|
||||
if err := hooks.Run(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.f(c.offscreen); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright 2017 The Ebiten Authors
|
||||
// Copyright 2018 The Ebiten Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@ -12,14 +12,21 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package audiobinding
|
||||
package hooks
|
||||
|
||||
var ch = make(chan error, 1)
|
||||
var onUpdateHooks = []func() error{}
|
||||
|
||||
func Error() <-chan error {
|
||||
return ch
|
||||
// AppendHookOnUpdate appends a hook function that is run before the main update function
|
||||
// every frame.
|
||||
func AppendHookOnUpdate(f func() error) {
|
||||
onUpdateHooks = append(onUpdateHooks, f)
|
||||
}
|
||||
|
||||
func SetError(err error) {
|
||||
ch <- err
|
||||
func Run() error {
|
||||
for _, f := range onUpdateHooks {
|
||||
if err := f(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user