OpenGL GL_BGR не работает для внутреннего формата текстуры - PullRequest
3 голосов
/ 20 января 2011

Из того, что я прочитал в документации OpenGL, OpenGL предпочитает формат BGR, а не RGB. Однако, при установке внутреннего формата текстуры как BGR, при рендеринге текстура становится белой. Когда внутренний формат установлен на RGB или RGBA, он отображается правильно. Исходный формат для начала BGR (загружается непосредственно из DIB).

 glBindTexture(GL_TEXTURE_2D, id);
 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, nClamp);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, nClamp);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nMagFilter);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nMinFilter);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

Следующая строка - это проблема ... установка внутреннего формата в GL_BGR делает все белым: изменение в GL_RGB делает его корректным

 glTexImage2D(GL_TEXTURE_2D, 0, GL_BGR, pTex->nWidth, pTex->nHeight, 0, GL_BGR, GL_UNSIGNED_BYTE, pTex->pBuffer);

1 Ответ

2 голосов
/ 20 января 2011

На справочной странице glTexImage2D GL_BGR не является внутренним форматом, это просто формат.

Вы должны проверить наличие ошибок GL, так как это бы перехватило эту ошибку. То, что вы читаете о «предпочтении BGR в OpenGL», является ложным.

...