Direct3D 设备

来源:互联网 发布:剑灵无尘捏脸数据 编辑:程序博客网 时间:2024/04/27 15:05

Direct3D 设备

Direct3D 设备是Direct3D的渲染部件,它封装并储存渲染状态。此外,Direct3D设备还执行变换和光照(T&L)操作以及把图像光栅化(Rasterize)到表面(Surface)上。

从架构上讲,Direct3D设备包含一个变换模块、一个光照模块和一个光栅化模块,如下图所示:

D3D设备架构 

当前Direct3D主要支持两种类型的Direct3D设备:

一种是硬件抽象层(HAL)设备,HAL设备具有硬件加的速光栅化操作,并可用软硬件顶点处理进行着色操作;

另一种是参考设备(reference)。

 

可以认为这些设备是两个单独的驱动程序。软件和参考设备由软件驱动程序表示,而HAL设备由硬件驱动程序表示。这些设备最通常的用法是使用HAL设备发行应用程序,而用参考设备做特性测试。这是由第三方提供用于模拟特定的设备——例如,还在开发中的尚未发布的硬件。

 

应用程序创建的设备必须与应用程序所运行的图形硬件的能力相对应。Direct3D以两种方式对应用程序提供渲染支持,一种是访问安装在计算机中的三维硬件,另一种是用软件模拟三维硬件的能力。因此,对于硬件访问和软件模拟,Direct3D都提供了相应的设备。

硬件加速设备的性能比软件设备好得多。HAL设备类型在所有支持Direct3D的图形适配器上都可用。在大多数情况下,应用程序都要求计算机具有硬件加速功能,但同时,也能依靠软件模拟来兼容低配置计算机。

除了参考设备,软件设备并不总是支持与硬件设备相同的特性。应用程序总是应该查询设备的能力以确定该设备支持的特性。

 

因为Direct3D 9提供的软件设备和参考设备的行为与HAL设备完全相同,所以针对HAL设备开发的应用程序代码也可以用在软件设备或参考设备上而无需修改。需要注意的是,虽然Direct3D提供的软件设备或参考设备的行为与HAL设备完全相同,但是设备的能力肯定会不同,某特定的软件设备可能仅实现一个较小的能力集。

行为

Direct3D允许应用程序指定设备的行为和设备的类型。IDirect3D9::CreateDevice方法允许用一个或多个行为标志的组合控制Direct3D设备的整体行为。这些行为指明了哪些事情是需要Direct3D运行时(runtime)做的,而哪些又不能。同时设备类型指定使用哪个驱动程序。虽然有些设备行为标志的组合是无效的,但是在各种不同类型的设备上还是有可能会用到所有的设备行为标志的。例如,在一个用D3DCREATE_PUREDEVICE标志创建的设备上指定D3DDEVTYPE_SW是有效的。

设备类型

HAL设备

最主要的设备类型是硬件抽象层(HAL)设备,它支持硬件加速的光栅化和软硬件顶点处理。如果应用程序所运行的计算机配置的显卡支持Direct3D,那么应用程序就应该用HAL设备进行3D操作。Direct3D HAL设备用硬件部分或全部实现了变换、光照及光栅化模块。

 

应用程序不直接访问三维加速卡,它们调用Direct3D的函数和方法,而Direct3D通过HAL访问硬件。如果应用程序在支持HAL的计算机上运行,那么通过使用HAL设备它将获得最佳的性能。

 

可以通过调用IDirect3D9::CreateDevice方法创建一个HAL设备,其中设备类型参数应该设为D3DDEVTYPE_HAL常数。

参考设备(REF设备)

Direct3D支持另一种称为参考设备或参考光栅化器(reference rasterizer)的设备类型。与软件设备不同的是,参考光栅化器支持所有Direct3D特性。这个设备主要是为了调试使用,所以必须在安装了sdk的机器上才可用。因为这些特性的实现是为了精确而不是为了速度,并且是用软件实现,所以结果不会很快。虽然参考光栅化器尽可能地使用了特殊的CPU指令,但它不是为正式零售的应用程序准备的。应该仅把参考光栅化器用于特性测试或演示用途。

创建一个参考设备,可调用IDirect3D9::CreateDevice方法,设备类型参数设为D3DDEVTYPE_REF常数。

HAL 和REF设备的比较

HAL和REF设备是两种主要的D3D设备,前者以硬件支持为前提,速度很快但可能不支持所有功能;后者没有硬件加速,所以比较慢,但是可以正确地支持所有D3D特性。通常我们只需要HAL设备就够了,除非要用到显卡不支持的高级特性时,才需要退回到REF设备。

另一种可能用到REF设备的场合是在当用HAL设备画出的结果很奇怪的时候:程序的代码明明没错,但HAL设备画出的结果却是错的。因为REF设备画的东西保证是对的,这时候就可以用REF设备来调试应用程序。如果这时候错误还在,则可能是显卡硬件问题,也可能是显卡驱动程序的问题。

硬件顶点处理和软件顶点处理的比较

硬件和软件顶点处理都只适用于HAL设备。当把顶点数据送到3D流水线的时候,这些顶点需要做坐标转换(依次做世界坐标、视图转换和投影转换)和光照,这个过程就是T&L。硬件顶点处理是指这个过程由硬件完成(当然需要硬件支持);那软件顶点处理就是指T&L过程由软件完成(这个软件指D3D Runtime,不是驱动程序,驱动程序对应用程序来说是硬件)。通常的做法是先尝试创建一个硬件T&L的设备,如果失败则创建软硬件混合的设备,还是失败则创建软件顶点处理的HAL设备。

原创粉丝点击