如何在辅助屏幕上打开硬件加速的DirectX窗口

时间:2011-01-07 14:52:20

标签: directx directx-9

我正在寻找在辅助屏幕上创建硬件加速的DirectX(目前为9)窗口。此屏幕连接到与主屏幕相同的图形显示(至少此时)。

目前,当我尝试根据窗口位置打开辅助屏幕上的窗口或将其拖动到那里时,CPU使用率会跳跃大约10%,这似乎表明Windows正在切换到软件后备而不是硬件accelaration。

机器是运行NVIDIA显卡的Windows XP(不同的卡,因为它在几台机器上运行),带有最新的驱动程序。如果重要的话,它也会同时运行CUDA来生成图像。编程语言是c ++,手动窗口和消息队列创建,目前没有用于管理GUI的收集箱

由于

1 个答案:

答案 0 :(得分:2)

调用CreateDevice时,请确保使用您要定位的监视器的索引。标准D3DADAPTER_DEFAULT值仅为0,这是主监视器。 DirectX有点kludgy,但是如果窗口在与CreateDevice中指定的监视器不同的监视器上,那么它将在以第一个监视器为目标的帧缓冲区中静默渲染,然后使用OS窗口将缓冲区复制到第二个监视器上的帧缓冲区管理器。

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

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