3 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_DIRECT3D
26 using System.Collections.Generic;
27 using SharpDX.Direct3D;
28 using SharpDX.Direct3D11;
31 using SiliconStudio.Core;
32 using SiliconStudio.Core.Mathematics;
34 using ResultCode = SharpDX.DXGI.ResultCode;
36 namespace SiliconStudio.
Paradox.Graphics
44 public partial class GraphicsOutput
46 private readonly
int outputIndex;
47 private readonly Output output;
48 private readonly OutputDescription outputDescription;
57 internal GraphicsOutput(GraphicsAdapter adapter,
int outputIndex)
59 if (adapter == null)
throw new ArgumentNullException(
"adapter");
61 this.outputIndex = outputIndex;
62 this.adapter = adapter;
63 this.output = adapter.NativeAdapter.GetOutput(outputIndex).DisposeBy(
this);
64 outputDescription = output.Description;
68 var rectangle = outputDescription.DesktopBounds;
81 public DisplayMode FindClosestMatchingDisplayMode(
GraphicsProfile[] targetProfiles, DisplayMode mode)
83 if (targetProfiles == null)
throw new ArgumentNullException(
"targetProfiles");
85 ModeDescription closestDescription;
86 SharpDX.Direct3D11.Device deviceTemp = null;
89 var features =
new SharpDX.Direct3D.FeatureLevel[targetProfiles.Length];
90 for (
int i = 0; i < targetProfiles.Length; i++)
92 features[i] = (FeatureLevel)targetProfiles[i];
95 deviceTemp =
new SharpDX.Direct3D11.Device(adapter.NativeAdapter, SharpDX.Direct3D11.DeviceCreationFlags.None, features);
99 var description =
new SharpDX.DXGI.ModeDescription()
102 Height = mode.Height,
103 RefreshRate = mode.RefreshRate.ToSharpDX(),
104 Format = (SharpDX.DXGI.Format)mode.Format,
105 Scaling = DisplayModeScaling.Unspecified,
106 ScanlineOrdering = DisplayModeScanlineOrder.Unspecified
108 using (var device = deviceTemp)
109 output.GetClosestMatchingMode(device, description, out closestDescription);
111 return DisplayMode.FromDescription(closestDescription);
120 public IntPtr MonitorHandle {
get {
return outputDescription.MonitorHandle; } }
126 internal Output NativeOutput
137 private void InitializeSupportedDisplayModes()
139 var modesAvailable =
new List<DisplayMode>();
140 var modesMap =
new Dictionary<string, DisplayMode>();
143 var output1 = output.QueryInterface<Output1>();
148 const DisplayModeEnumerationFlags displayModeEnumerationFlags = DisplayModeEnumerationFlags.Interlaced | DisplayModeEnumerationFlags.Scaling;
150 foreach (var
format in Enum.GetValues(typeof(SharpDX.DXGI.Format)))
152 var dxgiFormat = (Format)format;
154 var modes = output1.GetDisplayModeList1(dxgiFormat, displayModeEnumerationFlags);
156 var modes = output.GetDisplayModeList(dxgiFormat, displayModeEnumerationFlags);
159 foreach (var mode
in modes)
161 if (mode.Scaling == DisplayModeScaling.Unspecified)
163 var key = format +
";" + mode.Width +
";" + mode.Height +
";" + mode.RefreshRate.Numerator +
";" + mode.RefreshRate.Denominator;
166 if (!modesMap.TryGetValue(key, out oldMode))
168 var displayMode = DisplayMode.FromDescription(mode);
170 modesMap.Add(key, displayMode);
171 modesAvailable.Add(displayMode);
177 catch (SharpDX.SharpDXException dxgiException)
179 if (dxgiException.ResultCode != ResultCode.NotCurrentlyAvailable)
186 supportedDisplayModes = modesAvailable.ToArray();
194 private void InitializeCurrentDisplayMode()
196 currentDisplayMode = TryFindMatchingDisplayMode(Format.R8G8B8A8_UNorm)
197 ?? TryFindMatchingDisplayMode(Format.B8G8R8A8_UNorm);
206 private DisplayMode TryFindMatchingDisplayMode(Format format)
208 var desktopBounds = outputDescription.DesktopBounds;
210 foreach (var supportedDisplayMode
in SupportedDisplayModes)
212 if (supportedDisplayMode.Width == desktopBounds.Width
213 && supportedDisplayMode.Height == desktopBounds.Height
214 && (Format)supportedDisplayMode.Format == format)
217 return new DisplayMode((
PixelFormat)format, desktopBounds.Width, desktopBounds.Height, supportedDisplayMode.RefreshRate);
System.Windows.Shapes.Rectangle Rectangle
_In_ size_t _In_ size_t _In_ DXGI_FORMAT format
GraphicsProfile
Identifies the set of supported devices for the demo based on device capabilities.
PixelFormat
Defines various types of pixel formats.