From fdfcfc056696c86a67c9b1f0c4f6fecc9d3f678c Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 6 Feb 2026 09:50:18 -0800 Subject: [PATCH] Make sure native textures have the same channel precision if possible Fixes https://github.com/libsdl-org/SDL/issues/14882 --- src/render/SDL_render.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 3d1c95f2f7..d41d6c5f8d 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -1469,10 +1469,12 @@ static SDL_PixelFormat GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_Pix } else { bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(format); bool isIndexed = SDL_ISPIXELFORMAT_INDEXED(format); + int size = SDL_BYTESPERPIXEL(format); // We just want to match the first format that has the same channels for (i = 0; i < renderer->num_texture_formats; ++i) { if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) && + SDL_BYTESPERPIXEL(renderer->texture_formats[i]) == size && SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == hasAlpha && SDL_ISPIXELFORMAT_INDEXED(renderer->texture_formats[i]) == isIndexed) { return renderer->texture_formats[i]; @@ -1846,9 +1848,11 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s // Indexed formats don't support the transparency needed for color-keyed surfaces bool preferIndexed = SDL_ISPIXELFORMAT_INDEXED(surface->format) && !needAlpha; + int size = SDL_BYTESPERPIXEL(format); for (i = 0; i < renderer->num_texture_formats; ++i) { if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) && + SDL_BYTESPERPIXEL(renderer->texture_formats[i]) == size && SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == needAlpha && SDL_ISPIXELFORMAT_INDEXED(renderer->texture_formats[i]) == preferIndexed) { format = renderer->texture_formats[i];