2011-01-07 67 views
0

我期待在辅助屏幕上创建硬件加速的DirectX(此刻为9)窗口。该屏幕连接到与主屏幕相同的图形显示屏(至少在此时)。如何在辅助屏幕上打开硬件加速的DirectX窗口

目前,当我尝试基于窗口的位置或拖动它那里打开第二个屏幕上的窗口,CPU使用率跳了约10%,这似乎表明,Windows是切换到软件回退,而不是硬件加速。

机器是使用最新驱动程序运行NVIDIA图形卡(可在多台机器上运行的各种卡)的Windows XP。如果重要的话,它同时也在运行CUDA来生成图像。编程语言是C++,人工窗口和消息队列的创建,没有在目前使用的管理GUI

感谢

回答

1

当你调用CreateDevice的,请务必使用您的目标监控的指标tookbox。标准D3DADAPTER_DEFAULT值仅为0,这是主监视器。 DirectX在这方面有点贵,但如果窗口位于不同于CreateDevice中指定的显示器上,那么它将静默地渲染到以第一个显示器为目标的帧缓冲区中,然后使用操作系统窗口将副本缓存到第二个显示器上的帧缓冲区经理。

所以,快速和肮脏的解决方案是使用CreateDevice(1,...),因为这几乎总是如何双监视器设置索引。

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