|
|
判断哪一个设备是可用的
manager类有许多方法可以用来检测你的适配器是否支持一个特定的功能。比如,你需要检测适配器是否支持一种特殊的格式,但又不想枚举所有可能的适配器以及格式,那你就可以用manager类来解决这个问题。使用如下的方法:
pubic static System.Boolean CheckDeviceType(int adapter, DeviceType checkType, Format DisplayFormat, Format backBufferFormat, bool windowed, int result)
这个方法可以快速的检测出device是否支持你将要使用的格式。第一个参数是你要检测的适配器序数;第二个是要检测的device类型,但这个值大多数情况下都被设置为DeviceType.Fardware。接着指定将使用的后备缓冲类型和显示格式,以及是否需要全屏显示。最后一个参数是可选的,如果使用的话他将返回关于这个方法的一个整数(即COM中的HRESULT)。如果这是一个有效的设备,则方法返回true,否则为false。当你预先知道要使用的格式使,这个方法是很有用的。
(应该注意到,在窗口模式,后备缓冲的格式不一定要匹配于显示格式,只要你的硬件支持适当的颜色转换就可以了。不论你的硬件是否支持这种功能,CheckDeviceType方法都会返回适当的结果,应该使用manager类的CheckDeviceFormatConversion方法来判断是否支持这种转换。也可以在窗口模式下使用Format.Unknown。全屏模式下不需要这种转换。)
检测Device的功能(capabilities)
我们把每一个device能完全用硬件实现的功能都叫做“capability”,或简称做“Cap”。Direct3D有一个Caps结构可以列出device所支持的每一种可能的capabilities。创建了device之后,就可以使用device的Caps属性来检测他所支持的特性,但如果在创建设备之你就想知道device所支持的特性该怎么办呢?自然,Manager类也有一个方法能完成这个任务。
现在,先前的程序里加一点点代码来获得系统里每一种适配器的capabilities。我们将不再使用tree view来显示这些capabilities,应为这可能包含了数百种capabilities。最好的方法是使用一个text box。回到windows form的设计模式,把tree view的Dock属性改为“Left”,把宽度改为现在的一半;入text box控件,把Dock属性设置为“Fill”,Multiline设置为true,Scrollbars设置为“both”。
现在你可能想为程序添加一个钩子(hook),这样在选择了一个适配器之后,textbox里的数据也会更新。使用tree view的AfterSelect事件,添加如下代码:
private void treeView_1AfterSelect(object sender, System.Windows.Forms.TreeViewEcentArgs e)
{
if (e.Node.Parent == null)
{
textBox1.Text = e.Node.Text + “Capabilities: \r\n\r\n” + Manager.GetDeviceCaps(e.Node.Indes, DeviceType.Hardware).ToString().Replace(“\n”, “\r\n”);
}
}
如你所见,相当简单。运行一下看看结果吧。
~~~~~~~~~~~~~~~~第二章完~~~~~~~~~~~~~~·
下一章我们将讨论一些简单的渲染技术了,包括vertex buffer,纹理··········
副上本章源码
|
|