我正在寻找支持mipmaps,cubemaps和3d纹理的格式,以便在OpenGL ES 2.0游戏中使用。在Windows上,我使用的是.dds格式,因为它支持DXT压缩。对于移动程序,我认为有.pkm文件不支持多个纹理和.pvr文件我认为'依赖于PowerVR平台。所以;
- 我可以使用.dds和ETC1压缩吗?是否有许可证问题阻止我在Windows以外的平台上使用.dds?
- 其他GPU供应商的产品(Adreno,Mali等)是否支持.pvr文件? (不是PVRTC,只是带有ETC1压缩的.pvr)
- 或者我可以根据自己的需要使用其他文件格式吗?
答案 0 :(得分:4)
是的,您可以将DDS用于ETC1。只需创建自己的FOURCC代码即可。据我所知,dds没有专利。
没有GPU供应商支持pvr文件格式(包括PoverVX)。 GPU供应商只关心压缩纹理数据(PVRTC,ETC,DXTC),而不关心文件格式(png,jpeg,dds,pvr)。解析文件格式以提取纹理数据(压缩或未压缩)是用户/应用程序的责任。
您可以使用任何有益于您需求的文件格式。发明你自己的。例如,像这样:
[4 bytes] - width
[4 bytes] - height
[4 bytes] - format id (1 - etc1, 2 - dxt, 3 - ... whatver)
[4 bytes] - count of images (mipmaps/cubemaps/whatever)
[bytes] - data
答案 1 :(得分:4)
或者我可以根据自己的需要使用其他文件格式吗?
您可能希望查看http://www.khronos.org/opengles/sdk/tools/KTX/ 以及程序创建KTX文件http://www.malideveloper.com/texture-compression-tool.php
KTX格式支持带有mipmap的ETC1压缩纹理。它应该支持其他压缩格式,但我不知道其他工具可以做到(我从来不需要它)。
使用libktx,您可以使用“单一”代码行将纹理(使用mipmap)从文件/内存加载到GL对象。如果设备不支持ETC1,你可以在加载.ktx文件的同时将ETC1纹理解压缩到GL_RGB(你需要手动设置GLEW_OES_compressed_ETC1_RGB8_texture,如here)