我正在使用openGL ES 2.0指南,我只是偶然发现了GenerateMipmap(target)命令的这个注释:
如果零级数组以压缩内部格式存储,则会生成错误INVALID_OPERATION。
我理解的方法是,在openGL ES 2.0中没有自动为压缩纹理生成mipmap的功能 - 我所看到的其他所有内容似乎都表明,即使我从未见过具体确认过任何地方。我已经看到Mali纹理压缩工具可以自动生成mipmap - 但这只能在Windows,Linux和OS X上运行 - 而不是在Android上运行。我需要我的应用来压缩纹理并对它们进行mipmap(想法是用户可以拍摄图像并将其应用为纹理 - 我已经处理了纹理必须具有宽度和高度2的方面分别为^ n和2 ^ m)。 ETC1Util负责压缩纹理(尽管它只处理ETC1格式,我仍然在寻找带有alpha通道的纹理解决方案 - 但如果谷歌没有帮助,那对于不同的日子来说这是一个不同的问题我在那里。)
我的问题是:你如何在Android上运行时压缩和mipmap纹理 - 最重要的是ETC1,但理想情况下还有PVRTC,ATITC,S3TC和ETC2?
答案 0 :(得分:0)
OpenGL或OpenGLES中没有任何内容可用于生成压缩纹理。
通常,创建压缩纹理很慢,人们几乎总是离线生成它们。对于运行时生成的纹理,人们通常会将它们保留为基本格式,如8888,565或4444,因为压缩时间与渲染效率之间的权衡是不值得的。
也就是说,可以找到用于生成大多数压缩格式的开源代码,并且没有什么可以阻止您将该代码插入到游戏代码中。对于ETC1,有this(github version)。对于S3TC(又名DXT),有squish(或许多其他人)。