我抓取了this multi window测试代码,将其更改为使用D3DXCreateTeapot
代替D3DXLoadMeshFromX
(我无法找到teapot.x文件),移动{{1} }在EndScene
调用下方调用并将DrawText
设置为1.通过这些微小更改,测试工作并创建两个窗口,每个窗口都带有茶壶。
我构建了测试并将其部署在一台机器上,该机器具有带有两个磁头的Intel HD Graphics板载GPU,每个磁头都连接到一台显示器。然后我将一个窗口移动到每个监视器,并放大两个窗口占据每个监视器空间的大约80%。
使用此设置非常接近我的应用程序所需,辅助监视器中的窗口总是太慢。如果我交换窗口,它是相同的:辅助监视器中的那个开始爬行,并减慢整个系统。
我google了一下,有些消息来源(尽管过时了)说明只有主显示器在非全屏模式下才能使用硬件加速。我无法使用全屏,因为我的应用程序中的direct3d9渲染是在Winforms GUI中嵌入的用户控件内完成的。
在窗口模式下,两台显示器的硬件加速真的不可能吗?我们的应用程序的遗留版本使用MFC + DirectDraw并设法运行得足够快,但这些都是过时的技术,我们厌恶回到那里。
答案 0 :(得分:2)
您有3个选项:
尝试多种组合,例如:D3DPRESENT_INTERVAL_IMMEDIATE + (D3DSWAPEFFECT_FLIP或D3DSWAPEFFECT_COPY)+ D3DCREATE_ADAPTERGROUP_DEVICE。也许有些会提供更好的 性能
渲染到曲面,转换为位图,并像使用表单中的任何其他位图一样使用它。像这样的东西 D3DXSaveSurfaceToFileInMemory
将您的代码更改为DirectX11。你有更多的GDI互动选择。更好的渲染行为。也许更好的司机。
几年前,我使用DirectX10 / 11制作了一些多窗口代码,也是多个设备。我不能告诉DirectX9有这个问题,对我来说似乎很荒谬,但可能是你的Windows版本或英特尔驱动程序。