Eu tenho algum código para carregar arquivos de imagem DDS em texturas OpenGL e gostaria de estendê-lo para suportar os formatos compactados BC6 e BC7 introduzidos no D3D11. Como o DirectX e o OpenGL discordam sobre se a origem de uma textura está no canto superior esquerdo ou inferior esquerdo, meu carregador DDS inverte os pixels de cada imagem ao longo do eixo Y antes de passar os pixels para o OpenGL.
Inverter texturas compactadas apresenta uma ruga adicional: além de inverter cada linha de blocos de 4x4 pixels, você também precisa inverter os pixels dentro de cada bloco. Encontrei o código aqui para inverter os blocos BC1 / BC2 / BC3 e, a partir dos diagramas de blocos no MSDN , foi fácil adaptar o código de inversão do BC3 para lidar com BC4 e BC5. Os bc6 e BC7 formatos olhar significativamente mais intimidante, no entanto. Existe um truque semelhante para modificar esses formatos, ou eu teria que descomprimir e recomprimir totalmente cada bloco?
ATUALIZAÇÃO: Acontece que o flip de textura só foi necessário porque minhas coordenadas de textura estavam sendo invertidas incorretamente no momento da exportação. A remoção de ambos os flips tornou o código mais simples e rápido (obrigado Humus!). O lançamento de blocos BC6 / BC7 ainda pode ser um desafio interessante, mas não é mais relevante para o meu cenário original.