У меня есть некоторый код для загрузки файлов изображений DDS в текстуры OpenGL, и я хотел бы расширить его для поддержки сжатых форматов BC6 и BC7, представленных в D3D11. Поскольку DirectX и OpenGL расходятся во мнениях относительно того, находится ли источник текстуры в верхнем левом или нижнем левом углу, мой загрузчик DDS переворачивает пиксели каждого изображения вдоль оси Y перед передачей пикселей в OpenGL.
Переворачивание сжатых текстур представляет дополнительную складку: в дополнение к переворачиванию каждой строки блоков 4x4 пикселей, вам также необходимо перевернуть пиксели внутри каждого блока. Я нашел здесь код для переворачивания блоков BC1 / BC2 / BC3, и из блок-схем на MSDN было легко адаптировать переворачивающий код BC3 для обработки BC4 и BC5. В Bc6 и BC7 форматы значительно выглядеть устрашающе, хотя. Есть ли похожий трюк с переворотом, чтобы перевернуть эти форматы, или мне придется полностью распаковывать и перепаковывать каждый блок?
ОБНОВЛЕНИЕ: оказывается, что переворот текстуры был необходим только потому, что мои координаты текстуры были неправильно инвертированы во время экспорта. Удаление обоих сальто сделало код более простым и быстрым (спасибо Humus!). Переворачивание блоков BC6 / BC7 может все еще быть интересной проблемой, но это больше не относится к моему первоначальному сценарию.