我想要检测可用的图形内存。我的C++项目使用了DirectShow。
一些古老的显卡不能正常播放视频,而会退回到四色模式。在这些机器上,如果我尝试分配超过一个视频窗口,程序就会崩溃而没有任何警告。
这不太优雅,因此我想提前检测可用的图形内存,以确定该程序是否有足够的图形内存来运行。
我想要检测可用的图形内存。我的C++项目使用了DirectShow。
一些古老的显卡不能正常播放视频,而会退回到四色模式。在这些机器上,如果我尝试分配超过一个视频窗口,程序就会崩溃而没有任何警告。
这不太优雅,因此我想提前检测可用的图形内存,以确定该程序是否有足够的图形内存来运行。
一个非常隐秘的方法,适用于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:
8mb。如果我没记错的话,这是根据AGP标准的最大数量。显卡上的所有额外内存都用于缓冲主内存,以便它不必通过总线传输。
如果标准没有被修订,我会感到惊讶。
如果您要使用非常旧的显卡进行工作,可以尝试查看视频BIOS扩展(VBE)。它具有查询内存的方法。