我在 OpenGL ES 中的场景需要几个大分辨率纹理,但它们是灰度的,因为我仅将它们用于蒙版。我需要减少内存使用。
我尝试使用 Bitmap.Config.ALPHA_8 和 RGB_565 加载这些纹理。 ALPHA_8 似乎实际上增加了内存使用。
有没有办法将纹理加载到 OpenGL 中并使其每像素使用少于 16 位?
glCompressedTexImage2D 看起来很有前途,但据我所知,不同的手机提供不同的纹理压缩方法。另外,我不知道压缩是否确实减少了运行时的内存使用。是否有以 ATITC 和 PVRTC 格式存储纹理的解决方案?如果是这样,我如何检测设备支持哪种格式?
Thanks!
PVRTC、ATITC、S3TC 等,GPU 原生压缩纹理应该减少内存使用并提高渲染性能。
例如(抱歉,在 C 中,您可以像在 Java 中使用 GL11.glGetString 一样实现它),
const char *extensions = glGetString(GL_EXTENSIONS);
int isPVRTCsupported = strstr(extensions, "GL_IMG_texture_compression_pvrtc") != 0;
int isATITCsupported = strstr(extensions, "GL_ATI_texture_compression_atitc") != 0;
int isS3TCsupported = strstr(extensions, "GL_EXT_texture_compression_s3tc") != 0;
if (isPVRTCsupportd) {
/* load PVRTC texture using glCompressedTexImage2D */
} else if (isATITCsupported) {
...
此外,您还可以在 AndroidManifest.xml 中使用纹理格式指定支持的设备。
- AndroidManifest.xml 文件 -supports-gl-texture http://developer.android.com/guide/topics/manifest/supports-gl-texture-element.html
EDIT:
- MOTODEV - 了解纹理压缩 http://developer.motorola.com/docstools/library/understanding-texture-compression/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)