3

我抓住了这个多窗口测试代码,将其更改为使用D3DXCreateTeapot而不是D3DXLoadMeshFromX(我找不到 teapot.x 文件),将调用移到EndScene调用下方DrawText并设置NUM_WINDOWS为 1。通过这些细微的更改,测试工作并创建了两个窗口,每个都有它的茶壶。

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

有了这个非常接近我的应用程序需要的设置,辅助监视器中的窗口总是太慢。如果我交换窗口,情况是一样的:辅助监视器中的那个开始爬行,并减慢整个系统的速度。

我四处搜索,一些消息来源(尽管已过时)指出,只有主显示器在不处于全屏模式时才能使用硬件加速。我不能使用全屏,因为我的应用程序中的 direct3d9 渲染是在嵌入在 Winforms GUI 中的用户控件内完成的。

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

4

1 回答 1

2

您有 3 个选项:

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

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

  3. 将您的代码更改为 DirectX11。那里有更多的 GDI 交互选项。更好的渲染行为。也许更好的司机。

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

于 2013-07-13T23:39:37.603 回答