Java 如何在代码中确定Android设备的纹理内存限制?
情况是这样的:我有两张图像,宽度超过1024,最终以2的幂放大到2048。除了HTC ERI和HTC Hero,它在几乎所有经过测试的Android设备上都能正常工作,但失败后只呈现一个空白的白色矩形 我想做的是添加一个检查来禁用使用大纹理的功能。因此,基本上我只需要一种方法来确定设备是否能够支持高分辨率图像,并得到一个简单的布尔结果 我在网上发现了几个类似的问题,但没有一个能给出答案 解决方案(根据Tim的回答): 我能够在我的Java 如何在代码中确定Android设备的纹理内存限制?,java,android,graphics,opengl-es,hardware,Java,Android,Graphics,Opengl Es,Hardware,情况是这样的:我有两张图像,宽度超过1024,最终以2的幂放大到2048。除了HTC ERI和HTC Hero,它在几乎所有经过测试的Android设备上都能正常工作,但失败后只呈现一个空白的白色矩形 我想做的是添加一个检查来禁用使用大纹理的功能。因此,基本上我只需要一种方法来确定设备是否能够支持高分辨率图像,并得到一个简单的布尔结果 我在网上发现了几个类似的问题,但没有一个能给出答案 解决方案(根据Tim的回答): 我能够在我的GLSurfaceView.Renderer类的onSurface
GLSurfaceView.Renderer
类的onSurfaceCreated()
方法中捕获此信息,然后对其进行测试:
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);
}
您研究过glGet*函数族吗?您可以查询有关当前实现的各种参数 可能类似于
glGetIntegerv(GL\u MAX\u TEXTURE\u SIZE,SIZE)代码>将起作用
您还可以使用glGetError
进行错误检查。如果尝试创建的纹理对于实现来说太大,则在调用glTexImage2d
后,它应返回GL\u INVALID\u值。在创建纹理后,您可能会发现此错误,如果由于某些原因,大纹理未能成功创建,则会退回到较小的大小