我正在编写一个基于 EbGL 的 HTML 应用程序,该应用程序使用 ASTC(自适应可伸缩纹理压缩)压缩纹理加载到我的三角形上。我想知道是否存在通过解析 ASTC 来了解压缩 ASTC 图像的内部格式(在我的情况下可能位于远程 Web 服务器上)是“线性”还是“srgb 编码”的方法标题。然后我可以使用internalFormat
获得的信息将我的 ASTC 纹理传递给glCompressedTexImage2D()
. 换句话说,例如。我想知道我的内部格式是来自任何 ASTC 压缩图像的标题COMPRESSED_RGBA_ASTC_4x4_KHR
还是COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
来自任何 ASTC 压缩图像的标题。有什么线索吗?
2 回答
似乎 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 ];
};
ASTC 标头没有此类信息。您可以尝试使用文件扩展名,例如 .srgb.astc。使用 KTX(用于 ASTC 数据的 Khronos 替代存储容器),您可以添加任何您喜欢的键值对,尽管在这种情况下 glInternalFormat 应该足够好。
也就是说,如果您将数据作为 sRGB(非线性伽玛)存储在 ASTC 文件中,那么您可以在读取数据时通过设置 COMPRESSED_RGBA_ASTC_4x4_KHR 或 COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 来选择将数据读取为非线性伽玛还是线性伽玛。也就是说,sRGB-ness 可能不应该被视为文件格式的属性,而是纹素读取操作和/或图形管道的属性。使用适当的种类来产生你想要的输出风格。