我想知道是否可以在任何Android Opengl Es 2.0项目中使用的纹理大小有任何限制。据我所知,拥有4096x4096大尺寸的纹理有点意义,因为它在小屏幕上呈现。但是如果要求在运行时在许多纹理之间切换怎么办?如果我想要一个纹理图集来快速单个上传而不是多个较小的纹理上传。请在这方面告诉我你的想法。
此外,我确信设备可以处理的图像大小必须有限制,因为设备上的内存有限。但我想知道它是基于分辨率还是基于尺寸。我的意思是如果设备的图像大小限制为1024x1024,它可以处理大小为2048x2048的压缩纹理,其大小与未压缩的1024x1024相同。
另外请告知我一般情况下,运行Android 2.2及以上版本的纹理尺寸或分辨率正常设备的限制是多少。
另外,如果在opengles 2.0中处理高分辨率图像时有任何最佳做法,请告知我们,以便在加载时间和运行时间内获得最佳性能。
答案 0 :(得分:22)
纹理大小存在硬件限制。要手动查找它们,您可以访问glbenchmark.com这样的网站(此处显示有关Google Galaxy nexus的详细信息)。
要从代码中自动查找最大大小,您可以使用以下内容:
int[] max = new int[1];
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, max, 0); //put the maximum texture size in the array.
(对于GL10,但GLES20存在相同的方法)
对于图像的处理或编辑,在android中工作时通常使用Bitmap的实例。它保存图像的未压缩值,因此取决于分辨率。但是,对于openGL应用程序使用压缩纹理是recommended,因为这会提高内存使用效率(请注意,您无法修改这些压缩纹理)。 来自previous link:
纹理压缩可以显着提高你的性能 OpenGL应用程序通过减少内存需求和制作更多 有效利用内存带宽。 Android框架提供 支持ETC1压缩格式作为标准功能[...]
您应该查看this document,其中包含许多有关纹理加载和使用的良好做法和提示。作者明确写道:
最佳实践:使用ETC进行纹理压缩。
最佳实践:确保您的几何和纹理分辨率 适合他们显示的尺寸。不要使用1k x 1k 屏幕上最多500像素宽的纹理。该 几何相同。