Я вижу слегка тусклый цвет / альфа-вывод из OpenGL в Linux. Вместо того, чтобы видеть значение красного компонента 1.0, я вижу ~ .96988. Например, у меня полностью красный прямоугольник (красный компонент = 1.0, альфа = 1.0, зеленый и синий - ноль). Это затемнение происходит независимо от того, активирую ли я свои вершинные / фрагментные шейдеры или нет.
Освещение отключено, поэтому в расчет цвета не следует включать внешний или другой свет.
glBegin(GL_POLYGON);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertex2f(0.0, 0.0);
glVertex2f(1.0, 0.0);
glVertex2f(1.0, 1.0);
glVertex2f(0.0, 1.0);
glEnd();
Я делаю снимок экрана с полученным окном, а затем загружаю изображение в программу рисования и проверяю любой конкретный пиксель. Я вижу целое значение красного компонента 247 вместо 255, как и следовало ожидать. Когда я запускаю это с включенным вершинным шейдером, я вижу, что компонент gl_Color.r уже <1.0 и компонент gl_Color.a также. </p>
Все состояния OpenGL имеют значения по умолчанию. Чего мне не хватает?
Изменить из-за вопроса:
Я определил, что значение красного компонента было ~ .96988 грубым и итеративным процессом проверки его в вершинном шейдере и изменения синего компонента, чтобы он сигнализировал, когда красный компонент был выше порогового значения. Я продолжал уменьшать постоянное значение предела, пока не перестал видеть фиолетовый. Это сделало трюк:
if(gl_Color.r > 0.96988)
{
gl_Color.b = 1.0; \\ show purple instead of the slightly dimmed red.
}
Edit:
//VERTEX SHADER
varying vec2 texture_coordinate;
void main()
{
gl_Position = ftransform();
texture_coordinate = vec2(gl_MultiTexCoord0);
gl_FrontColor = gl_Color;
}
//FRAGMENT SHADER
varying vec2 texture_coordinate;
uniform sampler2D Texture0;
void main(void)
{
gl_FragColor = texture2D(Texture0, texture_coordinate) * gl_Color;
}
В этом случае Texture0 - это полностью насыщенный КРАСНЫЙ прямоугольник Red = 1.0, Alpha = 1.0. Без текстуры, используя цвет вершины, я получаю те же результаты; слегка уменьшенный красный и альфа-компонент.
Еще одна вещь, каналы Red и Aplha "затемнены" на одинаковую величину. Так что что-то вызывает затемнение всего цветового компонента. И, как я уже говорил в основном вопросе, это происходит независимо от того, использую ли я шейдеры или конвейер с фиксированными функциями.
Просто для забавы я выполнил аналогичный тест в Windows с использованием DirectX, и в результате получился прямоугольник с красным компонентом 254; все еще слегка затемненный, но едва.