Последние три параметра glTex(Sub)Image
определяют, как происходит передача пикселя в OpenGL .Если у вас есть 4 8-битных значения, последовательно, в порядке ARGB, то я бы предложил следующее:
glTexImage2D(..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, *);
Для решения проблем преобразования с порядком байтов используйте параметры glPixelStore
.В частности, GL_UNPACK_SWAP_BYTES
.Вышеуказанное предназначено для машин с прямым порядком байтов, поэтому, если вы работаете с машиной с прямым порядком байтов, вам следует вызвать glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
перед вызовом этой функции, а затем установить обратно значение GL_FALSE
.
Примечание: я знаю, что вы не упомянули об этом, но если вы рассматриваете мобильные платформы, помните, что OpenGL ES - это , а не OpenGL.Для OpenGL рабочего стола требуются реализации, чтобы иметь возможность обрабатывать самые разнообразные варианты расположения пикселей в операциях передачи.GL ES обязывает почти наоборот.Форматы передачи пикселей должны точно соответствовать внутреннему формату текстуры.Поэтому, если бы вы занимались разработкой GL ES, вам пришлось бы делать замену байтов самостоятельно.