// ComboBox
{
MComboBox *pWidget = (MComboBox*)pResource->FindWidget("ScreenResolution");
if(pWidget)
{
pWidget->RemoveAll();
gDisplayMode.clear();
int dmIndex = 0;
char szBuf[256];
D3DDISPLAYMODE ddm;
D3DFORMAT format[2] = {
D3DFMT_X8R8G8B8,
D3DFMT_R5G6B5
};
for( int i=0;i<2;i++)
{
int nDM = RGetAdapterModeCount( format[i] );
mlog("Number of Display mode : %d\n", nDM );
for( int idm = 0 ; idm < nDM; ++idm )
{
if( REnumAdapterMode( D3DADAPTER_DEFAULT,format[i], idm, &ddm ))
{
if( ddm.Width < 640 || ddm.Height < 480 )
continue;
if( ((float)ddm.Height / (float)ddm.Width != 0.75f) &&
((float)ddm.Height / (float)ddm.Width != 0.625f) )
continue;
ddm.RefreshRate = DEFAULT_REFRESHRATE;
if( ddm.Format == D3DFMT_X8R8G8B8 || ddm.Format == D3DFMT_R5G6B5 )
{
map<int, D3DDISPLAYMODE>::iterator iter_ = find_if( gDisplayMode.begin(), gDisplayMode.end(), value_equals<int, D3DDISPLAYMODE>(ddm));
if( iter_ == gDisplayMode.end() )
{
gDisplayMode.insert( map<int, D3DDISPLAYMODE>::value_type( dmIndex++, ddm ) );
sprintf( szBuf, "%d x %d %dbpp", ddm.Width, ddm.Height, ddm.Format==D3DFMT_X8R8G8B8?32:16 );
pWidget->Add(szBuf);
}
}
}
}
}
// ¸¸¾à µî·ÏµÈ ÇØ»óµµ°¡ Çϳªµµ ¾øÀ»°æ¿ì °Á¦·Î µî·Ï
if( gDisplayMode.size() == 0 )
{
for( int i = 0 ; i < 10; ++i )
{
ddm.Width = widths[i/2];
ddm.Height = heights[i/2];
ddm.RefreshRate = DEFAULT_REFRESHRATE;
ddm.Format = ( ( i%2 == 1) ? D3DFMT_X8R8G8B8 : D3DFMT_R5G6B5 );
int bpp = (i%2 == 1)? 32 : 16;
gDisplayMode.insert( map<int, D3DDISPLAYMODE>::value_type(i,ddm) );
sprintf( szBuf, "%dx%d %d bpp", ddm.Width, ddm.Height, bpp );
pWidget->Add( szBuf );
}
}
ddm.Width = RGetScreenWidth();
ddm.Height = RGetScreenHeight();
ddm.RefreshRate = DEFAULT_REFRESHRATE;
ddm.Format = RGetPixelFormat();
map< int, D3DDISPLAYMODE>::iterator iter = find_if( gDisplayMode.begin(), gDisplayMode.end(), value_equals<int, D3DDISPLAYMODE>(ddm));
pWidget->SetSelIndex( iter->first );
}