フラグメント シェーダは頂点属性としてgl_Color
とを受け取ります。また、値を書き込むことができる、、、 のgl_SecondaryColor
4 つの可変変数も取得します。元の色をそのまま渡したい場合は、次のようにします。gl_FrontColor
gl_FrontSecondaryColor
gl_BackColor
gl_BackSecondaryColor
gl_FrontColor = gl_Color;
gl_FrontSecondaryColor = gl_SecondaryColor;
gl_BackColor = gl_Color;
gl_BackSecondaryColor = gl_SecondaryColor;
頂点シェーダーに続くパイプラインの固定機能は、これらを [0..1] の範囲にクランプし、頂点が前面か背面かを判断します。次に、通常どおり、選択した (前面または背面) 色を補間します。gl_Color
フラグメント シェーダーは、選択され、クランプされ、補間された色をおよびとして受け取りますgl_SecondaryColor
。
たとえば、次のような標準的な「死の三角形」を描いた場合:
glBegin(GL_TRIANGLES);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, -1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3d(0.0, -1.0, -1.0);
glEnd();
次に、次のような頂点シェーダー:
void main(void) {
gl_Position = ftransform();
gl_FrontColor = gl_Color;
}
次のようなフラグメント シェーダを使用します。
void main() {
gl_FragColor = gl_Color;
}
固定機能パイプラインを使用している場合と同様に、色を送信します。