纹理大小的限制?Android OpenGL ES 2.0

纹理大小的限制?Android OpenGL ES 2.0,android,performance,opengl-es,textures,Android,Performance,Opengl Es,Textures,我想知道在任何Android Opengl Es 2.0项目中使用的纹理大小是否有任何限制。我知道,拥有4096x4096大小的巨大纹理,在小屏幕上渲染时,没有什么意义。但是,如果要求在运行时在多个纹理之间切换,该怎么办?如果我想有一个纹理图集做一个快速的单一上传,而不是多个较小的纹理上传。请让我知道你在这方面的想法 此外,我确信,由于设备上的内存有限,设备可以处理的图像大小必须受到限制。但我想知道它是基于分辨率还是基于大小。我的意思是,如果一台设备的图像大小限制为1024x1024,那么它可以

我想知道在任何Android Opengl Es 2.0项目中使用的纹理大小是否有任何限制。我知道,拥有4096x4096大小的巨大纹理,在小屏幕上渲染时,没有什么意义。但是,如果要求在运行时在多个纹理之间切换,该怎么办?如果我想有一个纹理图集做一个快速的单一上传,而不是多个较小的纹理上传。请让我知道你在这方面的想法

此外,我确信,由于设备上的内存有限,设备可以处理的图像大小必须受到限制。但我想知道它是基于分辨率还是基于大小。我的意思是,如果一台设备的图像大小限制为1024x1024,那么它可以处理大小为2048x2048的压缩纹理,该纹理的大小与未压缩的1024x1024大致相同

另外,请让我知道一般情况下,运行android 2.2及以上版本的普通设备对纹理大小或分辨率的限制是多少


另外,请告诉我在opengles 2.0中处理高分辨率图像时是否有任何最佳做法,以在加载时间和运行时间获得最佳性能。

纹理大小有硬件限制。要手动查找,您可以访问以下网站(此处显示有关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中使用一个实例。这将保存图像的未压缩值,因此取决于分辨率。但是,您需要为openGL应用程序使用压缩纹理,因为这样可以提高内存使用效率(请注意,您不能修改这些压缩纹理)。
从:

纹理压缩可以显著提高图像的性能 OpenGL应用程序,通过减少内存需求和 有效利用内存带宽。Android框架提供了 支持ETC1压缩格式作为标准功能[…]

您应该看看其中包含了许多关于纹理加载和使用的良好实践和提示。作者明确写道:

最佳实践:使用ETC进行纹理压缩

最佳实践:确保几何体和纹理分辨率 适合它们显示的大小。不要使用1k x 1k 屏幕上最大宽度为500像素的物体的纹理。这个 几何体也是如此