我正在制作一个游戏引擎,我将同时支持OpenGL和Direct2D。我听说渲染目标可以在 EndDraw(( 上返回错误,需要重新创建使用它创建的每个资源。我想知道这种情况是否经常发生,我应该处理该错误以及它是如何发生的。在OpenGL中,您不会因此而丢失上下文。那么,是什么原因导致呈现目标丢失,即使有这个问题,我是否应该将 direct2D 用于游戏? 提前谢谢。
过去(阅读 DirectX 9 及更早版本(,当您将焦点从全屏应用程序切换开时,通常会发生设备丢失。然后,在应用程序不可见期间,您没有要绘制的图形设备。当焦点设置回应用程序时,您必须重新初始化设备和在该设备上创建的所有资源。
今天(DirectX 10 及更高版本(,情况已不再如此。对图形设备的访问是虚拟化的,因此当应用程序失去焦点时,您可以保留设备句柄。但是,在某些情况下,您仍然可能会丢失设备,例如,对计算机的物理更改,驱动程序的崩溃和重置等。因此,您丢失设备的情况非常罕见且有些极端。如果需要,您可以处理这些情况(如果您想创建一个稳定的应用程序,您应该这样做(,但普通用户很可能不会遇到任何这些极端情况。有关详细信息,请查看此 MSDN 文章。