使用C++在Windows平台上检测可用的图形内存

4

我想要检测可用的图形内存。我的C++项目使用了DirectShow。

一些古老的显卡不能正常播放视频,而会退回到四色模式。在这些机器上,如果我尝试分配超过一个视频窗口,程序就会崩溃而没有任何警告。

这不太优雅,因此我想提前检测可用的图形内存,以确定该程序是否有足够的图形内存来运行。


如果你找到了答案,请在这里回复,这样我们所有人都能知道... - graham.reeds
2个回答

1

一个非常隐秘的方法,适用于XP及以下版本,是读取注册表:

例如,我访问\HKLM\Hardware\Devicemap\Video并获取GUID: {3468769C-3D6B-4BB1-85B6-7B5AE7F4E8F8}

然后我访问\HKLM\CCS\Control\Video,并为该设备读取“HardwareInformation.MemorySize”:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Video{3468769C-3D6B-4BB1-85B6-7B5AE7F4E8F8}

一个更好的方法(实际上是推荐的方法)是使用WMI:

GetVideoMemoryViaWMI


0

8mb。如果我没记错的话,这是根据AGP标准的最大数量。显卡上的所有额外内存都用于缓冲主内存,以便它不必通过总线传输。

如果标准没有被修订,我会感到惊讶。

如果您要使用非常旧的显卡进行工作,可以尝试查看视频BIOS扩展(VBE)。它具有查询内存的方法。


并非所有的显卡都通过AGP总线进行通信。客户可能拥有任何类型的图形解决方案 - PCI图形卡,主板上的集成图形芯片或使用PCIe总线的较新卡。我正在寻找确定图形卡解决方案的方法,并确定GPU可用的离散和共享内存量。我真的很想知道数字 - 我的应用程序使用多少gfx内存?我知道Vista及更高版本(WVDDM)有一个API可以查询图形内存。那WinXP呢...? - user206705
CPU-Z 明确地报告了我的显卡有多少内存。至于它是如何做到的…… - graham.reeds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接