多个监视器的硬件加速

时间:2013-05-31 19:07:48

标签: winforms hardware-acceleration direct3d9

我抓取了this multi window测试代码,将其更改为使用D3DXCreateTeapot代替D3DXLoadMeshFromX(我无法找到teapot.x文件),移动{{1} }在EndScene调用下方调用并将DrawText设置为1.通过这些微小更改,测试工作并创建两个窗口,每个窗口都带有茶壶。

我构建了测试并将其部署在一台机器上,该机器具有带有两个磁头的Intel HD Graphics板载GPU,每个磁头都连接到一台显示器。然后我将一个窗口移动到每个监视器,并放大两个窗口占据每个监视器空间的大约80%。

使用此设置非常接近我的应用程序所需,辅助监视器中的窗口总是太慢。如果我交换窗口,它是相同的:辅助监视器中的那个开始爬行,并减慢整个系统。

我google了一下,有些消息来源(尽管过时了)说明只有主显示器在非全屏模式下才能使用硬件加速。我无法使用全屏,因为我的应用程序中的direct3d9渲染是在Winforms GUI中嵌入的用户控件内完成的。

在窗口模式下,两台显示器的硬件加速真的不可能吗?我们的应用程序的遗留版本使用MFC + DirectDraw并设法运行得足够快,但这些都是过时的技术,我们厌恶回到那里。

1 个答案:

答案 0 :(得分:2)

您有3个选项:

  1. 尝试多种组合,例如:D3DPRESENT_INTERVAL_IMMEDIATE + (D3DSWAPEFFECT_FLIP或D3DSWAPEFFECT_COPY)+ D3DCREATE_ADAPTERGROUP_DEVICE。也许有些会提供更好的 性能

  2. 渲染到曲面,转换为位图,并像使用表单中的任何其他位图一样使用它。像这样的东西 D3DXSaveSurfaceToFileInMemory

  3. 将您的代码更改为DirectX11。你有更多的GDI互动选择。更好的渲染行为。也许更好的司机。

  4. 几年前,我使用DirectX10 / 11制作了一些多窗口代码,也是多个设备。我不能告诉DirectX9有这个问题,对我来说似乎很荒谬,但可能是你的Windows版本或英特尔驱动程序。