/* ==================== PrintDevMode ==================== */ static void PrintDevMode( DEVMODE & devmode ) { common->Printf( " dmPosition.x : %i\n", devmode.dmPosition.x ); common->Printf( " dmPosition.y : %i\n", devmode.dmPosition.y ); common->Printf( " dmBitsPerPel : %i\n", devmode.dmBitsPerPel ); common->Printf( " dmPelsWidth : %i\n", devmode.dmPelsWidth ); common->Printf( " dmPelsHeight : %i\n", devmode.dmPelsHeight ); common->Printf( " dmDisplayFixedOutput: %s\n", DMDFO( devmode.dmDisplayFixedOutput ) ); common->Printf( " dmDisplayFlags : 0x%x\n", devmode.dmDisplayFlags ); common->Printf( " dmDisplayFrequency : %i\n", devmode.dmDisplayFrequency ); }
/* ==================== R_GetModeListForDisplay ==================== */ bool R_GetModeListForDisplay( const int requestedDisplayNum, idList<vidMode_t>& modeList ) { modeList.Clear(); bool verbose = false; for( int displayNum = requestedDisplayNum; ; displayNum++ ) { DISPLAY_DEVICE device; device.cb = sizeof( device ); if( !EnumDisplayDevices( 0, // lpDevice displayNum, &device, 0 /* dwFlags */ ) ) { return false; } // get the monitor for this display if( !( device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ) ) { continue; } DISPLAY_DEVICE monitor; monitor.cb = sizeof( monitor ); if( !EnumDisplayDevices( device.DeviceName, 0, &monitor, 0 /* dwFlags */ ) ) { continue; } DEVMODE devmode; devmode.dmSize = sizeof( devmode ); if( verbose ) { common->Printf( "display device: %i\n", displayNum ); common->Printf( " DeviceName : %s\n", device.DeviceName ); common->Printf( " DeviceString: %s\n", device.DeviceString ); common->Printf( " StateFlags : 0x%x\n", device.StateFlags ); common->Printf( " DeviceID : %s\n", device.DeviceID ); common->Printf( " DeviceKey : %s\n", device.DeviceKey ); common->Printf( " DeviceName : %s\n", monitor.DeviceName ); common->Printf( " DeviceString: %s\n", monitor.DeviceString ); common->Printf( " StateFlags : 0x%x\n", monitor.StateFlags ); common->Printf( " DeviceID : %s\n", monitor.DeviceID ); common->Printf( " DeviceKey : %s\n", monitor.DeviceKey ); } for( int modeNum = 0 ; ; modeNum++ ) { if( !EnumDisplaySettings( device.DeviceName, modeNum, &devmode ) ) { break; } if( devmode.dmBitsPerPel != 32 ) { continue; } if( ( devmode.dmDisplayFrequency != 60 ) && ( devmode.dmDisplayFrequency != 120 ) ) { continue; } if( devmode.dmPelsHeight < 720 ) { continue; } if( verbose ) { common->Printf( " -------------------\n" ); common->Printf( " modeNum : %i\n", modeNum ); common->Printf( " dmPosition.x : %i\n", devmode.dmPosition.x ); common->Printf( " dmPosition.y : %i\n", devmode.dmPosition.y ); common->Printf( " dmBitsPerPel : %i\n", devmode.dmBitsPerPel ); common->Printf( " dmPelsWidth : %i\n", devmode.dmPelsWidth ); common->Printf( " dmPelsHeight : %i\n", devmode.dmPelsHeight ); common->Printf( " dmDisplayFixedOutput: %s\n", DMDFO( devmode.dmDisplayFixedOutput ) ); common->Printf( " dmDisplayFlags : 0x%x\n", devmode.dmDisplayFlags ); common->Printf( " dmDisplayFrequency : %i\n", devmode.dmDisplayFrequency ); } vidMode_t mode; mode.width = devmode.dmPelsWidth; mode.height = devmode.dmPelsHeight; mode.displayHz = devmode.dmDisplayFrequency; modeList.AddUnique( mode ); } if( modeList.Num() > 0 ) { // sort with lowest resolution first modeList.SortWithTemplate( idSort_VidMode() ); return true; } } // Never gets here }