设备类型(Direct3D 9)

HAL 设备

主要设备类型是支持硬件加速光栅化以及硬件和软件顶点处理的 hal 设备。 如果运行应用程序的计算机配备了支持 Direct3D 的显示适配器,则应用程序应将其用于 Direct3D作。 Direct3Dhal 设备在硬件中实现转换、照明和光栅化模块的所有或部分。

应用程序不直接访问图形适配器。 它们调用 Direct3D 函数和方法。 Direct3D 通过 hal 访问硬件。 如果应用程序运行的计算机支持 hal,它将通过使用 hal 设备获得最佳性能。

若要创建 hal 设备,请使用 D3DDEVTYPE_HAL 作为设备类型调用 CreateDevice

参考设备

Direct3D 支持称为引用设备或引用光栅器的其他设备类型。 与软件设备不同,参考光栅器支持每个 Direct3D 功能。 此设备旨在用于调试目的,因此仅在安装了 DirectX SDK 的计算机上可用。 由于这些功能是针对准确性而不是速度实现的,并且是在软件中实现的,因此结果并不快。 参考光栅器会随时使用特殊的 CPU 指令,但不适用于零售应用程序。 仅将参考光栅器用于功能测试或演示目的。 若要创建引用设备,请使用 D3DDEVTYPE_REF 作为设备类型调用 CreateDevice 方法。

HAL 与 REF 设备

HAL(硬件抽象层)设备和 REF(REFerence 光栅器)设备是 Direct3D 设备的两种主要类型:第一个基于硬件支持,并且非常快,但可能不支持一切:虽然第二个不使用硬件加速,所以速度非常慢,但保证以正确的方式支持整个 Direct3D 功能集。 通常,你只需要使用 HAL 设备,但如果使用的是图形卡不支持的一些高级功能,则可能需要回退到 REF。

你可能想要使用 REF 的另一次是,如果 HAL 设备生成了奇怪的结果,也就是说,你确信代码正确,但结果不是你所期望的结果。 REF 设备可以保证正常运行,因此你可能希望在 REF 设备上测试应用程序,并查看奇怪的行为是否继续。 如果没有,则意味着应用程序假设图形卡支持它不支持的内容,或者(b)它是驱动程序 bug。 如果它仍然不适用于 REF 设备,则它是一个应用程序 bug。

硬件与软件顶点处理

硬件与软件顶点处理仅适用于 HAL 设备。 在管道中推送顶点时,它们需要转换(依次由世界、视图和投影矩阵)和点亮(由 D3D 的内置灯)-此处理阶段称为 T&L(用于转换 & 照明)。 硬件顶点处理意味着在硬件中完成此作(如果硬件支持);ergo,软件顶点处理已完成是软件。 一般做法是先尝试创建硬件 T&L 设备,如果失败,请尝试混合,如果失败,请尝试软件。 (如果软件失败,请放弃并退出并显示错误)。

Direct3D 设备