1

Windows XP(64ビット)では、OpenGLを使用して、異なるGPUを備えた異なるグラフィックカードに接続された2つの画面(たとえば、異なる世代の2つのNVIDIA)にレンダリングすることは不可能のようです。この場合、レンダリングは1つの画面でのみ機能します。一方、Direct3Dでは問題なく動作し、両方の画面でレンダリングされます。なぜこれなのか誰もが知っていますか?またはもっと重要なこと:OpenGLで両方の画面にレンダリングする方法はありますか?

Windows 7では、異なるブランドのGPU(AMDやIntelなど)を使用しても、両方の画面でレンダリングが機能することを発見しました。これは、私が間違っていなければ、Direct3Dコンポーザー上で実行されるディスプレイモデルが原因である可能性があります。これは単なる推測であり、それが実際の理由であるかどうかは本当にわかりません。

Direct3Dが解決策である場合、1つのアイデアは、OpenGLを使用してすべてのレンダリングをテクスチャに実行し、次にこのテクスチャをDirect3Dを使用してレンダリングすることです。ただし、速度が遅すぎないことを前提としています。

4

2 に答える 2

1

Windows 7で何が起こるかというと、1つのGPUまたは同じタイプのGPUが結合されて、画像がオフスクリーンバッファーにレンダリングされ、スクリーンにまたがって合成されます。ただし、単一のコンテキストのレンダリングを異なる製造のGPUに分散することは(まだ)不可能です。それには、標準化された通信および同期インフラストラクチャが必要になりますが、これは単に存在しません。OpenGLもDirect3Dもそれを行うことはできません。

実行できるのは、レンダリング結果を複数のGPUの画面上のフレームバッファーにコピーすることです。Windows 7とDirectXは、これをサポートしています。OpenGLでそれを行うには、もう少し複雑です。技術的には、オフスクリーンデバイスコンテキスト(通常はいわゆるPBuffer )にレンダリングします。レンダリングが終了したら、GDI関数を使用して結果をウィンドウにコピーします。ただし、この最後のコピー手順は、残りのOpenGL操作と比較して非常に低速です。

于 2011-09-01T20:03:14.573 に答える
0

NVIDIAとAMDの両方に、使用するGPUを選択できる方法があります。NVIDIAにはWGL_NV_gpu_affinityがあり、AMDにはWGL_AMD_gpu_associationがあります。どちらも動作がかなり異なるため、必要な動作を得るには、ハードウェアごとに異なることを行う必要があります。

于 2011-09-01T11:03:32.627 に答える