Вы можете попробовать комбинацию GL_UNPACK_ALIGNMENT
и GL_UNPACK_ROW_LENGTH
.
В вашем конкретном случае это даст:
glPixelStorei(GL_UNPACK_ALIGNMENT, 4) // as 2560 is a multiple of 4
glPixelStorei(GL_UNPACK_ROW_LENGTH, 2560/3) // to consider each row having this number of pixels
Но в целом вы уверены, чтоу каждого пикселя есть 3 байта?
Я заметил, что ваш step
равен frame.cols * 4
, я бы не удивился, если бы у каждого пикселя был байт заполнения с выравниванием, кратным 4.
Вы пытались указать OpenGL, что ваши исходные данные - GL_RGBA или GL_BGRA, при этом оставляя текстуру внутреннего формата для GL_RGB?