From e7dd7bbee9cf725f490eafac54330fef6dedc1b4 Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Fri, 12 May 2023 17:45:50 +0200 Subject: [PATCH] Added mutex to access of uniform. --- shader/crt_basic.go | 3 +++ shader/crt_lotte.go | 3 +++ shader/shader.go | 9 ++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) 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