Так я могу перевернуть данные только одним способом?
Да, вы можете.
1D массив пикселей состоит из блоков image_height пикселей image_width.
Один блок image_width представляет собой строку развертки или ряд пикселей. Сканирующие строки идут в последовательном порядке. Последняя строка сканирования начинается с [array_size - image_width], одна перед последней - [array_size - image_width * 2] и так далее. Первая строка сканирования начинается с нулевого индекса, вторая - с [image_width], третья с [image_width * 2] и так далее. Чтобы перевернуть, вы должны обмениваться данными в последней строке сканирования с первой строкой сканирования и продолжать идти по этому пути
Может быть, есть способ заставить OpenGL читать сверху вниз?
Нет, но вы можете перевернуть координаты текстуры на нарисованной вами сетке / геометрии.
P.S. Разве это так сложно понять? Вы можете легко угадать решение с ручкой / бумагой.