最近,我的团队开始注意到我们当前的C ++构建器项目在不同的计算机上运行奇怪的问题。我们已将此范围缩小到我们正在运行将GlobalUseGPUCanvas
设置为true
的应用程序的事实。据我所知,这意味着firemonkey将使用GPU渲染画布。我们注意到有问题的机器是功能较弱的集成显卡。因此,我希望编写一些逻辑,只启用GlobalUseGPUCanvas
用户拥有足够强大的显卡。
首先,我编写了以下代码,该代码主要基于this MSDN article。这样我就可以遍历机器上的所有视频卡,看看它们有多少内存。
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();
}
这是一个不错的开始,因为我可以检查计算机视频卡,看看他们是否有足够的内存来运行视频卡上的程序。但是,我不知道如何处理机器可能有一个非常好的专用显卡,但可能启用内部图形的情况。例如,我可以看到功能强大的专用卡,并认为它们有足够的内存,但如果它们出于某种原因使用功能较弱的集成显卡,我可能会误会。
无论如何能够分辨出我列举的这些显卡是活动图形设备吗?