public override List <GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var gameWindowiOS = gameWindow as GameWindowiOS; if (gameWindowiOS != null) { // Unlike Desktop and WinRT, the list of best devices are completely fixed in WP8 XAML // So we return a single element var deviceInfo = new GraphicsDeviceInformation { Adapter = GraphicsAdapterFactory.Default, GraphicsProfile = GraphicsProfile.Level_9_3, PresentationParameters = new PresentationParameters(gameWindowiOS.ClientBounds.Width, gameWindowiOS.ClientBounds.Height, gameWindowiOS.NativeWindow) { DepthStencilFormat = PixelFormat.D16_UNorm, } }; return(new List <GraphicsDeviceInformation>() { deviceInfo }); } return(base.FindBestDevices(preferredParameters)); }
public override List <GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var gameWindowAndroid = gameWindow as GameWindowAndroid; if (gameWindowAndroid != null) { // Everything is already created at this point, just transmit what has been done var deviceInfo = new GraphicsDeviceInformation { Adapter = GraphicsAdapterFactory.Default, GraphicsProfile = GraphicsProfile.Level_9_3, PresentationParameters = new PresentationParameters(gameWindowAndroid.ClientBounds.Width, gameWindowAndroid.ClientBounds.Height, gameWindowAndroid.NativeWindow) { // TODO: PDX-364: Transmit what was actually created BackBufferFormat = preferredParameters.PreferredBackBufferFormat, DepthStencilFormat = preferredParameters.PreferredDepthStencilFormat, } }; return(new List <GraphicsDeviceInformation>() { deviceInfo }); } return(base.FindBestDevices(preferredParameters)); }
/// <summary> /// Finds the best device that is compatible with the preferences defined in this instance. /// </summary> /// <param name="anySuitableDevice">if set to <c>true</c> a device can be selected from any existing adapters, otherwise, it will select only from default adapter.</param> /// <returns>The graphics device information.</returns> protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { // Setup preferred parameters before passing them to the factory var preferredParameters = new GameGraphicsParameters { PreferredBackBufferWidth = PreferredBackBufferWidth, PreferredBackBufferHeight = PreferredBackBufferHeight, PreferredBackBufferFormat = PreferredBackBufferFormat, PreferredDepthStencilFormat = PreferredDepthStencilFormat, PreferredRefreshRate = PreferredRefreshRate, PreferredFullScreenOutputIndex = PreferredFullScreenOutputIndex, IsFullScreen = IsFullScreen, PreferMultiSampling = PreferMultiSampling, SynchronizeWithVerticalRetrace = SynchronizeWithVerticalRetrace, PreferredGraphicsProfile = (GraphicsProfile[])PreferredGraphicsProfile.Clone(), }; // Setup resized value if there is a resize pending if (!IsFullScreen && isBackBufferToResize) { preferredParameters.PreferredBackBufferWidth = resizedBackBufferWidth; preferredParameters.PreferredBackBufferHeight = resizedBackBufferHeight; } GraphicsProfile availableGraphicsProfile; if (!IsPreferredProfileAvailable(preferredParameters.PreferredGraphicsProfile, out availableGraphicsProfile)) { throw new InvalidOperationException(string.Format("Graphics profiles [{0}] are not supported by the device. The highest available profile is [{1}].", string.Join(", ", preferredParameters.PreferredGraphicsProfile), availableGraphicsProfile)); } var devices = graphicsDeviceFactory.FindBestDevices(preferredParameters); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found"); } RankDevices(devices); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found after ranking"); } return(devices[0]); }
public override List<GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var graphicsDeviceInfos = base.FindBestDevices(preferredParameters); // Special case where the default FindBestDevices is not working if (graphicsDeviceInfos.Count == 0) { var graphicsAdapter = GraphicsAdapterFactory.Adapters[0]; // Iterate on each preferred graphics profile foreach (var featureLevel in preferredParameters.PreferredGraphicsProfile) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { var deviceInfo = new GraphicsDeviceInformation { Adapter = graphicsAdapter, GraphicsProfile = featureLevel, PresentationParameters = { MultiSampleCount = MSAALevel.None, IsFullScreen = preferredParameters.IsFullScreen, PresentationInterval = preferredParameters.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate, DeviceWindowHandle = MainWindow.NativeWindow, } }; // Hardcoded format and refresh rate... // This is a workaround to allow this code to work inside the emulator // but this is not really robust // TODO: Check how to handle this case properly var displayMode = new DisplayMode(PixelFormat.B8G8R8A8_UNorm, gameWindow.ClientBounds.Width, gameWindow.ClientBounds.Height, new Rational(60, 1)); AddDevice(displayMode, deviceInfo, preferredParameters, graphicsDeviceInfos); // If the profile is supported, we are just using the first best one break; } } } return graphicsDeviceInfos; }
public override List <GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var graphicsDeviceInfos = base.FindBestDevices(preferredParameters); // Special case where the default FindBestDevices is not working if (graphicsDeviceInfos.Count == 0) { var graphicsAdapter = GraphicsAdapterFactory.Adapters[0]; // Iterate on each preferred graphics profile foreach (var featureLevel in preferredParameters.PreferredGraphicsProfile) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { var deviceInfo = new GraphicsDeviceInformation { Adapter = graphicsAdapter, GraphicsProfile = featureLevel, PresentationParameters = { MultiSampleCount = MSAALevel.None, IsFullScreen = preferredParameters.IsFullScreen, PresentationInterval = preferredParameters.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate, DeviceWindowHandle = MainWindow.NativeWindow, } }; // Hardcoded format and refresh rate... // This is a workaround to allow this code to work inside the emulator // but this is not really robust // TODO: Check how to handle this case properly var displayMode = new DisplayMode(PixelFormat.B8G8R8A8_UNorm, gameWindow.ClientBounds.Width, gameWindow.ClientBounds.Height, new Rational(60, 1)); AddDevice(displayMode, deviceInfo, preferredParameters, graphicsDeviceInfos); // If the profile is supported, we are just using the first best one break; } } } return(graphicsDeviceInfos); }
public override List <GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var gameWindowiOS = gameWindow as GameWindowiOS; if (gameWindowiOS != null) { var graphicsAdapter = GraphicsAdapterFactory.Default; var graphicsDeviceInfos = new List <GraphicsDeviceInformation>(); var preferredGraphicsProfiles = preferredParameters.PreferredGraphicsProfile; foreach (var featureLevel in preferredGraphicsProfiles) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { // Everything is already created at this point, just transmit what has been done var deviceInfo = new GraphicsDeviceInformation { Adapter = GraphicsAdapterFactory.Default, GraphicsProfile = featureLevel, PresentationParameters = new PresentationParameters(gameWindowiOS.ClientBounds.Width, gameWindowiOS.ClientBounds.Height, gameWindowiOS.NativeWindow) { // TODO: PDX-364: Transmit what was actually created BackBufferFormat = preferredParameters.PreferredBackBufferFormat, DepthStencilFormat = preferredParameters.PreferredDepthStencilFormat, } }; graphicsDeviceInfos.Add(deviceInfo); // If the profile is supported, we are just using the first best one break; } } return(graphicsDeviceInfos); } return(base.FindBestDevices(preferredParameters)); }
public override List<GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var gameWindowiOS = gameWindow as GameWindowiOS; if (gameWindowiOS != null) { var graphicsAdapter = GraphicsAdapterFactory.Default; var graphicsDeviceInfos = new List<GraphicsDeviceInformation>(); var preferredGraphicsProfiles = preferredParameters.PreferredGraphicsProfile; foreach (var featureLevel in preferredGraphicsProfiles) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { // Everything is already created at this point, just transmit what has been done var deviceInfo = new GraphicsDeviceInformation { Adapter = GraphicsAdapterFactory.Default, GraphicsProfile = featureLevel, PresentationParameters = new PresentationParameters(gameWindowiOS.ClientBounds.Width, gameWindowiOS.ClientBounds.Height, gameWindowiOS.NativeWindow) { // TODO: PDX-364: Transmit what was actually created BackBufferFormat = preferredParameters.PreferredBackBufferFormat, DepthStencilFormat = preferredParameters.PreferredDepthStencilFormat, } }; graphicsDeviceInfos.Add(deviceInfo); // If the profile is supported, we are just using the first best one break; } } return graphicsDeviceInfos; } return base.FindBestDevices(preferredParameters); }
public override List<GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var gameWindowiOS = gameWindow as GameWindowiOS; if (gameWindowiOS != null) { // Unlike Desktop and WinRT, the list of best devices are completely fixed in WP8 XAML // So we return a single element var deviceInfo = new GraphicsDeviceInformation { Adapter = GraphicsAdapterFactory.Default, GraphicsProfile = GraphicsProfile.Level_9_3, PresentationParameters = new PresentationParameters(gameWindowiOS.ClientBounds.Width, gameWindowiOS.ClientBounds.Height, gameWindowiOS.NativeWindow) { DepthStencilFormat = PixelFormat.D16_UNorm, } }; return new List<GraphicsDeviceInformation>() { deviceInfo }; } return base.FindBestDevices(preferredParameters); }
public virtual List<GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var graphicsDeviceInfos = new List<GraphicsDeviceInformation>(); // Iterate on each adapter foreach (var graphicsAdapter in GraphicsAdapterFactory.Adapters) { // Skip adapeters that don't have graphics output if (graphicsAdapter.Outputs.Length == 0) { continue; } var preferredGraphicsProfiles = preferredParameters.PreferredGraphicsProfile; // INTEL workaround: it seems Intel driver doesn't support properly feature level 9.x. Fallback to 10. if (graphicsAdapter.VendorId == 0x8086) preferredGraphicsProfiles = preferredGraphicsProfiles.Select(x => x < GraphicsProfile.Level_10_0 ? GraphicsProfile.Level_10_0 : x).ToArray(); // Iterate on each preferred graphics profile foreach (var featureLevel in preferredGraphicsProfiles) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { var deviceInfo = new GraphicsDeviceInformation { Adapter = graphicsAdapter, GraphicsProfile = featureLevel, PresentationParameters = { MultiSampleCount = MSAALevel.None, IsFullScreen = preferredParameters.IsFullScreen, PreferredFullScreenOutputIndex = preferredParameters.PreferredFullScreenOutputIndex, PresentationInterval = preferredParameters.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate, DeviceWindowHandle = MainWindow.NativeWindow, } }; var preferredMode = new DisplayMode(preferredParameters.PreferredBackBufferFormat, preferredParameters.PreferredBackBufferWidth, preferredParameters.PreferredBackBufferHeight, preferredParameters.PreferredRefreshRate); // if we want to switch to fullscreen, try to find only needed output, otherwise check them all if (preferredParameters.IsFullScreen) { if (preferredParameters.PreferredFullScreenOutputIndex < graphicsAdapter.Outputs.Length) { var output = graphicsAdapter.Outputs[preferredParameters.PreferredFullScreenOutputIndex]; var displayMode = output.FindClosestMatchingDisplayMode(preferredGraphicsProfiles, preferredMode); AddDevice(displayMode, deviceInfo, preferredParameters, graphicsDeviceInfos); } } else { AddDevice(preferredMode, deviceInfo, preferredParameters, graphicsDeviceInfos); } // If the profile is supported, we are just using the first best one break; } } } return graphicsDeviceInfos; }
protected void AddDevice(DisplayMode mode, GraphicsDeviceInformation deviceBaseInfo, GameGraphicsParameters preferredParameters, List<GraphicsDeviceInformation> graphicsDeviceInfos) { // TODO: Temporary woraround if (mode == null) mode = new DisplayMode(PixelFormat.R8G8B8A8_UNorm, 800, 480, new Rational(60, 1)); var deviceInfo = deviceBaseInfo.Clone(); deviceInfo.PresentationParameters.RefreshRate = mode.RefreshRate; if (preferredParameters.IsFullScreen) { deviceInfo.PresentationParameters.BackBufferFormat = mode.Format; deviceInfo.PresentationParameters.BackBufferWidth = mode.Width; deviceInfo.PresentationParameters.BackBufferHeight = mode.Height; } else { deviceInfo.PresentationParameters.BackBufferFormat = preferredParameters.PreferredBackBufferFormat; deviceInfo.PresentationParameters.BackBufferWidth = preferredParameters.PreferredBackBufferWidth; deviceInfo.PresentationParameters.BackBufferHeight = preferredParameters.PreferredBackBufferHeight; } // TODO: Handle multisampling deviceInfo.PresentationParameters.DepthStencilFormat = preferredParameters.PreferredDepthStencilFormat; deviceInfo.PresentationParameters.MultiSampleCount = MSAALevel.None; if (!graphicsDeviceInfos.Contains(deviceInfo)) { graphicsDeviceInfos.Add(deviceInfo); } }
public virtual List <GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters) { var graphicsDeviceInfos = new List <GraphicsDeviceInformation>(); // Iterate on each adapter foreach (var graphicsAdapter in GraphicsAdapterFactory.Adapters) { // Skip adapeters that don't have graphics output if (graphicsAdapter.Outputs.Length == 0) { continue; } var preferredGraphicsProfiles = preferredParameters.PreferredGraphicsProfile; // INTEL workaround: it seems Intel driver doesn't support properly feature level 9.x. Fallback to 10. if (graphicsAdapter.VendorId == 0x8086) { preferredGraphicsProfiles = preferredGraphicsProfiles.Select(x => x < GraphicsProfile.Level_10_0 ? GraphicsProfile.Level_10_0 : x).ToArray(); } // Iterate on each preferred graphics profile foreach (var featureLevel in preferredGraphicsProfiles) { // Check if this profile is supported. if (graphicsAdapter.IsProfileSupported(featureLevel)) { var deviceInfo = new GraphicsDeviceInformation { Adapter = graphicsAdapter, GraphicsProfile = featureLevel, PresentationParameters = { MultiSampleCount = MSAALevel.None, IsFullScreen = preferredParameters.IsFullScreen, PreferredFullScreenOutputIndex = preferredParameters.PreferredFullScreenOutputIndex, PresentationInterval = preferredParameters.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate, DeviceWindowHandle = MainWindow.NativeWindow, ColorSpace = preferredParameters.ColorSpace } }; var preferredMode = new DisplayMode(preferredParameters.PreferredBackBufferFormat, preferredParameters.PreferredBackBufferWidth, preferredParameters.PreferredBackBufferHeight, preferredParameters.PreferredRefreshRate); // if we want to switch to fullscreen, try to find only needed output, otherwise check them all if (preferredParameters.IsFullScreen) { if (preferredParameters.PreferredFullScreenOutputIndex < graphicsAdapter.Outputs.Length) { var output = graphicsAdapter.Outputs[preferredParameters.PreferredFullScreenOutputIndex]; var displayMode = output.FindClosestMatchingDisplayMode(preferredGraphicsProfiles, preferredMode); AddDevice(displayMode, deviceInfo, preferredParameters, graphicsDeviceInfos); } } else { AddDevice(preferredMode, deviceInfo, preferredParameters, graphicsDeviceInfos); } // If the profile is supported, we are just using the first best one break; } } } return(graphicsDeviceInfos); }
protected void AddDevice(DisplayMode mode, GraphicsDeviceInformation deviceBaseInfo, GameGraphicsParameters preferredParameters, List <GraphicsDeviceInformation> graphicsDeviceInfos) { // TODO: Temporary woraround if (mode == null) { mode = new DisplayMode(PixelFormat.R8G8B8A8_UNorm, 800, 480, new Rational(60, 1)); } var deviceInfo = deviceBaseInfo.Clone(); deviceInfo.PresentationParameters.RefreshRate = mode.RefreshRate; if (preferredParameters.IsFullScreen) { deviceInfo.PresentationParameters.BackBufferFormat = mode.Format; deviceInfo.PresentationParameters.BackBufferWidth = mode.Width; deviceInfo.PresentationParameters.BackBufferHeight = mode.Height; } else { deviceInfo.PresentationParameters.BackBufferFormat = preferredParameters.PreferredBackBufferFormat; deviceInfo.PresentationParameters.BackBufferWidth = preferredParameters.PreferredBackBufferWidth; deviceInfo.PresentationParameters.BackBufferHeight = preferredParameters.PreferredBackBufferHeight; } // TODO: Handle multisampling deviceInfo.PresentationParameters.DepthStencilFormat = preferredParameters.PreferredDepthStencilFormat; deviceInfo.PresentationParameters.MultiSampleCount = MSAALevel.None; if (!graphicsDeviceInfos.Contains(deviceInfo)) { graphicsDeviceInfos.Add(deviceInfo); } }
/// <summary> /// Finds the best device that is compatible with the preferences defined in this instance. /// </summary> /// <param name="anySuitableDevice">if set to <c>true</c> a device can be selected from any existing adapters, otherwise, it will select only from default adapter.</param> /// <returns>The graphics device information.</returns> protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { // Setup preferred parameters before passing them to the factory var preferredParameters = new GameGraphicsParameters { PreferredBackBufferWidth = PreferredBackBufferWidth, PreferredBackBufferHeight = PreferredBackBufferHeight, PreferredBackBufferFormat = PreferredBackBufferFormat, PreferredDepthStencilFormat = PreferredDepthStencilFormat, PreferredRefreshRate = PreferredRefreshRate, PreferredFullScreenOutputIndex = PreferredFullScreenOutputIndex, IsFullScreen = IsFullScreen, PreferMultiSampling = PreferMultiSampling, SynchronizeWithVerticalRetrace = SynchronizeWithVerticalRetrace, PreferredGraphicsProfile = (GraphicsProfile[])PreferredGraphicsProfile.Clone(), ColorSpace = PreferredColorSpace }; // Remap to Srgb backbuffer if necessary if (PreferredColorSpace == ColorSpace.Linear) { // If the device support SRgb and ColorSpace is linear, we use automatically a SRgb backbuffer if (preferredParameters.PreferredBackBufferFormat == PixelFormat.R8G8B8A8_UNorm) { preferredParameters.PreferredBackBufferFormat = PixelFormat.R8G8B8A8_UNorm_SRgb; } else if (preferredParameters.PreferredBackBufferFormat == PixelFormat.B8G8R8A8_UNorm) { preferredParameters.PreferredBackBufferFormat = PixelFormat.B8G8R8A8_UNorm_SRgb; } } else { // If we are looking for gamma and the backbuffer format is SRgb, switch back to non srgb if (preferredParameters.PreferredBackBufferFormat == PixelFormat.R8G8B8A8_UNorm_SRgb) { preferredParameters.PreferredBackBufferFormat = PixelFormat.R8G8B8A8_UNorm; } else if (preferredParameters.PreferredBackBufferFormat == PixelFormat.B8G8R8A8_UNorm_SRgb) { preferredParameters.PreferredBackBufferFormat = PixelFormat.B8G8R8A8_UNorm; } } // Setup resized value if there is a resize pending if (!IsFullScreen && isBackBufferToResize) { preferredParameters.PreferredBackBufferWidth = resizedBackBufferWidth; preferredParameters.PreferredBackBufferHeight = resizedBackBufferHeight; } GraphicsProfile availableGraphicsProfile; if (!IsPreferredProfileAvailable(preferredParameters.PreferredGraphicsProfile, out availableGraphicsProfile)) { throw new InvalidOperationException(string.Format("Graphics profiles [{0}] are not supported by the device. The highest available profile is [{1}].", string.Join(", ", preferredParameters.PreferredGraphicsProfile), availableGraphicsProfile)); } var devices = graphicsDeviceFactory.FindBestDevices(preferredParameters); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found"); } RankDevices(devices); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found after ranking"); } return devices[0]; }
/// <summary> /// Finds the best device that is compatible with the preferences defined in this instance. /// </summary> /// <param name="anySuitableDevice">if set to <c>true</c> a device can be selected from any existing adapters, otherwise, it will select only from default adapter.</param> /// <returns>The graphics device information.</returns> protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { // Setup preferred parameters before passing them to the factory var preferredParameters = new GameGraphicsParameters { PreferredBackBufferWidth = PreferredBackBufferWidth, PreferredBackBufferHeight = PreferredBackBufferHeight, PreferredBackBufferFormat = PreferredBackBufferFormat, PreferredDepthStencilFormat = PreferredDepthStencilFormat, PreferredRefreshRate = PreferredRefreshRate, PreferredFullScreenOutputIndex = PreferredFullScreenOutputIndex, IsFullScreen = IsFullScreen, PreferMultiSampling = PreferMultiSampling, SynchronizeWithVerticalRetrace = SynchronizeWithVerticalRetrace, PreferredGraphicsProfile = (GraphicsProfile[])PreferredGraphicsProfile.Clone(), ColorSpace = PreferredColorSpace }; // Remap to Srgb backbuffer if necessary if (PreferredColorSpace == ColorSpace.Linear) { // If the device support SRgb and ColorSpace is linear, we use automatically a SRgb backbuffer if (preferredParameters.PreferredBackBufferFormat == PixelFormat.R8G8B8A8_UNorm) { preferredParameters.PreferredBackBufferFormat = PixelFormat.R8G8B8A8_UNorm_SRgb; } else if (preferredParameters.PreferredBackBufferFormat == PixelFormat.B8G8R8A8_UNorm) { preferredParameters.PreferredBackBufferFormat = PixelFormat.B8G8R8A8_UNorm_SRgb; } } else { // If we are looking for gamma and the backbuffer format is SRgb, switch back to non srgb if (preferredParameters.PreferredBackBufferFormat == PixelFormat.R8G8B8A8_UNorm_SRgb) { preferredParameters.PreferredBackBufferFormat = PixelFormat.R8G8B8A8_UNorm; } else if (preferredParameters.PreferredBackBufferFormat == PixelFormat.B8G8R8A8_UNorm_SRgb) { preferredParameters.PreferredBackBufferFormat = PixelFormat.B8G8R8A8_UNorm; } } // Setup resized value if there is a resize pending if (!IsFullScreen && isBackBufferToResize) { preferredParameters.PreferredBackBufferWidth = resizedBackBufferWidth; preferredParameters.PreferredBackBufferHeight = resizedBackBufferHeight; } GraphicsProfile availableGraphicsProfile; if (!IsPreferredProfileAvailable(preferredParameters.PreferredGraphicsProfile, out availableGraphicsProfile)) { throw new InvalidOperationException(string.Format("Graphics profiles [{0}] are not supported by the device. The highest available profile is [{1}].", string.Join(", ", preferredParameters.PreferredGraphicsProfile), availableGraphicsProfile)); } var devices = graphicsDeviceFactory.FindBestDevices(preferredParameters); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found"); } RankDevices(devices); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found after ranking"); } return(devices[0]); }
/// <summary> /// Finds the best device that is compatible with the preferences defined in this instance. /// </summary> /// <param name="anySuitableDevice">if set to <c>true</c> a device can be selected from any existing adapters, otherwise, it will select only from default adapter.</param> /// <returns>The graphics device information.</returns> protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { // Setup preferred parameters before passing them to the factory var preferredParameters = new GameGraphicsParameters { PreferredBackBufferWidth = PreferredBackBufferWidth, PreferredBackBufferHeight = PreferredBackBufferHeight, PreferredBackBufferFormat = PreferredBackBufferFormat, PreferredDepthStencilFormat = PreferredDepthStencilFormat, PreferredRefreshRate = PreferredRefreshRate, PreferredFullScreenOutputIndex = PreferredFullScreenOutputIndex, IsFullScreen = IsFullScreen, PreferMultiSampling = PreferMultiSampling, SynchronizeWithVerticalRetrace = SynchronizeWithVerticalRetrace, PreferredGraphicsProfile = (GraphicsProfile[])PreferredGraphicsProfile.Clone(), }; // Setup resized value if there is a resize pending if (!IsFullScreen && isBackBufferToResize) { preferredParameters.PreferredBackBufferWidth = resizedBackBufferWidth; preferredParameters.PreferredBackBufferHeight = resizedBackBufferHeight; } GraphicsProfile availableGraphicsProfile; if (!IsPreferredProfileAvailable(preferredParameters.PreferredGraphicsProfile, out availableGraphicsProfile)) { throw new InvalidOperationException(string.Format("Graphics profiles [{0}] are not supported by the device. The highest available profile is [{1}].", string.Join(", ", preferredParameters.PreferredGraphicsProfile), availableGraphicsProfile)); } var devices = graphicsDeviceFactory.FindBestDevices(preferredParameters); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found"); } RankDevices(devices); if (devices.Count == 0) { throw new InvalidOperationException("No screen modes found after ranking"); } return devices[0]; }