在firemonkey中评估画布渲染的显卡性能

Assessing video card performance for canvas rendering in firemonkey

本文关键字:显卡 性能 布渲染 firemonkey 评估      更新时间:2023-10-16

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

这是一个不错的开始,因为我可以检查电脑的显卡,看看它们是否有足够的内存来运行显卡上的程序。然而,我不确定如何处理这样的情况:一台机器可能有一个非常好的专用显卡,但可能启用了内部显卡。例如,我可以看到功能强大的专用卡,并认为它们有足够的内存,但如果由于某种原因,它们运行的集成图形功能较弱,我可能就错了。

是否有办法能够告诉我枚举的这些显卡中哪一个是活动显卡设备?

我在一台有内部显卡和专用显卡的机器上测试了你的程序。EnumAdapters只返回主显卡。

如果多个适配器是活动的,例如,因为它是一个多监视器系统,EnumAdapters可能返回更多结果。然后你必须决定,但是MSDN给你一个提示:

EnumAdapters首先返回带有输出的适配器

显示主桌面。