diff --git a/shader/crt_basic.go b/shader/crt_basic.go index f8ad08c..84b580b 100644 --- a/shader/crt_basic.go +++ b/shader/crt_basic.go @@ -87,6 +87,9 @@ type CrtBasic struct { } func (b *CrtBasic) Apply(screen *ebiten.Image, buffer *ebiten.Image) error { + b.Lock() + defer b.Unlock() + b.tick += 1 / 60.0 var options ebiten.DrawRectShaderOptions options.GeoM.Translate(0, 0) diff --git a/shader/crt_lotte.go b/shader/crt_lotte.go index c3f1b0d..fa21431 100644 --- a/shader/crt_lotte.go +++ b/shader/crt_lotte.go @@ -310,6 +310,9 @@ type CrtLotte struct { } func (s *CrtLotte) Apply(screen *ebiten.Image, buffer *ebiten.Image) error { + s.Lock() + defer s.Unlock() + s.Uniforms["ScreenSize"] = []float32{float32(screen.Bounds().Dx()), float32(screen.Bounds().Dy())} s.Uniforms["TextureSize"] = []float32{float32(buffer.Bounds().Dx()), float32(buffer.Bounds().Dy())} diff --git a/shader/shader.go b/shader/shader.go index 4669cf9..a1be376 100644 --- a/shader/shader.go +++ b/shader/shader.go @@ -1,17 +1,24 @@ package shader -import "github.com/hajimehoshi/ebiten/v2" +import ( + "github.com/hajimehoshi/ebiten/v2" + "sync" +) type Shader interface { Apply(screen *ebiten.Image, buffer *ebiten.Image) error } type BaseShader struct { + sync.Mutex Shader *ebiten.Shader Uniforms map[string]any } func (b *BaseShader) Apply(screen *ebiten.Image, buffer *ebiten.Image) error { + b.Lock() + defer b.Unlock() + var options ebiten.DrawRectShaderOptions options.GeoM.Translate(0, 0) options.Images[0] = buffer