假设我有一个基于 SlimDX 的游戏编辑器。我有一个 DeviceContext 实例,它基本上控制设备的所有状态,处理丢失的设备,创建它等。编辑器并不总是在渲染发生的地方打开一个视口。相反,它包含各种编辑器、场景编辑器、纹理查看器/编辑器、动画编辑器、材质编辑器等。
现在假设用户打开了 SceneEditor(一个对话框,其中四个视图呈现到面板中)。当编辑器被实例化时,它会从 DeviceContext 中获取一个引用,如果找到“null”,它会调用 context.CreateDevice(Control ctrl)。此方法“确保”设备不会丢失、无效或处置。如果是这样,它会根据正在发生的事情来处理它。现在编辑器在创建/重置设备时向控件(面板)发送“CreateDevice”方法,该控件是代表 TopLeft 视图的面板。接下来,它从上下文中获取“设备”引用,然后创建它的交换链视图(作为其他三个视口面板)。
现在假设用户打开了 ModelViewer 对话框。这也确保了设备实例不是 'null' ,如果是,则调用 DeviceContext.CreateDevice(ModelViewPanel) 并从中获取设备引用。如果 Device 不为空,它会为其视图创建一个交换链(模型将在其中渲染)。
好的,所以我们有一个带有四个视图的场景编辑器(TopLeft Panel 是用于创建 Device 对象的控件)和三个其他 Panel 对象创建为交换链。接下来我们有用户打开的 ModelViewer。这有一个作为交换链创建的面板。
我的问题是:由于场景编辑器拥有最初创建设备实例的控件,如果用户关闭场景编辑器我该怎么办?我是调用Devi)ce.Reset() 还是使用ModelViewer 的显示参数创建一个“新的”Device()'?
如果有不明白的地方,请要求重新考虑问题,谢谢。