public static bool CheckAdapterMeetsRequirements(int adapter, GraphicsDevice3DRequirements requirements) { // check formats against device type foreach (Format format in requirements.RtFormats) { if (!Manager.CheckDeviceType(adapter, requirements.DeviceType, requirements.DisplayFormat, format, requirements.Windowed)) { return(false); } } // multisample if (!Manager.CheckDeviceMultiSampleType(adapter, requirements.DeviceType, requirements.RtFormats[0], requirements.Windowed, requirements.MultiSample)) { return(false); } // depthstencil formats foreach (DepthFormat format in requirements.DepthFormats) { if (!Manager.CheckDepthStencilMatch(adapter, requirements.DeviceType, requirements.DisplayFormat, requirements.RtFormats[0], format)) { return(false); } } // rts Caps caps = Manager.GetDeviceCaps(0, requirements.DeviceType); if (caps.NumberSimultaneousRts < requirements.NumRTs) { return(false); } // shaders if (requirements.PixelShader != null && requirements.PixelShader.CompareTo(caps.PixelShaderVersion) > 0) { return(false); } if (requirements.VertexShader != null && requirements.VertexShader.CompareTo(caps.VertexShaderVersion) > 0) { return(false); } if (requirements.Pure && !caps.DeviceCaps.SupportsPureDevice) { return(false); } if (requirements.HardwareTnL && !caps.DeviceCaps.SupportsHardwareTransformAndLight) { return(false); } return(true); }
private static GraphicsDevice3DRequirements CheckReqs(int adapter, GraphicsDevice3DRequirements minReqs, GraphicsDevice3DRequirements maxReqs) { DeviceType devType = minReqs.DeviceType; if (Manager.CheckDeviceType(adapter, maxReqs.DeviceType, minReqs.DisplayFormat, minReqs.RtFormats[0], maxReqs.Windowed)) { devType = maxReqs.DeviceType; } Format[] rtFormats = minReqs.RtFormats; bool useMax = true; foreach (Format format in maxReqs.RtFormats) { if (!Manager.CheckDeviceType(adapter, devType, minReqs.DisplayFormat, format, minReqs.Windowed)) { useMax = false; break; } } if (useMax) { rtFormats = maxReqs.RtFormats; } MultiSampleType ms = minReqs.MultiSample; if (Manager.CheckDeviceMultiSampleType(adapter, devType, rtFormats[0], minReqs.Windowed, maxReqs.MultiSample)) { ms = maxReqs.MultiSample; } Caps caps = Manager.GetDeviceCaps(adapter, devType); bool pure = minReqs.Pure; if (maxReqs.Pure && caps.DeviceCaps.SupportsPureDevice) { pure = true; } bool tnl = minReqs.HardwareTnL; if (maxReqs.HardwareTnL && caps.DeviceCaps.SupportsHardwareTransformAndLight) { tnl = true; } return(new GraphicsDevice3DRequirements(ms, devType, rtFormats, minReqs.NumRTs, minReqs.Windowed, minReqs.DepthFormats, pure, tnl, null, null, Format.Unknown)); }
public static GraphicsDevice3DOutputDescription CreateOutputDescription(int adapter, GraphicsDevice3DRequirements minReqs, GraphicsDevice3DRequirements maxReqs) { GraphicsDevice3DRequirements requirements = CheckReqs(adapter, minReqs, maxReqs); CreateFlags cFlags; if (requirements.Pure) cFlags = CreateFlags.PureDevice; else if (requirements.HardwareTnL) cFlags = CreateFlags.HardwareVertexProcessing; else cFlags = CreateFlags.SoftwareVertexProcessing; return new GraphicsDevice3DOutputDescription(adapter, requirements.Windowed, requirements.DeviceType, requirements.RtFormats[0], requirements.MultiSample, requirements.DepthFormats[0], cFlags); }
public static bool CheckAdapterMeetsRequirements(int adapter, GraphicsDevice3DRequirements requirements) { // check formats against device type foreach (Format format in requirements.RtFormats) { if (!Manager.CheckDeviceType(adapter, requirements.DeviceType, requirements.DisplayFormat, format, requirements.Windowed)) { return false; } } // multisample if (!Manager.CheckDeviceMultiSampleType(adapter, requirements.DeviceType, requirements.RtFormats[0], requirements.Windowed, requirements.MultiSample)) { return false; } // depthstencil formats foreach (DepthFormat format in requirements.DepthFormats) { if (!Manager.CheckDepthStencilMatch(adapter, requirements.DeviceType, requirements.DisplayFormat, requirements.RtFormats[0], format)) { return false; } } // rts Caps caps = Manager.GetDeviceCaps(0, requirements.DeviceType); if (caps.NumberSimultaneousRts < requirements.NumRTs) return false; // shaders if (requirements.PixelShader != null && requirements.PixelShader.CompareTo(caps.PixelShaderVersion) > 0) return false; if (requirements.VertexShader != null && requirements.VertexShader.CompareTo(caps.VertexShaderVersion) > 0) return false; if (requirements.Pure && !caps.DeviceCaps.SupportsPureDevice) return false; if (requirements.HardwareTnL && !caps.DeviceCaps.SupportsHardwareTransformAndLight) return false; return true; }
internal ABRenderViewControl(bool delayCreateDx) { InitializeComponent(); minReqs = new GraphicsDevice3DRequirements(MultiSampleType.None, DeviceType.Hardware, new Format[] { Format.X8R8G8B8 }, 1, true, new DepthFormat[] { DepthFormat.D16 }, false, false, null, null, Format.X8R8G8B8); desiredReqs = new GraphicsDevice3DRequirements(MultiSampleType.FourSamples, DeviceType.Hardware, new Format[] { Format.X8R8G8B8 }, 1, true, new DepthFormat[] { DepthFormat.D16 }, false, true, null, null, Format.X8R8G8B8); if (!delayCreateDx) { CreateDxDevice(); } }
private static GraphicsDevice3DRequirements CheckReqs(int adapter, GraphicsDevice3DRequirements minReqs, GraphicsDevice3DRequirements maxReqs) { DeviceType devType = minReqs.DeviceType; if (Manager.CheckDeviceType(adapter, maxReqs.DeviceType, minReqs.DisplayFormat, minReqs.RtFormats[0], maxReqs.Windowed)) devType = maxReqs.DeviceType; Format[] rtFormats = minReqs.RtFormats; bool useMax = true; foreach (Format format in maxReqs.RtFormats) { if (!Manager.CheckDeviceType(adapter, devType, minReqs.DisplayFormat, format, minReqs.Windowed)) { useMax = false; break; } } if (useMax) rtFormats = maxReqs.RtFormats; MultiSampleType ms = minReqs.MultiSample; if (Manager.CheckDeviceMultiSampleType(adapter, devType, rtFormats[0], minReqs.Windowed, maxReqs.MultiSample)) ms = maxReqs.MultiSample; Caps caps = Manager.GetDeviceCaps(adapter, devType); bool pure = minReqs.Pure; if (maxReqs.Pure && caps.DeviceCaps.SupportsPureDevice) pure = true; bool tnl = minReqs.HardwareTnL; if (maxReqs.HardwareTnL && caps.DeviceCaps.SupportsHardwareTransformAndLight) tnl = true; return new GraphicsDevice3DRequirements(ms, devType, rtFormats, minReqs.NumRTs, minReqs.Windowed, minReqs.DepthFormats, pure, tnl, null, null, Format.Unknown); }
public static GraphicsDevice3DOutputDescription CreateOutputDescription(int adapter, GraphicsDevice3DRequirements minReqs, GraphicsDevice3DRequirements maxReqs) { GraphicsDevice3DRequirements requirements = CheckReqs(adapter, minReqs, maxReqs); CreateFlags cFlags; if (requirements.Pure) { cFlags = CreateFlags.PureDevice; } else if (requirements.HardwareTnL) { cFlags = CreateFlags.HardwareVertexProcessing; } else { cFlags = CreateFlags.SoftwareVertexProcessing; } return(new GraphicsDevice3DOutputDescription(adapter, requirements.Windowed, requirements.DeviceType, requirements.RtFormats[0], requirements.MultiSample, requirements.DepthFormats[0], cFlags)); }