2

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

4

2 回答 2

4

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

文件头信息:http: //malideveloper.arm.com/downloads/Stacy_ASTC_white%20paper.pdf(第4-5页,更多线索请参考Mali Developer Center的代码示例)。

“幻数”在这里解释为一个常数值0x5CA1AB13:http: //community.arm.com/thread/3981

您应该在 Mali Developer Center 论坛上提问 - 这些人非常乐于助人,而且通常会很快回复。

编辑:标题格式以防外部链接失效:

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 ];
};
于 2014-03-27T08:41:42.227 回答
1

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

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

于 2016-06-15T21:02:36.580 回答