2013-04-22 13 views
5

一部のコンピュータには、複数のモニタが搭載されていない場合でも、複数のグラフィックカード/チップセットがインストールされています(ラップトップコンピュータなど)。特定のグラフィックドライバでOpenGLコンテキストを作成するにはどうすればよいですか?

IntelとNvidiaグラフィックハードウェアの両方を搭載したノートパソコンシステムに問題があります。インテルのドライバはOpenGLサポートではひどくひどいです。私のコードは、レンダリングコンテキストを作成するときに、Intelシステムではデフォルトになっているようだから、Nvidiaのものではないようです。

起動時にこれを回避する方法はありますか? 「利用可能なすべてのグラフィックスドライバをポーリングし、可能であればインテルのドライバを避け、動作するドライバでOpenGLのレンダリングコンテキストを構築する」のようなものを言うには?

+0

NVidiaパネルでは、デフォルトのGPUを選択することができます –

+0

@MichaelIV:ありがとうございます。でも、それは私が求めているものではありません。 –

+0

これはドライバだけでなく、GPUについてもそうです。今日のノートブックは、Intelと専用のNVidia(ATI)の2つのカードを持っています。NVidiaパネルのようにバイアスやウィンドウインターフェイスを使ってハードウェアを設定する必要があります。異なるドライバを選択しようとする最初のスイッチハードウェアは無意味です。 –

答えて

1

あり、あなたが求めているものを行うにはポータブルな方法でませんが、このドキュメントでは、NVIDIAオプティマス技術とシステムの「高性能グラフィックスレンダリング」を強制する方法について説明します。具体的に

http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf 

セクション」を参照してください。言うグローバル変数NvOptimusEnablement(新しいドライバ でリリース302)」、:

をリリース302ドライバ以降では、アプリケーション開発者は ハイパフォーマンス012を使用するように、実行時にオプティマスドライバを指示することができますアプリケーションをレンダリングするためのグラフィックス。既存のアプリケーションプロファイルが存在しないアプリケーションであっても、 が存在します。彼らは NvOptimusEnablementという名前のグローバル変数をエクスポートすることでこれを行うことができます。 Optimus ドライバは、エクスポートの有無と値を検索します。現時点では、DWORDのLSB のみが重要です。 0x00000001の値は、高性能グラフィックスを使用してレンダリングを実行することを示す を示します。 の値が0x00000000の場合、このメソッドを無視する必要があります。

使用例:

extern "C" { 
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
} 

別の可能性はWGL_nv_gpu_affinityの拡張機能ですが、あなたのWGLコンテキストは、それをサポートする必要があると私はそれが混合インテル/ NVIDIAシステム上で動作するかどうかはわからない:

http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt 
関連する問題