How to flip a BC6/BC7 texture?

Posted by postgoodism on Game Development See other posts from Game Development or by postgoodism
Published on 2012-09-01T06:18:58Z Indexed on 2012/09/01 9:50 UTC
Read the original article Hit count: 401

Filed under:
|
|
|

I have some code to load DDS image files into OpenGL textures, and I'd like to extend it to support the BC6 and BC7 compressed formats introduced in D3D11. Since DirectX and OpenGL disagree about whether a texture's origin is in the upper-left or lower-left corner, my DDS loader flips each image's pixels along the Y axis before passing the pixels to OpenGL.

Flipping compressed textures presents an additional wrinkle: in addition to flipping each row of 4x4-pixel blocks, you also need to flip the pixels within each block. I found code here to flip BC1/BC2/BC3 blocks, and from the block diagrams on MSDN it was easy to adapt the BC3-flipping code to handle BC4 and BC5. The BC6 and BC7 formats look significantly more intimidating, though. Is there a similar bit-twiddling trick to flip these formats, or would I have to fully decompress and recompress each block?

© Game Development or respective owner

Related posts about opengl

Related posts about graphics