SlimDXベースのゲームエディタがあるとしましょう。基本的にデバイスのすべての状態を制御し、失われたデバイスを処理し、デバイスを作成するなどのDeviceContextインスタンスがあります。エディターは、レンダリングが行われている場所で常にビューポートを開いているとは限りません。代わりに、さまざまなエディター、シーンエディター、テクスチャビューアー/エディター、アニメーションエディター、マテリアルエディターなどが含まれています。
ここで、ユーザーがSceneEditor(4つのビューがパネルにレンダリングされたダイアログ)を開いたとします。エディターがインスタンス化されると、DeviceContextから参照を取得し、「null」が見つかった場合は、context.CreateDevice(Control ctrl)を呼び出します。この方法は、デバイスが紛失、無効化、または廃棄されないことを「保証」します。もしそうなら、それは何が起こっているかに基づいてそれを処理します。これで、エディターは、デバイスの作成/リセット時に使用するコントロール(パネル)の「CreateDevice」メソッドを送信します。このコントロールは、TopLeftビューを表すパネルです。次に、コンテキストから「デバイス」参照を取得し、そのスワップチェーンビュー(他の3つのビューポートパネル)を作成します。
ここで、ユーザーがModelViewerダイアログを開いたとします。これも、デバイスインスタンスが「null」でないことを確認します。その場合、DeviceContext.CreateDevice(ModelViewPanel)を呼び出し、そこからデバイス参照を取得します。デバイスがnullでない場合、そのビュー(モデルがレンダリングされる場所)のスワップチェーンが作成されます。
これで、4つのビュー(TopLeft PanelがDeviceオブジェクトの作成に使用されるコントロール)と、スワップチェーンとして作成された他の3つのPanelオブジェクトを備えたシーンエディターができました。次に、ユーザーが開いたModelViewerがあります。これには、スワップチェーンとして作成された単一のパネルがあります。
私の質問は次のとおりです。シーンエディターにはデバイスインスタンスを最初に作成したコントロールがあるので、ユーザーがシーンエディターを閉じた場合はどうすればよいですか?Devi)ce.Reset()を呼び出すか、ModelViewerのプレゼンテーションパラメーターを使用して「新しい」Device()を作成しますか?
何かが理解されていない場合は、質問をリファクタリングするように依頼してください。ありがとうございます。