Для подавляющего большинства изображений, которые вы увидите, вам не нужно GL_ROW_LENGTH
. Установка этого значения в ненулевое значение может сильно ухудшить производительность загрузки; только используйте его, когда вы абсолютно необходимо это.
Для большинства изображений шаг будет просто (width
* bpp
), выровненный с некоторой границей. Например, если bpp
составляет 3 (байт на пиксель), а ширина равна 9, вы получаете 27. Это не очень хороший номер строки для многих компьютеров, поэтому они часто выравнивают его до ближайшего кратного 4. Таким образом, высота, которую вы увидите в большинстве изображений, равна 28.
Итак, чтобы вычислить выравнивание, просто вычислите наибольшую мощность двух (до 8), которые делятся на высоту. Если высота изображения равна 28, наибольшая мощность равна 4. Установите значение GL_UNPACK_ALIGNMENT
. Как правило, вы можете остановиться на 4, потому что это самое большое выравнивание, которое будут использовать большинство изображений.
Времена, когда вы потребность использовать GL_ROW_LENGTH
являются, когда вычисленная шаг (align(width * bpp, alignment)
) не равна фактической шаг. Если это произойдет, вам нужно использовать выравнивание и длину строки. Но это такое редкое явление, что вы, вероятно, должны просто отказаться от любого изображения, которое использует такой невероятно неправильный шаг.
"Большая библиотека изображений"? Я не знаю очень многих. FreeImage, но это все. –
SDL, ClanLib, Gtk, Cairo, libjpeg, libpng и т. Д. Я не думаю, что когда-либо касался того, который не использовал формат width/height/pitch/array/format вне OpenGL. Некоторые называют это 'stride' или' rowbytes' вместо 'pitch', но это все. – Grumbel