nVidia Optimus ラップトップで実際の GPU を使用してアプリケーションを常に実行したい。
「Optimus システムでの高性能グラフィックス レンダリングの有効化」から ( http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf ):
グローバル変数 NvOptimusEnablement (ドライバー リリース 302 の新機能) リリース 302 ドライバー以降、アプリケーション開発者は実行時に Optimus ドライバーにハイ パフォーマンス グラフィックスを使用して任意のアプリケーション (既存のアプリケーション プロファイルがないアプリケーションも含む) をレンダリングするように指示できます。これは、NvOptimusEnablement という名前のグローバル変数をエクスポートすることで実行できます。Optimus ドライバーは、エクスポートの存在と値を探します。現時点では、DWORD の LSB のみが重要です。値 0x00000001 は、高性能グラフィックスを使用してレンダリングを実行する必要があることを示します。値 0x00000000 は、このメソッドを無視する必要があることを示します。使用例:
extern "C" { _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; }
問題は、Delphi を使用してこれを行いたいということです。私が読んだことから、いくつかのハックが存在するにもかかわらず、Delphi は変数のエクスポートをサポートしていません。いくつか試してみましたが、うまくいきませんでした。
同じ nvidia ドキュメントで、適切な GPU を強制することは、リストされているいくつかの dll の 1 つに静的にリンクすることによって達成できることを読みました。しかし、使用していないdllにリンクしたくありません。(opengl.dll がそれらの 1 つでない理由は、私にはわかりません。) 単純なエクスポートされた変数は、はるかにきれいに見えます。