三星Galaxy ACE GT-S5830上的ETC1纹理支持

时间:2012-07-12 09:09:55

标签: android opengl-es textures texture-mapping

我有这款三星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()的调用有效,也会在内存中创建纹理对象。

1 个答案:

答案 0 :(得分:1)

我从来没有使用过Java GL,但我已经为Android编写了使用ETC1压缩的原生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);

如果课程为NULL是有效参数,请确保 bb 有效。 来自 glCompressedTexImage2D 的返回码也非常有用。

如果你已经尝试过,请道歉。 希望它有一些用处, 安迪