如何在代码中确定Android设备的纹理内存限制?

时间:2012-03-22 22:12:00

标签: java android graphics opengl-es hardware

情况就是这样:我有两个宽度超过1024的图像,最终可以扩展到2048,作为2的幂。这几乎在所有经过测试的Android设备上运行良好,除了HTC Eris和HTC Hero,它们失败并呈现一个空的白色矩形。

我想要做的是添加一项检查以禁用使用大纹理的功能。所以基本上我只需要一种方法来确定设备是否可以支持高分辨率图像,并使用简单的布尔结果。

我在网上发现了几个类似的问题,但没有一个能回答这个问题。

解决方案(根据Tim的回答):

我能够在onSurfaceCreated()类的GLSurfaceView.Renderer方法中捕获此信息,然后对其进行测试:

public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
    IntBuffer textureLimit = IntBuffer.allocate(1);
    gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, textureLimit);
    this.mTextureLimit = textureLimit.get(0);
}

1 个答案:

答案 0 :(得分:2)

您是否探索过glGet *系列函数?您可以查询有关当前gles实现的所有类型的参数。

也许像glGetIntegerv(GL_MAX_TEXTURE_SIZE, size);这样的东西会起作用。

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml

您也可以使用glGetError进行错误检查。如果您尝试为实现创建一个太大的纹理,则在调用GL_INVALID_VALUE后它应该返回glTexImage2d。如果由于某种原因导致大纹理无法成功创建纹理并回退到较小的大小,则可以捕获此错误。