我正在寻找创建一个硬件加速的DirectX (目前9个)窗口上的第二个屏幕。此屏幕连接到与主屏幕相同的图形显示器(至少目前是这样)。
目前,当我尝试基于窗口位置或通过拖动窗口在辅助屏幕上打开窗口时,CPU使用率跳跃了大约10%,这似乎表明windows正在切换到软件后备而不是硬件加速。
机器是运行NVIDIA显卡(不同的卡,因为它在几台机器上运行)的windows XP,具有最新的驱动程序。它还同时运行CUDA来生成图像,如果有关系的话。编程语言是c++,手动创建窗口和消息队列,目前没有使用工具箱来管理图形用户界面
谢谢
发布于 2011-01-08 01:23:16
调用CreateDevice时,请确保使用目标监视器的索引。标准D3DADAPTER_DEFAULT值仅为0,这是主监视器。DirectX在这方面有点笨拙,但如果窗口位于与CreateDevice中指定的不同的监视器上,则它将在以第一个监视器为目标的帧缓冲区中静默渲染,然后使用操作系统窗口管理器将复制缓冲区复制到第二个监视器上的帧缓冲区。
因此,最快捷的解决方案是使用CreateDevice(1,...)相反,这几乎总是双显示器设置的索引方式。
更健壮的解决方案是使用MonitorFromWindow(hwnd)查找窗口覆盖最多的监视器,然后遍历可用的d3d适配器,使用GetAdapterMonitor()查找返回相同监视器句柄的适配器。如果您的系统有两个以上的监视器,或者如果您事先不知道您想要什么监视器而只有一个HWND,那么您需要较长的方法。
https://stackoverflow.com/questions/4626712
复制相似问题