Android-OpenGL纹理压缩
我需要一些帮助来查找有关如何在Android上使用纹理压缩的信息(或示例)。我现在有很多PNG,我需要减少它们占用的内存量。我正在研究PVR压缩,但我不知道如何在OpenGL中使用它Android-OpenGL纹理压缩,android,opengl-es,textures,Android,Opengl Es,Textures,我需要一些帮助来查找有关如何在Android上使用纹理压缩的信息(或示例)。我现在有很多PNG,我需要减少它们占用的内存量。我正在研究PVR压缩,但我不知道如何在OpenGL中使用它 请给我指出正确的方向或提供一些例子,因为我找不到任何东西。您不应该在Android上只使用PVR压缩,因为这不适用于所有型号。为了避免这种情况,您应该只使用ETC1(所有GLE2.0设备都强制使用),或者为单独的GPU模式使用单独的纹理包。具有用于加载压缩格式的帮助器类 您可以使用来进行压缩 请注意,使用ETC1不
请给我指出正确的方向或提供一些例子,因为我找不到任何东西。您不应该在Android上只使用PVR压缩,因为这不适用于所有型号。为了避免这种情况,您应该只使用ETC1(所有GLE2.0设备都强制使用),或者为单独的GPU模式使用单独的纹理包。具有用于加载压缩格式的帮助器类 您可以使用来进行压缩
请注意,使用ETC1不会获得alpha通道-通过将alpha通道作为单独的纹理,您可以使用一些奇特的片段着色技巧来解决此问题。Android上主要支持四种纹理压缩类型:
- ETC1(爱立信纹理压缩)。所有Android手机都支持这种格式。但是,它不支持alpha通道,因此只能用于不透明纹理
- PVRTC(PowerVR纹理压缩)。由配备PowerVR GPU的设备(Nexus S、Kindle fire等)支持
- ATITC(ATI纹理压缩)。用于配备高通公司(Nexus One等)的Adreno GPU的设备
- S3TC(S3纹理压缩)。这种纹理压缩被用于英伟达芯片组集成设备(摩托罗拉XoOM等) 中。
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
String s = gl.glGetString(GL10.GL_EXTENSIONS);
if (s.contains("GL_IMG_texture_compression_pvrtc")){
//Use PVR compressed textures
}else if (s.contains("GL_AMD_compressed_ATC_texture") ||
s.contains("GL_ATI_texture_compression_atitc")){
//Load ATI Textures
}else if (s.contains("GL_OES_texture_compression_S3TC") ||
s.contains("GL_EXT_texture_compression_s3tc")){
//Use DTX Textures
}else{
//Handle no texture compression founded.
}
}
public void onDrawFrame(GL10 gl) {
....
gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, internalformat, width,
height, border, imageSize, data);
}
这是一个ol线程,所以我想我应该用上提供的信息来更新它
在Khronos标准OpenGL ES 3.0和OpenGL 4.3中,ETC2是强制性的。只是想指出,并非所有android设备都支持etc1,与上面所说的相反 警告:大多数Android设备都支持ETC1格式,但不能保证它可用。要检查设备是否支持ETC1格式,请调用ETC1Util.isETC1Supported()方法
我确实尝试过,但是Eclipse不知道什么是ETC1Util,也找不到导入…有什么原因导致这个问题吗?“你应该只使用ETC1(在所有的GLE2.0设备上都强制使用)”我认为它在OpenGL ES上不是强制性的-在我看来,它看起来是一个扩展:看,它是GLE1.0/1.1的扩展,但是对于GLES 2.0.Hi@Xilliah来说是强制性的,线程是旧的,你可能是对的,但是这个解决方案在我的几个项目中运行得相当好。如果你认为它是不正确的,你可以做两件事,或者你告诉我你认为什么是错误的,我会很高兴尝试修复它,或者请随意添加另一个答案与正确的解决方案。。。请提出建设性意见!。谢谢,你好,格冈萨雷斯。我犯了一个错误,是不正确的,但由于某种原因无法删除该评论。只是我又傻了。你的回答有帮助!美好的很高兴为您提供帮助:)ETC可以与alpha一起使用,请参阅ETC纹理压缩和alpha通道处理Mali设备如何,我认为它们不支持这三种格式中的任何一种w/alpha。较新的版本可以使用ETC2,因为它是ES 3.0规范的一部分,但是如果你必须支持四种不同的压缩格式的纹理w/alpha,你最好不压缩它们,因为你不会节省任何磁盘空间。这太糟糕了,因此,似乎只有一个保证:
在使用OpenGL ES 3.0 API时,ETC2/EAC纹理压缩格式保证可用。
。