# HG changeset patch # User Sam Lantinga # Date 1297527478 28800 # Node ID c5a04f3c3908adf11d050de2374084ed2f6d4df4 # Parent 93ea62a5ba8f911dc18314d08fdc694687bf7e5a Fixed a crash caused by the 1.2 code path getting a YV12 texture. :) diff -r 93ea62a5ba8f -r c5a04f3c3908 src/render/SDL_render.c --- a/src/render/SDL_render.c Sat Feb 12 08:17:37 2011 -0800 +++ b/src/render/SDL_render.c Sat Feb 12 08:17:58 2011 -0800 @@ -206,12 +206,22 @@ 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 @@ } 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 -r 93ea62a5ba8f -r c5a04f3c3908 src/video/SDL_video.c --- a/src/video/SDL_video.c Sat Feb 12 08:17:37 2011 -0800 +++ b/src/video/SDL_video.c Sat Feb 12 08:17:58 2011 -0800 @@ -274,7 +274,8 @@ /* 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; }