如何确定Android OpenGL ES上的最大纹理内存

如何确定Android OpenGL ES上的最大纹理内存,android,opengl-es,Android,Opengl Es,我正在Android上编写一个2D/3D混合游戏,我无法确定我可以使用多少纹理内存。有没有办法确定OpenGL ES中的最大纹理内存 我有自己的纹理缓存,想知道纹理内存的最大阈值。我正在使用activityManager.getMemoryInfo(mi)进行近似估计,但在某些设备上,当我尝试分配纹理(还有更多的纹理已经在内存中)时,应用程序崩溃(EGL\u BAD\u ALLOC)。当我将这个阈值设置为较低的值时,一切似乎都正常。有人知道吗?或者最终如何确定纹理分配不成功,而不是崩溃。您似乎在

我正在Android上编写一个2D/3D混合游戏,我无法确定我可以使用多少纹理内存。有没有办法确定OpenGL ES中的最大纹理内存


我有自己的纹理缓存,想知道纹理内存的最大阈值。我正在使用activityManager.getMemoryInfo(mi)进行近似估计,但在某些设备上,当我尝试分配纹理(还有更多的纹理已经在内存中)时,应用程序崩溃(
EGL\u BAD\u ALLOC
)。当我将这个阈值设置为较低的值时,一切似乎都正常。有人知道吗?或者最终如何确定纹理分配不成功,而不是崩溃。

您似乎在试图了解可用的VRAM(视频RAM)数量。

然而,VRAM的数量并不决定它能容纳多少纹理:这些纹理可以被压缩,VRAM的数量可以因为另一个应用程序而改变,我们不知道视频驱动程序使用了多少内存

方法1

,可以获得最大数量的纹理单位;这意味着可以同时绑定的最大数量:

int[] maxSize = new int[1];
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0);
,可以检索最大纹理大小:

int[] maxNum = new int[1];
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, maxNum, 0);
因此,从逻辑上讲,您至少可以在VRAM中安装
maxSize[0]
²×
maxNum[0]
像素而不会出现问题。即使VRAM空间不足,图形驱动程序也会为我们管理它(这可能包括应用程序因饥饿而崩溃)

无论如何,您可能不会根据VRAM数量或可用像素来调整纹理的大小;这是可能的,但不盈利,可移植,很难正确实施。 有一种更好的方法可以做到这一点:

方法2

99%的情况下,图形芯片上的VRAM数量与屏幕大小成正比。因此,为了确定要加载的纹理版本(大小)(使用不同的(真实的)设备进行实验),您可以放心地选择“适合该设备吗?”