diff --git a/stepmania/src/arch/MovieTexture/MovieTexture_DShow.cpp b/stepmania/src/arch/MovieTexture/MovieTexture_DShow.cpp index 60d4f8e3de..1c19863d8c 100644 --- a/stepmania/src/arch/MovieTexture/MovieTexture_DShow.cpp +++ b/stepmania/src/arch/MovieTexture/MovieTexture_DShow.cpp @@ -316,9 +316,29 @@ void MovieTexture_DShow::CreateTexture() * Some way to figure this out dynamically would be nice, but it's probably * impossible. (For example, 24-bit textures may even be cheaper on pure * AGP cards; 16-bit requires a conversion.) */ - m_PixelFormat = FMT_RGB8; - if(TEXTUREMAN->GetTextureColorDepth() == 16) - m_PixelFormat = FMT_RGB5; + switch( TEXTUREMAN->GetTextureColorDepth() ) + { + default: + ASSERT(0); + case 16: + if( DISPLAY->SupportsTextureFormat(FMT_RGB5) ) + m_PixelFormat = FMT_RGB5; + else + m_PixelFormat = FMT_RGBA4; // everything supports RGBA4 + + break; + case 32: + if( DISPLAY->SupportsTextureFormat(FMT_RGB8) ) + m_PixelFormat = FMT_RGB8; + else if( DISPLAY->SupportsTextureFormat(FMT_RGBA8) ) + m_PixelFormat = FMT_RGBA8; + else if( DISPLAY->SupportsTextureFormat(FMT_RGB5) ) + m_PixelFormat = FMT_RGB5; + else + m_PixelFormat = FMT_RGBA4; // everything supports RGBA4 + break; + } + const PixelFormatDesc *pfd = DISPLAY->GetPixelFormatDesc(m_PixelFormat); m_img = SDL_CreateRGBSurfaceSane(SDL_SWSURFACE, m_iTextureWidth, m_iTextureHeight,