可以使用 D3DImage 类托管 Direct3D9 内容。 托管 Direct3D9 内容可能会影响应用程序的性能。 本主题介绍在 Windows Presentation Foundation (WPF) 应用程序中托管 Direct3D9 内容时优化性能的最佳做法。 这些最佳做法包括在使用 Windows Vista、Windows XP 和多监视器显示时如何使用 D3DImage 和最佳做法。
注释
有关演示这些最佳做法的代码示例,请参阅 WPF 和 Direct3D9 互作。
谨慎使用 D3DImage
在 D3DImage 实例中托管的 Direct3D9 内容的渲染速度不如在纯 Direct3D 应用程序中快。 复制表面和刷新命令缓冲区可能会耗费较大的代价。 随着D3DImage实例数的增加,会发生更多的刷新,性能会下降。 因此,应谨慎使用 D3DImage 。
Windows Vista 上的最佳做法
为了在 Windows Vista 上使用配置为使用 Windows 显示驱动程序模型(WDDM)的显示器获得最佳性能,请在 IDirect3DDevice9Ex
设备上创建 Direct3D9 图面。 这使表面共享。 视频卡必须在 Windows Vista 上支持 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
和 D3DCAPS2_CANSHARERESOURCE
驱动程序功能。 任何其他设置都会导致通过软件复制图面,从而显著降低性能。
注释
如果 Windows Vista 具有配置为使用 Windows XP 显示驱动程序模型(XDDM)的显示器,则无论设置如何,都会始终通过软件复制图面。 在正确设置和视频卡的支持下,使用 WDDM 时,Windows Vista 的性能会更好,因为表面复制是在硬件中进行的。
Windows XP 上的最佳做法
为了在使用 Windows XP 显示驱动程序模型(XDDM)的 Windows XP 上获得最佳性能,请创建一个可锁定的表面,该表面当调用 IDirect3DSurface9::GetDC
方法时表现正确。 在内部,该方法通过硬件在设备之间传输图形界面。 该方法 GetDC
始终在 XRGB 图面上工作。 但是,如果客户端计算机使用 SP3 或 SP2 运行 Windows XP,并且客户端还具有分层窗口功能的修补程序,则此方法仅适用于 ARGB 图面。 视频卡必须支持 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
驱动程序功能。
16 位桌面显示深度可以显著降低性能。 建议使用 32 位桌面。
如果要针对 Windows Vista 和 Windows XP 进行开发,请测试 Windows XP 上的性能。 Windows XP 上的视频内存不足是一个问题。 此外, D3DImage Windows XP 上的视频内存和带宽比 Windows Vista WDDM 多,因为需要额外的视频内存复制。 因此,对于同一视频硬件,Windows XP 的性能可能比 Windows Vista 上的性能更差。
注释
XDDM 在 Windows XP 和 Windows Vista 上都可用;但是,WDDM 仅在 Windows Vista 上可用。
常规最佳做法
创建设备时,请使用 D3DCREATE_MULTITHREADED
创建标志。 这降低了性能,但 WPF 呈现系统从另一个线程调用此设备上的方法。 请务必正确遵循锁定协议,这样两个线程就不能同时访问设备。
如果您的渲染是在 WPF 托管线程上执行,强烈建议您使用 D3DCREATE_FPU_PRESERVE
创建标志来创建设备。 如果没有此设置,D3D 渲染可能会降低 WPF 双精度浮点运算的准确性,并引入渲染问题。
平铺 D3DImage 的速度很快,除非是在没有硬件支持的情况下平铺非2的幂次的图面,或是平铺包含D3DImage的DrawingBrush或VisualBrush。
多监视器显示器的最佳做法
如果使用的是具有多个监视器的计算机,则应遵循前面所述的最佳做法。 多监视器配置还有一些额外的性能注意事项。
创建后缓冲区时,它会在特定设备和适配器上创建,但 WPF 可能会在任何适配器上显示前缓冲区。 跨适配器复制以更新前端缓冲区可能非常昂贵。 在配置为将 WDDM 与多个视频卡和设备一起使用 IDirect3DDevice9Ex
的 Windows Vista 上,如果前缓冲区位于不同的适配器上,但仍具有相同的视频卡,则不会造成性能损失。 但是,在具有多个视频卡的 Windows XP 和 XDDM 上,前缓冲区显示在与后缓冲区不同的另一个适配器上时,会有显著的性能损失。 有关详细信息,请参阅 WPF 和 Direct3D9 互作。
性能摘要
下表显示了前端缓冲区更新的性能,这取决于操作系统、像素格式和图面可锁定性。 假定前缓冲区和后缓冲区位于同一适配器上。 根据适配器配置,硬件更新通常比软件更新快得多。
表面像素格式 | Windows Vista、WDDM 和 9Ex | 其他 Windows Vista 配置 | Windows XP SP3 或 SP2 带修补程序 | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (不可锁定) | 硬件更新 | 软件更新 | 软件更新 | 软件更新 |
D3DFMT_X8R8G8B8 (可锁定) | 硬件更新 | 软件更新 | 硬件更新 | 硬件更新 |
D3DFMT_A8R8G8B8 (不可锁定) | 硬件更新 | 软件更新 | 软件更新 | 软件更新 |
D3DFMT_A8R8G8B8 (可锁定) | 硬件更新 | 软件更新 | 硬件更新 | 软件更新 |