Sort the DirectX video modes largest to smallest

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401730
This commit is contained in:
Sam Lantinga 2006-05-07 04:02:48 +00:00
parent a74719991c
commit 3a0d72c6e5
3 changed files with 16 additions and 3 deletions

View file

@ -348,7 +348,6 @@ int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat)
#endif
}
/* Sort the mode lists */
if( i > 1 )
for ( i=0; i<NUM_MODELISTS; ++i ) {
if ( SDL_nummodes[i] > 0 ) {
SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes);
@ -361,7 +360,7 @@ int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat)
// because SDL surface conversion is much faster than the WinCE one.
// Although it should be tested on devices with graphics accelerator.
DIB_AddMode(this, vformat->BitsPerPixel,
DIB_AddMode(this, vformat->BitsPerPixel,
GetDeviceCaps(GetDC(NULL), HORZRES),
GetDeviceCaps(GetDC(NULL), VERTRES));

View file

@ -636,6 +636,16 @@ VideoBootStrap DIRECTX_bootstrap = {
DX5_Available, DX5_CreateDevice
};
static int cmpmodes(const void *va, const void *vb)
{
SDL_Rect *a = *(SDL_Rect **)va;
SDL_Rect *b = *(SDL_Rect **)vb;
if ( a->w == b->w )
return b->h - a->h;
else
return b->w - a->w;
}
static HRESULT WINAPI EnumModes2(DDSURFACEDESC *desc, VOID *udata)
{
SDL_VideoDevice *this = (SDL_VideoDevice *)udata;
@ -955,6 +965,10 @@ int DX5_VideoInit(_THIS, SDL_PixelFormat *vformat)
SDL_modelist[i][j] = &rect->r;
}
SDL_modelist[i][j] = NULL;
if ( SDL_nummodes[i] > 0 ) {
SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes);
}
}
/* Fill in some window manager capabilities */

View file

@ -617,7 +617,7 @@ int X11_GetVideoModes(_THIS)
}
/* sort the mode list descending as SDL expects */
qsort(SDL_modelist, nsizes, sizeof *SDL_modelist, cmpmodelist);
SDL_qsort(SDL_modelist, nsizes, sizeof *SDL_modelist, cmpmodelist);
SDL_modelist[i] = NULL; /* terminator */
use_xrandr = xrandr_major * 100 + xrandr_minor;