Для версий GLSL более ранней версии 1.30 вы хотите записать во встроенные модули gl_FrontColor
или gl_BackColor
, которые доступны в вершинном шейдере. Прочитайте об изменениях в спецификации GLSL 1.10 (http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.10.59.pdf), чтобы узнать больше о них, или в спецификации расширения GL_ARB_vertex_shader.
gl_FrontColor
и gl_BackColor
- векторы 4D RGBA, которые принимают нормализованные скаляры с плавающей запятой.
Но это установит все вершины на красный, а не только на одну вершину. Это потому, что один и тот же вершинный шейдер запускается для всех вершин. Если вы хотите установить отдельные цвета, используйте glColorPointer
вместе с glDrawArrays
, glDrawElements
, glDrawRangeElements
или glMultiDrawElements
. Цвет вершины, установленный glColorPointer
, можно прочитать как gl_Color
в вершинном шейдере. gl_Color
в вершинном шейдере является атрибутом для каждой вершины.
Чтобы прочитать цвет, который вы написали в вершинном шейдере, во фрагментном шейдере прочитайте встроенную переменную gl_Color
. Готовые фрагменты должны быть записаны в gl_FragColor
.
Пример вершинного шейдера:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Пример фрагмента шейдера:
void main()
{
gl_FragColor = gl_Color;
}
Кроме того, чтобы вершинный шейдер устанавливал изменения так же, как конвейер фиксированной функции OpenGL, вызовите функцию ftransform ().
void main()
{
ftransform();
}