在firemonkey中评估画布渲染的显卡性能
Assessing video card performance for canvas rendering in firemonkey
最近,我的团队开始注意到我们当前的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首先返回带有输出的适配器
显示主桌面。
相关文章:
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- OpenGL 片段着色器未在英特尔 HD 4000 显卡上编译
- 没有专用显卡的 Direct2D 与 GDI+
- 集成显卡上的 OpenGL 访问冲突
- 我应该将哪个 opengl 库与 nvidia 显卡一起使用
- 为什么 vulkan 会报告具有集成显卡和 GPU 的系统中的单个设备
- 是否可以将功能卸载到显卡
- 窗口闪烁,在 NVIDIA 显卡上呈现 OpenGL
- 英特尔集成显卡错误识别 (DXGI)
- 有没有使用显卡的方法(除了CUDA和OpenCL)
- GTX 550 Ti显卡支持动态并行编程
- 在显卡上运行应用程序
- glAccum(模糊效果)工作与一个显卡,但不是另一个
- 本机显卡功能
- c++如何检测显卡模型
- 在ubuntu上运行cuda -它是否需要一个本地设备驱动程序(使用nvidia显卡)
- 强迫机器使用专用显卡
- OpenGL -某些显卡上的问题
- 在firemonkey中评估画布渲染的显卡性能