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

标签 java android graphics opengl-es hardware

情况是这样的:我有两个宽度超过 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/

相关文章:

java - android的设计问题

android - 连接更改上的 API Hook

android - 将用户名和密码发送到本地主机不起作用?

image-processing - 使用 Direct2D 的大图像

java - 在 Java 中转换引用变量

java - 如何使我的应用程序模块化?

C# GDI+ - 在光泽方法上删除椭圆下半部分上方

c++ - OpenGL同时绘制2D和3D

java - 为什么当我在 MySQL 数据库中的不同列上使用 "no default value"时,会在单独的列上收到 "INSERT INTO"错误?

java - 这些构造函数调用语句之间的区别?