最近、私のチームは、現在の C++ ビルダー プロジェクトが別のコンピューターで奇妙に実行されているという問題に気付き始めました。GlobalUseGPUCanvas
これを に設定してアプリケーションを実行しているという事実に絞り込みましたtrue
。私の理解では、これは firemonkey が GPU を使用してキャンバスをレンダリングすることを意味します。問題が発生しているマシンは、統合グラフィックス カードの性能が低いマシンであることに気付きました。GlobalUseGPUCanvas
したがって、ユーザーが十分に強力なグラフィックス カードを持っている場合に のみ有効になるロジックを書きたいと考えています。
これを開始するために、この MSDN の記事に大きく基づいて次のコードを作成しました。これにより、マシン上のすべてのビデオ カードをループして、それらのメモリ容量を確認できます。
IDXGIFactory * pFactory = NULL;
CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory);
IDXGIAdapter * pAdapter;
DXGI_ADAPTER_DESC * adapterDesc;
for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
{
pAdapter->GetDesc(adapterDesc);
long vidMemory = adapterDesc->DedicatedVideoMemory;
long sMemory = adapterDesc->SharedSystemMemory;
}
if( pFactory )
{
pFactory->Release();
}
コンピュータのビデオカードをチェックして、ビデオカードでプログラムを実行するのに十分なメモリがあるかどうかを確認できるため、これはまともなスタートです。ただし、マシンに非常に優れた専用グラフィックス カードが搭載されていても、代わりに内部グラフィックスが有効になっている可能性があるというシナリオを処理する方法がわかりません。たとえば、強力な専用カードが表示され、十分なメモリがあると考えることができますが、何らかの理由であまり強力でない統合グラフィックスが不足している場合は、間違っている可能性があります。
私が列挙しているこれらのグラフィックカードのどれがアクティブなグラフィックデバイスであるかを知ることができる方法はありますか?