基本的にいいえ。XNAのGraphicsDevice
は、レンダリング用にシングル スレッドです。リソース (テクスチャ、頂点バッファーなど) を複数のスレッドから GPU に送信できます。Draw
ただし、 (および のような他のレンダリング関数Present
) はメイン スレッドからのみ呼び出すことができます。
適切なロックを設定して、複数のスレッドからレンダリング タイプのものを実行することに成功した人々について聞いたことがあります。しかし、それは「悪いブードゥー教」のようです。リンクされた投稿にあるように、「XNA フレームワークのドキュメントはここで約束をしていません」。言うまでもなく、ロックを正しく行うことさえ難しいです。
複数のグラフィックス デバイスを作成することについてはよくわかりません。自分で試したことはありません。可能だと思いますが、デバイス間でリソースを共有できないため、かなり役に立ちません。おそらく、努力する価値はありません。
あなたの質問に対するコメントでjalfが述べたように、GPUに到達すると、すべてがすでに並行して処理されます。したがって、これは、バッチ制限に達したために CPU が制限されている場合にのみ役立ちます(バッチ以外のほとんどすべてを別のスレッドに移動できるため)。その場合、このようなクレイジーなスキームを試す前に、最初にバッチ数を減らすために考慮すべき多くの最適化があります。(そして、あなたは自分のパフォーマンスを測定しましたよね?)
あなたがしようとしているのは、かなり複雑なシーンをバックグラウンドのレンダー ターゲットにレンダリングし、多くのフレームに負荷を分散させることのようです。その場合、パフォーマンス要件がそれを決定する場合、メインスレッドで複数のフレームにわたってレンダリングし、手動でスケジュールすることができます。RenderTargetUsage.PreserveContents
グラフィックス デバイスに配置するたびにクリアされないように設定することを忘れないでください。