0

我有这款三星 Galaxy ACE GT-S5830 安卓手机。它有一个 Adreno-200 GPU。

我原以为它会支持 ETC(爱立信压缩格式),但看起来它无法加载它们。

虽然 gl.glGetString(GL10.GL_EXTENSIONS) 函数包含 GL_OES_compressed_ETC1_RGB8_texture 扩展。

但 android.opengl.ETC1Util.isETC1Supported() 返回 false ??? 这太奇怪了。

我已将文件转换为 .pkm 格式。这就是我加载纹理的方式,但我看到的只是指示纹理未加载的白屏。:

InputStream is= _context.getAssets().open("etc/hands_tex.pkm");                     
gl.glActiveTexture(GL10.GL_TEXTURE0);   //texture unit to load texture to.
gl.glBindTexture(GL10.GL_TEXTURE_2D, glTextureId);
try {
    ETC1Texture etc1tex = ETC1Util.createTexture(is);               
    ByteBuffer bb = etc1tex.getData();              
    gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, ETC1.ETC1_RGB8_OES, etc1tex.getWidth(), etc1tex.getHeight(), 0, bb.capacity(), bb);                
} catch (IOException e) {
   e.printStackTrace();
}

即使上面对 ETC1Util.createTexture() 的调用有效并在内存中创建了纹理对象。

4

1 回答 1

1

我从未使用过 Java GL,但我已经为使用 ETC1 压缩的 Android 编写了本机 OpenGL 代码,因此希望我能提供帮助。ETC1 是 Android 的常见纹理压缩格式,存在扩展名表明您的设备支持它。:)

这里有一些未知数,您应该尝试解决。

可能是您的纹理加载和显示代码有问题,而不是 ETC1 部分。因此,您可能应该尝试换出 ETC1 并使用非压缩安全格式(例如 32 位)来检查显示是否正确。

然后尝试使用简单的 32x32 ETC1 纹理来移除具有影响的非方形 NPOT 尺寸。对glCompressedTexImage2D调用使用硬编码值:

gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, ETC1.ETC1_RGB8_OES, 32, 32, 0, 512, bb);

如果 course as NULL 是有效参数,请确保bb有效。glCompressedTexImage2D的返回代码也非常有用。

抱歉,如果您已经尝试过此操作。希望它有一些用处,安迪

于 2012-07-12T19:38:27.007 回答