Determine internal format of given astc compressed image through its header?

ぃ、小莉子 提交于 2019-12-24 03:19:36

问题


I am writing a EbGL based HTML application that uses ASTC (Adaptive Scalable Texture Compression) compressed textures to be loaded on my triangle. I would like to know that does there exists a way to know whether the internal format of the compressed ASTC image(that in my case might be located on a remote web server) is "linear" or "srgb encoded", by parsing the ASTC header. I can then use that internalFormat information obtained to pass my ASTC texture to glCompressedTexImage2D(). In other words, for eg. I want to know whether my internal format is COMPRESSED_RGBA_ASTC_4x4_KHR or COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR from the header of any ASTC compressed image. Any clues?


回答1:


It seems that ASTC file header indeed doesn't fully describe its contents. It has only dimensions and some strange 'magic number' which seems to be just a constant.

Information about file header: http://malideveloper.arm.com/downloads/Stacy_ASTC_white%20paper.pdf (pages 4-5, it also refers to code samples from Mali Developer Center for more clues).

'Magic number' explained here as a mere constant value 0x5CA1AB13: http://community.arm.com/thread/3981

You should ask a question at Mali Developer Center forums - these guys are very helpful and usually respond quite fast.

EDIT: Header format in case external links go down:

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 ];
};



回答2:


The ASTC header has no such information. You could try a file name extension, perhaps, such as .srgb.astc. Using KTX, the Khronos alternative storage container for ASTC data, you can add key-value pair for whatever you like, though the glInternalFormat should be good enough in this case.

That said, if you store your data in the ASTC file as sRGB (non-linear gamma) then you can choose whether you want the data to be read as non-linear gamma or linear gamma by setting COMPRESSED_RGBA_ASTC_4x4_KHR or COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR when you read it. That is, the sRGB-ness probably shouldn't be considered a property of the file format but a property of the texel read operation and/or your graphics pipeline. Use the appropriate kind to produce the style of output you want.



来源:https://stackoverflow.com/questions/22600678/determine-internal-format-of-given-astc-compressed-image-through-its-header

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!