0

我希望在辅助屏幕上创建一个硬件加速的 DirectX(目前为 9)窗口。此屏幕连接到与主屏幕相同的图形显示器(至少目前是这样)。

目前,当我尝试根据窗口位置或通过拖动它在辅助屏幕上打开窗口时,CPU 使用率会跳跃约 10%,这似乎表明 Windows 正在切换到软件回退而不是硬件加速。

机器是运行 NVIDIA 显卡的 windows XP(不同的卡,因为它在多台机器上运行),带有最新的驱动程序。如果这很重要,它还会同时运行 CUDA 来生成图像。编程语言是c++,手动创建窗口和消息队列,暂时没有使用takebox来管理GUI

谢谢

4

1 回答 1

2

当您调用 CreateDevice 时,请确保使用您所定位的监视器的索引。标准的 D3DADAPTER_DEFAULT 值只是 0,它是主监视器。DirectX 这样有点笨拙,但是如果窗口位于与 CreateDevice 中指定的不同的监视器上,那么它将在针对第一个监视器的帧缓冲区中静默渲染,然后使用 OS 窗口将缓冲区复制到第二个监视器上的帧缓冲区经理。

因此,快速而肮脏的解决方案是使用 CreateDevice(1, ...) 代替,因为这几乎总是双显示器设置的索引方式。

一个更强大的解决方案是使用 MonitorFromWindow(hwnd) 来查找窗口覆盖最多的监视器,然后遍历可用的 d3d 适配器,寻找使用 GetAdapterMonitor() 返回相同监视器句柄的适配器。如果您的系统有两个以上的显示器,或者如果您事先不知道您想要什么显示器并且只有一个 HWND,那么您需要更长的方法。

于 2011-01-07T17:23:16.080 回答