情况是这样的:我有两个宽度超过 1024 的图像,最终缩放到 2 的幂为 2048。这在几乎所有经过测试的 Android 设备上都能正常工作,但 HTC Eris 和 HTC Hero 除外,它们会失败并仅呈现一个空的白色矩形。
我想做的是添加一个检查以禁用使用大纹理的功能。所以基本上我只需要一种方法来确定设备是否可以支持高分辨率图像,并使用简单的 boolean 结果。
我在网上发现了几个类似的问题,但没有一个能够回答执行此操作的方法。
解决方案(根据蒂姆的回答):
我能够在 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* 系列函数吗?可以查询当前gles实现的各种参数。
也许类似glGetIntegerv(GL_MAX_TEXTURE_SIZE, size);
会起作用的。
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml
您也可以使用glGetError
用于错误检查。如果您尝试创建对于实现来说太大的纹理,它应该返回 GL_INVALID_VALUE
调用glTexImage2d
后。如果由于某种原因大纹理没有成功创建,您可能会在创建纹理后捕获此错误并回退到较小的尺寸。
关于java - 如何在代码中确定 Android 设备的纹理内存限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831309/