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

Android 三星Galaxy ACE GT-S5830上的ETC1纹理支持,android,opengl-es,textures,texture-mapping,Android,Opengl Es,Textures,Texture Mapping,我有这款三星Galaxy ACE GT-S5830安卓手机。 它有一个Adreno-200 GPU 我希望它能支持ETC(爱立信压缩格式), 但看起来它无法加载它们 尽管gl.glGetString(GL10.gl_扩展名)函数包含gl_OES_compressed_ETC1_RGB8_纹理扩展名 但是android.opengl.ETC1Util.isETC1Supported()返回false??? 这太奇怪了 我已将文件转换为.pkm格式。 这就是我加载纹理的方式,但我看到的只是白色屏幕,

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

我希望它能支持ETC(爱立信压缩格式), 但看起来它无法加载它们

尽管gl.glGetString(GL10.gl_扩展名)函数包含gl_OES_compressed_ETC1_RGB8_纹理扩展名

但是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()的调用可以工作并在内存中创建纹理对象。

我从未使用过Java GL,但我已经为Android编写了使用ETC1压缩的本机OpenGL代码,希望我能帮上忙。ETC1是Android常用的纹理压缩格式,如果存在扩展名,则表明您的设备支持该格式。:)

这里有一些未知数,你应该设法解决

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

然后尝试使用一个简单的32x32 ETC1纹理来删除有影响的非方形NPOT大小。对GLCompressedEximage2D调用使用硬编码值:

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

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

是否在有效的OpenGL ES 1.x上下文中调用ETC1Util.isETC1Supported()?如果您尚未创建OpenGL上下文,那么它将返回false。
gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, ETC1.ETC1_RGB8_OES, 32, 32, 0, 512, bb);