我有一个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/