Tengo un código para cargar archivos de imagen DDS en texturas OpenGL, y me gustaría extenderlo para admitir los formatos comprimidos BC6 y BC7 introducidos en D3D11. Dado que DirectX y OpenGL no están de acuerdo sobre si el origen de una textura está en la esquina superior izquierda o inferior izquierda, mi cargador DDS voltea los píxeles de cada imagen a lo largo del eje Y antes de pasar los píxeles a OpenGL.
Voltear las texturas comprimidas presenta una arruga adicional: además de voltear cada fila de bloques de 4x4 píxeles, también debe voltear los píxeles dentro de cada bloque. Encontré el código aquí para voltear los bloques BC1 / BC2 / BC3, y desde los diagramas de bloques en MSDN fue fácil adaptar el código de volteo BC3 para manejar BC4 y BC5. Los FC6 y BC7 formatos ven significativamente más intimidante, sin embargo. ¿Existe un truco similar de giro de bits para voltear estos formatos, o tendría que descomprimir y recomprimir completamente cada bloque?
ACTUALIZACIÓN: Resulta que el cambio de textura solo era necesario porque mis coordenadas de textura se invertían incorrectamente en el momento de la exportación. La eliminación de ambos flips hizo que el código fuera más simple y rápido (¡gracias Humus!). Voltear bloques BC6 / BC7 aún puede ser un desafío interesante, pero ya no es relevante para mi escenario original.