我想获取Android设备的VRAM大小。
有没有从程序中获取数据的方法?
发布于 2011-01-26 08:29:06
让我们使用Nexus One进行一些计算:
屏幕分辨率为480x800。因此,所需的最小视频内存大小为:
400 * 800 * 4 bytes = 1536000 bytes
假设驱动程序可以(通常也应该)使用多个缓冲区,我们还应预期如下值:
1536000 * 2 bytes = 3072000 bytes
1536000 * 3 bytes = 4608000 bytes
etc...
值不是1536000的倍数(通常是W x H x 4)会很奇怪。
在对安卓内部进行了一些搜索后,我找到了这个documentation:
...Android对驱动程序提出了两个要求:可映射内存的线性地址空间,它可以通过在/dev/fb0上调用directly...accessing来将该地址空间写入驱动程序...
所以我试着调整/dev/graphics/fb0文件的大小(在我的设备上没有/dev/fb0)。
但是直接的方法是行不通的:
File file = new File("/dev/graphics/fb0");
file.length(); // ==0, doesn't work, no read access使用next技巧可以获得fb0的实际大小
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)
显存约为4MB (Nexus One)。让我们来看看这是不是Nexus屏幕尺寸的倍数:
4608000/1536000 = 3
它看起来像是一个正确的值。我们也可以说驱动程序使用了三个屏幕缓冲区。
因此,总而言之,您可以使用adb检测视频内存大小,但由于文件访问限制,您不能在运行时从android应用程序中使用此方法。
发布于 2011-01-29 00:49:34
通常,您在移动设备上没有专用的"VRAM“。至少你不会在PowerVR架构上拥有它(它以其MBX和SGX内核完全主导了市场)。
也就是说,OpenGL驱动程序会分配正常的内存,直到内存用完为止,分配的内存越多,分配给应用程序的内存就越少。
发布于 2011-01-27 20:06:41
Android/OpenGL API没有提供从给定设备读取VRAM大小的显式方法。
手册式解决方案
您可以尝试以经验的方式推断VRAM大小,添加1MB纹理,直到从gl.glGetError()得到内存不足错误。
https://stackoverflow.com/questions/3154632
复制相似问题