3

在我的应用程序中,我使用 direct2d 写入共享 (d3d11/d3d10) 纹理。这是我的应用程序中使用的唯一一种渲染目标。由于设备可能会在 direct2d (D2DERR_RECREATE_RENDER_TARGET) 中丢失,因此存在大量代码来抽象和/或重新创建设备相关资源。但是,我还没有看到这种情况实际发生,并且很好奇我是否在浪费精力。在这种情况下,渲染目标是否真的会丢失,或者我是否受到保护,因为纹理是通过 d3d11 创建的(尽管与 d3d10 共享)?如果是这样,是否有人知道导致渲染目标丢失的可重现、简单的方法,以便我至少可以测试处理这种情况的代码?

4

2 回答 2

4

这不是白费力气。很多场景都可能导致设备丢失。出于测试目的,一种简单的方法是更新您的图形驱动程序。您的应用程序应该优雅地处理这个问题。如果您的图形驱动程序崩溃或 Windows 更新在后台安装新版本,它也可能在幕后发生。还有其他情况,但这些可能是最常见的。

您可以使用设备管理器快速回滚和更新驱动程序。

于 2013-01-17T16:03:13.820 回答
0

当另一个程序使用任何版本的 D3D API 来全屏和返回时,D2D 窗口渲染目标总是会丢失(独占模式,而不是自 D3D10/11 以来支持的新窗口模式)。在 D3D11 中,我认为您必须更改分辨率才能使 D2D 渲染目标丢失。

因此,如果您在这种情况下没有获得 D2DERR_RECREATE_RENDER_TARGET HRESULT,那么在向您的纹理渲染目标呈现时,您可能不需要重新创建渲染目标,但我仍然会处理 D2DERR_RECREATE_RENDER_TARGET。要对其进行测试,您可以在开发过程中将纹理渲染目标替换为窗口渲染目标。

于 2014-04-24T12:51:01.300 回答