android - 减少 OpenGL ES 1.1 中纹理的内存使用

标签 android opengl-es

我在 OpenGL ES 中的场景需要多个高分辨率纹理,但它们是灰度的,因为我仅将它们用于 mask 。我需要减少内存使用。

我尝试使用 Bitmap.Config.ALPHA_8 和 RGB_565 加载这些纹理。 ALPHA_8 似乎实际上增加了内存使用。

是否有某种方法可以将纹理加载到 OpenGL 中并使其使用每像素少于 16 位?

glCompressedTexImage2D 看起来很有前途,但据我所知,不同的手机提供不同的纹理压缩方法。另外,我不知道压缩是否真的减少了运行时的内存使用。以 ATITC 和 PVRTC 格式存储我的纹理的解决方案是什么?如果是这样,我如何检测设备支持哪种格式?

谢谢!

最佳答案

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 中使用纹理格式指定支持的设备。

编辑:

关于android - 减少 OpenGL ES 1.1 中纹理的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240293/

相关文章:

android - 我的顶点只显示一个三角形?

java - 纹理环绕模式重复不起作用

iphone - OpenGL ES 1.1 中由三角形 strip 制成的四边形上的纹理变形问题

android - 我不能在 onMessageReceived 中使用 AlertDialog

android - macOS 安卓模拟器 : qemu-system-i386 - image not found

java - TextView 在 AsyncTask 中给出 NullPointerException

android - 某些图像无法加载 - android openGL 纹理

objective-c - 2个着色器使用相同的顶点数据

android - 如何从 url 加载多个图像到 viewpager

android - React-Native:返回按下android硬件后退按钮