From b7e46361f5668ba313dd393170265cdd04d8e6e9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 21 Mar 2026 14:08:40 -0700 Subject: [PATCH] Fixed incorrect sampler when changing Metal draw state (cherry picked from commit 0f9292a367424edd4feb5917d23345f28ff32694) --- src/render/metal/SDL_render_metal.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m index a5fb3bd233..60085ed25b 100644 --- a/src/render/metal/SDL_render_metal.m +++ b/src/render/metal/SDL_render_metal.m @@ -1369,6 +1369,7 @@ typedef struct size_t constants_offset; SDL_Texture *texture; bool texture_palette; + SDL_PixelFormat texture_format; SDL_ScaleMode texture_scale_mode; SDL_TextureAddressMode texture_address_mode_u; SDL_TextureAddressMode texture_address_mode_v; @@ -1645,7 +1646,8 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c statecache->texture = texture; } - if (cmd->data.draw.texture_scale_mode != statecache->texture_scale_mode || + if (texture->format != statecache->texture_format || + cmd->data.draw.texture_scale_mode != statecache->texture_scale_mode || cmd->data.draw.texture_address_mode_u != statecache->texture_address_mode_u || cmd->data.draw.texture_address_mode_v != statecache->texture_address_mode_v) { id mtlsampler = GetSampler(data, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v); @@ -1654,6 +1656,7 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c } [data.mtlcmdencoder setFragmentSamplerState:mtlsampler atIndex:0]; + statecache->texture_format = texture->format; statecache->texture_scale_mode = cmd->data.draw.texture_scale_mode; statecache->texture_address_mode_u = cmd->data.draw.texture_address_mode_u; statecache->texture_address_mode_v = cmd->data.draw.texture_address_mode_v;