if(multiMonitorInfo.numMonitors)
{
int count = 0;
// get screen rects
multiMonitorInfo.monitorInfo = (MYMONITORINFO*)sys_malloc(sizeof(MYMONITORINFO)*multiMonitorInfo.numMonitors);
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&count);
// get display modes
D3DDISPLAYMODE displayMode;
int i,j;
int last_res[2];
last_res[0]=0;
last_res[1]=0;
for(i = 0; i < multiMonitorInfo.numMonitors; i++)
{
MYMONITORINFO *pinfo = &(multiMonitorInfo.monitorInfo)[i];
int maxModes = pd3dKu->GetAdapterModeCount(i,D3DFMT_X8R8G8B8);
for(j = 0; j < maxModes; j++)
{
if(D3D_OK != pd3dKu->EnumAdapterModes(i,D3DFMT_X8R8G8B8,j,&displayMode)) break;
if(displayMode.Width >= MMminWidth && displayMode.Height >= MMminHeight/* && displayMode.RefreshRate == multiMonitorInfo.currentFrequency*/)
{
if(displayMode.Width==last_res[0]&&displayMode.Height==last_res[1])
{
//skip
}
else
{
pinfo->numModes++;
last_res[0]=displayMode.Width;
last_res[1]=displayMode.Height;
}
}
}
if(pinfo->numModes)
{
last_res[0]=0;
last_res[1]=0;
pinfo->displayModes = (DISPLAYMODE*)sys_malloc(sizeof(DISPLAYMODE)*pinfo->numModes);
int k = 0;
for(j = 0; j < maxModes; j++)
{
if(D3D_OK != pd3dKu->EnumAdapterModes(i,D3DFMT_X8R8G8B8,j,&displayMode)) break;
if(displayMode.Width >= MMminWidth && displayMode.Height >= MMminHeight /*&& displayMode.RefreshRate == multiMonitorInfo.currentFrequency*/)
{
if(displayMode.Width==last_res[0]&&displayMode.Height==last_res[1])
{
//skip
}
else
{
DISPLAYMODE* pMode = &(pinfo->displayModes)[k];
pMode->Width = displayMode.Width;
pMode->Height = displayMode.Height;
k++;
last_res[0]=displayMode.Width;
last_res[1]=displayMode.Height;
}
}
}
}
else pinfo->displayModes = NULL;
MMInfoSortDisplayModes(pinfo,0);
}
}