在firemonkey

时间:2015-08-20 17:50:50

标签: c++ directx firemonkey c++builder-xe8

最近,我的团队开始注意到我们当前的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();
    }

这是一个不错的开始,因为我可以检查计算机视频卡,看看他们是否有足够的内存来运行视频卡上的程序。但是,我不知道如何处理机器可能有一个非常好的专用显卡,但可能启用内部图形的情况。例如,我可以看到功能强大的专用卡,并认为它们有足够的内存,但如果它们出于某种原因使用功能较弱的集成显卡,我可能会误会。

无论如何能够分辨出我列举的这些显卡是活动图形设备吗?

0 个答案:

没有答案