diff --git a/internal/graphicsdriver/metal/graphics.go b/internal/graphicsdriver/metal/graphics.go index 54f71d4ce..d6b88e221 100644 --- a/internal/graphicsdriver/metal/graphics.go +++ b/internal/graphicsdriver/metal/graphics.go @@ -440,7 +440,7 @@ func (g *Graphics) NewImage(width, height int) (driver.Image, error) { Width: graphics.InternalImageSize(width), Height: graphics.InternalImageSize(height), StorageMode: storageMode, - Usage: textureUsage, + Usage: mtl.TextureUsageShaderRead | mtl.TextureUsageRenderTarget, } var t mtl.Texture g.t.Call(func() error { @@ -873,6 +873,10 @@ func (i *Image) ReplacePixels(args []*driver.ReplacePixelsArgs) { if g.drawCalled { g.flush(true, false) g.drawCalled = false + + // When mtl.TextureUsageRenderTarget is specified, synchronizing the texture memory before replacing + // a region seems necessary (#1213). + i.syncTexture() } g.t.Call(func() error { diff --git a/internal/graphicsdriver/metal/view_ios.go b/internal/graphicsdriver/metal/view_ios.go index bc8b9a7a1..18374f66b 100644 --- a/internal/graphicsdriver/metal/view_ios.go +++ b/internal/graphicsdriver/metal/view_ios.go @@ -58,8 +58,6 @@ func (v *view) update() { } const ( - textureUsage = mtl.TextureUsageShaderRead | mtl.TextureUsageRenderTarget - storageMode = mtl.StorageModeShared resourceStorageMode = mtl.ResourceStorageModeShared ) diff --git a/internal/graphicsdriver/metal/view_macos.go b/internal/graphicsdriver/metal/view_macos.go index b80de05b6..1d97ddc6f 100644 --- a/internal/graphicsdriver/metal/view_macos.go +++ b/internal/graphicsdriver/metal/view_macos.go @@ -46,9 +46,6 @@ func (v *view) update() { } const ( - // MTLTextureUsageRenderTarget might cause a problematic render result. Not sure the reason. - textureUsage = mtl.TextureUsageShaderRead - storageMode = mtl.StorageModeManaged resourceStorageMode = mtl.ResourceStorageModeManaged )