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

如何在辅助屏幕上打开硬件加速的DirectX窗口,directx,directx-9,Directx,Directx 9,我希望在辅助屏幕上创建一个硬件加速的DirectX(目前为9)窗口。此屏幕连接到与主屏幕相同的图形显示(至少目前是这样) 目前,当我试图根据窗口位置或通过拖动窗口打开辅助屏幕上的窗口时,CPU使用率跳升约10%,这似乎表明windows正在切换到软件回退,而不是硬件加速 这台机器是运行NVIDIA图形卡的windows XP(在多台机器上运行不同的图形卡),带有最新的驱动程序。如果有必要的话,它还同时运行CUDA来生成图像。编程语言是C++、手动窗口和消息队列的创建,目前没有使用Toobox来管

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

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

这台机器是运行NVIDIA图形卡的windows XP(在多台机器上运行不同的图形卡),带有最新的驱动程序。如果有必要的话,它还同时运行CUDA来生成图像。编程语言是C++、手动窗口和消息队列的创建,目前没有使用Toobox来管理GUI < /P>
谢谢

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

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

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