From 615447995ad48316b9556ee02be862452c808381 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 12 Feb 2011 08:17:58 -0800 Subject: [PATCH] Fixed a crash caused by the 1.2 code path getting a YV12 texture. :) --- src/render/SDL_render.c | 23 +++++++++++++++++------ src/video/SDL_video.c | 3 ++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 907b3d2dd..ef4e9568c 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -206,12 +206,22 @@ static Uint32 GetClosestSupportedFormat(SDL_Renderer * renderer, Uint32 format) { Uint32 i; - SDL_bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(format); - /* We just want to match the first format that has the same channels */ - for (i = 0; i < renderer->info.num_texture_formats; ++i) { - if (SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == hasAlpha) { - return renderer->info.texture_formats[i]; + if (SDL_ISPIXELFORMAT_FOURCC(format)) { + /* Look for an exact match */ + for (i = 0; i < renderer->info.num_texture_formats; ++i) { + if (renderer->info.texture_formats[i] == format) { + return renderer->info.texture_formats[i]; + } + } + } else { + SDL_bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(format); + + /* We just want to match the first format that has the same channels */ + for (i = 0; i < renderer->info.num_texture_formats; ++i) { + if (SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == hasAlpha) { + return renderer->info.texture_formats[i]; + } } } return renderer->info.texture_formats[0]; @@ -313,7 +323,8 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface) } format = renderer->info.texture_formats[0]; for (i = 0; i < renderer->info.num_texture_formats; ++i) { - if (SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == needAlpha) { + if (!SDL_ISPIXELFORMAT_FOURCC(renderer->info.texture_formats[i]) && + SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == needAlpha) { format = renderer->info.texture_formats[i]; break; } diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 58830b4d0..7f2974381 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -274,7 +274,8 @@ SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pix /* Find the first format without an alpha channel */ *format = info.texture_formats[0]; for (i = 0; i < info.num_texture_formats; ++i) { - if (!SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) { + if (!SDL_ISPIXELFORMAT_FOURCC(info.texture_formats[i]) && + !SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) { *format = info.texture_formats[i]; break; }