Я пытаюсь следовать инструкциям на этой странице:
http://www.opengl.org/resources/faq/technical/color.htm
о рендеринге примитивов с уникальным цветом
Я проверил количество бит для каждого цвета, и результат был 8 для каждого. При звонке:
glColor3ui(0x80000000, 0, 0xFF000000);
и считывая пиксель с помощью glReadPixels (), я получаю цвет: 0xFFFE007F
что соответствует R=0x7F, G=0, B=0xFE
Два нижних бита красного и синего неверны.
Почему это так? Я использую новую карту nVidia на ноутбуке dell с самыми последними драйверами





Вы тоже это сделали?
In either event, you'll need to ensure that any state that could
affect the final color has been disabled. The following code will
accomplish this:
glDisable (GL_BLEND); glDisable (GL_DITHER);
glDisable (GL_FOG); glDisable (GL_LIGHTING);
glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D);
glDisable (GL_TEXTURE_3D); glShadeModel (GL_FLAT);
Также проверьте, имеет ли ваш буфер glReadPixels 24/32 бита.
Оказывается, в FAQ есть ошибка.
документация glColor
утверждает, что: «Целочисленные компоненты цвета без знака, если они указаны, линейно отображаются в значения с плавающей запятой, так что наибольшее представимое значение отображается в 1,0 (полная интенсивность), а 0 отображается в 0,0 (нулевая интенсивность)».
На самом деле это говорит о том, что для получения полной интенсивности белого цвета я должен вызвать:
glColor3ui(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
и нет
glColor3ui(0xFF000000, 0xFF000000, 0xFF000000);
как следует из FAQ. И это объясняет, почему 0xFF000000 отображается на 254.
Я отправил отчет об ошибке людям, предположительно поддерживающим FAQ