чтение значений BMP BGR, передавая glTexImage2D

Я написал процедуру для чтения всех значений пикселей из BMP-файла в массив, который я хочу передать glTexImage2D из openGL, чтобы превратить его в текстуру. Делая это, я понял, что фактический формат пикселей в файле BMP — BGR, а не RGB, поэтому мой массив содержит синий, зеленый, красный. В результате моя окончательная текстура поменяла синий и красный каналы по сравнению с исходным растровым изображением.

Вот как я это называю:

glTexImage2D(GL_TEXTURE_2D, 0, 3, imgdata->width, imgdata->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata->pixdata);

Любой обходной путь для этой ситуации / неправильный аргумент, который я передаю? Единственное решение, которое я могу найти прямо сейчас, — это вручную поменять значения RB внутри моего массива с помощью цикла.

0

Решение

Почему бы не изменить формат glTexImage2D до GL_BGR.

3

Другие решения

Я установил GR_BGR, и он помечен как необъявленный идентификатор

Тогда вы не используете правильная библиотека для получения на OpenGL. Заголовки, предоставляемые системой OpenGL, могут содержать или не содержать современные функции и перечислители. Поэтому вместо этого вам нужно использовать одну из этих библиотек, чтобы попасть в OpenGL. Вы должны использовать эти вместо из GL/gl.h,

Как только вы получаете доступ к OpenGL, все остальное просто. использование GL_RGB как твой формат передачи пикселей.

1