通过标题确定给定astc压缩图像的内部格式?

时间:2014-03-24 03:39:01

标签: header webkit opengl-es-3.0 webgl-extensions

我正在编写一个基于EbGL的HTML应用程序,它使用ASTC(自适应可伸缩纹理压缩)压缩纹理加载到我的三角形上。我想知道有没有办法知道压缩的ASTC图像的内部格式(在我的情况下可能位于远程Web服务器上)是否是"线性"或者" srgb编码",通过解析ASTC头。然后,我可以使用获得的internalFormat信息将我的ASTC纹理传递给glCompressedTexImage2D()。换句话说,例如。我想知道我的内部格式是否来自任何ASTC压缩图像的标头COMPRESSED_RGBA_ASTC_4x4_KHRCOMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR。有线索吗?

2 个答案:

答案 0 :(得分:3)

似乎ASTC文件头确实没有完全描述其内容。它只有尺寸和一些奇怪的“魔法数字”,似乎只是一个常数。

有关文件标题的信息:http://malideveloper.arm.com/downloads/Stacy_ASTC_white%20paper.pdf(第4-5页,它还引用了来自Mali开发人员中心的代码示例以获取更多线索)。

'幻数'在这里解释为仅为常数值0x5CA1AB13http://community.arm.com/thread/3981

你应该在马里开发者中心论坛上提问 - 这些人非常乐于助人,而且反应速度非常快。

编辑:外部链接关闭时的标题格式:

struct astc_header
{
    uint8_t magic [ 4 ];
    uint8_t blockdim_x;
    uint8_t blockdim_y;
    uint8_t blockdim_z ;
    uint8_t xsize [ 3 ];
    uint8_t ysize [ 3 ];
    uint8_t zsize [ 3 ];
};

答案 1 :(得分:1)

ASTC标题没有这样的信息。您可以尝试使用文件扩展名,例如.srgb.astc。使用KTX,用于ASTC数据的Khronos替代存储容器,你可以为任何你喜欢的东西添加键值对,尽管在这种情况下glInternalFormat应该足够好。

也就是说,如果您将数据作为sRGB(非线性伽玛)存储在ASTC文件中,那么您可以通过设置COMPRESSED_RGBA_ASTC_4x4_KHR或COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR来选择是将数据读取为非线性伽马还是线性伽玛。阅读。也就是说,sRGB-ness可能不应被视为文件格式的属性,而是texel读取操作和/或图形管道的属性。使用适当的种类来生成所需的输出样式。