我有一个XNA应用程序,该应用程序渲染到第二台监视器(适配器1)上,并定期捕获其自身的屏幕快照并将其存储为Texture2D。

在启动该应用程序时,它还会显示带有面板的Windows窗体。该面板应该由单独的GraphicsDevice绘制,并显示Texture2D。

我遇到的问题是,当我在Windows窗体中运行以下代码以创建GraphicsDevice时:

mainDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, panel1.Handle, pp);


我收到了DeviceLostException。在这种情况下,标准建议是捕获异常,使线程休眠几秒钟然后重试,但这只会使我陷入无限循环。

我怀疑这是因为我的XNA类正在同时使用硬件,并且我在想这是错误的方式。但是我找不到任何有关如何正确执行此操作的文档。

任何帮助将非常感激。

最佳答案

GraphicsDevice是物理设备,而不是连接到窗口的东西。如果您有两个物理设备,则可以使用另一个GraphicsAdapter实例化另一个GraphicsDevice(这不是默认值)。

如果您不打算在设备上增加太多负载,或者其中一个不需要大量硬件加速,则可以创建一个软件设备。功能可能相似,但是会慢很多。

除此之外,我唯一想到的就是看XNA是否支持命令缓冲区(我不确定它是否支持)并自己管理设备的锁定/解锁。

关于c# - 在不同线程中同时显示GraphicsDevice,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2228284/

10-09 01:10